1. 「ジャンプ」と「戻る」をセットで覚える
コードの海で迷子にならないための基本中の基本です。
• 定義へ移動 (F3):
変数やメソッドの上で押すと、その定義元へジャンプします(Ctrl + クリック でも可)。
• 前の場所に戻る (Alt + ←):
これこそが最重要です。 ジャンプして中身を確認した後、即座に元の思考場所に戻れます。ブラウザの「戻る」ボタンと同じ感覚で使いましょう。
2. 「どこで使われているか」を瞬時に把握する
そのメソッドや変数の影響範囲を知るための機能です。
• 呼び出し階層を表示 (Ctrl + Alt + H):
選択したメソッドが「どのメソッドから呼ばれているか」をツリー形式で表示します。逆引きで全体の流れを追うのに最強のツールです。
• 参照検索 (Ctrl + Shift + G):
ワークスペース全体から、その変数が使われている箇所を一覧表示します。
3. クラスの構造を「俯瞰」する
数千行あるクラスを上から下まで読むのは非効率です。
• クイック・アウトライン (Ctrl + O):
開いているファイルのメソッド一覧をポップアップ表示します。
• もう一度 Ctrl + O を押すと、継承元の親クラスのメソッドまで含めて表示されます。
• そのまま文字を打てばフィルタリング(検索)できるので、目的のメソッドへ一瞬で飛べます。
• 型階層の表示 (F4):
そのクラスがどのクラスを継承し、どのインターフェースを実装しているかを可視化します。オブジェクト指向の設計を理解するのに必須です。
さらにリーディングを加速させる小技
• 型を開く (Ctrl + Shift + T):
ファイル名(クラス名)がわかっていれば、プロジェクトツリーから探す必要はありません。
• リソースを開く (Ctrl + Shift + R):
XMLやプロパティファイルなど、Java以外のファイルを探す時に。
• 画面分割:
エディタのタブをドラッグして端に持っていくと画面を割れます。「呼び出し元」と「呼び出し先」を並べて読むと理解が捗ります。
大規模なコードを読むときは、Eclipseの 「ブレークポイント」ビュー や 「タスク・タグ(TODO)」 をメモ代わりに使うのもアリです。
気になったところに // TODO ここから調査 と書いておけば、後で一覧から戻ってこれますよ。
Java固有
1. 抽象と実体を見分ける(インターフェース)
Javaのコードを読んでいると、F3(定義へ移動)を押しても「インターフェース(中身がない宣言)」に飛んでしまい、実際の処理がどこにあるか分からないことがよくあります。
• 実装クラスへジャンプ (Ctrl + T):
メソッド名の上で Ctrl + T を押すと、そのインターフェースを実際に実装しているクラス(実体)がリストアップされます。そのまま選択すれば、本当のロジックへ飛べます。
• なぜ重要か: Javaは「インターフェースに対してプログラミングする」文化が強いため、このテクニックを知らないと「中身がない!」とパニックになります。
2. アノテーション(@)の役割を特定する
最近のJava(Spring Bootなど)は、コードそのものよりも @(アノテーション)が魔法のように処理を動かしていることが多いです。
• @Override: 親クラスの何を書き換えているのか、親のメソッドも併せて読みましょう。
• @Autowired / @Inject: インスタンスがどこから注入されているかを探します。Eclipseの「型階層」が役立ちます。
• @Transactional: そのメソッドが「失敗したら巻き戻る」範囲であることを示します。エラーハンドリングを読む際の鍵になります。
3. Java 8以降の「Stream API / Lambda」の読み方
古いJavaに慣れていると、Stream API(stream().filter().map().collect())は一気に難解に見えます。
• コツ: ドット(.)ごとに改行して読むイメージを持ちましょう。
• filter:データの絞り込み(何を除外しているか?)
• map:データの変換(型が何に変わったか?)
• デバッグの裏技: Eclipseの最新版に近いものであれば、Streamの途中にブレークポイントを置いて 「Trace Current Stream Chain」 ボタンを押すと、データがどう変化していくか視覚的に確認できます。
4. 継承関係を可視化する
Javaの「多態性(ポリモーフィズム)」を理解するには、クラス図的な視点が必要です。
• 型階層(Type Hierarchy)を活用:
• クラス名を選択して F4 を押すと、そのクラスの「先祖」と「子孫」が一覧できます。
• 「あぁ、これは ArrayList だけど、結局 List として扱われているんだな」といった立ち位置が分かると、コードの意図が見えてきます。
5. ライブラリの中身まで追いかける
自分の書いたコードだけでなく、JDK標準ライブラリや外部ライブラリ(Maven/Gradle経由)のソースも読みましょう。
• Source Attachment:
String や List の中身を F3 で見ようとした時に「Source not found」と出たら、設定からソースを紐付けましょう(最近のEclipseならMaven等の設定で自動で落としてくれます)。
• 一流への近道: 「Java標準の書き方」こそが、最も美しく効率的な手本であることが多いです。
まとめ:Javaリーディングの黄金順序
1. パッケージ構成を見る: フォルダ分けから「関心の分離」を理解する。
2. インターフェースを読む: その機能が「何をするものか」の外枠を掴む。
3. JUnit(テストコード)を読む: これが実は一番の近道です。 どう使われるべきか(期待値は何か)が最短で分かります。
Eclipseの機能を使いこなしつつ、「実体(実装)はどこか?」を常に意識する
部分的にデバッグして理解する
1. JUnit(単体テスト)の「テストメソッド単体実行」
これが最も標準的で、かつ「途中から始めて途中で終わる」のに適した方法です。
• やり方:
1. テストしたいメソッドを含むテストクラスを作成します。
2. @Test アノテーションをつけたメソッド内で、テストしたい処理の直前の状態(引数やインスタンス)をセットアップします。
3. Eclipseの「アウトライン」ビューやエディタ上で、そのテストメソッド名だけを右クリック > [デバッグ] > [JUnitテスト] を選択します。
• 「途中で終わる」方法:
• JUnitはメソッドが終われば自動的に停止します。
• 確認したい箇所の直後に return; を書くか、単にそこに ブレークポイント を置いて、確認が終わったら実行を強制終了(赤い停止ボタン)すればOKです。
Eclipseの自動生成ウィザードを使えば手早くいける
これが最も「ブートストラップ的」な方法です。
1. 対象を選択:
テストしたいJavaクラス(例:Calculator.java)をパッケージ・エクスプローラーで右クリック。
2. 新規作成:
[新規 (New)] > [JUnit テスト・ケース (JUnit Test Case)] を選択。
3. 設定:
• JUnit Jupiter(JUnit 5)が選択されていることを確認。
• 「セットアップ・メソッドを作成 (@BeforeEach)」などの必要なチェックボックスを入れる。
4. メソッドの選択 (重要):
[次へ (Next)] を押すと、テスト対象クラスにあるメソッド一覧が表示されます。テストしたいメソッドにチェックを入れると、そのメソッド用のスタブ(空のテストメソッド)が自動生成されます。
自動生成する際、ソースコードと同じフォルダにテストを置くと管理が煩雑になります。現場で使われる「ブートストラップ」の構成は以下の通りです。
• src/main/java: 本番コード
• src/test/java: テストコード(パッケージ名は本番と同じにする)
Eclipseのウィザードで「ソース・フォルダー」を src/test/java に指定するだけで、この綺麗な構成に自動配置してくれます。
まずは 右クリック > 新規 > JUnit テスト・ケース から試す