Android Studioのテンプレート機能で効率よくコードを書こう！

# Android Studioのテンプレート機能を活用しよう

Android Studioには2種類のテンプレート機能が存在します。

一つはFile and Code Templates、もう一つはLive Templateです。

### File and Code Templates

File and Code Templatesはファイルを作成する時にテンプレートから作成することができます。

デフォルトで用意されているものとしてはAndroifManifestやActivity、Fragmentなどのファイルがあります。

また、自分でテンプレートを作成することができるのでPrefarenceを扱うクラスや、String系のextensionなどを用意しておいたり、プロジェクトでのみの適用も可能なので、プロジェクト内での抽象化メソッドを使用するクラスなどをあらかじめ追加しておくと便利です。

追加方法はAndroidStudioのSettingsを開きEditor > File and Code template から+を押すと追加できます。
Nameはテンプレートのタイトル、Extensionには拡張子を入力します。

![スクリーンショット 2023-12-05 15.02.04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/193857/05cae4e9-2f16-a995-7642-a2d4b532861f.png)


ファイルテンプレートでは事前に定義される変数を使用してクラス名やパッケージ名などを指定できます。

以下はドキュメントから確認した定義済みの変数です。

| パラメーター         | 内容                                                   |
| -------------------- | ------------------------------------------------------ |
| ${FILE_NAME}         | 生成したファイルの名前                                 |
| ${NAME}              | ファイルやクラス、インターフェイスなどに設定される名前 |
| ${DATE}              | PCの日付                                               |
| ${YEAR}              | PC内で今何年か                                         |
| ${MONTH}             | PC内で今何月か                                         |
| ${MONTH_NAME_SHORT}  | 3文字の月名 (Jan, Feb, など)                           |
| ${MONTH_NAME_FULL}   | 月名 (January, February, など)                         |
| ${DAY}               | PCの時間で何日か                                       |
| ${DAY_NAME_SHORT}    | 3文字の曜日 (Mon, Tueなど)                             |
| ${DAY_NAME_FULL}     | 曜日名 (Monday, Tuesdayなど)                           |
| ${TIME}              | PCの時間                                               |
| ${HOUR}              | PC内で今何時か                                         |
| ${MINUTE}            | PC内で今何分か                                         |
| ${SECOND}            | PC内で今何秒か                                         |
| ${DIR_PATH}          | プロジェクトルートからの相対パス                       |
| ${PACKAGE_NAME}      | 生成したファイルのパッケージネーム                     |
| ${ORGANIZATION_NAME} | プロジェクトで設定されている組織名                     |
| ${PRODUCT_NAME}      | Name of the IDE                                        |
| ${PROJECT_NAME}      | プロジェクトの名前                                     |
| ${USER}              | PCにログインしているユーザー名                         |
| ${DS}                | \$マークのエスケープ                                   |

実際の出力結果は以下のようになります。

```kotlin
/**
${FILE_NAME}          TemplateTest                                  生成したファイルの名前
${NAME}               TemplateTest                                  ファイルやクラス、インターフェイスなどに設定される名前
${DATE}               2023/12/05                                    PCの日付
${YEAR}               2023                                          PC内で今何年か
${MONTH}              12                                            PC内で今何月か
${MONTH_NAME_SHORT}   12月                                          3文字の月名 (Jan, Feb, など)
${MONTH_NAME_FULL}    12月                                          月名 (January, February, など)
${DAY}                05                                            PCの時間で何日か
${DAY_NAME_SHORT}     火                                            曜日 (Mon, Tueなど)
${DAY_NAME_FULL}      火曜日                                         曜日名 (Monday, Tuesdayなど)
${TIME}               12:26                                         PCの時間
${HOUR}               12                                            PC内で今何時か
${MINUTE}             26                                            PC内で今何分か
${SECOND}             13                                            PC内で今何秒か
${DIR_PATH}           app/src/main/java/com/example/templatesample  プロジェクトルートからの相対パス
${PACKAGE_NAME}       com.example.templatesample                    生成したファイルのパッケージネーム
${ORGANIZATION_NAME}  test Inc                                      プロジェクトで設定されている組織名
${PRODUCT_NAME}       Android Studio                                Name of the IDE
${PROJECT_NAME}       TemplateSample                                プロジェクトの名前
${USER}               名前                                           PCにログインしているユーザー名
${DS}                 $                                             \$マークのエスケープ
 */
```

また`&{}`で任意の変数を定義することができ、その場合はファイル作成ダイアログに変数の入力欄が追加されます。ORGANIZATION_NAMEなどに該当の値がない場合なども入力欄が追加されます。

![スクリーンショット 2023-12-05 15.37.43.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/193857/63d21549-fa96-37c2-2e52-6da234febc74.png)

#### Child Template

付属して一緒に生成されるテンプレートファイルを設定できる機能です。
複数のファイルを同時に生成する時に使用します。
![スクリーンショット 2023-12-05 16.04.25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/193857/ace0e019-8067-a9f5-9a19-68feb2c06728.png)
![スクリーンショット 2023-12-05 16.05.38.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/193857/ff6add98-3652-23ba-e033-29901b49727e.png)


### Live Templates

Live Templatesは入力候補としてテンプレートを設定することができます。

デフォルトで用意されているものはFragmentのnewInstanceメソッドや、for文などが用意されています。

個人的にはAndroidのバージョンの比較などを用意してます。

任意のグループを選択し、+ボタンを押すことで新しいテンプレートの作成ができ、Abbreviationがキーワード、Descriptionが説明でTemplate Textに実際に反映するコードなどを設定します。

![スクリーンショット 2023-12-05 16.11.31.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/193857/2481e060-30c3-0047-a115-d6b5e132f0cc.png)
![スクリーンショット 2023-12-05 16.13.51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/193857/c4c4a00a-83c7-98ba-85c4-6c22684a9bc7.png)

Template Textでも任意の変数を定義でき、`$$`で囲んだ箇所はテンプレートの適用時に都度入力します。
`$code$`の部分が入力状態になった状態で生成されます。
![スクリーンショット 2023-12-05 16.14.52.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/193857/c6f6c26c-a74b-c2f2-812f-5f9b5c9e70eb.png)


忘れやすいですが必ずApplicableを必ず設定しましょう。Applicableはそのテンプレートを呼び出せる言語や場所を指定する箇所です。主にテンプレートの言語のTopLevelやstatementを指定することになると思います。

### テンプレートの共有

テンプレートのファイルはAndroid 4.1以上では以下の場所に保存されていますのでメンバーと共有することができます。反映する場合はテンプレートを該当のディレクトリに配置してAndroid Studioを再起動すると反映されます。

| テンプレートの種類      | 場所                                                         |
| ----------------------- | ------------------------------------------------------------ |
| File and Code Templates | ~/Library/Application Support/Google/AndroidStudio<バージョン>/templates |
| live templates          | ~/Library/Application Support/Google/AndroidStudio<バージョン>/fileTemplates |