Xcodeの検索機能を有効利用して開発効率を上げよう

Xcodeを使って開発する上で、多くの方が下記の検索機能を使ったことがあると思います
![スクリーンショット 2016-05-06 11.40.00.png](https://qiita-image-store.s3.amazonaws.com/0/27785/02107ec5-b6c7-4461-0f14-87712b5551bc.png)

規模が小さいうちはテキスト検索だけで充分だったりしますが、大規模なプロジェクトになると検索1つするにしても意図していない検索結果が沢山出てしまったりと、痒いところに手が届かないと思ったことはないでしょうか
そこで本記事ではXcodeの検索を有効利用するために幾つか検索Tipsを紹介しようと思います

# Insert Pattern
まずは`Insert Pattern`検索です
検索窓の虫眼鏡マークをクリックすると`Insert Pattern`という項目が表示されます
![スクリーンショット 2016-05-06 11.45.26.png](https://qiita-image-store.s3.amazonaws.com/0/27785/af6c777f-f244-f39c-d750-40987dc25e82.png)


`Insert Pattern`をクリックすると、どのパターンの検索をするか項目が出てきます
![スクリーンショット 2016-05-06 11.46.16.png](https://qiita-image-store.s3.amazonaws.com/0/27785/6cf0f2cf-105c-e403-22cc-f3ba5eb56fc3.png)
検索パターンの種類は上記画像の通り`Tab`、`Line Break`、`Any Characters`、`Any Word Characters`、`Non-ASCII Characters`、`Word Break`、`White Space`、`Digits`、`Hexadecimal Digits`、`Email Address`、`Web Address`、`IP Address`があります

URLの定義を検索する場合を想定して`URL`を選択してみます
![スクリーンショット 2016-05-06 11.46.33.png](https://qiita-image-store.s3.amazonaws.com/0/27785/c07a7759-30b4-1dfe-b3c9-208038f041b7.png)
すると検索窓に`URL`という項目が追加され、実際に検索を実行してみるとURLの定義っぽいところを検索結果として表示してくれます
![スクリーンショット 2016-05-06 12.43.07.png](https://qiita-image-store.s3.amazonaws.com/0/27785/f91b7149-ea9c-ae5e-e721-b184d5d71a89.png)

ソースコード上にURLを定義する時は文字列リテラルとして定義することが多いと思います
文字列リテラルのURLを検索したい場合には検索窓に表示された`URL`項目をダブルクォーテーションで囲んであげれば良いです
![スクリーンショット 2016-05-06 12.44.01.png](https://qiita-image-store.s3.amazonaws.com/0/27785/f32f4762-6e68-fe7e-a42d-e7cfe57ab9c1.png)
これで文字列リテラルとして定義されているURLの定義っぽいところを検索結果として表示してくれます

# Definitions
プロトコル、クラス、メソッド、変数など定義部だけを対象として検索したい場合に有効なのが`Definitions`です
使い方は`Find`の`Text`になっている部分を`Definitions`に変更するだけです
![スクリーンショット 2016-05-06 12.51.19.png](https://qiita-image-store.s3.amazonaws.com/0/27785/95badf72-a8d8-bab2-9af8-aaeaf860a2b3.png)

よく、シングルトンパターンで用いられる名前である`shared**`という名前の定義部分を検索したい場合、Text検索で`shared**`を検索しても、当然ながらシングルトンを利用する側のコードやコメント部分も対象として検索するため、期待している検索結果よりも大分ノイズが入ったものになってしまいます
![スクリーンショット 2016-05-06 13.45.15.png](https://qiita-image-store.s3.amazonaws.com/0/27785/b3de7388-35c7-3678-f385-2965b423d837.png)


`Definitions`を使えば定義部分だけが検索結果として表示されます
![スクリーンショット 2016-05-06 13.47.17.png](https://qiita-image-store.s3.amazonaws.com/0/27785/f65c3c12-18ba-4a8a-065f-4a59b9a27b1c.png)

# 検索スコープを絞る
検索窓の下にある`In My Scope`と記載されている部分をクリックすることで検索するスコープを設定することができます
![スクリーンショット 2016-05-06 14.54.07.png](https://qiita-image-store.s3.amazonaws.com/0/27785/45db4602-b738-4a44-126f-497f36e5c718.png)

`WORKSPACE`と記載されているセクションで、どのプロジェクトのどこのフォルダ配下を検索スコープにするかなどを指定できます
![スクリーンショット 2016-05-06 12.52.38.png](https://qiita-image-store.s3.amazonaws.com/0/27785/1436a45f-6031-311d-e85b-4b045ee0bffc.png)

`SEARCH SCOPES`セクションの`New Scope..`をクリックするとスコープの条件を指定するWindowが表示されます
![スクリーンショット 2016-05-06 14.55.29.png](https://qiita-image-store.s3.amazonaws.com/0/27785/c4c1de90-3eaa-9120-c72f-245576fd96da.png)

このWindowでは検索するファイルタイプなどを指定できます
![スクリーンショット 2016-05-06 12.53.56.png](https://qiita-image-store.s3.amazonaws.com/0/27785/9875cd31-3e68-333a-0a8e-6a77654a4ee7.png)

上記の画像を見てわかるように現在ではファイルTypeにSwiftがないので、Swiftファイルを検索スコープにしたい場合は、`Type`ではなく、`Path Extension`で`swift`を指定することで実現可能です
![スクリーンショット 2016-05-06 12.55.07.png](https://qiita-image-store.s3.amazonaws.com/0/27785/1d476813-14d3-ae77-aa5a-48c73f13cd36.png)


# Call Hierarchy
あるメソッドや変数がどこから呼ばれているかなど知りたい場合に使えます
使い方は`Definitions`と同じく、`Find`のデフォルトで`Text`になっている部分を`Call Hierarchy`を指定するだけです
![スクリーンショット 2016-05-06 15.04.21.png](https://qiita-image-store.s3.amazonaws.com/0/27785/aa43cf8c-7185-2e3f-8815-d172f997e440.png)

下記は`getExampleUserResultSet`というメソッドを呼び出している箇所が検索結果として表示されています
![スクリーンショット 2016-05-06 15.09.46.png](https://qiita-image-store.s3.amazonaws.com/0/27785/731f517b-a1aa-3bc9-f877-186e86755479.png)

また、`Hierarchy`は検索からだけでなく、実際のコードファイルで検索対象にしたいメソッドを選択して、右クリックして`Find Call Hierarchy`から同じことができます
![スクリーンショット 2016-05-06 15.12.59.png](https://qiita-image-store.s3.amazonaws.com/0/27785/f0d99d2a-5ce1-d693-ea75-2c3398d030b6.png)

コードから選択することで`クラス名`.`メソッド名`が検索対象になるのでより詳細です
![スクリーンショット 2016-05-06 15.15.02.png](https://qiita-image-store.s3.amazonaws.com/0/27785/b91db348-b586-7e43-d83e-40d939d6813d.png)


# ファイル検索
`Command + Shift + O` のショートカットで検索窓が表示されます
![スクリーンショット 2016-05-06 15.16.42.png](https://qiita-image-store.s3.amazonaws.com/0/27785/72387ba2-f0ae-632a-cf23-d5009bcb48d3.png)

ここでプロジェクトからファイルやシンボル名でインクリメンタル検索し，マッチしたものを即座に開くことができます
![スクリーンショット 2016-05-06 12.55.50.png](https://qiita-image-store.s3.amazonaws.com/0/27785/de624052-ccfe-ab2e-2775-decd2e47f79e.png)


`Command + Shift + J` のショートカットで、現在Xcode上で開いているファイルをプロジェクトナビゲーターで選択した状態にできます

# 参考
[Xcode Search: the Hidden Gems](http://holko.pl/2016/04/26/xcode-search/)