- 他人が書いたソースコードが読めなくて辛い。。
- 先輩が書いたソースを読めるようになる方法を知りたい!
こういったお悩みを解決していきます。
本記事を読むと、他の人が書いたソースコードの読み方を知ることができます。
システム開発のほとんどの現場では、「ひとりで開発する」ことはないと思います。
したがって、必然的に他人が書いたプログラムを読み解く必要がでてくるのですが、本記事では以下の3点に絞って解説していきます。
当記事の内容
-
その①:どこからソースコードを読み始めればいいのか?
-
その②:どこまでプログラムを読めばいいのか?
-
その③:読むソースコードを減らすと整理しやすい
筆者について
-
文系大学卒業後、専門商社へ入社
-
将来性のあるITエンジニアに興味を持ち、4ヶ月独学して開発エンジニアとして転職
-
現在はWEB系開発のプロジェクトリーダー
それでは、順番に解説していきます。
Contents
その①:どこからソースコードを読み始めればいいのか?
ソースコードは、「イベントが発生する場所から読む」のが正解です。
イベントとは、例として以下のようなものが挙げられます。
イベントの具体例
-
クリック
-
ドラッグ&ドロップ
-
スワイプ(モバイルアプリの場合)
-
スクロール
上記のように「ユーザーがPCやスマホを通して実行できること」をイベントといいます。
例えばログインボタンのクリックとか、ドラッグ&ドロップでファイルをアップロードするときですね。
システムはユーザーの操作をトリガーに処理を開始する
システムは基本的にユーザーが操作した時にしか処理を実行しません。
このようなシステムの処理形式を「イベントドリブン」と言ったりします。
要は「ユーザーが実行したことに対して、システムが結果を表示する」ということですね。
例えば、Googleの検索画面を例にして考えてみます。
Googleの検索処理はどのタイミングで実行されるか?
Googleで検索をする時に、ユーザーは何をすれば検索処理が実行されて、検索結果を確認できるでしょうか?
「検索ボタンを押したら」ですね。当たり前です。
つまり、「検索の実行処理を読みたければ、検索ボタンが押された時に呼び出しているメソッドから読めばOK」ということになります。
他のシステムも同じように考えられる
上記でGoogleの検索処理を例にしましたが、どのシステムもイベントドリブンなシステムが多いので応用できます。
具体的には、「ログイン処理」のソースを読みたければ「ログインボタン押下」で呼び出しているメソッドから読み始めればOKです。
ユーザーの操作以外で処理を開始するものは少ない
ユーザーが何もしていないのに、勝手に検索したり、設定を変更したりするシステムがあったらどうでしょうか?
めちゃめちゃ使いづらいですよね。
なので基本的な考えは「ユーザーが実行した結果を表示する」なのですが、例外もあります。
バッチ処理などの「時間」をトリガーに実行される処理もある
ユーザーの操作以外に処理を実行する例として「バッチ」があります。
バッチとはざっくり説明すると「すぐにやらなくていいけど、あとでまとめて実行したい処理」のことです。
例えば、「毎月月末の深夜0時になったら売り上げ金額を自動計算する」みたいな処理ですね。
このようなユーザーの操作以外をトリガーに処理を実行するものもありますが、こういった例外を除けば「ユーザーが操作しない限り処理は実行されない」と考えてOKかと思います。
最初はイベントから読み始めればOK
バッチなどの例外も挙げましたが、プログラマーになりたてで、まずは他人のソースを読めるようになりたいということであれば、例外は無視して大丈夫ですので、まずは「イベントの発火場所からソースコードを読み始める」ようにしましょう。
その②:どこまでプログラムを読めばいいのか?
ソースコードは「イベントの発火場所から読み始める」ことは分かったけど、途中の処理で分からなくて詰まる。。。
こういった疑問も出ると思います。
結論、読んでも分からない処理は読み込む必要はありません。
全てを読み解かなくてもOK
ソースを読んでいて、分からない処理があれば読み飛ばすことも必要です。
最初から全てを理解するのは無理ですからね。
捨てるところは捨てましょう。
ですが、「読み飛ばしていいソース」と「読まなければいけないソース」があります。
この切り分けスキルを伝授します。
読まなくていいソースの見分け方
読むべきソースと読まなくていいソースの切り分け方法は「メソッド呼び出しをしている処理かどうか?」です。
読まなくていいソースの例
// ログインボタンが押されたらログインメソッドが実行される
<button onClick=“login()”>ログイン</button>
login() {
// getUserAuthInfo(メールアドレス, パスワード)の中の処理は読まなくてOK
const userAuthInfo = getUserAuthInfo(メールアドレス, パスワード)
その他の処理~
}
上記の例だと「getUserAuthInfo(メールアドレス, パスワード)」内の処理を読む必要はないです。
「メールアドレスとパスワードを渡すと、ユーザー情報を返却してくれる処理なんだなー」という感じの理解でOKです。
この中身を読み始めると果てしないし、最初は理解できないと思うのであくまでもログインボタンが押下された後の、loginメソッド内だけの処理にフォーカスして読み始めるのがコツです。
共通系の処理は読まなくて大丈夫
共通系の処理は、「使う人は処理内容を理解しなくてOK」です。
先ほどの例は、「誰かが作ったgetUserAuthInfoメソッドを使っているだけ」という状態ですね。
このように、作る側の人が「指定された値をくれれば、いい感じにやっておくよ!」な処理を共通系処理とか便利メソッドとか言うのですが、この共通系処理の内部ロジックについては「使う側の人が意識するべきではない」というのが結論になります。
例えば、JavaScriptだとコンソールに標準出力するconsole.log(‘標準出力したい値’)というメソッドがありますが、この内部処理を気にしたことありますか?
恐らくないと思います。
こんな感じで、メソッド化された処理というのは、そもそも使う側の人は読まなくてOKなソースなんですね。
最初のうちは、作った人を信じて読まないという選択をしましょう。
読んでも分からないプログラムは深追いしないのがコツ
とはいえ、完璧主義な人は「呼び出したメソッドが何をしているのか?」を知りたい人もいると思います。
結論、やめた方がいいです。
なぜなら「メソッドというのはメソッドの中で他のメソッドを呼んでいて、さらにそのメソッドでは別メソッドを呼んでいる」ということがあり得ます。
少し厳しい意見ですが、「他人のソースが読めない」という状態の人が深追いしても読みきれないし、理解もできないので、キッパリ読まないという選択をしましょう。
プログラミングにおいて完璧主義は捨ててしまって問題ないです。
そもそも全てのプログラムを把握すること自体難しい
そもそもシステム内の全てのプログラムを理解している人というのは、ほとんどいないと思ってください。
大規模なシステムになればなるほどです。
筆者の僕も、記事を書いている段階(2020/11/11)で、大手物流会社向けの配送自動化システム開発のプロジェクトリーダーをしていますが、大規模すぎて「それぞれのプログラムの内容は知っている」けど、「詳細なロジックまで理解していない」という状態です。
なので、まずは自分が実装担当をするプログラムのみを理解することにフォーカスしてください。
その③:読むソースコードを減らすと整理しやすい
「その②:どのレベルまでプログラムを読めばいいのか?」でも書いたことと重複しますが、プログラムを読むのに慣れるまでは、「そもそも読むソースの量を減らす」というのがコツです。
例えば、僕は料理が苦手です。
そんな僕に、いきなり「ビーフストロガノフ」の作り方を1から細かいところまで叩き込まれても、理解できる訳がないんですね。
だけど、「野菜切って、牛肉と野菜を鍋に入れて少しづつ煮込んだらできるよ」ってざっくり教えてくれれば整理しやすいですし、その後の細かい味付けに関しても頭に入りやすいわけです。
最初はざっくり理解すると整理できる
料理が苦手な人には、作り方をざっくり教えてあげると理解しやすいのと同じように、プログラミングでも同じことが言えます。
最初のうちは、読むべきソースを選定して「読む量」を減らすことで、頭の中を整理すると理解しやすいです。
そして、「慣れてきたら詳細なロジックを読む」というプロセスを踏めば、より詳細な処理についても頭に入りやすいのでおすすめです。
読みやすいプログラムを書けるようになると、他人のソースも読みやすくなる
実は「読みやすいプログラムを書ける」という状態になると、他人のソースも読みやすくなるという事実があります。
なぜなら「他人が読みやすいコード」を意識すると、「ソースの読み手」の気持ちもわかるようになりますし、レビュー依頼する時や時間が経ってからソースを読んだ時に「読む時間を短縮できるという」メリットがあるからです。
「読みやすいコードってどんなコード?」という方には以下の書籍がおすすめです。
本のタイトル通り、「読みやすいコード」は、どのように書けばいいのか?を具体的に紹介してくれています。
プログラマーにとってバイブル的な本なので、まだ読んだことない方は読んでみると学べることが多いと思います。
まとめ
今回は、「他の人が書いたソースコードの読み方」について解説してきました。
本記事をまとめると以下のようになります。
本記事のまとめ
-
①:イベントが発生する場所からプログラムを読む
-
②:共通系処理として切り出されている、ソースは見なくてOK
-
③:最初は「読むプログラムの量を減らす」と理解しやすい
これらの3点を守ると、プログラムへの理解がグッと高まります。
もし、私にお力に慣れることがあればTwitterのアカウントを載せておくので、ご連絡いただければと思います。
Twitter:@Aj2aPjQq9bYpoOe りょうすけ
DMもOKです。