こんにちは、エンジニアの加藤です。
baserCMSに携わってはや10年。これまで本当に数多くのプロジェクトを経験してきました。
最近は、若手エンジニアの皆さんが新しい技術をどんどん取り入れる姿勢に、私自身も良い刺激をもらっています。
私は、新しいメンバーに対して「同じ質問は7回までOK!」と伝えています。
キャッチアップは、受託開発という性質上、似たような内容でも解決策が異なるパターンは多々あります。
なので、よくビジネス上で言う「同じ質問を2度するのはダメ」というルールを強く意識してしまうと、萎縮して確認できないまま間違った方向に進んでしまうのが一番もったいないからです。
質問は、成長の一部。
とはいえ、入ってくるメンバーは非常に優秀で、1〜2回でコツを掴んでしまうので、実際に7回質問した人はまだいません(笑)。
それでも「何度聞いても大丈夫」という安心感を持って挑んでほしいので、「7回までOK!」は言い続けようと思います。
自分の書いたコードを1年後に見返したときに後悔しないために
質問は、成長の一部。
と言いましたが、質問した上で「次に同じ場面で困らない工夫」を少しずつ積み重ねていくことも、エンジニアとして大切だと感じています。
私自身、この10年で失敗や試行錯誤を繰り返しながら、「未来の自分をラクにするための考え方」をたくさん学んできました。
今回は、これからエンジニアを目指す方や、現場で頑張っている皆さんに向けて、そんな“小さなコツ”を共有したいと思います。
1. コメントとテンプレヘッダーを活用しよう
コードは誰かが読むためのものです。自分だけが理解できるコードを書くのではなく、他の人が見てもわかりやすいように、適切なコメントを残すことが重要です。
また、ファイルの冒頭には作成者や目的などの基本情報を記載する習慣をつけましょう。プログラムファイル数が増えてくると、どのファイルがどの機能に関連しているのかがわからなくなりがちですが、これがあるだけで整理整頓が劇的にしやすくなります。
2. function ヘッダー(DocBlock)を習慣にしよう
関数やメソッドの定義の前には、CakePHPの流儀に則ったDocBlockを記載しましょう。 目的・引数(@param)・返り値(@return)を明記することで、関数の使い道がすぐに理解できるようになり、可読性が大幅に向上します。将来修正が必要になった際も、影響範囲を把握しやすいため、保守性がぐっと高まります。
3. プラグイン作成時の「可読性」と「保守性」
プラグインを作るときは、以下のポイントも意識してみてください。
- config.phpのdescription: 機能を明記することで、他の開発者が内容を即座に把握できるようになります。また、管理画面で説明文として表示されるため、ユーザーにとっても親切です。
- README.mdの充実: 概要やインストール方法、注意点を丁寧に記載しましょう。ドキュメントを充実させることは、利用者や開発者がプラグインの構造・機能を深く理解するための重要な情報源となります。
- DBテーブルは必ずMigrationファイルを作成(baserCMS 4系はSchemaファイル): 「時間が無いから」と直SQLでテーブルを変更してしまうと、後から同じ変更を再現するのが難しくなり、チーム全体の作業効率を下げてしまいます。Migrationを活用することで、複数環境での同期が容易になります。
- テーブル構造の変更には「updater機能」を: 一度作成したテーブルの構造を変更する場合も、直接書き換えるのではなくupdater用ファイルを作成することを強くおすすめします。変更履歴をコードとして管理することで、将来的な保守や拡張の際、安全かつスムーズに対応できるようになります。
最後に
実を言うと、これらのポイントはすべて「過去の私ができていなくて、後からこうしておけばよかった!」と痛感したものばかりです。私の苦い経験を、皆さんがより良いコードを書くためのヒントにしてもらえたら嬉しいです。
これらはあくまで私個人の経験に基づくもので、すべての現場に当てはまるわけではありません。ぜひ、これらを参考にしながら、自分なりのスタイルを見つけていってください。
私はこれからも、baserCMS&キャッチアップのエンジニアとして、社内だけでなく社外の皆さまと一緒に成長していけることを楽しみにしています。
SNSはやっていませんが、Qiitaで執筆したり、baserCMSユーザーズフォーラムでbaserCMS構築のアドバイスをしたりしているので、質問などがあれば、遠慮なくどんどん聞いてくださいね!
Qiita / https://qiita.com/katokaiysa
baserCMSユーザーズフォーラム / https://forum.basercms.net/u/katokaisya/