コードリーディングとは #
プログラミングの上達のためには、コードを読むことが何よりも重要です。 プログラムは書いた瞬間から何度も読まれます。 そのために可読性の高いコードを書くことが求められます。 書く時間より、読む時間のほうが圧倒的に長いため、書く時間を節約するよりも、読む時間を節約することが何よりも重要です。
一方で、他人のコードを読む力も重要です。 他人のコードを読む力を養うために、コードリーディングと呼ばれる手法があります。 コードリーディングとは、その名前の通り、コードを読んで内容を理解することを目的とした活動です。 コードを読み、何をしているのか、なぜそのように書かれたのか、どのような思想で書かれたのかを理解していくことを目指します。
優れたエンジニアが書くコードは、非常に洗練されており、学ぶべき点が多くあります。 ただし、深く理解しないまま読んでいると、その価値に気付かないことも往々にしてあります。 全体の構造を理解して初めて、詳細部分の価値が見えてくることもあります。 そのために、色々な観点からコードを読むことが重要です。
実際にコードリーディングを行うには、以下のようなステップを踏むと良いでしょう。
コードリーディングのステップ #
- 全体をざっと眺める
- まずはコード全体をざっと眺めて、どのような構造になっているかを把握します。ファイル構成や主要なクラス・関数を確認します。
- コードの内容ではなく、コード全体の構成を把握することに集中します。
- このとき、関数の中身は極力見ずに、関数の名前から何をしているかを推測します。
- 主要な部分を特定する
- 次に、コードの中で重要な部分や興味深い部分を特定します。
- コードリーディングは、何らかの目的の元に行われます。例えば、特定の機能の実装方法やアルゴリズムの理解、バグの原因特定などです。 それが書かれている箇所を全体を眺めた中から特定します。
- 詳細を読む
- 特定した部分を詳細に読み、どのように実装されているかを理解します。
- コメントやドキュメントも参考にします。
- 生成系AIを活用して、コードの説明や要約を得ることも有効です。
- 動作を確認する
- 可能であれば、コードを実行して動作を確認します。デバッグやログ出力を利用して、コードの挙動を追跡します。
- 質問を立てる
- 読んでいて疑問に思ったことや、なぜそのように実装されたのかについて質問を立てます。これにより、理解が深まります。
- まとめる
- 最後に、コードの内容や学んだことをまとめます。
このプロセスを通じて、コードを深く理解し、プログラミングスキルを向上させることができます。
コードリーディングのコツ #
入口と出口を意識する #
プログラムには、入口(エントリーポイント)と出口(終了ポイント)が必ず存在します。
関数であれば、引数が入口であり、戻り値が出口です。
プログラム全体も同様に、main関数が入口であり、プログラムの終了が出口となります。
プログラムを究極的に抽象化すると、何らかの入力を受け取り、データを処理して、データを出力する、という形になります。 そのために、入口で何を受け取り、何を出力するのかに注目すると、プログラムの全体像を把握しやすくなります。
状況を整理する #
頭の中だけでコードを理解しようとすると、混乱してしまうことがあります。 そのために、紙やホワイトボードに図を書いたり、メモを取ったりして、状況を整理することが有効です。 特に、データの流れや状態遷移を図示すると、理解が深まります。
問題を切り分ける #
読んでいて動作が理解できない場合、システムの仕様がわからないのか、技術的な内容がわからないのか、問題を切り分けましょう。 システムの仕様がわからない場合、なぜこのように実装されているのかが理解できません。 その場合、まずはシステムの仕様を理解することに注力します。
一方で、技術的な内容がわからない場合、なぜこのような書き方になっているのか、特定の技術やアルゴリズムが理解できません。 その場合、技術的な内容を調査し、理解を深めることに注力します。 多くの場合、関連するライブラリやフレームワークのドキュメントを参照することが有効です。 今回の PyGame であれば、PyGame のドキュメントを参照し、どのような呼び出しで何が実現できるのかを理解しましょう。
コードを読まない #
コードリーディングでは、コードを読まないことも重要です。 コードを読むとき、人はつい細部に注目してしまい、全体像や目的を見失いがちです。 コードリーディングの目的を見失わないように注意し、不要だと思ったところは読み飛ばしていきましょう。
コードを読まずに内容を理解するためには、関数名やクラス名、コメントなどから、何をしているのかを推測することが有効です。 そのためには、基本的な英単語の意味を理解しておきましょう。 使われる英単語は限られており、基本的な単語の意味を理解していれば、多くのコードを推測できます。
- 松元 大地、[コードの気持ちがわかる!]プログラミングの英単語 —— 入門で挫折しないための必須単語150、2023-04-15、ISBN978-4297133887。
- 西野 竜太郎、アプリケーションをつくる英語 ―エンジニアよ、世界市場を狙え! 、2012-09-21、ISBN978-4844332848。
コードリーディングの支援ツール #
生成系AI #
生成系AI(例: ChatGPT、GitHub Copilot など)は、コードリーディングの強力な支援ツールとなります。 コードの説明や要約、特定の部分の動作解説などを生成してくれます。 ただし、生成される内容が必ずしも正確でないため、注意が必要です。
エディタ #
高度なエディタ(例: Visual Studio Code、PyCharm など)は、コードリーディングを支援する多くの機能を備えています。 シンタックスハイライト、コードナビゲーション、リファクタリング支援などが含まれます。 これらの機能を活用して、コードの理解を深めましょう。 例えば、メソッド呼び出しにマウスカーソルを合わせると、ポップアップでそのメソッドの定義やドキュメントが表示されます。 また、コマンドキーを押しながら、メソッド名をクリックすると、そのメソッドの定義箇所にジャンプできます。
キーワード検索や正規表現検索を活用して、特定のキーワードやパターンを含むコードを素早く見つけることも有効です。
普段使いのエディタの機能を十分に理解し、活用することで、コードリーディングの効率が大幅に向上します。 逆に言えば、上記のような機能を持たないエディタは、コードを書くには不向きです。
参考文献 #
コードリーディングに関する書籍 #
- 岩松 洋、書くスキルも設計スキルも飛躍的に上がる! プログラムを読む技術、2024-09-27、ISBN978-4296071029。
- Diomidis Spinellis (著), まつもと ゆきひろ (監修, 翻訳), 平林 俊一 (監修, 翻訳), 鵜飼 文 (監修, 翻訳), トップスタジオ (翻訳)、Code Reading ~オープンソースから学ぶソフトウェア開発技法~、2016-08-30、ISBN978-4839956691。