Android Studioでできる、あなたが（多分）知らない（大体）10個のコト

# (About) 10 Things You (Probably) Didn’t Know You Could do in Android Studio

Google Developersのmediumにこんな投稿がありました。

- [(About) 10 Things You (Probably) Didn’t Know You Could do in Android Studio](https://medium.com/google-developers/about-10-things-you-probably-didn-t-know-you-could-do-in-android-studio-de231071b375#.q7jna2i0l)

このYouTube動画を見たのですが、あまりの早さによくわからなかったので簡単にやってみました。よく知られたものから、へぇ〜初めて知ったというものまでありました。紹介のためにソースコードがだいぶ適当なのはご容赦ください。

## Actionショートカット

もっとも重要なショートカットです。`CMD+SHIFT+A`(or `CTRL+SHIFT+A`)を押すと小さなフォームウィンドウが立ち上がります。ここにキーワードを打ち込むだけで特定のアクションやオプションを実行することができます。

![01.gif](https://qiita-image-store.s3.amazonaws.com/0/16620/caf99689-ad2c-79e8-5c72-67e5bc120c0a.gif)

上記の例では、`auto import`を検索し、自動インポート機能を`OFF -> ON`に変更することでインポートを完成させています。このON-OFFオプションは、通常設定画面から該当の項目に遷移してチェックマークをクリックするという動作が必要なのですが、このショートカットからtoggleを切り替えられるのは知りませんでした。

## 名前変更

変数名やメソッド名、クラス名などを変更する時は`SHIFT+F6`を押します。該当箇所が色のついた枠で覆われるので、編集してEnterを押すと完了です。

![02.gif](https://qiita-image-store.s3.amazonaws.com/0/16620/e23d95d6-5cf3-6028-d308-8c082e9ab297.gif)

## Search Everywhere

`SHIFT`を２回連続でポチポチっと押すと小さなフォームウィンドウが表示されます。こちらはクラスやメソッド、ファイル等の広範囲の検索ができます。下記の例ではメソッド名を検索してジャンプすることをしています。

![03.gif](https://qiita-image-store.s3.amazonaws.com/0/16620/ea61caca-64c3-7495-441b-4bcbc6b6bf06.gif)

## 書き換え（置換）

まずは下記のgifを見てもらうと分かりやすいです。例えば`setLongitude`と描かれている箇所を`setLatitude`と書きなおしたいとき、`setLongitude`の先頭にカーソルを合わせて補完（`CTRL+SPACE`もしくは入力中に表示される）で`ENTER`を押すと`setLatitude()setLongitude(...`のように挿入されてイラッとするかもしれません。実は、Enterを押すのではなくてTabを押すと書き換えを行なってくれます。ついでにこれが効くのはメソッド名だけではなく変数にも効きます。

![04.gif](https://qiita-image-store.s3.amazonaws.com/0/16620/76281d6f-8667-4dfb-144a-0395845407ae.gif)

## カーソル移動と範囲指定

矢印キーを押すと上下左右に移動できるのは当然ですが、ALTやCTRL、SHIFT、Fnキーと一緒に押すことで移動や範囲指定が楽になるかもしれません。

- `ALT+UP or DOWN`でノードごとの範囲指定（例えばメソッド名内でカーソルを合わせてやってみると、メソッドを範囲指定してくれる）
    - UPを押せば押すほどノードの拡大、DOWNで戻る
- `Fn+UP or DOWN`でページ送り
- `CTRL+UP or DOWN`で前（or 次）のメソッドorクラスの先頭へ移動
- `ALT+SHIFT+UP or DOWN`でその行を上下に移動

## Postfix Code Completion & Live Template

配列のループ処理をする際に毎回for文を書くのは骨が折れます。そういう時には、配列の変数名の後に`.for`と書いて補完（`CTRL+SPACCE`）してみてください。`for`を選択すれば下のgifのように拡張for文があっという間に作成できますし、`fori`を選択すれば、通常のfor文があっという間に作成できます。
if文でも同様で、boolean型の変数名の後に`.if`と書いて補完するとあっという間にif文が完成します。`CMD+J`を押すと利用可能なテンプレート一覧が見れますのでもっと知りたい型は是非。

![05.gif](https://qiita-image-store.s3.amazonaws.com/0/16620/7872aa45-0e89-17ac-6c34-ff6257b87366.gif)

よる複雑なコード補完のために、Live Template機能が使えます。例えば`toast`と入力すればトーストのコードが簡単に入力できますし、`logd`と入力すればログのコードを簡単に入力できます。

![06.gif](https://qiita-image-store.s3.amazonaws.com/0/16620/7e95022d-0931-fb60-eadd-167e55b6cfdd.gif)

Live Templateは自分で作成することも可能です。詳しくはググるか本家のブログを確認してみてください。

## デバッグ中にオブジェクトの中身をいい感じで確認する

ランタイムデバッグをしていて、breakpointでアプリを止めて変数の中身を確認するということをすることがあるかと思います。この際、画面下のDebugエリアに表示されるオブジェクトの隣には`.toString()`の値が表示されるようになっています。もしオブジェクトがStringやプリミティブな型であれば問題ないのですが、それ以外のほとんどの型で機能しません。ですが、実はここにはオブジェクトのメソッドや変数を使った文字列を定義して表示させることができます。

下記の例では、とあるbreakpointでLightクラスのListの中身を見たいと思います。Lightクラスは自分で作成したクラスなのでそれぞれの値の中身を見るためには展開していく必要があります。メソッドの場合は見れないかもしれません。そういう時は、`Lightオブジェクトを右クリック->View as->Create...`を押し、`When rendering a node`の`Use following expression`にチェックし、Lightクラスのメソッドを使って文字列を定義すると、Listの各オブジェクトの隣にその文字列が表示されます。

![07.gif](https://qiita-image-store.s3.amazonaws.com/0/16620/4ae47ff8-2059-c488-ac9b-f06e9674bca9.gif)

## コードパターンの検索、置換など

コードパターンを指定して、モジュール内のどこにそのパターンが存在するかを検索することができます。正規表現に頼ることなく検索することも可能です。まず検索したいパターンを範囲指定した後、Actionショートカットで`Search Structurally`を選択します。範囲指定したパターンの中で、例では任意の部分を`$dur$`のように書き直して実行すると、下部のFind部分に検索結果が表示されます。

![08.gif](https://qiita-image-store.s3.amazonaws.com/0/16620/4da51d8b-f2cf-8e4d-6108-7c8e0b443e32.gif)

また、Warningを出したりReplaceを促す、いわゆるInspectorのチェックも書くことができます。こちらは範囲指定した後のActionショートカットで、`Structurally Search Inspection`を選択します。`Structurally Search Inspection`にチェックを打った後、右下の`Options -> +`から`Add Search template...`を選択します。こちらも同様に、例では任意の部分を書き直してOKを押し、Warningの際に出てくる文字列を入力するだけで、該当箇所にマーカーペンのようなものが引かれてWarningが表示されるようになります。

![09.gif](https://qiita-image-store.s3.amazonaws.com/0/16620/de7fd5fa-184a-cef3-e799-c2d194f56170.gif)

`Add Search template...`ではなく`Add Replace template...`を選択すればReplaceさせることも可能になりますし、Warningのレベル（Severity）も変更することができます。
コードレビューをする中で、チームメンバーの中で共通なアンチパターンなどがあれば追加して非推奨なコードをレビュー前に減らしていくことが可能になります。

# 最後に

さらに知りたいTipsがあれば、[Android Developers on YouTube](https://www.youtube.com/user/androiddevelopers)をsubscribeし、[Android Tool Time](https://www.youtube.com/watch?v=xxx3Fn7EowU&list=PLWz5rJ2EKKc_w6fodMGrA1_tsI3pqPbqa)を見てみてください。

今回初めてGifを撮って書いてみたのですが、結構辛かったです。個人的にはideaVimを使っていたのですが、時々Crashして使えなくなった時の絶望感が嫌になるし、この記事を書くことで地味に便利な機能を知ることができたので、ideaVimを卒業してデフォルトで攻めてみようかなと思ってます。