プログラマyasuhoの隠れ家

某ソフトウェア企業に勤務するおじさんプログラマyasuhoです

ソースコードを効率よく読むには(2)


コードを読む能力というのは書いた人の性格や気持ちを読みとることが出来る力だと思います。プログラムがどのような思想で書かれているかを見極めることが、コードを読むということではないでしょうか。


長大なコードを読むのは大変ですが、これを好きな長編小説のように読むことが出来たらどうでしょう。コードを読むことが楽しく出来るのであれば、多くのコードを読むようになり、いつしかCode Readingのプロになれる。私はそう信じています。

実際にコードを読む


前回ソースコードを読む力の大切さと、読む前の準備について説明しました。今回は実際にコードを読む上でのポイントなどを書いてみようと思います。

コードを読む上でのポイント


漠然とコードを眺めていても、大きなソースコードの場合は把握が難しいです。コードを効率よく読むためには、いくつかのポイントがあります。

ファイル構成をつかむ


まずはソースファイルの構成を把握しましょう。


多くのプログラムコードは機能などによってファイルやフォルダに分類されていることが多いです。ざっと眺めて、どのファイルにどのような機能が実装されているかを調べましょう。中を細かく見るのではなく、全体の構成を理解することを優先します。


この時全体構成のブロック図などを簡単に作っておくといいでしょう。

機能のメモを作成する


次に個々の関数やメソッドなどの機能概略を書いたメモを作りながら読み進めていきます。


規模の大きいプログラムは見ていくうちにだんだんと分からなくなってきます。また、一時作業を中断して再び読むこともあるでしょう。メモを残しておくことで、分からなくなったり内容を忘れてしまうことを防ぐことが出来ます。


メモは一行程度の簡単なものにします。作成に手間がかかると面倒になってしまうし、プログラムはどんどん変更されていくので、詳細なものを作っても実際のコードと違うものになってしまうことが多いからです。機能概要や入出力程度にとどめておくことがポイント。


なお、関数やメソッドには先頭にコメントであらかじめ機能概要や入出力が書いてあるものがありますが、コードが変更されている可能性があるので、内容をうのみにしないようにしましょう。あくまで参考程度に。

図を書く


複雑なデータ構造やモジュール構成などは、図を書くと理解しやすいです。


私が言うまでもなく、すでに多くの方が実践されていることと思いますが、やはり図式化すると構造がとらえやすくなりますよね。ここでもあまり労力はかけず、シンプルな図を書くようにします。

長いコードは簡略化


数千ラインもあるような巨大なソースコードは、見やすくするために簡略化しましょう。


プログラムは書いていくと、どんどん行数が増えていきます。最初から長大なライン数が書ける優秀な人もいますが、大抵は機能追加した結果であることが多いです。コードが最初に作られたであろう状態を想像しながら、ソースの基本部分を抜き出したコードを作ったり(Pseudo codeなどと呼ばれる)いくつかのパートに分割するなりして、読みやすくするとよいでしょう。


当然ですが、元のソースファイルはコピーしてから編集しましょう。オリジナルコードを壊してしまわないように。:)

コードの慣習やクセを見抜く


プログラマの慣習やクセを見抜くことは、コードの理解を助けます。


プログラマはそれぞれ自分のスタイルやこだわりを持っています。「この人はこういう書き方をする」といった特徴が見えると、コードを読む速度が上がることでしょう。

名前から機能を推測する


コード内の名前からは、多くの情報が入手できます。


関数・メソッド・構造体・クラスなど、コードには様々な名前がついていますが、これらには機能を表す情報が多く含まれています。Get/SetやLoad/Saveなどは機能そのものですね。関数やメソッドの因数や返却値からは動きが想像できます。構造体やクラスのメンバー名からはデータ構造も予測可能です。


ShやDrvといった特別なプリフィックスからは、APIの属するコンポーネントが分かります。API以外にも使われる場合が多いので、積極的に利用しましょう。

コードを読むことは気持ちを読むこと


コードを読む能力というのは書いた人の性格や気持ちを読みとることが出来る力だと思います。


ある機能をプログラムで実現する方法は人の数だけあります。そして、コードには書いた人の性格や考え方が色濃く反映されています。そこが理解できれば、プログラムの姿が見えてくるはずです。プログラムがどのような思想で書かれているかを見極めることが、コードを読むということではないでしょうか。

楽しく読めれば、きっとうまくなれる


コードを好きな小説のように楽しく読むことができれば、自然と読む力がつくのではないでしょうか。


長大なコードを読むのは大変ですが、これを好きな長編小説のように読むことが出来たらどうでしょう。面白い小説は時間のたつのも忘れて、あっという間に読んでしまいますよね。プログラムを書いた人の気持ちを想像しながらコードを読めば、楽しいかもしれません。


すぐにコードが読めるようになるわけではないでしょうけれど、コードを読むことが楽しく出来るのであれば、多くのコードを読むようになり、いつしかCode Readingのプロになれる。私はそう信じています。