はじめに
先日、SESの面談でこんな質問をされました。
「既存のプロジェクトを解析する時に、重視していることは何ですか?」
その場では答えたものの、「何と答えるのがベストだったのだろう?」と考えていました。
この記事では、その問いに対して改めてじっくり考えたことをまとめています。
質問の意図を読む
まず、面接官がこの質問で何を知りたいのかを考えることが大切です。
表面上は技術的な質問に見えますが、実際には以下を評価していることが多いです。
- 現場への適応力:初めてのコードベースにどう向き合うか
- 自走できるか:ドキュメントや指示が不完全な状況でも動けるか
- コミュニケーション意識:問題を発見したとき、どう動くか
「解析」という言葉には、読む・動かす・理解する・課題を見つける、といった幅広い行動が含まれています。単に「コードを読む」だけでなく、プロジェクト全体を素早く把握してチームに貢献できるかを問われていると考えると、答えの方向性が変わってきます。
既存プロジェクト解析で実際に重視すべきこと
1. まず全体像を掴む(俯瞰から入る)
コードを読む前に、まずプロジェクトを頭に入れます。
確認するのは主に以下の点です。
- ディレクトリ構成(どこに何があるか)
- 使用している技術スタック(言語・フレームワーク・ライブラリのバージョン)
-
README.mdやCONTRIBUTING.md(セットアップ手順・開発ルール)
細部を読む前に全体像を把握することで、「この処理はあのあたりにあるはず」という仮説を立てながら読めるようになります。いきなり個別のファイルを読み始めると、木を見て森を見失いがちです。
2. 設計書とソースコードが本当に一致しているか検証する
これが個人的に最も重要視していることのひとつです。
SESや受託開発の現場では、設計書(仕様書)とソースコードが乖離しているケースが頻繁にあります。以下のような状況がよく起こります。
- 仕様変更があったがドキュメントが更新されていない
- 実装中に設計を変更したが、設計書に反映されなかった
- そもそも設計書が初期バージョンのまま放置されている
乖離を放置すると、新規参入者や将来の自分が設計書を信じて実装し、バグを埋め込むリスクがあります。
解析の段階で乖離を発見したら、まず「意図的な変更なのか、更新漏れなのか」を確認します。その上で、
- 更新漏れであれば:ドキュメントを修正するか、チームに報告して対処を促す
- 意図的な変更であれば:その背景をヒアリングして理解を深める
という動き方をします。乖離の発見を黙って抱え込まず、チームへの報告と合意形成をセットで動くことが重要です。
3. 動かしてみる
動かしてみることも重視しています。
実際に動作させると、以下のことがわかります。
- 何が画面に表示されるか・APIが何を返すか(= 実際の仕様)
- エラーログや警告(= 潜在的な問題)
- ローカル環境で動かない箇所(= ドキュメントとの乖離)
「動いているコード」こそが最も信頼できるドキュメントです。README が古くて手順通りに動かない、というのはよくある話で、そこ自体が重要な情報になります。
4. 変更履歴・コミットログを読む
git log やプルリクエストの履歴は、コードの「文脈」を理解するための貴重な資料です。
コミットログから読み取れること:
- なぜそのような実装になっているのか(設計の意図)
- いつ、どんな経緯でその処理が追加されたか
- 特定の箇所に集中した修正履歴(= バグが出やすい箇所のヒント)
「なぜこんな複雑な処理が?」と思ったコードが、コミットログを見ると「〇〇の仕様変更対応」だとわかることがよくあります。
5. テストとログから仕様を逆読みする
仕様書がない・古い場合、テストコードとログが仕様書代わりになります。
テストコードは「このメソッドはこう動くべき」という期待値の集合です。実装コードよりも読みやすいことが多く、処理の全体像を素早く把握するのに役立ちます。
テストがない場合は、実際にアプリを操作しながらログを眺めるのが有効です。どのAPIが呼ばれ、どんなデータが流れているかを追うことで、暗黙の仕様を拾い上げることができます。
面談でのベストな説明の仕方
これらを踏まえて、面談では以下の構造で答えるのが効果的だったのかなと考えました。
「重視していること」→「なぜ重視するか」→「具体的にどうやるか」
まとめ
既存プロジェクトの解析で重視すべきことを改めて整理しました。
- 俯瞰から入る:全体像を先に把握してから細部へ
- 設計書とコードの乖離を確認する:発見したらチームと共有する
- 動かす:実動作が最も信頼できるドキュメント
- コミットログを読む:コードの「文脈」を理解する
- テスト・ログから仕様を逆読みする:ドキュメントがない現場でも動ける