普段使っている道具を見直す〜Android Studio編〜

まつもとゆきひろさんのインタビュー記事の、以下やりとりに感化されてしまったので、普段使っている道具を見直す、ということを最近よくやっています。

>
—— まつもとさんが社会人になりたてのころに意識して取り組んでいたことが他にもありますか？
>
できるだけ仕事を早く終わらせて、自分の環境を整備する時間を作るようにしていましたね。世の中には開発のためのいろいろな道具がありますが、どれがいいのかは試しに使ってみないと分からない。仕事の空き時間ができるとすぐに、どちらのツールがいいのか比較検討したり、ないなら自分で作ってみたりということをやっていました。
>
[まつもとゆきひろ氏が「生涯プログラマー」でやっていきたい若手に贈る3つの言葉](http://engineer.typemag.jp/article/hrd_matz)

まずは、最近一番使っている道具であるAndroid Studioを見直してみました。
その結果、新たな便利機能を知ったり、改めて便利さを認識できたりしたので、メモがてら少しまとめてみました。 

※ 特によく使う機能に関しては :sunny: をつけてみました。
※ 以下すべて環境はMacです。

## **Code**

### **Generate** :sunny: 

```
command + n
``` 
GetterやSetter、equals、toStringなど、よく使うものを良い感じに自動生成してくれます。
![スクリーンショット 2015-08-09 23.05.48.png](https://qiita-image-store.s3.amazonaws.com/0/47437/e95aaf0e-f129-6f24-4a80-e981b1411984.png)

ex) toString
![スクリーンショット 2015-08-09 21.02.19.png](https://qiita-image-store.s3.amazonaws.com/0/47437/b2a32538-a128-2966-7fe9-656980185cf1.png)


#### **GetterやSetterの自動生成時にPrefixがつかないようにする**
変数にPrefixとしてmやsをつけている場合、初期状態だと以下のように生成されてしまいます。
![スクリーンショット 2015-08-09 21.04.54.png](https://qiita-image-store.s3.amazonaws.com/0/47437/39a048e8-1573-ffa6-960c-d449a7f284a8.png)


なので以下の設定をします。

```
Preferences(command + ,) > Code Style > Java > Code Generation
```
Name Prefixのところに、使用するPrefix（mやs）を入力しておきます。

### **Override Method** :sunny: 

```
ctrl + o
```
お馴染みのOverrideメソッドを生成できる機能です。
![スクリーンショット 2015-08-09 21.06.39.png](https://qiita-image-store.s3.amazonaws.com/0/47437/c6345206-4a64-c86b-2d22-fb02a05f9607.png)

### **Surround With...** :sunny: 

```
option + command + t
```
範囲選択した箇所に対して、try/catchやifで囲います。
![スクリーンショット 2015-08-09 21.14.02.png](https://qiita-image-store.s3.amazonaws.com/0/47437/daf3632d-a46d-677e-92b5-cc6fb35a3d08.png)

### **Unwrap/Remove...** 

```
shift + command + fn + delete
```
「Surround With...」の逆でtry/catch等を外します。

### **Completion Basic** :sunny: 

```
ctrl + space
```
お馴染みの補完機能です。Macの場合、Spotlightのショートカットと被るため、そのままだとショートカット経由では使えません、、、
（Android StudioかSpotlightの設定を変更する必要があります）

### **Insert Live Template...** :sunny: 

```
command + j
```
テンプレート機能です。
![スクリーンショット 2015-08-09 21.31.13.png](https://qiita-image-store.s3.amazonaws.com/0/47437/6c42dc1e-c517-7261-ac2a-34c702734f55.png)

最初からいくつかプリセットされていますが、自分で追加することもできます。

```
Preferences(command + ,) > Live Templates
```

### **Surround with Live Template...**

```
shift + command + j
```
範囲選択した箇所に対して使用する、囲うタイプのテンプレート機能です。

### **Comment with Line Comment**

```
command + /
```
お馴染みのコメントアウト機能です（//）。

### **Comment with Block Comment** :sunny: 

```
shift + command + /
```
お馴染みのコメントアウト機能です（/* */）。

### **Reformat Code...** :sunny: 

```
option + command + l
```
コード整形機能です。以下の設定に基づき、範囲選択した箇所を整形してくれます。

```
Preferences(command + ,) > Code Style
```

### **Optimize Imports...**

```
ctrl + option + o
```
import機能です。自分の場合は、宣言時に勝手に実行されるように設定しています。

```
Preferences(command + ,) > Editor > Auto Import
```


## **View**
### **Parameter Info** :sunny: 

```
command + p
```
カーソルがメソッドの上にある状態で実行すると、引数の種類を表示してくれます。
![スクリーンショット 2015-08-09 10.00.52.png](https://qiita-image-store.s3.amazonaws.com/0/47437/e3e6536a-ab1c-b3ff-7356-b92f99df7693.png)


### **Quick Document**

```
F1
```
カーソルの位置にある対象のドキュメントをpopupで表示します。

### **External Document**

```
shift + F1
```
カーソルの位置にある対象のドキュメントをブラウザで表示します。

### **Jump to Source** :sunny: 

```
command + ↓
```
or

```
command + b
```
カーソルの位置にある対象が定義されている箇所にjumpします。

### **Recent Files** :sunny: 

```
command + e
```
最近開いたファイル一覧からファイルを開くことができます。
![スクリーンショット 2015-08-09 9.59.46.png](https://qiita-image-store.s3.amazonaws.com/0/47437/8d016298-2325-e35e-a9f6-3bb0860f58d4.png)


### **Enter Presentation Mode**

```
View > Enter Presentation Mode
```
以下のようにコードだけを全画面表示します。ピンチイン、ピンチアウトで拡大縮小もできます。
![スクリーンショット 2015-08-09 9.55.56.png](https://qiita-image-store.s3.amazonaws.com/0/47437/ce852a7f-a619-c7d2-38c9-13a0a8275fa5.png)

### **TODO** :sunny: 

```
View > Tool Windows > TODO
```
TODOコメントした箇所をリストアップしてくれます。
![スクリーンショット 2015-08-09 10.05.07.png](https://qiita-image-store.s3.amazonaws.com/0/47437/0788d741-0521-2056-9172-8981278b4f95.png)


## **Edit（IdeaVim）** 
コピペやファイル内検索など基本的なエディター操作です。
初期状態でも基本的な機能は備わっているのですが、自分の場合は[IdeaVim](http://plugins.jetbrains.com/plugin/164) :sunny: という、Vimなキーバインドを再現してくれるPluginを導入しています。

```
Preferences(command + ,) > Plugins
```
↑からIdeaVimを検索してインストールしてください。

IdeaVimは.vimrc的な設定ファイルも使用することができます。
使用する場合はホームディレクトリに .ideavimrc というファイル名で設置します。

Android StudioのショートカットとIdeaVimとがコンフリクトしてしまうものがいくつかあり、どちらを優先するかを、設定することができます。

```
Preferences(command + ,) > Vim Emulation
```


基本的なエディター操作はIdeaVimでOKなのですが、Replaceが少し使いづらく感じたので、それだけショートカットを覚えました。

### **Replace**

```
command + r
```

## **Navigate**
### **Symbol...** :sunny: 

```
option + command + o
```
プロジェクト内のクラスやメソッドを検索します。
![スクリーンショット 2015-08-09 10.44.03.png](https://qiita-image-store.s3.amazonaws.com/0/47437/4c68cb53-433c-695f-5725-5a4197ad929d.png)

### **Toggle Bookmark** :sunny: 

```
F3
```
ソースコードにブックマークします。
ブックマークした箇所でもう一度実行するとブックマークを解除します。
ブックマークしておくと、次で紹介する「Show Bookmarks」機能からjumpしたりできます。

### **Show Bookmarks** :sunny: 

```
command + F3
```
Bookmarkした箇所にjumpできます。
![スクリーンショット 2015-08-09 10.50.05.png](https://qiita-image-store.s3.amazonaws.com/0/47437/913bee48-0100-4030-565a-2b9de106856b.png)

### **Test** :sunny: 

```
shift + command + t
```
↑のコマンド実行時に参照しているクラスに対応するテストコードのひな形を作ります。
既にテストコードが存在している場合はjumpできます。
![スクリーンショット 2015-08-09 11.02.02.png](https://qiita-image-store.s3.amazonaws.com/0/47437/261c4c6f-cdb3-4a81-3243-e520620d39a9.png)

### **File Structure** :sunny: 

```
command + F12
```
クラスのメンバーを一覧表示します。選択するとjumpします。
![スクリーンショット 2015-08-09 11.09.00.png](https://qiita-image-store.s3.amazonaws.com/0/47437/669029a5-50cc-8b2c-bfae-0406fbb2fc85.png)

### **Type Hierarchy**

```
ctrl + h
```
classの階層を表示します。
![スクリーンショット 2015-08-09 11.22.43.png](https://qiita-image-store.s3.amazonaws.com/0/47437/1bb502c0-350b-568e-496e-132d3b9cc64a.png)

※ [IdeaVim](http://plugins.jetbrains.com/plugin/164)を有効にしているとコンフリクトして動作しないので、ショートカット経由で実行したい場合は、IdeaVimの設定を変更してください。
（設定方法については、本記事の「Edit」の項目で説明しています）


### **Next Highlighted Error** :sunny: 

```
F2
```
エラーの出ている行にjumpします。shift + F2で逆方向。



## **Analyze**
### **Inspect Code...**

```
Analyze > Inspect Code...
```
コードをInspectしてくれます。
Inspection関連は以下の記事が詳しいです。
[AndroidStudioのInspectionでコードチェックを楽にしてみた。](http://qiita.com/shiraji/items/03be03a9b1cbe5ecc433)

### **Analyze Data Flow to Here**

```
Analyze > Analyze Data Flow to Here
```
変数に値が代入されるまでの、flowが表示されます。
![スクリーンショット 2015-08-09 20.28.43.png](https://qiita-image-store.s3.amazonaws.com/0/47437/fbfbeed1-d580-727f-ea16-ea37eaebb009.png)

### **Analyze Data Flow from Here**

```
Analyze > Analyze Data Flow from Here
```
変数がどこに参照されていくのかが表示されます。
![スクリーンショット 2015-08-09 20.35.37.png](https://qiita-image-store.s3.amazonaws.com/0/47437/20e74d9e-6787-ae80-a8c4-c2fb1eb5d410.png)



## **Refactor**
Refactorにも便利そうな機能がたくさんありそうなのですが、まだ自分の中でコントロールできる感じではないので、Renameくらいしか、まともに使ってないです、、
（勝手に生成してくれる分には良いのですが、勝手に変更されるのはちょっと怖い、という感じです、、）

### **Rename** :sunny: 

```
shift + F6
```
リネーム機能です。
![スクリーンショット 2015-08-09 20.44.24.png](https://qiita-image-store.s3.amazonaws.com/0/47437/0e2056ff-0bc4-7a45-dfef-9ccab57d813e.png)

## **Tools**
この項目だけで別の記事が書けそうな気もするので、簡単に紹介できそうなものだけ紹介します。

### **Generate JavaDoc...**

```
Tools > Generate JavaDoc...
```
項目をポチポチ選択するだけで、JavaDocを生成できます。
![スクリーンショット 2015-08-09 12.18.11.png](https://qiita-image-store.s3.amazonaws.com/0/47437/e5452a17-aa1f-8f1a-2f40-2704008751ce.png)

### **Open Terminal...**

```
Tools > Terminal...
```
Android Studio内でTerminalを開くことができます。
![スクリーンショット 2015-08-09 12.29.53.png](https://qiita-image-store.s3.amazonaws.com/0/47437/affb3d27-a975-384b-ae6f-eb9affb44ca9.png)


## **VCS**
gitはコマンド派のため、ほとんど使っていません。
もしかしたら便利機能があるかもなので、気が向いたら使ってみるかもしれません。

## **Window**
### **Split Vertically** :sunny: 

```
Window > Editor Tabs > Split Vertically
```
ウィンドウを垂直分割します。
![スクリーンショット 2015-08-09 12.24.43.png](https://qiita-image-store.s3.amazonaws.com/0/47437/65442121-77e4-6708-1b7d-5cff617f4d17.png)


### **Split Horizontally**

```
Window > Editor Tabs > Split Horizontally
```
ウィンドウを水平分割します。
![スクリーンショット 2015-08-09 12.26.49.png](https://qiita-image-store.s3.amazonaws.com/0/47437/20eee731-19c8-4390-72c7-3096928c0d77.png)


## その他
### **Search Everywhere**

```
shift*2（2回素早く押す）
```
Classやメソッド名だけでなく、Android Studioの設定やら機能までもが検索できます。
![スクリーンショット 2015-08-09 22.12.43.png](https://qiita-image-store.s3.amazonaws.com/0/47437/1fb681c4-2d86-9b42-69af-173fe0246ed2.png)

### **Postfix Completion**

式を書いた後に補完してくれる感じの便利機能です。
![スクリーンショット 2015-08-09 22.16.50.png](https://qiita-image-store.s3.amazonaws.com/0/47437/411f14c5-3be4-26fb-a70a-1a6db19b9b2d.png)

以下の記事が詳しいです。
[AndroidStudioのPostfix Completionで爆速コーディング](http://qiita.com/takahirom/items/ac1d1b08351610dfcc43)

### **JavaDocコメントの雛形を生成** :sunny: 

```
/** を入力した後にenter
```
以下のようなJavaDocコメントの雛形を生成してくれます。
![スクリーンショット 2015-08-09 22.19.18.png](https://qiita-image-store.s3.amazonaws.com/0/47437/cb23e448-e75c-a87e-1c24-f9cbfb1b9c98.png)

### **Color Themeの変更** 
[Color Themes](http://color-themes.com/?view=index) にたくさんあるので、気に入ったものをimportします。

```
File > Import Settings...
```
![スクリーンショット 2015-08-09 22.22.09.png](https://qiita-image-store.s3.amazonaws.com/0/47437/9695d919-1aa3-4b59-10f2-3cad96b88adc.png)

### **Find in Path...** :sunny: 

```
shift + command + f
```
プロジェクト内grepな検索ができます。
![スクリーンショット 2015-08-09 22.27.53.png](https://qiita-image-store.s3.amazonaws.com/0/47437/f3a2ed4d-fbab-5bc1-df9f-07f410ced58a.png)

### **Quick Fix** :sunny: 

```
option + enter
```
お馴染みの、Quick Fix機能です。


### **Project tool windowの開閉** :sunny: 

```
command + F1
```
Project tool windowを開閉できます。

### **Project tool window内での検索**
Project tool windowにフォーカスを当てた状態で、文字を入力すると検索できます（展開されているディレクトリのみ）。
![スクリーンショット 2015-08-09 22.25.15.png](https://qiita-image-store.s3.amazonaws.com/0/47437/5ee57881-0e7b-2113-ceec-d316746cade0.png)

### **折りたたみ機能を無効にする**
個人的に好きではない、デフォルトで有効になっているCode Folding（折りたたみ機能）を無効化します。

```
Preferences(command + ,) > Editor > Code Folding
```

### **Project Template**

ProjectのTemplateは自前で作ることができるようです。
以下の記事が詳しいです。
[Android Best Practices のディレクトリ構成を作れるテンプレート作った](http://tomoima525.hatenablog.com/entry/2015/07/18/234615)

### **メモリプロファイラ**

Tool系の話ですが、Android Studio 1.3からメモリプロファイラが新しくなったようです（自分はまだ試せていません）。

[ハイパフォーマンスAndroid](https://speakerdeck.com/mhidaka/haipahuomansuandroid)


## **ショートカットが覚えられない**
[CheatSheet](http://www.cheatsheetapp.com/CheatSheet/) が便利です。
commandを長押ししているだけで、使用しているソフトウェアのCheatSheetが表示されます。
![スクリーンショット 2015-08-09 23.24.53.png](https://qiita-image-store.s3.amazonaws.com/0/47437/45438522-e948-9874-6714-5052a5563ca8.png)



## さいごに
初めてAndroid Studioを使い出した頃は、「GradleでAndroidアプリをビルドできる不安定で癖の強いエディター」くらいにしか、思ってなかった気がしますが、慣れてくるとかなり快適です。
自分は普段Web開発をするときは、普通にVimを使っているのですが、現在は[WebStorm or 他のIDEA製品](https://www.jetbrains.com/webstorm/)の導入を考えている程に、Android Studioが馴染んてきた感があります。
やはりIDEは便利で、Vimで同じだけの機能を持たせようと思うと、相当な茨の道な気がしますし、開発時のスイッチングコストが小さくなりそうなのも魅力的です。
ちょっと脱線しましたが、Android Studioには、まだまだ便利な機能がたくさんありそう（追加されていきそう）なので、冒頭で述べた、まつもとゆきひろさんのインタビューのように、今以上に使い倒していきたいと思います。