【Android Studio】ショートカット大好き人間がおくるショートカット集【IntelliJ IDEA】

Android Studio, IntelliJ IDEA のショートカット集です。
10個を厳選しました。

* 数が多すぎないので覚えていくのが楽です
* 重要度が高いものを網羅しました。自信があります


私はショートカットが大好きで、エディタを乗り換えるときにはまずショートカットから調べ始めるくらいで、
ひとにショートカットを教えるときにはついつい教えすぎてしまいます。

それでも今回は厳選に厳選をかさねました。
量が手頃で質も高い、いいショートカットを集められたと感じています。

ショートカットのキーは変更できるので、おすすめのキー設定も書いておきます。
使用頻度が高いものは変えておくと得です。
設定の変更は設定画面の Keymap から行えます。
私の環境は Linux（Fedora）です。

# ショートカット集

## Search Everywhere（クラス、ファイルなどを全体から検索）
クラス、ファイルなどを全体から検索できます。

|Windows/Linux|Mac|
|:---|:---|
|Shift を2回押す|Shift を2回押す|

![search_everywhere.gif](https://qiita-image-store.s3.amazonaws.com/0/44676/e39f259e-f60d-9464-8677-e58e940dcd6d.gif)

* おすすめのキー設定：デフォルトで OK。十分使いやすいです

## Call Hierarchy（呼び出し階層を開く）
あるメソッドがどこから呼ばれているか、さらにその呼び出し元がどこから呼ばれているか、さらにそれは……と呼び出し元を階層的に一覧できます。
呼び出し元が多数あった場合に一つ一つ見ていくのも楽だし、見落としもなくなるので役に立ちます。

|Windows/Linux|Mac|
|:---|:---|
|Control + Alt + H|Control + Option + H|

![call_hierarchy.gif](https://qiita-image-store.s3.amazonaws.com/0/44676/9983cd2d-0146-ba83-c604-e75bc7fa9aa3.gif)

* おすすめのキー設定：Control + H。H は Hierarchy の頭文字
	* こちらの方がデフォルトよりも押すキーが少ないので楽です

## Find Usages（使用箇所を探す）
変数の参照箇所を探したり、あるクラスを extends している箇所を探したりと、変数、クラス、メソッドが使用されている箇所を探せます。
変数は、その変数を read している場所と write している場所とを分けて表示してくれます。
なので「この変数はどこで書き換えられているんだ？」といったのを探すのに役立ちます。

|Windows/Linux|Mac|
|:---|:---|
|Alt + F7|Option + F7|

![find_usages.gif](https://qiita-image-store.s3.amazonaws.com/0/44676/25853fec-891a-fc83-b230-916c6ab43362.gif)

* おすすめのキー設定：Control + U。U は Usages の頭文字
	* デフォルトよりも配置的に押しやすいし、覚えやすくなります

## File Structure（ファイルの構造を表示）
開いているファイルの変数やメソッドの一覧が見えます。
しかも、その一覧を検索して、変数やメソッドを定義してある場所へ飛ぶことが出来ます。

|Windows/Linux|Mac|
|:---|:---|
|Control + F12|Command + F12|

![file_structure.gif](https://qiita-image-store.s3.amazonaws.com/0/44676/8bef50fe-624a-f01a-457d-bcdbba8bd689.gif)

* おすすめのキー設定： Control + M。M は Member の頭文字
	* 変数やメソッドのようなメンバ（Member）を検索できるのが由来です

## Find in Path（パスの中から検索）
全てのファイルの中身を検索できます。

|Windows/Linux|Mac|
|:---|:---|
|Control + Shift + F|Command + Shift + F|

![find_in_path.gif](https://qiita-image-store.s3.amazonaws.com/0/44676/2d38610b-02b6-bfb7-03ff-d920e953c04e.gif)

* おすすめのキー設定：デフォルトで OK。Control + F（ファイル内検索）の検索範囲が広いバージョンと思えば覚えやすいと思います

## Delete Line（行を削除）
1行削除できます。

|Windows/Linux|Mac|
|:---|:---|
|Control + Y|Command + Backspace|

![delete_line.gif](https://qiita-image-store.s3.amazonaws.com/0/44676/5718175d-69e3-c936-4273-32a39cf13dd8.gif)

* おすすめのキー設定：Control + D。D は Delete の頭文字
	* 片手で操作したい、しかも使用頻度が高いので Control の近くのキーと組み合わせるほうが楽だと思います

## Extend Selection, Shrink Selection（選択範囲を拡大、選択範囲を縮小）
これを実行するごとに選択範囲が拡大/縮小します。
例えば変数にカーソルがある状態で何度か実行すると、

1. その変数全体を選択
2. "=" の左辺を選択
3. 1行を選択
4. メソッド全体を選択

というように選択範囲が徐々に広がります。

||Windows/Linux|Mac|
|:---|:---|:---|
|選択範囲を拡大|Control + W|Option + Up|
|選択範囲を縮小|Control + Shift + W|Option + Down|

![selection.gif](https://qiita-image-store.s3.amazonaws.com/0/44676/606dde63-55b9-3a82-810e-f08f02d33c75.gif)

* おすすめのキー設定：Shift + Alt + Up, Shift + Alt + Down
	* 普通にテキストを選択すると同様に Shift とカーソルキーを使うよう統一したので直感的に操作できます。もちろん通常の選択と挙動が違うので、 Alt を追加しています

## Extract Variable（変数として抽出）
カーソルの周辺のものを変数として抽出します。
下の2つがよくある使い方です。

1. `=` の右辺だけを書いて実行。 `=` の左辺を自動的に補ってくれます
2. `foo().bar()` と連続してメソッドを呼んでいるところで実行。この部分を2行に分割して、 `foo()` して戻り値を取得する行と、その戻り値の `bar()` を呼ぶ行とにわけてくれます

特に1つめは使用頻度がとても高いです。
`=` の左辺を自分で書く必要がなくなるので、単純にタイピング量が大きく減ります。

|Windows/Linux|Mac|
|:---|:---|
|Control + Alt + V|Command + Option + V|

![extract_variable.gif](https://qiita-image-store.s3.amazonaws.com/0/44676/7491df37-47bb-3b2c-2ed4-45a4ecc838a9.gif)

* おすすめのキー設定：デフォルトで OK。V は Variable の頭文字
	* Control + V の方が楽だけどそれは「貼り付け」に使うので Control + Alt + V

## Rename（リネーム）
変数、クラス名、ファイル名、メソッド名などをリネームします。

|Windows/Linux|Mac|
|:---|:---|
|Shift + F6|Shift + F6|

![rename.gif](https://qiita-image-store.s3.amazonaws.com/0/44676/8169dd2f-de46-ec1b-1c15-573ef3232317.gif)

* おすすめのキー設定：Control + Alt + R。R は Rename の頭文字
	* デフォルトだと覚えづらいので
	* Extract Variable と同じ、リファクタの仲間なので、そちら（Control + Alt + V）にあわせた形にして、 Control + Alt + R です

## Next Highlited Error, Previous Highlited Error（次のエラー、前のエラー）
次のエラーや前のエラーにジャンプできます。
頑張ってマウスで探す手間を省けます。

||Windows/Linux|Mac|
|:---|:---|:---|
|次のエラー|F2|F2|
|前のエラー|Shift + F2|Shift + F2|

![error.gif](https://qiita-image-store.s3.amazonaws.com/0/44676/96f3c206-b9fc-e68b-b4e6-1acd2bf13828.gif)

* おすすめのキー設定：デフォルトで OK。シェルスクリプトだと標準エラー出力は「2」なので、そこから連想できるから F2 は覚えやすいと思います


# 惜しくも選外のもの
最後の最後まで迷いましたが、選外にしたものです。
ショートカットは Windows/Linux です。

* **Alt + Enter**：
  * エラーを自動的に直してくれたりなど色々
  * 既に誰でもご存知なので選外
* **Find Action**（Control + Shift + A）：
  * アクションを検索できます。たとえば「usage」で検索すれば Find Usages できます
  * 便利ですが、このショートカットに依存せず各ショートカットを覚えるほうが最終的には速くなるので、選外にしました
* **Refactor This**（Control + Shit + Alt + T）：
  * Rename, Extract Variable といったリファクタのメニューを表示させます。 Change Signature のような使用頻度が低いやつもメニューで表示してくれるので楽に使えます
  * 1つ上の Find Action と同じ理由で選外
* **Quick Documentation**（Control + Q）：
  * Javadoc を表示させます。これでマウス操作なしで Javadoc を見ることが可能に……
  * しかし Javadoc が瞬時に出るように設定すればマウス操作でもまあまあ速く表示させることができるので、有望な代替手段があるということで選外にしました
* **Parameter Info**（Control + P）：
  * メソッドがどのようなパラメータを取るかを表示させます。 Quick Documentation と違い、オーバーロードしている他のメソッドの引数も一覧で表示させられます
  * たまに非常に便利です。なぜなら、他のショートカットは実際に呼び出しているメソッドの情報を見ることしかできませんが、このショートカットは呼び出して**『いない』**オーバーロード・メソッドの引数の情報を見ることができるのです。呼び出して**『いない』**メソッドの引数を調べるには、ブラウザで developer.android.com の Javadoc を数十秒はかけて見に行ったりするわけですが、引数を調べることに限ってはこのショートカットを使えば一瞬で確認できるのです
  * 使用頻度がやや落ちるので選外にしました

# その他 - ショートカットと呼べるかは微妙だけど便利なやつ
ホント便利なやつ

* **[Android Studioで保存時に自動整形＋import整理](http://konifar.com/1493)**：
  * タイトル通り自動整形、import整理を自動で行なえます
* **[AndroidStudioのPostfix Completionで爆速コーディング](http://qiita.com/takahirom/items/ac1d1b08351610dfcc43)**：
  * .for や .not は特に便利です

# 余談
いろいろなひとがショートカットについて語るとき、
たまに、「マウス操作」 vs 「キーボード・ショートカット」　どちらが速いか？
という二項対立で語ることがあります。

けれども実際は「マウス操作」「キーボード・ショートカット」の両方を同時に行なう方が速い場面も多いと感じています。
絵を描く方やゲームをする方にはわかりやすいと思うのですが、
そうした方々が利き手でマウスやペンタブレットを操作して反対の手でキーボードを操作しているのと同じです。

なので、キーボードとマウスを同時に操作できるよう、ショートカットは基本的に片手で使える配置にすると便利です。