Xcodeのショートカットを使おう！ 〜Xcode Effective Tips gif操作画像付き〜

# Xcode Effective Tips
Xcodeは効率的に使いたいですよね。個々人でいろいろと工夫をして自分にとって使いやすい環境を作っているとは思うのですが、この記事では僕が効率を上げようと思って好きで使っているショートカットやプラグインを紹介したいと思います。

本当によく使うものだけをピックアップしているので「そんなの知ってるぜ！」ってものだらけだと思いますが、Xcodeを使い始めたばかりの人にも是非使っていただきたいものを集めいてます。

## ショートカットキー篇

ショートカットはいろいろあるのですが、個人的に**絶対に押さえておくべき**だと思ったものをまとめました。

### 飛びたいファイルにジャンプ - **command + Shift + o**

**command + Shift + o**で任意のファイルにジャンプすることができます。
![command_shift_o.gif](https://qiita-image-store.s3.amazonaws.com/0/45525/26b6f0db-58b7-575e-e1c3-1701ecb6b318.gif)

ちょっと定義を確かめたい時などに利用しています。後述する**control + 6**をこれと合わせて使ったりします。

### ファイルをブラウザみたいに移動する - **command + option + 上下左右キー**

ブラウザのように戻る、進むをしたい場合は以下のようにできます。Swiftにはヘッダファイルはないのでできませんが、Objective-Cであれば**command + option + ↑ or ↓**でヘッダと.mファイルを簡単に移動することが可能になります。

* 戻る
  * **command + option + ←**
* 進む
  * **command + option + →**
* .h, .mへ移動(Objective-Cのみ)
  * **command + option + ↑ or ↓**

### ファイル内のメソッド一覧表示、検索、ジャンプ - **control + 6**
ファイル内のメソッドの定義まで飛ぶことができるのが**control + 6**。**control + 6**を押した後に、文字を入力することで補完してくれるので目当てものを見つけやすいです。

![control_6.gif](https://qiita-image-store.s3.amazonaws.com/0/45525/6d1710c0-b59d-6d97-f2c0-7045db785852.gif)

**control + 6**をでメソッドの一覧がソースコード中の並び順で表示されます。ソースをSwiftの場合は`MARK:`、Objective-Cの場合は`#pragma mark`などでマークしておくとコードの見通しが非常に良くなると思います。

### 選択している行のメソッド定義までひとっ飛び - **command + control + j**

「このメソッド、どこでどんな風に定義されているんだ？」と思った時は**command + control + j**で確かめましょう。

![command_shift_j.gif](https://qiita-image-store.s3.amazonaws.com/0/45525/c9652348-cb9c-708f-7680-fd4b935b2d67.gif)

確認し終わったら、上述した**command + option + ←**でジャンプする前のファイルに戻りましょう。

### インデントを一発修正 - **control + i**

**control + i**でインデントを一発で修正することができます。
![control_i.gif](https://qiita-image-store.s3.amazonaws.com/0/45525/c98918d3-cbab-6b7c-2857-463c609c9064.gif)

特にクロージャ、ブロックでネストが深くなってしまったりしたコードを書いている時に重宝します。

### 文字選択を簡単にする - **option + 左右キー**
これはXcodeではなくMacのショートカットなんですが、**option + 左右キー**で、単語区切りでジャンプが可能になるので移動や文字選択がすごく楽になります。
![option_arrow.gif](https://qiita-image-store.s3.amazonaws.com/0/45525/959a8d9b-b03b-0eee-31ee-ece70fe2269c.gif)

ただし残念ながら日本語ではうまく機能しません。

### コメントアウト - **command + /**
選択したコードをコメントアウト。
![command_slash.gif](https://qiita-image-store.s3.amazonaws.com/0/45525/431e1724-e4d0-3333-e71b-0cb1964f591f.gif)


### Build, Run, Test, Stop, Clean - **command + b,r,u,.**, **command + shift + k**
自然に覚えるのではないかと思います。
* Build -> **command + b**
* Run -> **command + r**
* Test -> **command + u**
* Stop -> **command + .**
* Clean ->  **command + shift + k**

### その他
この辺を覚えておくとデバッグ時にちょっとだけ楽になります。

* Debug Area表示 -> **command + shift + y**
* Clear Console -> **command + k**
* Breakpointのアクティブ切り替え -> **command + y**

### Xcodeで定義されているショートカット確認アプリ - CheatSheet
ショートカットを覚えるまでは[CheatSheet](http://www.cheatsheetapp.com/CheatSheet/)というアプリを入れておくと良いと思います。

Xcodeを開いている状態でCommandキーを押し続けている間だけショートカットの一覧を表示してくれます。

![cheatsheet.gif](https://qiita-image-store.s3.amazonaws.com/0/45525/086b643b-409f-ee9c-2850-22190da93c08.gif)

Xcodeに限らず使えるので、ショートカットをバンバン使っていきたい人はかなり重宝すると思います。

## コードの補足篇

以下の説明はSwiftがメインなので、Objective-Cで書いている場合は若干異なります。

### `TODO:`, `FIXME:`

コードを書いている時に、とりあえず後回しにしようと思ったらすぐに`TODO:`や、ちょっと後でリファクタしようと思った部分は`FIXME:`を入れるようにしています。

コードが完成に近づいたら、gitで`commit`しようとしているファイルを開き、**control + 6**を押して`TODO:`や`FIXME:`がないか確認したりしています。



### 入力させたいものにはコレ - `<# #>`

`<# #>`を使用すると、スコープ内にいる時にタブでジャンプすることができます。
```swift
  func doSomething() {
    <# write some code #>
  }
```

何か必ず入れたいものはこれを使用しています。
![support.gif](https://qiita-image-store.s3.amazonaws.com/0/45525/1a3a20a1-3146-bd8c-3240-bd34326e6545.gif)


snippetに登録する際に必ず入力してほしい場所にはこれを使います。
![register_snippet.gif](https://qiita-image-store.s3.amazonaws.com/0/45525/a67cbcf8-3c55-2d41-6642-597f6a21aa1f.gif)

また、snippetにはよく使うものを保存しています。個人的に用意しているものは以下のようなものです。

* UserDefaults
* ローカライズ

こんな感じで使っています。
![snippet.gif](https://qiita-image-store.s3.amazonaws.com/0/45525/370b474c-46c1-52bf-3e4a-ea82e1852959.gif)

登録したsnippetにはショートカットをつけることができます。

![snippet_save_with_shortcut.gif](https://qiita-image-store.s3.amazonaws.com/0/45525/5bb38227-0305-d1b8-92cf-9f2456bad7ff.gif)

![snippet_execute.gif](https://qiita-image-store.s3.amazonaws.com/0/45525/da8383c2-f308-eca8-41b3-505f55b6126a.gif)

ただしsnippetを登録している最中にXcodeがよくクラッシュしてしまいます。また、ショートカットを登録しても何で登録したのかよく忘れてしまうので、実際にはSnippet Libraryから検索して使うことが多いです。



最近になってちゃんと使おうと思い始めて、これから増やしていこうと思っています。最近は個人的に書いたコードは[自分のGist](https://gist.github.com/mnat44)にちょっとずつためるように意識しています。

## プラグイン篇
### Alcatraz
まずは使っている方も多いと思いますが、Xcodeのプラグインを圧倒的に使いやすくする[Alcatraz](https://github.com/supermarin/Alcatraz)です。

というかプラグインを入れるにはまずこのパッケージマネージャを入れないと始まらない感じです。

これがあれば欲しいプラグインをすぐに検索できます。
![スクリーンショット 2015-09-29 23.55.31.png](https://qiita-image-store.s3.amazonaws.com/0/45525/275406e0-13ec-9f06-c2e7-8b80752193a2.png)


カラースキームもアッという間にダウンロード可能です。
![スクリーンショット 2015-09-29 23.54.26.png](https://qiita-image-store.s3.amazonaws.com/0/45525/cbc6fed1-d2ec-1d3f-6d37-8b6ffa7a7c21.png)

個人的にはカラースキームは（テンション的に）大事なので、ここで一覧して探すことができるのにかなり助けられています。僕は[fruits](https://github.com/muukii0803/xcode-fruits)というカラースキームを使用しています。

### コードをキレイに整えるXAlign

XAlignはコードをキレイにフォーマットしてくれる便利なプラグインです。コードを整えたいところを選択して`Command + Shift + x`を押すだけ。

![xalign.gif](https://qiita-image-store.s3.amazonaws.com/0/45525/10763309-5f0c-6ffb-647c-2771509c3f02.gif)

好みのあると思いますが、コードをきれいに揃えられます。揃っていた方がコードが整頓されていて心地が良いのでとても重宝しています。

個人的には精神的にもコードの見通しの良さと作業効率は直結するのでとっても重要です。

### メソッドの説明を圧倒的に書きやすくするVVDocumenter-Xcode
VVDocumenter-Xcodeは定義されているメソッドの上の行で`/`を3回入力するだけでメソッドに対する説明、仮引数の説明のフォーマットを用意してくれます。

![VVDocumenter-Xcode.gif](https://qiita-image-store.s3.amazonaws.com/0/45525/9b8fa96e-317c-b104-ac1d-677ea1964671.gif)

これがあれば面倒な記述もあっという間に終わります。メソッドをoption + click することで記述したコメントを閲覧することができるので、いちいち定義した場所に飛ばなくてもよくなります。

![VVDocumenter-Xcode2.gif](https://qiita-image-store.s3.amazonaws.com/0/45525/13b6c95e-2871-fb60-7454-9594845343b7.gif)

### Realmを使っているのであれば是非とも入れたいRealmPlugin

Realmを使っている人限定になってしまうのですが、RealmPluginを入れておくとモデルクラスの作成がめちゃくちゃ楽になります。

![スクリーンショット 2015-09-30 0.31.07.png](https://qiita-image-store.s3.amazonaws.com/0/45525/5261b3ff-a8da-ab14-40c0-151ff4521ff8.png)

Realmの`RLMObject`を継承したクラス用のテンプレートが用意されているので手間を省くことができます。

## まとめ

きっとまだまだ便利なものがたくさんあって、そういったものがちょっとずつ集まって、塵も積もれば山となる的な感じで効率が大きく上がっていくのではないかと思います。

「いやいや、こんな便利なものがあるよ！」というオススメがあれば是非教えていただきたいです。

## 補足

この記事の内容は[会社で開催している勉強会](http://mokumoku-ios-at-next.connpass.com/event/19921/)で発表しました。発表に使用した[スライド](http://www.slideshare.net/motokinarita7/xcode-tips)はこちらにあげています。

いろいろと他の方々の意見を聞けたので面白かったのですが、「snippetは便利だなぁと思いつつもメンテナンスが大変そうなので...」といった意見が出て「確かにそうだな...」なんて感じたり、意外とみなさんAlcatrazとか入れずに運用していることが分かって面白かったです。

まとめる必要もないかな？と思っていたのですが、自分のちょっとした工夫を共有できたのでちょいちょいまとめるのもいいなと思いました。

なお、gifの作成には[GifGrabber](https://itunes.apple.com/jp/app/gifgrabber/id668208984?mt=12)を、コマンドの表示には[KeyCast](https://github.com/cho45/KeyCast)を使用しています。