はじめに
コードを読むのとういうのは、コードを書く以上に気力が必要な作業だと私は思います。
私は現在、約 20,000 ファイル以上の規模を持つプロジェクトで開発をしています。この記事では、現在私が実践しているコードリーディングのアプローチを言語化してみました。
業務ロジックを読むコツ
1. エントリーポイントから追う
ルート定義から追う
フロントエンド:
// routes.js を確認
<Route path="/sales/orders" component={OrderListPage} />
手順: ルート → コンポーネント → Redux Action → Saga → API
バックエンド:
// routes/api.php を確認
Route::post('/api/sales/orders', [OrderController::class, 'store']);
手順: ルート → Controller → Service → Business → Model
コールツリーを使用してコードの流れを読む方法はこちらの記事に詳しくまとめました
2. データフローを追う
フロントエンド: UI 操作 → Action → Saga → API → Reducer → UI 更新
バックエンド: Request → Controller → Service → Business → Model → Database
3. テストコードから理解する
テストコードは「仕様書」として使えます。tests/Feature/やtests/Unit/でテストを確認し、期待される動作を把握します。
// tests/Feature/OrderTest.php
public function test_order_can_be_created()
{
$response = $this->postJson('/api/sales/orders', [
'product_id' => $product->id,
'quantity' => 2,
]);
$response->assertStatus(201);
}
4. ツールを活用する
IDE の機能:
-
定義へジャンプ (
Cmd + Click): 定義元・参照に移動 -
ファイル内検索 (
Cmd + F): ファイル内を検索 -
ワークスペース検索 (
Cmd + Shift + F): プロジェクト全体で検索
5. ドキュメントを作成しながら読む
理解した内容をメモに残します。Notion や Obsidian などで、エントリーポイント、データフロー、依存関係を記録しておくと便利です。
6. 小さな単位で理解する
一度に全部を理解しようとせず、機能単位・レイヤー単位・データフロー単位で分割して理解します。
7. パターンを理解する
プロジェクト内の命名規則やディレクトリ構造、データフローパターンを把握すると、新しいコードを読む速度が上がります。
まとめ
- エントリーポイントから追う: ルート定義から順番に追う
- データフローを追う: データの流れを理解する
- テストコードから理解する: テストコードは仕様書として使える
- ツールを活用する: IDE の機能を最大限活用する
- ドキュメントを作成しながら読む: 理解した内容を記録する
- 小さな単位で理解する: 一度に全部を理解しようとしない
- パターンを理解する: プロジェクト内のパターンを把握する
これらのアプローチを組み合わせることで、大規模プロジェクトを少しずつ読み解くことができると思います。
他にも効果的な方法があれば、ぜひご教授いただきたいです。