82
78

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

TISAdvent Calendar 2017

Day 9

EclipseでJavaソースコードを読む技術

Posted at

はじめに

プロジェクト内の他のメンバーが書いたソースコードを読んだり、利用しているフレームワークの調査のためソースコードを読んだり、色々な場面でソースコードを読む機会があります。

そういったときになるべく素早く読み進めるためにはIDEの機能を利用したり、当たりをつけるセンスを高めたり、キーボード操作が速くなるよう訓練したり、いくつかのアプローチが考えられます。

本稿ではそれらのアプローチの中からIDEの機能を利用することにフォーカスして、言語はJava・IDEはEclipseを使った場合にソースコードを読むのに役立つ機能を紹介します。

EclipseでJavaのソースコードを読む

分かりやすさのため、いつくかスクリーンショットを掲載していますが、そこに写っているソースコードはDomaというデータベースアクセスライブラリのものです。(完全に私の趣味です)

また、私の体はEclipseに呪われているのでEclipseの機能について書きますが、他のIDEでも似たようなものはあると思います。ですので、他のIDEをお使いの方は「このIDEならこうすればいいよ」という記事を書いて貰えると嬉しいです。

定義へジャンプ

まずは基本的なところから。ソースコードを読んでいてメソッド呼び出しをしているコードからそのメソッドを定義している箇所へジャンプしたいときは、メソッド呼び出しをしているコードにカーソルを当ててF3を押します。

  1. カーソルを当てて
    スクリーンショット 2017-12-09 12.18.29.png
  2. F3を押す
    スクリーンショット 2017-12-09 12.18.45.png

特定の処理を頭から読んでいくとメソッド定義へジャンプすることがとても多いのでよく使う機能だと思います。

インターフェースの実装クラスのメソッド定義へジャンプ

F3でメソッド定義へジャンプすると、その先がインターフェースで実装がない場合があります。

  1. F3でメソッドの定義へジャンプすると……
    スクリーンショット 2017-12-09 13.20.31.png
  2. インターフェースで実装がない!
    スクリーンショット 2017-12-09 13.20.41.png

そういった場合はメソッド呼び出しコードにカーソルを当ててCommand + Tを押します。すると、そのメソッドを実装しているクラスの一覧が表示されるので、これだ!と思うクラスを選択してメソッドの定義へジャンプします。

  1. メソッド呼び出しコードにカーソルを当てて
    スクリーンショット 2017-12-09 13.20.31.png
  2. Command + Tを押す
    スクリーンショット 2017-12-09 13.21.11.png
  3. 実装クラスを選択するとメソッド定義にジャンプできる
    スクリーンショット 2017-12-09 13.21.19.png

この例では1つのクラスしか表示されていませんが、場合によっては多くの実装クラスが表示されます。その中から、これだ!と思えるクラスを選択するのは知識やセンスが必要になりますが、それらを鍛えるのはまた別の話なので省略します。

メソッドの呼び出し箇所を検索する

仕様変更の影響調査などで、あるメソッドがどこから呼ばれているのか知りたい、といったことがあると思います。その場合、調査対象のメソッド定義にカーソルを当ててControl + alt + Hを押します。すると、そのメソッドを呼び出している箇所の一覧が表示されます。

スクリーンショット 2017-12-09 13.23.49.png

呼び出し箇所の一覧の各項目の左にある三角のマークを押すと、さらにそのメソッドの呼び出し箇所が一覧表示されます。

スクリーンショット 2017-12-09 14.23.40.png

そうやってどんどん呼び出し階層を遡って行けます。

クラスの参照箇所を検索する

クラスにカーソルを当ててCommand + Shift + Gを押します。すると、そのクラスを参照している箇所が一覧表示されます。

スクリーンショット 2017-12-09 14.30.19.png

フィールドとしてそのクラスを参照している場合はフィールド名が、引数・ローカル変数として参照している場合はコンストラクタ名やメソッド名が検索結果に表示されます。

この機能は、私はSpring Bootなど、それなりの大きさのフレームワークを読む時に必要になりました。

他によく使う検索機能

これら以外でよく使うのは型の検索とリソースの検索です。

  • Command + Shift + Tで型の検索(JARの中まで検索してくれる)
  • Command + Shift + Rでリソースの検索(JARの中までは検索してくれない)

私の場合、これらはソースコードを読んでいる途中よりは、ソースコードを書いているときによく使っているように思います。

Eclipse以外のツール

Eclipse以外にもソースコードを読むのに役立てているツールはあります。ここではおまけ程度に簡単な紹介に留めます。

Git

git grepgit ls-filesをよく使います。git grepでは-iオプションや--name-onlyオプションを併用することも多いです。

Spring Frameworkなど、検索のためにEclipseにインポートするには大きいプロジェクトはgit grepすることが多いです。

unite.vim

unite.vimはファイルやバッファなど、様々なものをデータソースとして検索ができるVimプラグインです。ものすごく便利なのですが、会社のPCで動かなくてちょっと困っています。なんとかせねば……

ちなみにunite.vimはメンテナンスモードに入っており、後継はdenite.nvimだそうです。乗り換えねば……

おわりに

JavaとEclipseを題材にしてソースコードを読むのに役立つ機能を紹介しましたがいかがでしたか? 先に述べたように他のIDEでも似たような機能(あるいはもっと便利な機能)はあると思いますので、お使いのIDEのマニュアルを調べたり回りの識者に質問してみてください。

今回は具体的にEclipseの機能を書きましたが、ソースコードを読むということに対するマインドな部分や、ソースコードを素早く読むためにできる他のアプローチについても別の機会に発表できたらいいなと思っています。

それではみなさん、良いソースコードリーディングライフを!

82
78
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
82
78

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?