今すぐ使える!他人の書いたソースコードを読むコツ【保存版】

当ページのリンクには広告が含まれています。
今すぐ使える!他人の書いたソースコードを読むコツ

エンジニアだけど実務で機能改修を担当することになった。でもコードの量が多くてどう読めばいいのかわからない。納期に間に合うか不安だなぁ。他人の書いたソースコードを効率よく読むコツとかあれば教えてほしい。

こんなお悩みにお答えします。

この記事で解説する「ソースコードを読むコツと注意点」を読めば、コードを読む力が圧倒的に向上し、すぐに実務に活用できるようになりますよ。

この記事を書いている僕はフリーランスエンジニアです。現在はフロントエンドエンジニアとしてWeb開発企業で働いています。それらの経験をもとに解説していきますね。

記事前半で「他人の書いたソースコードを読む必要性」をさくっと解説し、後半で「ソースコードを読むコツや注意点」を紹介します。

本記事ではプログラミング言語Javaのコードを用いて紹介します

ぜひ最後までお読みいただき、プログラマーとしてレベルアップしてみてください。

Writer
shin

シン

✔︎ 職業:フリーランスエンジニア
✔︎ 保有資格:JavaGold/ITパスポート/SEO検定全級/全日本SEO協会認定SEOスペシャリスト
✔︎ メインスキル:TypeScript(Vue.js)/Java(SpringBoot)

目次

他人の書いたソースコードを読む必要性

他人の書いたソースコードを読む必要性

前提として、他人の書いたソースコードを「なぜ読むべきなのか」を解説します。

まず、他人の書いたソースコードは、エンジニアなら頻繁に読む機会があります。自社開発や受託開発にかかわらずです。

どういった時に、他人が書いたソースコードを読むのか?それは主に以下の場面です。

  • 機能追加をする際の影響範囲を調べるとき
  • 新規開発時に他の機能を参考にしながら実装するとき
  • 人の書いたソースコードをレビューするとき

上記の通り。

効率よく開発して納期に間に合わせるには、ソースコードをいかに早く読み切れるかが重要です。

他人の書いたソースコードを読むコツ6つ

他人の書いたソースコードを読むコツ6つ

他人の書いたソースコードを読むコツを紹介していきます。

  • コードを読む目的を明確にする
  • システムの構成を理解する
  • 読むべき箇所を特定する
  • 必要な箇所を一行ずつデバッグ
  • コメントやメソッド名から読み解く
  • 論理的に考えながらコードを読む

順番に見ていきましょう。

コードを読む目的を明確にする

まず、ソースコードを読む前に、「今からなんでそのコードを読むのか?」コードを読む理由を明確にすることが重要です。

なぜなら、コードを読む目的を明確にしなければ、何のためにそのコードを読むのかがわからずモチベーションが上がらないからです。モチベが上がらないと、よくわからないコードが出てきた時にすぐにコードを読むのを諦めて、投げ出してしまいがちです。

では、コードを読む目的とはどんな例があるか?記事冒頭でも解説しましたが、

  • 機能追加時の影響範囲を調べたい
  • 他の機能を参考にして効率よく開発したい
  • コードレビューをしないといけないから

上記がコードを読む目的として多いかなと。

他にもバグの調査や新人からの質問に答えるために新人が書いたコードを読むこともあるかもしれません。

こんな感じで、まずは自分がやりたいことを明確にしてから、コードを読み始めてください。

システムの構成を理解する

ソースコードを読むコツは、まずシステム構成を理解することです。

システムの構成とは、どんなフォルダ構成になっていて、どんなファイルやクラスがあるのかなどですね。各フォルダやファイル、クラスにはそれぞれ役割があるはずです。

なぜ、システムの構成を先に理解する必要があるのか?この答えは、「木を見て森を見ず」の状態をなくすためです。

つまり、全体を把握してから徐々に細かい部分に絞っていくことで、コードがどんな流れで動いているのかがイメージしやすくなります。これがコードを読むコツの1つです。

たとえば、JavaやRubyなどのオブジェクト指向の言語を扱う開発をするとします。これらのオブジェクト指向言語では、「MVC」と呼ばれる構成を用いられることが多いです。

MVCとは?

Mode(モデルl): データやアプリケーションのロジックを表す。データの操作、変更、および処理を担当。モデルは、アプリケーションのデータやビジネスロジックを保持し、必要に応じて更新や変更を行う。

View(ビュー): ユーザーに表示されるインターフェースを表す。データの可視化や表示に関連する操作を担当。ユーザーに情報を表示し、ユーザーからの入力を受け付ける。

Controller(コントローラー): モデルとビューの間の通信と調整を担当。ユーザーからの入力を受け取り、それに基づいてモデルの更新やビューの更新を行う。コントローラーは、ユーザーのアクションに応じて適切な処理を実行する役割を果たす。

上記の通り。

眠たくなりそうな小難しいことが書いていますが、重要なポイントですので耐えてください。

たとえば、〇〇Model.javaというクラスがあったとします。このクラスはModelなので、データベースから取得した値を格納する役割があります。Viewはフロントエンドに関するファイルでhtmlやjspなどが該当します。これらは画面に関するファイルだとわかりますよね。

多くのシステムでは意味を持った構成になっているはずです。

システムの全体の構成を理解することで、どのソースコードを読めばいいのか、読むべき箇所を特定しやすくなり、効率よくコードを読むことができます。

読むべき箇所を特定する

他人の書いたソースコードを読む際は、読む箇所を特定しましょう。

全てのファイルやクラスのソースコードを上から下まで読むのは、規模の大きいシステムほど膨大な時間がかかりますし、非効率だからです。

読むべき箇所を特定するには、システムの動きとソースコードを照らし合わせると良いです。たとえばログイン機能に関するソースコードを読みたいとします。ログイン機能の動きは「ログインボタンを押す→ログインクラスが動く」と予想できますよね。なので、この場合はログイン機能を実装しているクラスを探してその中のコードを見ればOKです。

実際にコードの例をみてみましょう。以下はJavaで書いたログイン機能のソースコードです。

import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;

// ログインクラス
public class Login {
    private static Map<String, String> users = new HashMap<>();

    public static void main(String[] args) {
        // ユーザーを追加
        users.put("user1", "password1");
        users.put("user2", "password2");

        Scanner scanner = new Scanner(System.in);

        System.out.print("ユーザー名を入力してください: ");
        String username = scanner.nextLine();

        System.out.print("パスワードを入力してください: ");
        String password = scanner.nextLine();

        // ユーザー名とパスワードの存在確認メソッドを呼び出す
        if (login(username, password)) {
            System.out.println("ログインに成功しました。");
        } else {
            System.out.println("ログインに失敗しました。");
        }
    }

    // ユーザー名とパスワードの存在確認
    private static boolean login(String username, String password) {
        if (users.containsKey(username) && users.get(username).equals(password)) {
            return true;
        }
        return false;
    }
}

ログイン機能に関する開発をするなら、Loginクラスがメインになります。

ちなみにクラスを特定するには、URLをみたりクラス名を参考にすればわかりやすいかと。たとえばログイン機能ならhttps://sample.com/loginだったり、Login.javaといった名前になっているケースが多いですね。

その他のログイン機能に関連性のないクラスは基本的に見なくて良いです。見る必要があるのはLoginクラスとそれに関わるクラスやファイルだけでOKです。

読まなくて良い箇所も特定しよう

読むべき箇所を特定した後に、読まなくて良い箇所も把握しておきましょう。

先程のJavaのコードを例にすると、「// ユーザー名とパスワードの存在確認メソッドを呼び出す」の条件分岐で呼び出しているloginメソッドの中身は、読まなくてOKです。

 // ユーザー名とパスワードの存在確認メソッドを呼び出す
 if (login(username, password)) {  // loginメソッドは読まなくて良い
     System.out.println("ログインに成功しました。");
 } else {
     System.out.println("ログインに失敗しました。");
 }

このloginメソッドは、ユーザー名とパスワードの存在確認をしていることが、コメントやメソッド名から読み取れますよね。なのでここは別に読まなくて良いのです。

もちろん「勉強がてらに読みたい」とか、「レビューなどで質問された時に答えれるようにしておきたい」という個人的な考えがあるなら読んでもOKです。

ただし完璧に理解しようとして納期に遅れるのはよくないので、その辺りは臨機応変に対応してくださいね。

こんな感じで読むべき箇所と読まなくて良い箇所を判断していくと、効率よくソースコードを読んでいけます。

必要な箇所を一行ずつデバッグ

他人の書いたソースコードを読む際は、読みたい箇所にブレークポイントをおいて、一行ずつデバッグすると効率よく読み進められます。

デバッグすることで、変数にはどんな値が入っているのかがわかりますし、処理がどういう流れで動いていくのかも把握できます。

デバッグは、ソースコードを読む際には必須の作業と言っても過言ではないので、迷ったらすぐブレークポイントをおいてデバッグするくらいでもいいですね。

コメントやメソッド名から読み解く

ソースコードを読む際は、コメントやメソッド名をよくチェックしてみてください。

コメントは処理の目的が書かれていることが多いので、コメントをみながらコードを見ると理解の速度が向上します。(中にはわかりにくいコメントがあったり、そもそもコメントがなかったりしますが…)

メソッド名や変数名、クラス名がどんな名前なのかも確認すると良いです。多くの現場ではメソッド名1つにしても、意味のある名前でつけられていることが多いです。

以下で具体例をあげてみますね。

// SNSアプリクラス
class SNSApp {
    private List<User> users;

    public SNSApp() {
        this.users = new ArrayList<>();
    }

    // 新しいユーザーを登録
    public void registerUser(String username) {
    ・・・・
    }

    // 指定されたユーザーに投稿を作成
    public void postToUser(String username, String content) {
    ・・・・
    }

    // ユーザー名でユーザーを検索
    private User findUserByUsername(String username) {
    ・・・・
    }
}

上記のコードを解説します。

まず、クラス名が「SNSApp」となっていることから、SNSアプリに関するクラスだとわかりますよね。

続いてメソッド名です。「registerUserメソッド」を見ると、registerUserと書いてあることから、新規ユーザーを登録するんだなと予想できます。

同様にfindUserByUsernameメソッドなら、ユーザーを検索するんだと予想できますよね。もちろん予想だけで決めつけはダメですので、最終的にはデバッグをしながら予想を確信に変える必要はあります。

できることもありますこんな感じでクラス名やメソッド名から、どんな役割をしているのか予測できることもあります。

論理的に考えながらコードを読む

ソースコードを読む最大のコツは、「論理的に考えながらコードを読む」ことです。

なぜなら論理的に考えることで、プログラムの処理の理解度が高まり、影響範囲の把握がしやすくなったり、事前にバグを防いだりできるようになるからです。

「何でこのコードはこう書かれているのか?」「何でこのシステムはこう動くのか?」といった感じで読み進めていくと良いですね。プログラミング言語は、言語なので、日本語と同じように文を意識して読むのがコツです。

論理的に考えながらコードを読む癖をつけるといいですね。続けていくことでコードを読む力が圧倒的に上がっていきます。

他人の書いたソースコードを読む際の注意点5つ

他人の書いたソースコードを読む際の注意点5つ

他人の書いたソースコードを読む際の注意点もご紹介しますね。

これを知っているだけでモチベーションがかなり変わるので、ぜひ読んでみてください。

以下の流れで見ていきましょう。

  • 扱う言語の基礎学習はしておく
  • 不明点はその都度ググる
  • 設計書がない場合は仕様をメモ
  • 繰り返しソースコードを読む
  • 読んでも不明な箇所は飛ばす

扱う言語の基礎学習はしておく

ソースコードを読む前に、実務で扱う言語の基礎学習はしておきましょう。

これをしていないと、開発するときに一から調べながら作業をする必要があり、時間がかかってしまいます。結果的に納期に間に合わなくなる可能性がでてくるのです。

新人でもベテランプログラマーでも同じです。現場が変わって新しい言語を扱うことになった場合、基礎文法やよく使うメソッド、条件分岐や繰り返し処理の書き方などは事前に学習しておくと、序盤から効率よく開発を進められます。

たとえば僕は、Javaをメインに使ってきたのですが、3年目のタイミングでTypeScriptを使う案件にシフトしました。そのため、事前にTypeScriptの動画教材を購入して基礎を学習しました。そのおかげで実務に入った時に、迷いが少なくコードを読めたので、やはり基礎学習は必要だと感じたんですよね。

なので、これから扱う言語の基礎学習はしておくと良いですよ。

不明点はその都度ググる

ソースコードを読んでいるとわからないことがでてきます。

もし理解が必要なのであれば、放置せずにその都度ググりましょう。

たとえば、メソッドの意味や変数名の付け方など。基本的なことも含めて自分が理解できていないのであれば都度調べる必要があります。

以下でエンジニアにおすすめのググり方を解説していますので、ぜひ参考にしてみてください。

設計書がない場合は仕様をメモ

現場によっては設計書がなかったり、設計書はあるけれど情報が古かったりして使い物にならないケースがあります。その際は自分でソースコードを読みながら仕様をメモっていくと良いですよ。

たとえば僕は、エクセルやmacのメモ帳に、「Aクラスは〇〇をするクラス、Aクラスのaメソッドは〇〇をしている、aメソッドからbメソッドが呼び出される」というように、ざっくり処理の流れをメモしています。もちろん全てのコードをメモしているわけではなく、自分が実装するところだけなのと、処理が複雑な箇所だけをメモしています。

システムの規模が大きいほどソースコードの量も増えるので、記憶だけに頼るのは非効率です。

忘れないようコードの仕様をメモしておくことで、後でいつでも見返せるようになるので、効率よく開発を進められます。

繰り返しソースコードを読む

プログラマーは繰り返しソースコードを読んで理解していきます。

一度コードを読んだだけで仕様や処理の流れを理解するのは、よほどの天才か長年そのシステムに関わっている人でない限り不可能に近いです。

僕はフリーランスエンジニアとして働いており、半年から1年ごとに案件を変えるケースが多いので、1つのシステムに長く携わることは少ないです。なので、現場が変わればシステムも変わります。その都度、繰り返しコードを読んで理解度を高めています。

繰り返しソースコードを読んで1つずつ理解していければOK。1周目はなんとなくの理解、2週目は理解度60%。3週目は90%といった感じです。

ちなみに余談ですが、フリーランスエンジニアなら色々な現場を経験できるので、幅広いスキルを身につけられます。また、高収入を得られる可能性も高いです。実際に僕はフリーランスになってからスキルも収入もかなりあがりました。

興味のある方は、以下でフリーランスエンジニアになる方法をご紹介しているので、あわせてチェックしてみてください。

読んでも不明な箇所は飛ばす

コードを読んでもわからない箇所がでてくるとことがあります。基本はまず調べることが大事なのですが、それでもすぐにわからないこともあるかと思います。

その際に深追いするかしないか迷う時ってありますよね。深追いしてわかればいいのですが、それでわからなかったら時間がもったいないです。

なので読んでも不明な箇所は、時には一旦読み飛ばすことが大事です。他のコードを読んでいくことで、読んでもわからなかった箇所との関連性がわかり、理解できるケースもあります。

どうしても今すぐ理解しないといけないなら、質問できる環境であれば、開発者に質問するのもありですね。

以下でエンジニアの良い質問の仕方を紹介していますので、特に新人の方は参考にしてみてください。

最初はざっくり理解することがポイント

最初はざっくり理解することがポイント

他人の書いたソースコードを読むには、システムの構成を理解し、不明点はその都度ググりましょう。

最初から完璧にコードを読んだり仕様を理解することは難しいです。まずはどのクラスがどんな役割をしているのかなど、全体をざっくり理解することがポイントです。

その上で細かいところまでフォーカスしていき、読むべき箇所と読まなくて良い箇所を特定してみてくださいね。

今回は以上です。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次