logologo
コードを「書く」よりも「読む」ほうが重要!? “誰も教えてくれない”プログラムを「読む技術」とは?
コードを「書く」よりも「読む」ほうが重要!? “誰も教えてくれない”プログラムを「読む技術」とは?

コードを「書く」よりも「読む」ほうが重要!? “誰も教えてくれない”プログラムを「読む技術」とは?

岸 裕介
2025.05.26
この記事でわかること
「プログラムを読む技術」を学ぶことで、書くスキルも高まる理由
効率的にコードを読み解くためのステップと考え方
プログラムを読む力が高まる新たなAI学習法

プログラミングというと「コードを書く」イメージが強いですが、実務では既存コードの修正や理解に多くの時間が費やされていることをご存知でしょうか。実は、エンジニアの日常において、プログラムを「書く」ことよりも「読む」時間の方が圧倒的に長いのです。

そこで今回は、『書くスキルも設計スキルも飛躍的に上がる!プログラムを読む技術』の著者でIT企業でのエンジニア経験と自身が運営するプログラミング教室での指導を通じて「読む技術」の重要性に気づいたという岩松洋氏にインタビュー。「読めるようになれば書く力も自然と向上する」と話す岩松氏に、効率的なプログラムの読み方と、その先にある技術向上のヒントを伺いました。

image

『書くスキルも設計スキルも飛躍的に上がる!プログラムを読む技術』

出版社:日経BP、著者:岩松洋

岩松 洋 岡山大学工学部修士課程情報工学専攻卒。大手IT企業にてプログラマー、システムエンジニアとして経験を積み、情報処理技術者プロジェクトマネージャー資格を取得。開発チームのプロジェクトマネージャーとして官公庁のセキュリティシステム開発を担当後、起業。豊富な開発経験と要件定義のスキルを活かし、中小企業の生産性向上や業務効率改善を支援する専門コンサルタントとして活動。また、人材育成にも力を入れ、「考える社員」を育てることを目的とした企業向けの研修プログラムを提供し、講師も務める。

エンジニアが見落としがちなコードを「読む技術」の重要性

岸 裕介
岸 裕介

まず、プログラマーにとってなぜプログラムを読む技術が必要なのかお聞かせいただけますか?

岩松さん
岩松さん

プログラムを書くときもシステム開発をするときも、プログラムを読む機会が本当に多いからです。書いたプログラムのデバッグやテストは必ずありますし、他人の書いたプログラムを引き継ぐこともあります。現在はAIが書いたプログラムをもとに変更することもあるでしょう。

岩松さん
岩松さん

私の経験でも、プログラムを「書く」よりも「読む・修正する」時間の方が長かったように思います。プログラミングを仕事にする方にとっても、学ぶ方にとっても、プログラムを読む技術は本当に重要です。

岸 裕介
岸 裕介

たしかに実務では自分で一から書くよりも、既存コードを修正する機会の方が多いかもしれませんね。読む技術が高まると、書く技術も高まるとのことですが、その理由を詳しく教えていただけますか?

岩松さん
岩松さん

プログラムを読む際には、プログラムの設計の全体像を理解することが必要です。一行ずつ文法的に読み取ることと、プログラム全体を設計的に読み取ることの両方が必要になります。

【プログラムを読む手順】
1 . プログラムの全体(設計)を読み取る
2 . プログラムを分解して各部分を読み取る
3 . プログラムの分解を続けながら、一行ずつ読み取る

【プログラムを書く手順】
1 . プログラムの全体を設計する
2 . 全体を分解して、各部分を設計する
3 . プログラムを一行ずつ書く

岸 裕介
岸 裕介

双方に「設計」という共通点があるのですね。

岩松さん
岩松さん

そうなのです。両者にはまず「設計」という点が共通しています。プログラム全体(設計)を読めるようになると、プログラムを書くときの設計技術が上達するのです。

岩松さん
岩松さん

バグ修正・デバック、機能追加・仕様変更、コードリファクタリング、他人のコードの引き継ぎといった場面では、プログラム全体の流れと設計を読むことが重要です。プログラムを修正する際に、設計をきちんと読み取らないと、思わぬバグを作り出してしまうこともあります。

岸 裕介
岸 裕介

プログラミング教室を運営されている立場から、学習者がつまづきやすいポイントはどこか教えていただけますか?

岩松さん
岩松さん

教室で見ていると、文法は理解しているのにまとまったプログラムになると読めないという生徒さんが多いです。特にfor文(※特定の処理を決まった回数繰り返す命令文)やwhile文(※条件が満たされる間、処理を繰り返す命令文)といった繰り返し文や、関数に関する質問が多いです。

岩松さん
岩松さん

例えば、for文の繰り返しで「何を繰り返しているのか」「なぜそれを繰り返す必要があるのか」というプログラムの目的や設計の部分が理解できていないケースが多いです。

岸 裕介
岸 裕介

プログラムの構文は理解できても、その背後にある意図や目的が見えないということですね。

岩松さん
岩松さん

文法的にはif文(※条件分岐を行う命令文)やfor文がわかっていても、複数の機能が組み合わさったプログラム全体の設計や目的が理解できないと、読み取りができなくなってしまいます。これはプログラミングを始めたばかりの方に特によく見られる課題といえます。

他の人が書いたコードが読みにくいのはなぜ?

岸 裕介
岸 裕介

他の人が書いたプログラムを読むときに読みにくく感じることが多いのはなぜでしょうか?

岩松さん
岩松さん

プログラムを書いた人と読む人の考え方や目の付けどころ、意識にズレがあるためです。そのズレがどんなところで起こっているのかというと、次の7つの理由が考えられます。

1 . 設計する際の考え方の違い
2 . プログラム作成に使われた言語の違い
3 . 関数の作り方の違い
4 . 関数名、変数名の付け方の違い
5 . コメントの書き方の違い
6 . 入力と出力の考え方の違い
7 . スキルの違い

岸 裕介
岸 裕介

この中でも特に大きな理由はどこにあると感じていますか?

岩松さん
岩松さん

最も大きな理由は、設計する際の考え方の違いです。同じ機能を実現するプログラムでも、プログラマーによって変数や関数の使い方が大きく異なるからです。

岩松さん
岩松さん

細かいところでは、繰り返し処理をするとき、for文とwhile文のどちらを使うかなど、人によって考え方が違います。設計における考え方の違いがプログラミングにそのまま表れるので、自分と違う考え方をすぐに読み取ることは難しいのです。

岸 裕介
岸 裕介

プログラミング言語による違いもあるんですね。

岩松さん
岩松さん

はい、それも主な理由として挙げられます。例えば、私はC言語から始めたので、main関数を作る習慣があり、switch文(※複数の条件分岐を一度に行う命令文)に慣れています。for文は0から9までのように数値で回すことが多いですね。

岸 裕介
岸 裕介

そうした違いが読む側にとって障壁になるわけですね。他にも言語ごとの特徴はありますか?

岩松さん
岩松さん

例えば、プログラミング入門書で取り上げられることの多い、「Hello, World!」と出力するプログラムを言語ごとに比較してみましょう。

imageimageimage
『書くスキルも設計スキルも飛躍的に上がる!プログラムを読む技術』より転載
岩松さん
岩松さん

他にもC言語ではクラス(※オブジェクト指向プログラミングの基本要素で、データと機能をまとめたもの)はありません。C++という言語でクラスを使えるようになります。

岩松さん
岩松さん

これらはPythonから始めた人には違和感があるでしょう。例えばPythonのfor文は、リストの中の要素を1つずつ取り出すような使い方をします。同じことをしているようでも考え方が違うので、読むときに違和感が生じることがあります。

プログラムを読み解く前に必要な準備とは?

岸 裕介
岸 裕介

効率的にプログラムを読むために、事前に行うべきことはありますか?

岩松さん
岩松さん

プログラムを読み始める前に、プログラムを読むためのヒントを探すことが大切です。何をするためのプログラムなのか、どのような処理の流れになっているか、どのような部分や関数があるか、などを事前に把握してから読み始めると、読みやすくなります。

岩松さん
岩松さん

また、実際のプログラムと事前の理解を照らし合わせながら読むと、理解が進みやすいです。

岸 裕介
岸 裕介

具体的にはどんな方法があるのでしょうか?

岩松さん
岩松さん

まず、ドキュメントを探すことです。外部仕様書や詳細設計書があれば、それを読むことで、プログラムの目的や全体像を把握できます。これが最も正確なヒントになるはずです。

岸 裕介
岸 裕介

ドキュメントが見つからない場合はどうしたらよいでしょうか?

岩松さん
岩松さん

その場合は、プログラムを書いた人に直接質問するのが効果的です。プログラムを書いた本人に意図や構造を尋ねることで、多くの場合、自分でコードを解読するよりも短時間で正確に理解できます。

岩松さん
岩松さん

ドキュメントもなく、書いた人にも連絡が取れない場合は、プログラムを実行してみるという方法があります。実行結果を観察することで、プログラムの機能や処理の流れが見えてくることが多いです。

岸 裕介
岸 裕介

インターネット上のプログラムの場合、ファイル名やコメントからヒントを得ることもありそうですね。

岩松さん
岩松さん

ファイル名やフォルダ構成、READMEファイルなど、さまざまな情報がヒントになることがあります。また、最近ではAIに聞くという方法も増えています。実際、イベントでプログラムの読み方について説明した際、ある参加者はChatGPTにプログラムの機能を尋ねていました。

岸 裕介
岸 裕介

プログラムを読む前に、どのような視点で内容を予測すると効果的でしょうか?

岩松さん
岩松さん

プログラムの目的に基づいて、必要な入力、期待される出力、そして処理内容を事前に考えておくことが効果的です。例えば、タイムカードのプログラムならば、「打刻する」「集計する」という機能が必ず存在するはずです。タイムカードシステムの目的は、打刻したデータを蓄積し、勤務時間などを集計することだからです。

image
『書くスキルも設計スキルも飛躍的に上がる!プログラムを読む技術』より転載
岸 裕介
岸 裕介

具体的な例を挙げていただくとイメージしやすいですね。どのように読み進めていくのでしょうか?

岩松さん
岩松さん

このような予測をしておくと、「打刻する部分はどこに実装されているか」「集計する処理はどの関数で行われているか」という視点でプログラムを確認できます。さらに詳細を掘り下げると、打刻機能には「誰が打刻するか選択する」「何の作業を打刻するか選択する」「誰、何、時刻を保存する」といった要素があるはずだ、という具合に読み進められます。

岸 裕介
岸 裕介

機能を予測して、「こういう部品があるはず」と考えながら読むわけですね。非常に実践的なアプローチだと思います。

コードの読解は全体から部分へ3ステップで

岸 裕介
岸 裕介

実際にプログラムを読むときのステップや考え方について教えてください。

岩松さん
岩松さん

プログラムを読むときは、まず全体像を把握し、その後部分部分を理解していくことが大切です。具体的には主に3つのステップがあります。

岩松さん
岩松さん

まず第一に、メイン部を読みます。プログラム全体の流れを把握するために、まずメインの部分を見つけて読みます。メイン部分とは、プログラム全体の動きを書いた部分です。Pythonの場合はインデントされていない行で、関数定義(def)やライブラリ読み込み(import)などの準備コードを除いた部分です。C言語の場合はmain関数がそれにあたります。ここを読むことで、プログラム全体の流れや構造が見えてきます。

岸 裕介
岸 裕介

なるほど。一行目から順番に読んでいくのではなく、まずメイン部分を見つけるのが大事なのですね。

岩松さん
岩松さん

第二に、データ構造を読みます。全体で使われるグローバル変数(※プログラム全体から参照できる変数)や重要なデータ構造を理解します。これらはプログラムのコアな部分であることが多く、その目的や使われ方を理解することで、プログラムの動作原理が見えてきます。

岩松さん
岩松さん

グローバル変数にこそ設計の癖が現れることが多いです。どのような変数をグローバルに定義し、どのような役割を持たせているかを見ると、プログラマーの考え方やプログラムの構造がわかります。

岸 裕介
岸 裕介

たしかに、核となるデータ構造がわかれば、処理の仕組みも理解しやすそうですね。

岩松さん
岩松さん

第三に、部分ごとに読み解いていきます。メイン部分と重要なデータ構造を理解した後、プログラムを部分部分に分解して読み解いていきます。このように「全体」→「部分」→「一行ずつ」という順序で読むと、プログラムの細部まで理解できます。

image
『書くスキルも設計スキルも飛躍的に上がる!プログラムを読む技術』より転載
岩松さん
岩松さん

一例として、上記の「数当てゲームのプログラム」で見てみましょう。まず、最初に探すメイン部は、4行目の以下が該当します。

image
『書くスキルも設計スキルも飛躍的に上がる!プログラムを読む技術』より転載
岩松さん
岩松さん

上記の内容から、プログラム全体の処理を以下のように推測します。

  • ランダムに数字を決める
  • プレーヤーに数字を入力させる
  • 答え合わせをする
  • その結果に応じた出力をする

岩松さん
岩松さん

推測内容をもとに、次はランダムに数字を決めているところを探していくという流れです。

岸 裕介
岸 裕介

その順序で読むメリットはどこにあるのでしょうか?

岩松さん
岩松さん

短いブログラムであれば、細かい手順を踏む必要はないかもしれませんが、長いプログラムを一行ずつ最初から読んでいくと、全体の流れがわからず迷路の中を歩いているような感覚になりがちです。まずは全体像を掴み、そこから細部に入っていくことで、プログラムの構造と目的を理解しやすくなります。

岸 裕介
岸 裕介

なるほど。読みにくいプログラムを読むためのコツもぜひ教えてください。

岩松さん
岩松さん

まず、プログラムの目的をしっかりと把握することが重要です。何のためのプログラムなのか、何をするためのものなのかが分かれば、どんな部品があるのかを想像できます。例えば、先にも述べたタイムカードのプログラムなら、どのような設計であっても打刻と集計の機能があるはずです。

岩松さん
岩松さん

このようにプログラムの目的から想像される機能を考え、「この機能はどこに実装されているか」という視点でプログラムを読むと理解しやすくなります。

岸 裕介
岸 裕介

プログラムを読む前に想像することが大切なのですね。

岩松さん
岩松さん

また、読みにくいプログラムの場合は、理解できない部分があっても全てを理解しようとせず、必要な部分に焦点を当てることも大切です。例えば、ライブラリ関数の内部実装まで理解しようとすると膨大な時間がかかります。その関数がどのような入力を受け取り、どのような出力を返すかという役割を理解するだけで十分な場合もあります。

AIと共に進化するプログラム読解術

岸 裕介
岸 裕介

最近はAIによるプログラム生成も増えていますが、AIを活用した読み方のコツなどはありますか?

岩松さん
岩松さん

AIはプログラミングの学習において非常に役立ちます。例えば、プログラムの読み方を練習したい場合、AIにプログラムを書かせて、それを読む練習をすることができます。

岩松さん
岩松さん

私も実際にChatGPTに「こんなことをしたいからプログラムを書いて」とお願いすると、プログラムだけでなく、各部分で何をしているかの説明も書いてくれました。ただ、それでは練習にならないと思い、「プログラムだけ書いて」とお願いしたら、説明なしでプログラムだけを生成してくれました。

岸 裕介
岸 裕介

それは面白い活用法ですね!練習のためにAIでプログラムを用意してもらうという発想はありませんでした。

岩松さん
岩松さん

さらにChatGPTに「わざと読みにくいプログラムを書いて」とお願いして、読解の練習に使うこともできます。これは特に読み方のトレーニングに効果的です。

岩松さん
岩松さん

また、読みにくいコードをAIに渡して、より読みやすく整理してもらうことで、元のコードと比較しながら読み方を学ぶこともできます。AIが書くプログラムは非常にきれいで読みやすいものが多いですので、リファクタリング前後のコードを比較することで、良いコードの特徴も学べます。

岸 裕介
岸 裕介

AIも活用すれば、より効率的に学べそうですね。最後に、これからプログラミングを学ぶ方や現役エンジニアへのメッセージをお願いします。

岩松さん
岩松さん

プログラミングの学び始めに、文法を習い、課題を解けるようになったのに、「プログラムを読めない」「自分でプログラムを書けない」という課題が多く見られます。なぜか考えていくと、「設計」にたどり着きました。

岩松さん
岩松さん

設計は、身につくまでの量に個人差がありますが、繰り返しの練習が必要です。ただ、プログラムの読み方を知ると、習得に必要な量を減らすことができます。『書くスキルも〜』の本の内容も参考にして、「設計を読む」「全体から読み始める」という考え方を知っていただけたらと思います。

ライター

岸 裕介
大学卒業後、構成作家・フリーランスライターとして、幅広いメディア媒体に携わる。現在は採用関連のインタビュー記事や新卒採用パンフレットの制作に注力しながら、SaaS企業のマーケティングにも携わっている。いま一番関心があるのは、キャンプ場でワーケーションできるのかどうか。
岸 裕介の記事一覧を見る
気になる人のXをフォローしよう!
公式LINE
公式YouTube
マイナビITエージェント

編集部オススメコンテンツ

Sponsored
【年収±診断】6つの質問に答えて、真の市場価値をチェック!
マイナビITエージェント
Sponsored

アンドエンジニアへの取材依頼、情報提供などはこちらから

お問い合わせ・情報提供

カテゴリー

編集部おすすめコンテンツ

Sponsored
【年収±診断】6つの質問に答えて、真の市場価値をチェック!
マイナビITエージェント
Sponsored

アンドエンジニアへの取材依頼、情報提供などはこちらから

logologo
Powered by マイナビ AGENT