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

第12回 エディタの話[その4]─テンプレート展開

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

定型コードの作成

コンストラクタの生成,getter/setterの生成といったお決まりのコード生成のことです。Android Studioではメニューバーの「Code → Generate...」で行います。

割り当てられているショートカットキーは「File → New...」と同じです。⁠Projectツールウィンドウ」「ナビゲーションバー」上で,そのショートカットキーを実行すると「File → New...」と解釈し,エディタ上で実行すると「Code → Generate...」と解釈します。

「Code → Generate...」で表示されるポップアップは開いているファイルの拡張子に依存します。

図17 ⁠Generate」ポップアップ(Javaの例)

図17 「Generate」ポップアップ(Javaの例)

カーソル位置には依存しません(厳密にはちょっとだけ依存してます)⁠たとえば,Javaのメソッドボディにカーソルがある状態でコンストラクタ生成を実行すると,カーソル近辺の適切な場所にコンストラクタを生成します。

一番選択肢の多いJavaの内容を表2にまとめました。

表2 Javaファイル上でのGenerateメニューの一覧

選択肢意味
Constructorコンストラクタの生成
Gettergetterメソッドの生成
Settersetterメソッドの生成
Getter and Settergetter/setterメソッドの生成
equals() and hashCode()equals()メソッドとhashCode()メソッドの生成
Override Methods...オーバライドメソッドの生成
Delegate Methods...委譲メソッドの生成
Super Method Callsuper.メソッド名()の展開(※メソッドボディ中でのみ有効)
CopyrightCopyrightコメントの生成
toString()toString()メソッドの生成

serialVersionUIDの生成」があっても良さそうですが,これは別の機能で実現しています(後の回で説明します)⁠

どの選択肢を選んでもたいていの場合,何かしらのダイアログ(フィールド選択だったり,上位クラスのメソッド選択など)が表示され,対象を選んで「OK」ボタンを押すことで定型コードが生成されます。図18はコンストラクタ作成の例で,実際に使ってみればニュアンスが分かると思います(ダイアログで複数選択する場合は,SHIFTキーかCtrlキーを使います)⁠

図18 コンストラクタ生成時のダイアログの例

図18 コンストラクタ生成時のダイアログの例

ありそうで無いのが,この定型コードのテンプレートを編集する機能です。あっても良さそうなのですが,どういうわけか伝統的にずーっと無いままでいます。筆者はそれに慣れてしまったので,何とも思わなくなっているのですが,あらためて考えると不思議なものですね。

なお,この「Code → Generate...」は,Eclipseで言うと「ソース」メニューの一部図19の枠部分)に相当します。

図19 Eclipseの「ソース」メニューのコード生成メニュー

図19 Eclipseの「ソース」メニューのコード生成メニュー

[コラム]Copyrightについて

「Code → Generate...」の選択肢のひとつである「Copyright」ですが,これを実行すると,プロジェクトの所定のファイルにヘッダコメントを追加・更新します。

ヘッダコメントとはファイルの先頭に記述するコメントの事で,例えばオープンソースのコードでライセンス表記が記載されている部分を指します。

一見すると「そんなどうでもいい……」と思いますが,意外と高機能でコメントを付加するファイルやコメント位置,スタイルもファイルタイプごとに指定ができます(⁠Preferences / Copyright」以下の設定画面)⁠面白いところで,コメント枠の設定や枠を箱形に括るかどうかなども設定できます。

図20 ⁠Preferences / Copyright」設定画面

図20 「Preferences / Copyright」設定画面

コメント部分はVelocity風な置き換えキーワードがあります。コメントテンプレートの記述方法やCopyrightの設定の詳細についてはIntelliJのヘルプを参照してください。

参考:Copyright Profiles - IntelliJ IDEA Web Help

ファイルヘッダの更新はGenerateのポップアップからだけではなく,メニューバーの「Code → Update Copyright」からも行えます。⁠Projctツールウィンドウ」でディレクトリを指定して実行すると,そのディレクトリ配下のすべてのファイルのヘッダコメントを更新することができます。

地味な機能ですが,意外なところで役に立つときがあるので「こんな機能もあるんだな」程度に覚えておいてもらえると幸いです。

Javadocコメントの生成

最後にJavadocコメントの生成について説明します。先ほどの定型コードの生成でコンストラクタやgetter/setterメソッドを生成してもJavadocコメントが生成されることは(ほとんど)無いです。

また,Eclipseを使っていた人は,Eclipseの以下の機能に相当するものを探したと思います。

  • 「編集 → メンバーに Javadoc コメントを付加」
  • 「編集 → 既存 getter/setter メソッドの Javadoc コメントを生成」
  • 「ソース → 要素コメントの生成」

残念なことに上記のような機能はAndroid Studioにはありません。メニューバーの「Tools → Generate JavaDoc...」という紛らわしいコマンドがありますが,こちらは「⁠Javadocコメントではなく)Javadocそのものを生成する」コマンドです。

では,Android StudioでJavadocコメント生成する場合どうしたらよいかというと,Javadocコメントを書きたいメソッドやクラスの直前で/**とタイプして改行します。すると,そこにJavadocコメントのテンプレート(documentation comment stubと呼びます)が展開されます(似たような機能はEclipseにもありますね)⁠

図21 Javadocコメントスタブの展開(クリックすると動きがわかります)

便利な機能ではあるのですが,Javadocコメントを付けたい対象ひとつひとつに/**と手打ちしなければならないため,getter/setterだらけのクラスなどでは,それほど便利とは言い難いです。ものすごく好意的に解釈して「テキトーなJavadocコメントなんて許しません。ひとつひとつ丁寧に書きなさい」というメッセージなのかな?と自分を納得させています。

ちなみに,この機能は「Preferences / Editor / Smart Keys」の"Insert documentation comment stub"をOFFにすると無効になります。

この機能が有効なのは新規にJavadocコメントを作った時だけで,すでにコメントが出来ている状態でパラメタ名をリネームしたり,パラメタを増減した場合,Javadocコメントを再展開する機能はありません(ただしリファクタリングメニューから同様の操作をした場合は反映されます)⁠

最低限付けて欲しいJavadocコメントのJavadocタグや不完全なJavadocコメントなどは,別の機能(インスペクション)で検知することができます。この詳細についてはインスペクションの解説で改めて紹介します。

次回の予告

こうして機能を整理していくと,似たような機能でも設定できたりできなかったりと,違いが見えてなかなか興味深いです。長年使って馴れてしまうと,こういう細かな違いを気にしなくなりますが,新規参入組には迷惑な話だと思います。

次回はAndroid Studioの万能ナイフである"Show Intention Actions"について説明します。

著者プロフィール

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

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

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

Twitter: @masanobuimai