次回の予告はじめに編集機能についてはあらかた説明を終えたので、今度は移動手段について説明します。Navigateメニューひとめぐり主な移動コマンドはメニューバーの「Navigate」に集約されています。手始めにこのメニューを上から順に説明していきます。Eclipseを使っていた人向けに補足すると「ナビゲート」メニューに相当すると思って下さい。Eclipseと類似している機能は極力、それと対比するように説明していきます。上から順に「クラスに移動」「⁠ファイルに移動」「⁠シンボルに移動」です。型を開く...」だと思います。クラス・ファイル・シンボルへ移動Eclipseと比べるとシンプルな検索ウィンドウが開きます。このウィンドウ上で文字を入力して、検索対象を絞り込んでいきます。検索対象(用途)に応じてコマンドが分かれています。使い分けは面倒かと思いますが、こういうものだと思ってあきらめて使い方を覚えましょう。Class...」Javaのクラスを検索します。classes)をONにすることで、プロジェクトのソースコード以外のクラス(ライブラリなどのクラス)を検索することができます。検索ワードは、コード補完と同じく中間マッチングが有効で、大文字・小文字はちょっとだけ意味を持ちます(大文字を続けた場合、キャメルケースの先頭文字をマッチしようと試みます⁠)⁠。ワイルドカードとしてアスタリスク(*)が有効です。検索文字は「その文字からはじまるクラス」を検索するわけでもないし、スペースもワイルドカードの一種として評価するため、アスタリスクの出番は少ないです。検索ワードの後に「スペース」を入れることで「そのワードで終わるクラス」を検索できます(実は「このワードではじまるクラス」だけを検索することができません⁠)⁠。内部クラスは普通に検索ワードで検索できますが、匿名クラスについては検索ワードの末尾に「$数字」を指定して検索できます。言え、そのクラスに匿名クラスが存在しているかどうかは移動してみないとわからないので、実用性については疑問の残る指定方法だと思います(覚えなくても損はしないでしょう⁠)⁠。File...」プロジェクト内のファイルを検索します。Class...」を包括しています。files)をONにするとプロジェクト外のファイルも検索対象となりますが、先ほどのクラスほどONにする用途は無いでしょう。検索する対象は「ファイル」だけではなく「ディレクトリ」も検索できます。Class...」と同じです。ファイル検索の場合、スラッシュ(/)で区切ることで、特定のディレクトリを絞り込むことができます。Symbol...」シンボル(Javaのクラスやメソッド、フィールドなど)を検索します。Class...」を包括しています。使い方は人それぞれだと思いますが、筆者は画面を極力広く使いたいため普段は「Projectツールウィンドウ」を閉じて使っています。そのため、目的のクラスやファイルに素早く移動するためにこのメニューを多用しています。Symbol)に分かれていますが、主に使うのはクラス検索、次いでファイル検索です。意外かも知れませんがシンボル検索は滅多に使いません。理由は簡単でシンボル名までしっかり覚えてないからです。File...」から使ってみる事をオススメします。Documentation"が使えます。これは思いのほか便利です。Definition"で候補から定義内容を参照またエディタ上で何かを選択状態にして、これらのコマンドを実行すると検索ウィンドウに、その選択内容が展開されます。Caret"と組み合わせると、まあまあ便利なのですが、対象がクラスやメソッドの場合、後述する専用の移動コマンドがあるのであまり使い道がありません。コメントやリテラル中の文字列から任意の対象へ移動する場合に使うと、そこそこ便利です(図8⁠)⁠。Keymap」にも載っていないので今まで見落としていましたが、これ以外でも「Projectツールウィンドウ」や「TODOツールウィンドウ」(⁠後ほど説明する)「⁠Findツールウィンドウ」でも有効でした。Region」って何でしょうね?と言うところから説明する必要があります。Folding⁠」⁠)⁠。この派生機能で、2種類のコメント記法で任意の領域をfoldingできます(図11と図12⁠)⁠。With...」にあります。Regionと認識されませんでした(v0.2.5で確認⁠)⁠。Region」はこの2つのコメント記法で囲んだ範囲を見つけ出すコマンドなのです。ちなみに検索対象は、現在アクティブになっているエディタのみ。Regionが存在するエディタ上で実行すると図13のような選択ダイアログが表示されます。「こんなコマンドがここにある必要が?」と思ってしまいます。置くところが無くて、とりあえず「Navigate」メニューに置いときました的なコマンドですね。それと、あまり用途もなさそうな気がします......。指定行へジャンプ」に相当します。「⁠行番号:カラム位置」か「行番号,カラム位置」の書式で、行番号のみならずカラム位置も指定できますが、滅多に使いません。File...」で、検索対象の後ろに「:<行番号>」か「,<行番号>」を付けると、指定したファイルの指定した行番号にジャンプします。Symbol...」では、たとえクラスを指定したとしても行番号付きにすることはできません。戻る・進む、最後の編集位置へ移動Webブラウザの「戻る」「⁠進む」のように、移動系のコマンドやマウスでカーソルを移動した場所に行ったり戻ったりする機能です。メニューバーの次のコマンドが相当します。Forward」ツールバーにも同機能がありますので、マウス操作に抵抗がなければ、こちらを使うほうが簡単です。戻る/進む」に相当⁠)⁠。移動履歴の残り方など細かいところに違いがあるので、Eclipseと同じつもりで使うと、違和感を感じると思います。Studioにこの機能はありません。Studioのほうは「直前に編集した位置」を辿っていきます。Bookmarks」のサブメニューからブックマークの操作ができます。Bookmarks」のサブメニューEclipseにもブックマーク機能はありますが、細かなところで多少使い勝手が異なります。エディタのガーターエリア上でマウス操作してブックマークを設定することはできません。ブックマークは、通常のものと「ニーモニック付き」の2種類あります。Bookmarks」で表示する「Bookmarksウィンドウ」のいずれかで確認できます。表示しているような感じがします。Studioから別のアプリケーションにフォーカスが移ると消えます⁠)⁠。ちなみに明示的にウィンドウを閉じるか、ブックマークにジャンプするとウィンドウは消えます。先ほどの「ニーモニック付きブックマーク」は「Ctrl+<ニーモニック>」キーでいつでもブックマークに移動できます。このショートカットキーで移動できるのはニーモニックに数字「0~9」を使ったブックマークだけです(便利というか、ありがた迷惑な機能です⁠)⁠。ただのブックマークなので、Eclipseと比べても機能的に大きな違いはありません。筆者自身もこの機能はほとんど使ったことが無いので、イマイチ便利さを測れないでいます。指定したツールウィンドウへ移動、ナビゲーションバーへ移動ある程度以上の規模のプロジェクトになると編集しているファイルが「Projectツールウィンドウ」上のどこにあるのかわからなくなります。表示」に相当します⁠)⁠。図21を見ればわかるように「Projectツールウィンドウ」のみではなく、他のツールウィンドウを開くことができます(とは言っても「Projectツールウィンドウ」以外を開く用途はそうありません⁠)⁠。Windows」と異なり、このコマンドを実行すると、指定したツールウィンドウで、コマンドを実行したときに開いていたファイルの場所を示します。Foo.javaファイルを編集中に実行すると「Projectツールウィンドウ」のFoo.javaの場所を示します。In..."のほうを多用しています。Bar」で移動します。パンくずリストで表示」で移動するので、別コマンドであることに違和感を感じないかと思います。Bar"を実行できます。その場合、「⁠ナビゲーションバー」がカーソル位置にポップアップ表示されます。ナビゲーションバーのポップアップ表示[コラム]地味に何でもできる「ナビゲーションバー」この「ナビゲーションバー」は意外と便利で、簡単なファイル操作ならここでできてしまいます。Documentation"が利用できます。New」によるファイルの作成もできます。ショートカットキーを覚えてしまえば、ファイルのリネーム、移動、コピー、削除といったファイル操作ができるので「Projectツールウィンドウ」を使わなくても特に困ることはありません。好みの問題ではありますが、筆者は「Projectツールウィンドウ」を表示したままは画面スペースの無駄と思うため、通常は閉じた状態で使っています。どちらかというと「Projectツールウィンドウ」を開きたく無いため、この「ナビゲーションバー」は大変重宝しています。ちなみに、ナビゲーションバーで開きたいファイルをSHIFT+Enterキーで決定しても何も起きませんでした。宣言部、実装などクラスの関係に基づいた移動クラス同士の関係に基づいた移動手段です。似たようなコマンドはEclipseにもあります。表1にその対比をまとめました。Eclipse側のコマンド名でおおよその機能がわかると思います。Eclipseに相当機能はありません。Eclipseに相当機能はありません(ちなみに「関連するファイルを開く」です⁠)⁠。Eclipseに無い/あるけれど振る舞いが微妙に異なる機能について補足します。Declaration」クラス、メソッドなどの「宣言部」に移動します。Eclipseとほぼ同等でこれといった差違はありません。Implementation(s)」クラスやインターフェイスの「実装部」に移動します。Studioはクラス上でも有効です。インターフェイスや抽象クラスに限らず、上位クラスから下位クラスに辿ることができます。Declaration」メソッドの「型(戻り値の型⁠)⁠」に移動します。プリミティブ型の場合は移動しません⁠)⁠。変わっている移動コマンドで、筆者はほとんど使った事がありません。Method」メソッドやクラスの「上位の宣言部」に移動します。先ほど紹介した"Implementation(s)"と同じく、クラス上でも機能します(こちらも、Eclipseはメソッドのみが対象でした⁠)⁠。Test」テストクラスに移動します。Subjet"に代わり、実行すると元のクラスに戻ります。テスト対象とテストクラスの関連付けは、割りと適当でテストクラスにテスト対象の名前が含まれていると、それをテスティングペアを見なすようです。JUnitのように、テストクラス名のパターンを指定する事はできません(そのような設定箇所がない⁠)⁠。実行してみるとわかりますが、図24のようにテスティングペアの候補がでるので、テストクラスのパターン指定が曖昧でもどうにかなるようです。Test」でテストクラスへ移動テストメソッドまで特定してビシッとジャンプするわけでは無いので、リズム良くTDDとは行かなそうです。Studioでテストクラスが使えるのか?」という話がありますが、(⁠条件付きで)作れるし動きます。機会があればいずれ説明します。「関連するファイル」に移動します。具体的には、Activityとそれに対応するレイアウトファイル(XML)間を行き来します。Javaのソースコード中で「関連ファイル」が存在する場合、図25のようにガーターエリアに関連アイコンが表示されます。「⁠関連ファイルあり」を示すガーターアイコン(Javaクラス)このアイコンが表示されている同じ行で、このコマンドを実行すると関連ファイル(レイアウトファイル)に移動します。レイアウトファイル側にも関連するファイル(Activityクラス)が表示されていますので、同様のコマンドを実行するとJavaソースコードに戻ります。「⁠関連ファイルあり」を示すガーターアイコン(レイアウトXMLファイル)ここで紹介したコマンド全般に言えることですが、プロジェクトのソースコード以外(たとえばライブラリ中のコード)でも有効です。実行することができます。Structure」です。クイック・アウトライン」相当の機能です。Structure」の例Eclipseとの機能差ほとんどありません。Classes」のオプションをチェックしないと、無名クラスがアウトライン表示されない事くらいでしょうか。Documentation"コマンドは有効で実装やJavadocのプレビューを参照することができます。ちなみに、Eclipseの「クイック型階層」に相当するコマンドはありません。Hierarchy"だけあります(詳しくは次回説明します⁠)⁠。次のコマンドについては、ツールウィンドウが関係してくるので、次回の検索とあわせて説明します。型階層を開く」に相当します。Hierarchy」Eclipseに相当する機能はありません。実装を開く」が比較的類似している機能です。呼び出し階層を開く」に相当します。第14回で説明したHectorおじさんによる指摘(インスペクション結果)にジャンプするのが、次のコマンドです。前の注釈」に相当します。only」を選択するとエラーだけが移動対象になります。only」でも指定する事ができます。Eclipseの「次の注釈」「⁠前の注釈」はツールバーのアイコンから任意の移動対象を指定します。Studioの場合、それぞれの目的に応じて使うコマンドが異なります。Studioの思想の違いが顕著に出いている部分だと思っています。Studioは、専用のコマンドを多数用意する事を良しとしている傾向があります。考え方の違いなので、一概に善し悪しは言えませんが、Eclipseに慣れた人にとって、この思想の違いは高いハードルだよなぁと思っています。英語表記でも機能はわかると思いますが、メソッドの宣言部に移動します。Eclipseの次のメニューに相当する機能です。Method"と表記してありますが、Eclipse同様、フィールドや内部クラスも移動対象になります。引き続きさまざまな移動方法について説明を続けます。次回は今回説明できなかったHierarchy系のコマンドと検索・置換について説明します。Ltd.ページ内容の全部あるいは一部を無断で利用することを禁止します⁠。個別にライセンスが設定されている記事等はそのライセンスに従います。