📖

「コードリーディングが苦手」を克服するために知っておきたいこと

2024/12/23に公開

こんにちは!ソーシャルデータバンク株式会社・開発部のくすみです。
Social Databank Advent Calendar 2024 23 日目の記事です!

本日は、普段の開発におけるコードリーディングで私が意識しているポイントについて書いていきたいと思います!

コードリーディングの重要性

チーム開発では、他のメンバーが書いたコードを読む機会が避けられません。
しかし、コードが複雑だったり記述の意図が不明瞭な場合、理解に多くの時間がかかります。
その結果、大きなストレスを感じることもあるでしょう。

たとえば、以下のような状況に陥ることがあります:

  • 初めて触れるコードに圧倒され、思考が停止する。
  • コードを読む目的が曖昧なため、何を調べるべきかが分からない。
  • ドキュメントやサポートが不足しており、手がかりが見つからない。
  • 未知の言語やフレームワークに対する不安。
  • プログラム全体の流れが把握できないために、関数やクラスを行き来して頭が混乱し、結果として時間ばかりが浪費される、

ということがあったりします。

コードリーディングの定義とゴール

そもそも「コードリーディング」とは一体何を指すのでしょうか?
私が考える定義は次の通りです。

コードリーディングとは、ソースコードの意味、すなわちプログラムの実行結果や現実世界での効果を想像できるようになること。

プログラムの挙動を正確に理解するには、コードの表面的な内容を読むだけでは不十分です。
その背景にある意図や設計思想を汲み取りながら、コードの構造や動作を頭の中で再現する能力が求められます。

コードリーディングを困難にする要因

コードリーディングが難しい理由には、以下のようなものがあります

情報の不可視性
ソースコードからだけでは、背景にある仕様や設計意図を直接知ることができないため、推測が必要になる。

複雑な構造
長い if 文や多階層のループ、頻繁な変数の状態変更があると、記憶しながら読むのが難しくなる。

未知の知識の多さ
業務知識やフレームワークの特徴、暗黙のルールが分からないと、コードの目的や動作が見えにくい。

コードの文脈依存性
自然言語と同様、プログラミング言語も文法と文脈(背景や周辺情報)の両方を理解しなければ、正確に読み解くことは難しい。

効率的なコードリーディングの手順

階層的なアプローチ

コードリーディングには、全体像から詳細へと段階的に進む「階層的なアプローチ」が有効です。

以下は具体的な手順の例です。

1. 業務知識・業務要件を把握する
サービス(作成された PR)が解決しようとしている課題や目的を理解する。

2. プロジェクトルールを確認する
コーディング規約やコメントスタイル、命名規則を把握。

3. 開発環境を整える
使用する IDE やデバッグツールの設定を確認し、効率的にコードを追える環境を構築。

4. 設計パターンやデータ構造を理解する
ファイル構成やクラスの役割を把握し、コードの全体像をつかむ。

5. ライブラリ・フレームワークを把握する
使用されている技術スタックを学習。

6. 基本文法を確認する
プログラム言語の基礎的な文法知識を確認。

7. ソースコードの詳細を読む
必要な部分にフォーカスして処理内容を理解する。

静的解析と動的解析の使い分け

コードを読み解く方法には、静的解析(目視でコードを読む)と動的解析(デバッガを用いて動作を追う)があります。

静的解析のポイント

  • ソースコードの流れを予測しながら読む。
  • メモや図を活用して整理する。
  • 大まかな全体像を掴むために役立つ。

動的解析のポイント

  • 実際にコードを動かし、動作を確認。
  • ステップ実行やブレークポイントを活用。
  • 予測が難しい部分や複雑な動作の検証に役立つ。

実際の課題と解決策

以下は、私が実践している具体的なアプローチです。

目的を明確にする
「何を知りたいのか」を意識し、それに関連する箇所を重点的に読む。

メモを取る
関数呼び出し関係やデータフローを図解することで、全体像が見えてくる。

関数名や変数名を手がかりとする
適切な名前が付けられている場合、その意味を頼りに読み進める。

コードを改変して動作を確認する
小さな変更を加えて結果を確認し、コードの意図を掴む。

ドキュメントや他者の助言を活用する
仕様書や設計書を読み、必要であれば詳しいメンバーに質問。

コードリーディングの心構え

最後に、コードリーディングにおいて私が心掛けていることを挙げます

完璧を求めない
必要な箇所だけに集中し、全体を細かく読むことは避ける。

楽しむ姿勢を持つ
コードの背景や意図を考えながら読むことで、新しい発見や使ったことのない書き方が見つかる。

改善点を見つける
読みにくいコードに出会った場合、その改善方法を考えることもスキル向上に繋がる。

おわり

コードリーディングは、エンジニアにとって重要なスキルでありながら、多くの人が苦労する部分でもあります。
しかし、適切な手順と心構えを持てば、読み解く力を着実に高めていくことができます。

皆さんもぜひ、自分に合った方法を見つけ、効率的なコードリーディングを目指してみてください!

参考

https://boukenki.info/sorce-code-oikata-yomikata-houhou-kotu-matome/

ソーシャルデータバンク テックブログ

Discussion