はじめに
私は、3年目のWebアプリ開発者です。
これまで複数プロジェクトを経験する中で、言語・フレームワークの知識であったり、ドメイン知識を理解することの重要性はもちろん実感してきました。
また、それと同時に「コードリーディング」というスキルの重要性も強く感じてきました。
言語や業界問わず、ソフトウェア開発者にとっては必要不可欠なスキルであるとも思います。
最近、同プロジェクト内の新人メンバーが頑張ってコードリーディングをしている姿を見て、私自身の苦労した経験を思い返しました。
そこで、私がコードリーディングの際に意識していることや、得られるメリット、練習方法について、まとめてみました。
コードリーディングの際に意識していること
プロジェクト全体像の理解
-
ディレクトリ構成の理解
いきなりコードを読み始めても良いと思いますが、まさに「木を見て森を見ず」状態だと思うので、まずはディレクトリ構成を確認します。
ディレクトリ構成を見れば採用されているアーキテクチャも何となく分かってくると思います。
私はLaravelで開発することが多いですが、シンプルなMVCなのか、ADRなのか、DDDなのか、とかですね。 -
ドキュメントの読み込み
タスク管理ツールのWikiやGitHubのREADMEなど、を読み込んで、プロジェクトの目的や概要を理解します。
ドキュメントが整備されていない場合は、先輩に確認します。 -
依存関係の確認
使用されているライブラリやフレームワークの確認をします。初学者のうちはあんまりやらなくても良いかもしれないです。
コードの流れの追跡
ある程度プロジェクトの概要が掴めたら、実際にコードを読んでいきます。
-
エントリポイントの特定
アプリケーションの開始点を見つけて、プログラムの実行フローを追跡します(Laravelの場合は、publicディレクトリ配下のindex.phpになりますね)。
ただし、ルーティング→ミドルウェア→コントローラ→ビューという流れが意識できていれば良いのかなと思います。 -
重要な関数とクラスの分析
アプリケーションの基盤となるような関数やクラスに着目して、それらの役割や動作を理解します。 -
データフローの追跡
データがどのように流れ、どこで加工されるのか、を追うことでもシステムの振る舞いの理解に繋がると思います。
コメントアウトとAPIドキュメントの活用
-
ソースコード内のコメントアウトの理解
開発者の意図や、特定の実装の理由を理解するために、コメントを読みます。 -
APIドキュメントの活用
外部ライブラリやフレームワークのAPIドキュメントを参照します。 -
コメントやドキュメントとの照合
システムの振る舞いに対して、コメントやドキュメントの内容が一致しているか確認し、不一致があればその理由を考えたり、先輩に質問します。
コードの実行とデバッグ
-
コードの実行
コードを実行し、期待される動作と実際の動作を比較します。 -
デバッガの活用
ブレークポイントを設定し、変数の状態や関数の呼び出しをステップごとに追います。 -
ログの分析
ログ出力を利用して、実行時のコードの挙動を追跡します。
コードリーディングを通じて得られるメリット
ここまで、方法論をつらつら書き並べましたが、コードリーディングのスキルレベルが上がると、以下のようなメリットがあると思っています。
品質向上
システムに潜在している問題点やバグは、少しでも早く特定したいですよね。
変数の誤用だったり、ロジックのエラー、非効率なコードの発見ができるようになると思います。
プログラミングスキル
他の開発者のコードを読むことで、自分の頭には無かったアプローチを学ぶことができます。
自分のスキルを上げるためには、強い人から学ぶのが手っ取り早いですよね。
プロジェクトへの深い理解
コードベースでプロジェクトへの理解が深まるので、新規機能開発や既存機能の改修がより効率的に行えるようになります。
チーム内のコミュニケーションの促進
コードに関する議論や意見交換ができると間違いなく楽しいと思います。
そして、コミュニケーションが活発になれば、チームメンバーからの効果的なフィードバックを受けることにも繋がり、自身のさらなら成長が期待できると思います。
コードリーディング練習方法
得られるメリットが分かれば、あとは練習あるのみ。
ということで、私が実践してきた内容を以下にまとめました。
適切なOSSの選定
各々の使用している言語やコードリーディングのスキルにもよるので、「おすすめのOSSはこれ!」と一概には言えませんが、GitHubやGitLabでスターが多いかつ、コードベースが小さくドキュメントが充実しているプロジェクトが良いのかなと思います。
選んでしまえば、あとはコードを読んでいきましょう。
コードレビュー会に参加する
他の開発者が行ったコードレビューに参加することでも、学びが得られると思います。
ペアプログラミング
上記と似ている内容にはなりますが、経験豊富な開発者とペアプロを行うことで、彼らの思考プロセスや問題解決のアプローチを学ぶことにも繋がります。
おわりに
長い間コードを読んでいれば、誰でも知らず知らずのうちに、コードリーディングのスキルが身に付いているとは思います。
ただ、より早く成長するためにも、本記事が誰かの参考になれば幸いです。