Android Studio最速入門~効率的にコーディングするための使い方

第18回 エディタの話[その10]─ 続・いろいろなナビゲーション+検索

この記事を読むのに必要な時間:およそ 7 分

使用箇所の検索

無理矢理Eclipseの機能に当てはめると「検索 → 参照,宣言,実装,読み取りアクセス,読み込みアクセス」に相当します。

図20 ⁠使用箇所の検索」系メニュー

図20 「使用箇所の検索」系メニュー

通常の検索と異なり,Java言語の文脈を意識して検索を行います。たとえばfooという検索キーワードを単なるテキストとして扱わず,ローカル変数なのかメソッドなのかを意識して,その使用箇所を検索します。この使用箇所の検索は,大変便利なのですが,いつものように似たようなコマンドがたくさんあるため使いこなすまで慣れが必要です。

メニューバーの順序とは異なりますが,筆者が便利だと思っている順にコマンドの説明を行います。どのコマンドにも共通していますが「使用箇所の検索」では,カーソルが当たっているテキストが検索対象になります。

「Edit → Find → Highlight Usages in File」
カーソル下にあるキーワードの出現箇所をハイライト表示します。今,編集しているファイルだけが検索対象です。Eclipseの「検索 → ファイル内での出現箇所」に相当します。
検索対象が予約語やコメント内のテキスト,文字列リテラルの場合,"Find Word at Caret"と同じ扱いとなります。ハイライト間の移動は"Find Next","Find Previous"で行い,ESCキーでハイライト表示をキャンセルします。
便利な機能ですが,普通に使っているだけでもカーソル下にあるキーワードの使用箇所が自動的にハイライト表示されるので,画面内に収まる程度のコード量のであれば見ただけで使用箇所を把握することができます(ただし,使用箇所へジャンプすることはできません)⁠

図21 "Highlight Usage in File"と通常のハイライト表示

図21 

このコードの自動ハイライト表示は「Preferences / Editor」「Highlight usages of element at caret」でON/OFFを設定できます。
「Edit → Find → Show Usages」
カーソル下にあるキーワードの使用箇所をポップアップ表示します。プロジェクト全体が検索対象になります(正しくは後述する"Find Usages Settings..."の設定に依存します)⁠

図22 "Show Usages"の例

図22 

このポップアップのツールバーにある「Open Find Usages Toolwindow」から次に紹介する"Find Usages"に移行することができるため,ショートカットキーを覚えるなら断然こちらをオススメします。
なお,このポップアップ中でも "Quick Definition" や "Quick Documentation" が利用できます。
「Edit → Find → Find Usages」
カーソル下にあるキーワードの出現箇所を検索し,その結果を「Findツールウィンドウ」に表示します。検索対象は先ほど説明した"Show Usages"と同じです。
検索結果が「Findツールウィンドウ」に表示されているため,出現箇所の移動は"Find Next","Find Previous"ではなく,"Next Occurrence"と"Previous Occurrence"になる点に注意して下さい。
"Find Usages"で検索した場合,⁠Findツールウィンドウ」のツールウィンドウ右列のアイコンが若干増えます。増えた分のアイコンの意味は表2の通りです("Show Usages"のポップアップウィンドウに出ているアイコンも同様です)⁠

図23 "Find Usage"で増えたツールバーアイコン

図23 

表2 "Find Usage"で増えたツールバーアイコンの意味

No.意味
(1)検索結果の種別に応じてカテゴリ分けします。カテゴリは英語表記ですが,検索結果を把握しやすいので,ONにすることをオススメします。
(2)検索対象が読み出しアクセスしている箇所を表示します。
(3)検索対象が書き込みアクセスしている箇所を表示します。
(4)検索対象がimport文で宣言されている箇所を表示します。
「Edit → Find → Find Usages in File」
"Find Usages"を現在編集中のファイルに限定したコマンドです。"Highlight Usages in File"があるため,このコマンドの存在意義はほとんど無いと言って良いでしょう("Highlight ~"が登場するまでは意義がありましたよ)⁠
⁠元になったIntelliJでは)昔からあったコマンドのため比較的覚えやすいショートカットキーが割り当てられています。正直もったいないので,そのショートカットキーを奪い取って"Highlight Usages in File"あたりに割り当て直した方が幸せになれます。

「機能は似てるけど,振る舞いがちょっと違うコマンドをたくさん用意する」というのは,Android Studioの親切心で行っているようです。その辺りのポリシーが分かってくると,数多くのコマンドもすんなり腑に落ちるのですが,多くの場合は初心者を混乱させるだけな気もしています……。

"Show Usages"と"Find Usages"の検索範囲は「Edit → Find → Find Usages Settings...」で設定します。

このコマンド,正しくは「オプション付きで "Find Usages" を実行する」なので,カーソル下にあるキーワードが検索可能なテキストであること,かつそのテキストの文脈(クラスなのかメソッドなのか,など)によってダイアログのオプションが多少増減します。"Show Usages"からSettingsアイコンを押した場合も同様です。

図24 ⁠Find Usages」ダイアログ

図24 「Find Usages」ダイアログ

このコマンドの利点に,カーソル下にあるキーワードがどの文脈(コンテキスト)として評価されるかがダイアログに表示されます。馴れない内は,自分が指定したカーソル位置のキーワードがどう評価されるか把握するのに使ってみるのも良い練習になるかと思います。

「Find Usagesダイアログ」「Find」オプションは,コンテキストによって変動します。

パッケージで検索
package文やimport文などパッケージを示しているコンテキスト上でコマンドを実行します。検索するパッケージによっては,多量の結果が出力されます。
Usages」⁠そのパッケージの使用箇所を検索します。大抵はそのパッケージのimport文しかヒットしません。
*「Usages of classes and interfaces」⁠そのパッケージに含まれているクラスやインターフェイスの使用箇所を検索します。
クラスやインターフェイスで検索
宣言している箇所,使用している箇所などクラスやインターフェイスを示しているコンテキスト上でコマンドを実行します。
Usages」⁠そのクラスやインターフェイスの使用箇所を検索します。どうも,このオプションが他の「Usages ?」系のオプションのすべてを兼ねるワケではないようです。
Usages of methods」⁠そのクラスやインターフェイスのメソッドの使用箇所を検索します。
Usages of fields」⁠そのクラスのフィールドの使用箇所を検索します。
Implementiong classes」⁠そのクラスやインターフェイスの実装箇所を検索します。
Derived classesDerived interfaces」⁠そのクラスやインターフェイスの派生クラスを検索します。
メソッドで検索
Usages」⁠そのメソッドの使用箇所を検索します。
Overriding methods」⁠そのメソッドをオーバーライドした箇所を検索します。
Implementing methods」⁠そのメソッドを実装した箇所を検索します。
フィールド,メンバ変数,引数パラメタ,ローカル変数で検索
このタイプの検索では「Find」オプションはありません。
(おまけ)例外のスロー宣言で検索
偶然見つけたのですが,thorws宣言,throw文上でコマンドを実行すると図25のようなダイアログが表示されます。

図25 例外の使用箇所の検索

図25 例外の使用箇所の検索

「Usages」とあるのですが,実行してみても何も検索されませんでした。
例外クラスの使用箇所は,例外クラスに対してクラス検索をかければ済む話なのですが,何か意図があって,このコンテキストを用意したのでしょうか……。

「Options」にある「Search for text occurrences」ですが,ここをONにすると,検索対象をJavaのソースコードだけではなく,プロジェクトが管理しているすべてのファイルに対して検索をかけます。Javaのソースコード以外の場合は,ほぼテキスト検索と同等の扱いとなりますが,極力,検索対象のコンテキストに近い文字列を検索しようと試みます。

それと,この「使用箇所の検索」はJavaに限らず,XMLファイルでも有効です。一応,XMLタグや属性,属性の値などのコンテキストを把握して使用箇所を検索しますが,試した限りでは,それほど使い道がある感じはしませんでした。

次回の予告

ナビゲーションの話がもう少しだけ続きます。

[おまけ]ファイル名で検索

メニューバーの「Edit → Find」の検索メニューにありそうで無いのが「ファイル名で検索」です。意外と用途が無いのか,筆者自身この記事を書いていて,その方法が無いことに気がついたくらいです。

「ファイル名で検索」に近いことは「Navigate → Class / File」でできたので,その方法を紹介します。前回紹介したとおり,このコマンドを実行すると図26のように検索候補が表示されます。

図26 ⁠Navigate → Class」でクラスを絞り込む

図26 「Navigate → Class」でクラスを絞り込む

この検索用ポップアップにある「Shouw All in View」アイコンを押すと,今まで入力していた条件に合致するファイルの一覧が「Findツールウィンドウ」に表示されます。

図27 ⁠Navigate → Class」でクラスを絞り込んだ結果を「Findツールウィンドウ」に表示する

図27 「Navigate → Class」でクラスを絞り込んだ結果を「Findツールウィンドウ」に表示する

結果的に,これが「ファイル名の検索」に相当するのですが,Navigate系の検索条件はとても曖昧なため「先頭が○○で始まるファイル名」とか「10文字固定で後ろ4桁が数字」などのような細かな検索条件は指定できません。

もう少し細やかな検索条件を指定して絞り込みたい場合は,第8回で軽く紹介した「Scopes」を用いるしか手立てはありません。ただ「Scopes」は検索というよりはフィルターなので「ちょっと調べたい」といった一時的な用途に使うには設定などが面倒です。

なので『Android Studioは「ファイル名で検索」機能は無いが,他の機能で似たようなことはできる』程度と覚えておいてください。

著者プロフィール

今井勝信(いまいまさのぶ)

システムエンジニア。日本ユニシス株式会社所属。仙台在住。

Android開発はまったくやったことがないけれどIntelliJ IDEAが大好き。

Twitter: @masanobuimai

コメント

コメントの記入