ミクロなコードリーディング、マクロなコードリーディング

ソフトウェア開発のあらゆる場面でコードリーディングが必要となりますが、実際には「コードリーディング」と一言でまとめきれないほど、たくさんの方法やテクニックがあります。必要とされる場面にあった適切な方法やテクニックを用いないと行き詰まってしまうことも少なくありません。本記事では、異なるコードリーディング方法やテクニックを駆使する必要があるケースを大きく2つに分けて、その特徴や違いを紹介します。この2つのコードリーディング方法をそれぞれミクロなコードリーディング、マクロなコードリーディングと呼ぶことにします。

## 「ミクロなコードリーディング」の特徴、典型的な手順
ミクロなコードリーディングの特徴や典型的なやり方、手順は以下のようなものです。

- 処理を1行1行読んでいく
- 文法理解が最重要である
- 関連するファイルをたどって読み進めていく
- 徐々に読んでいく範囲が広がってくる
- 短時間で完了することを想定している
- あまりに発散してくると情報整理が必要となり混乱しやすくなっていく
- 読むべきコードをピンポイントに捉えたり、絞り込んだりするための検索テクニックも重要である
- 必要な内容だけを一直線に読んでいくことを想定しており、脇道にそれるコードはストレスでありノイズである
- ソフトウェア開発業務におけるコードリーディングの大半がミクロなコードリーディングである

ミクロなコードリーディングは、多くの方が思い描く、いわゆる「コードリーディング」だと思います。

## 「マクロなコードリーディング」の特徴、典型的な手順
一方でマクロなコードリーディングは、ミクロなコードリーディングとは目的が異なっており、それに応じたやり方、手順があります。

- 構造や背景などの把握が目的である
- 読まなければいけないコード量がミクロなコードリーディングより多い
- 多くの情報やヒントを整理しながら読むことが前提となっている
- 読むべきコードと読む必要のないコードを手早く選別することが重要である
- 検索でコードをピンポイントに絞り込むだけでは必要なコードを見つけるのが難しい
- 事前に公式ドキュメントやREADMEを読んでおくことの効果が大きい
- 上級者に任せられる傾向にあり、多くのプログラマは日常的に実施しない
- 詳細な実装内容まで把握する必要がないため、すでに理解しているアーキテクチャやパターンと照合できれば完了となる

コードを読むことを通じて、その向こうにある構造や背景を理解することが目的なので、1行1行読み進めていくというやり方では情報量が膨大となり、発散していった結果、整理しきれず混乱に陥ってしまいます。そのため、 **情報の整理と選別に重きを置くコードリーディング方法** となっています。

## どんなシチュエーションでミクロなコードリーディング、マクロなコードリーディングを実施するか
ミクロなコードリーディングとマクロなコードリーディングの特徴や典型的なやり方、手順をもとにして、コードリーディングが必要となるシチュエーションごとにどちらの方法を実施する傾向にあるかを以下のようにまとめてみました。

| シチュエーション                               | ミクロ | マクロ |
|:-----------------------------------------------|:------:|:------:|
| バグ修正                                       |   ✓    |        |
| 新規機能追加                                   |   ✓    |        |
| テスト                                         |   ✓    |        |
| ライブラリやフレームワークの選定               |        |   ✓    |
| コードレビュー                                 |   ✓    |        |
| デバッグ                                       |   ✓    |        |
| 他プロジェクトのヘルプ                         |        |   ✓    |
| トラブル発生時の状況整理                       |        |   ✓    |
| 言語、フレームワーク等の公式サイトでの勉強     |        |   ✓    |
| 技術書やオンラインコース、チュートリアルの写経 |   ✓    |        |
| 参考になる、使えるコードの調査、収集           |   ✓    |        |
| リファクタリング                               |   ✓    |        |

実際の開発現場では各シチュエーションでどちらのコードリーディング方法も実施する可能性がありますが、こういった傾向があることはイメージできるのではないでしょうか？

コードリーディング上級者であれば、無意識のうちにミクロなコードリーディングとマクロなコードリーディングをシチュエーションに応じて切り替えているはずです。一方で **_コードリーディングに苦手意識のある初中級者の方は、何か違和感を抱きながら上記の表と逆の方法でコードリーディングしているかもしれません_**。

## ミクロなコードリーディングとマクロなコードリーディングの違い
**ミクロなコードリーディングとマクロなコードリーディングとの違いは、目的の違い** だと言えます。知りたい情報や解決したい課題が異なっており、その粒度や抽象度が異なっているために、調査方法としてのコードリーディングのやり方や手順が異なっているのです。

ミクロなコードリーディングは、実装内容そのものを調査し把握する目的で行われます。実装されている処理が必要な理由やその背景を知ることは主目的ではありません。一方でマクロなコードリーディングは、構造や背景、処理の大まかな流れ（フロー）を調査し、設計やその方針または理由を把握する目的で行われます。ミクロなコードリーディングと違って、詳細な実装を知ることは主目的ではありません。

コードリーディングに苦手意識のない上級者がこれらのコードリーディング方法の切り替えを自然にできている理由は、おそらく目的を強く意識できているからでしょう。

## まとめ
異なるコードリーディング方法やテクニックを駆使する2つのコードリーディング方法として、ミクロなコードリーディングとマクロなコードリーディングについて紹介しました。両者の違いは、コードリーディングを通じて知りたい情報やその目的に起因しています。

シチュエーションごとに適した方法でコードリーディングをすることで混乱を避け、必要な情報へスムーズにたどり着くことができます。たとえコードリーディングに苦手意識があっても、知りたい情報や解決したい課題のような目的を明確して、それに応じたコードリーディング方法を選択することでストレスを軽減できるはずです。

ミクロなコードリーディングとマクロなコードリーディングを意識してみて、どちらが現在のシチュエーションや目的に合っているのかを考えながらコードリーディングに取り組んでみてください。