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

第11回エディタの[その3]─コード補完

はじめに

今回から何回かに分けてエディタ操作について説明します。エディタを効率よく使うためにもショートカットキーを覚えた方が良いです。説明するにあたり、いくつかの諸注意(というか心構え)を紹介します。

無理してショートカットキーを覚えなくても良いです

さっき言ったことと真逆なことを言ってますがデフォルトのショートカットキーは覚えなくて良いですよって意味です。

正直言ってAndroid Studioのデフォルトのショートカットキーはお世辞にもわかりやすいとは言えません。直感的とは言えないのも多く、多数のキーコンビネーションを組み合わせるため指が攣りそうになります。無理してショートカットキーを覚えるくらいなら、自分好みにカスタマイズすることをオススメします(はじめから、こんな事を言ってもいいのか?とも思いましたが、ホントの事だからしかたありません⁠⁠。

ショートカットキーのカスタマイズは「Preferences / Keymap」で行います。前に紹介したカラースキーマ同様、自分用のキーマップを作成してからカスタマイズしてください。

図1 ⁠Preferences / Keymap」設定画面
図1 「Preferences / Keymap」設定画面

キーマップもあらかじめいくつかのセットが用意してあるので、自分が慣れたエディタやIDEのキーマップを使うのも良いでしょう。分かっていると思いますが、Emacsキーマップ、Eclipseキーマップがあるからといって、完全にEmacsやEclipse相当にあるわけではあります。あくまでEmacs風、Eclipse風でしかないです。たとえば、Emacsキーマップですが、生粋のEmacs使いに受け入れられたという話を筆者は聞いたことがありません。

そのあたりを手加減した上で、プリセットしてあるキーマップの出来映えを確認してみてくださいね。

Mac版を使っている場合

Android Studioに限らず、マルチプラットフォームで動くアプリケーションとMacはショートカットキーの相性が悪いと思ってます。Mac OSがもともと持っているショートカットキーと競合するケースが多々ありますので、OS側か対象とするアプリケーション側のどちらかで折り合いをつける必要があります。

筆者が主に行っている折り合いの付け方を紹介します。好みの問題でもありますが、参考までにどうぞ。

OS側のショートカットキーをなるべく無効にする

  • 「システム環境設定 / キーボード / キーボードショートカット」でほぼ全てのショートカットキーを無効にします。
  • 特にSpotlightの「^スペース」⁠Ctrl+スペース)が大敵です。
図2 ⁠システム環境設定 / キーボード / キーボードショートカット」画面
図2 「システム環境設定 / キーボード / キーボードショートカット」画面
ファンクションキーをFnキーと組み合わせなくても使えるようにする
  • 「システム環境設定 / キーボード / キーボード」「F1、F2などのすべてのキーを標準のファンクションキーとして使用」をONにする
  • Android Studioのショートカットキーはファンクションキーを使うモノが多いです。なるべくキーコンビネーションを少なくするため、この設定を有効にします。

さらにアクセント記号や数学記号などの特殊文字にいくつかのショートカットキーが割り当てられています。この辺りについては、いずれキーカスタマイズの方法に触れたときに改めて説明します。

Linux版はよく知らないのですが、インプットメソッドの切替に「Ctrl+スペース」を使っている場合はMacと同じようにショートカットキーの競合が起きるのでは?と思っています。

この手のショートカットキーにまつわる話はWindows版がもっとも問題が少ないです。

コード補完

EclipseにしろAndroid Studioにしろ、IDEに対して何より期待するのはこのコード補完ではないでしょうか。個人的には、この機能がIDEの特徴を決定づけていると思っています。機能の優劣とは別の世界でIDEの「書き味」を決めているため、この機能が自分のフィーリングに合うかどうかでAndroid Studioを気に入るかどうかが決まるのでは?と大げさながらも思っています。

Android Studioの入力補完は多彩で、コード補完以外にも用途に応じたコマンドが提供されています。

通常のコード補完
メニューバーの「Code → Completion → Basic」
スマートなコード補完
メニューバーのode → Completion → SmartType」
キーワード展開
メニューバーの「Code → Completion → Cyclic Expand Word / Cyclic Expand Word (Backward) 」
ライブテンプレートの展開
メニューバーの「Code → Insert Live Template」
コードを囲んだライブテンプレートの展開
メニューバーの「Code → Surround with Live Template」
図4 メニューバーの「Code → Completion」の補完メニューとテンプレート展開メニュー
図4 メニューバーの「Code → Completion」の補完メニューとテンプレート展開メニュー

Eclipseのように「Ctrl+スペース」で大抵のことをしてくれるのに慣れていると、信じがたいコマンドの多さですね。これらのコード補完のコマンドを実行しなくても、携帯電話やスマートフォンの予測変換のようにタイプした文字に応じたコード補完を自動的に行います。

この自動補完の候補は曖昧といえば曖昧で、利用者が明示的に「この補完をしたい」と思った場合は、やはり前述した目的別の補完コマンドを実行したほうがストレスが少なく済みます。

おそらくVisual Studioに刺激を受けたと思われる、この自動補完はIntelliJの現行バージョン(IDEA12)から採用された機能で、まだ洗練されているとは言いがたいところがあります(もしくは筆者がそのクセを掴めないでいる⁠⁠。そもそもが「利用者がしたいことを、明確に要求せよ」という発想のIDEであるため、先ほどのコマンドを駆使した明示的なコード補完のほうが思い通りにしやすいです。

さきほどの入力補完のうちテンプレート展開以外のコード補完について説明します(テンプレート展開については次回説明します⁠⁠。

通常のコード補完(Basic補完)

いわゆる普通(?)のコード補完です。変数名やキーワード(予約語⁠⁠、メソッドなどを補完候補に出します。まだインポートしていないクラスも候補に上げます。

あと意外なところで、オーバライド(継承)できるメソッドやインプリメント(実装)しないといけないメソッドも補完候補に出てきます。当然ながらカーソルがしかるべき場所にいないと、これらは補完候補には出てきません。

図5 継承できる/実装するメソッドもBasic補完の候補に出てくる
図5 継承できる/実装するメソッドもBasic補完の候補に出てくる

同様のことはEclipseの補完(Ctrl+スペース)でもできますね。見た感じではEclipseのほうが必要な候補が絞り込まれている分、該当メソッドを探しやすそうです図6⁠。

図6 Eclipseのコード補完でも「継承できる/実装するメソッド」が候補に出てくる
図6 Eclipseのコード補完でも「継承できる/実装するメソッド」が候補に出てくる

Eclipseだと「Ctrl+スペース」でgetter/setterも作成できますが、Android Studioではできません。つい最近、IntelliJの次期バージョンにこの機能が実装されたので、Android Studioでもそのうちできるようになると思います(参考:IDEA-105093 Eclipse-way getter/setter completion⁠。

スマートなコード補完(Smart補完)

スマート(賢い)補完を行います。なにがどう賢いのかというと、文脈に依存して適切な候補を絞り込みます。要するに期待する型を返すものだけに候補を絞り込んで補完を行います。個人的にはBasic補完よりよく使います。

たとえば、リスト1のようなコード片があったとします。

リスト1 サンプルコード
List<String> list = new ArrayList<String>();

これをどうタイプしていくかで、その人のクセやIDEの書き味が垣間見られますが、先頭から正直にタイプしていくのがAndroid Studioに向いていると筆者は思ってます。実際に試してみたのが図7になります。newのあとでSmart補完を行っています。

図7 Smart補完の例(クリックすると動きがわかります)

Smart補完は左辺が期待する型List<String>のみを補完候補にあげます。Java言語が強い型付き言語で、最初に型宣言を行ったり、左辺の求める型を右辺に設定するのに合わせて用意された補完タイプです。

Smart補完はとても便利なのですが、いかんせん割り当てられたショートカットキー(Ctrl+SHIFT+スペース)がイケてないです。かなり頻繁に使うの機能が3つキーを同時押ししなければならないというのがガマンならず、筆者は「SHIFT+スペース」に設定変更して長年使っています。

キーワード展開

Eclipseでいう「単語補完」です。現在のテキストに含まれる「語(キーワード⁠⁠」を展開する、テキストエディタでもよく見かけるアレです。

キーワードをカーソル位置から前方向(文頭に向かっていく)に探していく "Cyclic Expand Word" と、逆に後方向(文末に向かっていく)に探しに行く "Cyclic Expand Word (Backward)"の2つがあります。

オマケ的な機能ですがテキストファイルなどAndroid Studioが得意としないファイルの編集でも使えるので、普段使っているテキストエディタと同じショートカットキーにしておくと重宝します。残念なことに、日本語混じり文をひとつの単語とみなすため、時折図10のようなことになります。

図10 キーワードに日本語が近接していると、それごとひとつの単語と認識する(クリックすると動きがわかります)
それごとひとつの単語と認識する` &title=`図10 キーワードに日本語が近接していると、それごとひとつの単語と認識する` &width=`400` />

コード補完のデフォルト動作

自動補完も含め、コード補完の動作は「Preferences / Editor / Code Completion」で細かく設定できます。デフォルトの動作が気持ち悪い場合など、このあたりを調整して手に馴染む動作にしてみましょう。

図11 ⁠Preferences / Editor / Code Completion」設定画面
図11 「Preferences / Editor / Code Completion」設定画面
Case sensitive completion
  • コード補完の候補を大文字・小文字を区別するかどうかを指定します。
  • 選択肢は「First lettar(最初の文字で決める⁠⁠All(常に大文字・小文字を区別する⁠⁠None(大文字・小文字を区別しない⁠⁠」の3つです。
Auto-insert when only one choise on
  • 補完候補がひとつしかない場合、自動的にその候補を確定するかどうかを指定します。
  • コード補完のタイプ(Basic補完/Smart補完)ごとに指定できます。
Sort lookup items lexicographically
  • ONにすると補完候補を辞書順にソートして表示します。
  • OFFだと関連するエントリごとに並び替えます(これをONにして得することはそうないと思います⁠⁠。
  • 補完候補のリストをよーく見ると右端に「π」とか「A」のアイコンがあり、ここをクリックすることでも切り替え可能です。
図12 補完候補の並び順を変える
図12 補完候補の並び順を変える
Autopopup code completion
  • 自動補完を有効にします。
  • 自動補完が鬱陶しい場合は、ここをOFFにするとよいです。
Insert selected variant by typing dot, space, etc.
自動補完の候補が出ている最中にドッド(.⁠⁠、スペース、タブなどを入力すると、その文字の代わりに補完候補を確定します。これをONにすると、だいぶ鬱陶しいです。なんのために用意したオプションなんでしょう……。
Autopopup documentation in (ms)
  • 選択した候補の「Quick Documentation」ポップアップが表示されるまでの待ち時間(ミリ秒)を指定します。
  • これをOFFにすると"Quick Documentation"コマンドを実行しない限り「Quick Documentation」ポップアップは表示されません。

次はコード補完とは直接の関係はありませんが、おなじ設定画面にあるので説明しておきます。

Parameter Info
Autopopup in (ms)
メソッドのパラメータ情報をポップアップするまでの待ち時間(ミリ秒)を指定します。ここをOFFにすると"Parameter Info"コマンドを実行しない限り、パラメータ情報は表示されません。
Show full signatures
パラメータ情報に戻り値を含めた完全な情報を表示するかどうかを指定します。
図13 "Parameter Info"の表示の違い
図13 

補完候補リストについて

先ほどのSort lookup items lexicographicallyのように補完候補リストもいろいろな操作を受け付けます。

たとえば、現在表示されている補完候補のコントラストで、それが自動補完によるものなのか、Basic補完/Smart補完といった明示的な補完によるものなのか見分けることができます。図14 のように比べてみるとわかりますが、自動補完と明示的補完では補完候補の濃淡が違います。

図14 自動補完と明示的補完の補完リストの違い
図14 自動補完と明示的補完の補完リストの違い

それと、補完候補リストの真下にメッセージが表示されています。よく読むと稀に役に立つ(立たない?)ことが書いてあるので、たまには意識を向けてみると得することがあるかもしれません。⁠≫」をクリックするとメッセージが切り替わります。

図15 補完候補リストにひっそり出ているヘルプメッセージ(クリックすると動きがわかります)

どちらも正直、だからどうってことは無いんですが、へぇーとでも思っていただければ幸いです。

補完候補の絞り込み

補完候補は入力文字をタイプしていくほどに絞り込まれていきます。JetBrainsが公開しているドキュメント:Code Completion - IntelliJ IDEA Quick Start(翻訳はこちら⁠」に中間マッチングの説明がありますが、Android Studioも補完候補の絞り込みも対象の先頭からタイプする必要はありません。

図16 中間マッチングの例
図16 中間マッチングの例
rayとタイプすれば、ArrayListがマッチする。

ただ、この中間マッチング、結構なクセがありまして、ある程度使い込まないと望み通りの絞り込みはできないと思います(少なくとも筆者がそうです⁠⁠。筆者のオススメはキャメルケースの頭文字を利用した絞り込みです。

図17 キャメルケースマッチングの例
図17 キャメルケースマッチングの例

補完候補の絞り込みとはちょっと違う話なのですが、スタティックメソッドや定数はクラス名を記述せず、スタティックメソッド名をタイプしてBasic補完を実行すると、クラス名が展開された候補リストが表示されます。

図18 スタティックメソッドや定数のマッチングの例
図18 スタティックメソッドや定数のマッチングの例
asとタイプしてBasic補完を実行すると、それに該当するスタティックメソッドや定数が候補に出てくる。

こちらも知っていると、多少キータイプ量を減らせますので、頭の片隅にでも置いておいてください。

今回のまとめ

「Ctrl+スペース」で事が足りてたEclipseと異なり、2種類の補完を用途に応じて使い分けなければならず「ちっ、面倒臭いなぁ」と思われた方も少なくないと思います。こうして文書にすると書いた本人も「Android Studioのどこが便利なんだろ?」と筆が止まることもしばしばありました。それでも、こうゆう特徴を知った上で、コード補完を使いこなすと「サイコミュでも搭載してるのか!?」と錯覚するほどピタっとしたコード補完をするようになります。脳汁があふれる瞬間ですね。

騙されたと思って、この2つのコード補完(Basic補完/Smart補完)を使ってみてください。使い分けのコツは、次のとおりです。

何にも無いところで入力をはじめる場合は、Basic補完
  • 自動補完でかってに候補がでるのであまり気にする必要はありません。
  • Java以外のファイルを編集中は、Basic補完だけで良いです。
ある程度入力してから補完する場合は、Smart補完
  • 代入式の右辺やメソッドの引数など「型」で縛って補完候補を絞り込みます。
  • Javaファイルを編集中にのみ効力を発揮します。

あと「まさか、こんなところで補完は効かないよね」と思えるところでも補完候補がでる場合があるので「ここで候補でないかなぁ」と思うところでは、とりあえずBasic補完を試してみると良いと思います。

おすすめ記事

記事・ニュース一覧