はじめに
プロジェクト内の他のメンバーが書いたソースコードを読んだり、利用しているフレームワークの調査のためソースコードを読んだり、色々な場面でソースコードを読む機会があります。
そういったときになるべく素早く読み進めるためにはIDEの機能を利用したり、当たりをつけるセンスを高めたり、キーボード操作が速くなるよう訓練したり、いくつかのアプローチが考えられます。
本稿ではそれらのアプローチの中からIDEの機能を利用することにフォーカスして、言語はJava・IDEはEclipseを使った場合にソースコードを読むのに役立つ機能を紹介します。
EclipseでJavaのソースコードを読む
分かりやすさのため、いつくかスクリーンショットを掲載していますが、そこに写っているソースコードはDomaというデータベースアクセスライブラリのものです。(完全に私の趣味です)
また、私の体はEclipseに呪われているのでEclipseの機能について書きますが、他のIDEでも似たようなものはあると思います。ですので、他のIDEをお使いの方は「このIDEならこうすればいいよ」という記事を書いて貰えると嬉しいです。
定義へジャンプ
まずは基本的なところから。ソースコードを読んでいてメソッド呼び出しをしているコードからそのメソッドを定義している箇所へジャンプしたいときは、メソッド呼び出しをしているコードにカーソルを当ててF3
を押します。
特定の処理を頭から読んでいくとメソッド定義へジャンプすることがとても多いのでよく使う機能だと思います。
インターフェースの実装クラスのメソッド定義へジャンプ
F3
でメソッド定義へジャンプすると、その先がインターフェースで実装がない場合があります。
そういった場合はメソッド呼び出しコードにカーソルを当ててCommand + T
を押します。すると、そのメソッドを実装しているクラスの一覧が表示されるので、これだ!と思うクラスを選択してメソッドの定義へジャンプします。
この例では1つのクラスしか表示されていませんが、場合によっては多くの実装クラスが表示されます。その中から、これだ!と思えるクラスを選択するのは知識やセンスが必要になりますが、それらを鍛えるのはまた別の話なので省略します。
メソッドの呼び出し箇所を検索する
仕様変更の影響調査などで、あるメソッドがどこから呼ばれているのか知りたい、といったことがあると思います。その場合、調査対象のメソッド定義にカーソルを当ててControl + alt + H
を押します。すると、そのメソッドを呼び出している箇所の一覧が表示されます。
呼び出し箇所の一覧の各項目の左にある三角のマークを押すと、さらにそのメソッドの呼び出し箇所が一覧表示されます。
そうやってどんどん呼び出し階層を遡って行けます。
クラスの参照箇所を検索する
クラスにカーソルを当ててCommand + Shift + G
を押します。すると、そのクラスを参照している箇所が一覧表示されます。
フィールドとしてそのクラスを参照している場合はフィールド名が、引数・ローカル変数として参照している場合はコンストラクタ名やメソッド名が検索結果に表示されます。
この機能は、私はSpring Bootなど、それなりの大きさのフレームワークを読む時に必要になりました。
他によく使う検索機能
これら以外でよく使うのは型の検索とリソースの検索です。
-
Command + Shift + T
で型の検索(JARの中まで検索してくれる) -
Command + Shift + R
でリソースの検索(JARの中までは検索してくれない)
私の場合、これらはソースコードを読んでいる途中よりは、ソースコードを書いているときによく使っているように思います。
Eclipse以外のツール
Eclipse以外にもソースコードを読むのに役立てているツールはあります。ここではおまけ程度に簡単な紹介に留めます。
Git
git grep
とgit 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の機能を書きましたが、ソースコードを読むということに対するマインドな部分や、ソースコードを素早く読むためにできる他のアプローチについても別の機会に発表できたらいいなと思っています。
それではみなさん、良いソースコードリーディングライフを!