コードをよりよく構造化するために役立つXcodeの機能 （Xcodeに関する15のヒント）

この記事では、コードの構造を改善し、クリーンにするコードのリファクタリングに役立つXcodeの機能をいくつかご紹介します

- 変数の名前を変更する
- プログラム関数に抽出する
- if 条件を変数に抽出する
- 複数の if 文を switch に変換する
- ローカライゼーション機能を文字列に手早く適応させる
- クラスにinit関数を作成する
- 有用なコードをスニペットに追加・表示・バックアップする
- 関数のドキュメントを作成・表示する
- 変更を破棄する（最新のgitコミットと比較して）
- 特定のコードに対して最後に変更を加えた編集者を検索する
- 関数がコールされる場所をすべて見つける
- コードのさまざまなセクションを折りたたむ
- プログラムヘッダーを手早く検索する (func, class, struct)
- その他の Xcode に関するヒント（キーボード・ショートカット）

## 変数の名前を変更する

変数名をすばやく変更することができます。Xcodeは変数を参照するすべてのコードを見つけることができます。

まず、変数をダブルクリックして選択し、変数を右クリックします。 `Refactor` メニューをクリックして、オプションの `Rename...` をクリックします。

（変数名ではなく変数の参照に基づき）変数のすべてのメンションを検索・表示します。 

新しい変数名を入力し、`Rename` ボタンをクリックしてください。

![482430ad1e24.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/635330/68b3ac18-418d-32e1-5155-1207a231de7b.gif)

## プログラム関数に抽出する

コードの一部を、別の関数として抽出することができます。そのためには、`Refactor` メニューの`Extract to method` オプションをクリックしてください。

![4a3c460b8f22.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/635330/98c0ee4f-f4b0-b660-19a0-cf037954e8ed.gif)

## if 条件を変数に抽出する

1つのif条件に対して長いコードが書かれているとき、それをbool変数として抽出することができます。

そのためには、コードの当該箇所を選択してから、`Refactor` メニューの `Extract to variable` オプションを使ってください。

![fbfe6660444d.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/635330/08128ebe-c7de-da33-290f-6a73339eadae.gif)

## 複数の if 文を switch に変換する

`enum` をご利用で、複数の if 文を使用される場合は、`Refactor` メニューの `Convert to switch statement` オプションを使用してコードを手早く変換し、`switch` ステートメントを使用することができます。

![3e0831614150.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/635330/1c31f1ac-4a9c-9f29-b133-83252799840d.gif)

## ローカライゼーション機能を文字列に手早く適応させる

文字列につき毎回 `NSLocalizedString` を手入力する必要はありません。 

対象の文字列を選択し、右クリックして `Refactor` メニューの `Wrap in NSLocalizedString` オプションを使用することができます。

![2cde0042dbcc.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/635330/ecf1a27d-077f-6592-91dc-e84a593361bb.gif)

## `class` クラスに `init` 関数を作成する

`struct` 構造体を使っているときは、`init` は自動的に生成されます。
しかし、クラスを使っているときには、自分でinit関数を作成しなければなりません。

`Generate Memberwise Initializer` オプションを使ってinit関数を自動生成することができます。

クラス名を選択し、`Refactor` メニュー内にある `Generate Memberwise Initializer` を使えばそのようなことが可能です。

![14bde0fe18c9.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/635330/277f2054-f026-e4a8-73aa-29905e8acede.gif)

## 有用なコードをスニペットに追加する

頻繁に使用するコードがある場合があります。プレースホルダーを追加して、そのコードをスニペットに追加できます。

コードの中にプレースホルダーを入れるには、`<# comment #>` と入力します。

![557ef3bc4e01.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/635330/592bf12d-42a7-4504-261e-06c9412fe691.gif)

次に、保存したいコードをすべて選択し、右クリックして `Create Code Snippet` オプションを選択します。タイトルと概要を入力し、右下の `Done` ボタンをクリックします。

![9f969b498fcf.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/635330/6cc631ea-2836-1d17-f7d8-125122bf4c9f.gif)

保存されたコードスニペットは、Xcodeウィンドウの右上隅のプラスアイコンをクリックしてすべて確認できます。

コードスニペットは、Xcodeに保存されます。
そのため、別のプロジェクトを開いていたとしても、すべてのコードスニペットが表示されます。

コードスニペットは `~/Library/Developer/Xcode/UserData/CodeSnippets/` に保存されます。

## 関数のドキュメントを作成する

Xcodeは、関数ドキュメントのテンプレートを作成することができます（全てのパラメータ名を含む）。

作成するには関数名を右クリックし、 `Show Code Actions` オプションを選択します。次に、`Add Documentation` をクリックします。

![e50f3f4defed.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/635330/ac84bbcc-d3f3-ec82-0524-4361a38d2a6e.gif)

キーボード・ショートカット：`option` `command` `/`

### コードアクションメニュー

`command` キーを押したまま関数名をクリックすると、コードアクションメニューを表示することができます。

コードアクションメニューについて言えば、関数の定義にジャンプしたいときにとても便利です
（コードアクションメニューの `Jump to definition` ボタンをクリックします）。

![677ec140e37f.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/635330/e1745889-d662-4d2d-ba4c-0ed2b1326371.gif)

### 関数のドキュメントを表示する

関数のドキュメントを作成するメリットは、場所を問わず、すぐに見ることができることです。

キーボードの `option` キーを押しながら、関数名をクリックすると（マウスポインタが疑問符になります）、関数のドキュメントが表示されます。

![0aeafb3397ac.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/635330/f9a59cf2-2d2b-9c85-37e7-07f2779d1056.gif)

## 変更を破棄する（最新のgitコミットと比較して）

コードに変更を加えると、コードの左側に青い縦線が表示されます。

青い線をクリックし、`Discard changes` オプションをクリックすると、行った変更を破棄することができます。

この操作では、青い線で覆われている変更部分が全て削除されますのでご注意ください。

![88315d2c2cea.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/635330/14a6211a-29f3-78ff-353f-4aa025c9a075.gif)

## 特定のコードに対して最後に変更を加えた編集者を検索する

行を右クリックして `Show last change for line` をクリックすると、現在の行に誰が変更を加えたかを確認できます。

![0b3883d5db39.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/635330/e1f9cd86-6dca-0395-be79-4eb8ea1ed50e.gif)

## 関数がコールされる場所をすべて見つける

特定の関数が呼び出されているすべての箇所を検索することができます。

そのためには、関数名を右クリックし、`Find` メニューを選択して、`Find call hierarchy` オプションをクリックしてください。

これはシステムフレームワークの関数に対しても同様に機能します。

![b82e3b4a7992.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/635330/9bb723c0-37e5-1b0d-605b-8b05e14657b7.gif)

## コードのさまざまなセクションを折りたたむ

多くの関数を含んでいるファイルがある場合、ファイルを折りたたむことができます。

初めに、Xcode設定の `Text Editing` セクションで、`Code folding ribbon` オプションを有効にしてください。

![スクリーンショット 2021-05-14 12.11.08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/635330/4af3f438-6bf8-9744-e059-63a13f74f40f.png)

すると、コードエディタの左端にある垂直インジケータをクリックすることにより、関数を折りたたんだり表示したりすることができるようになります。

![e96b045ebf9b.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/635330/ea75c9b3-69eb-8e35-c403-c283efc1ac9a.gif)

## プログラムヘッダーを手早く検索する

`command` `shift` `o` のキーを押すして、機能あるいはクラスネームを検索できます。
この操作でファイルの内容を検索することはできません。

## その他の Xcode に関するヒント（キーボード・ショートカット）

| ショートカット  | 機能  |
|---|---|
| `command` `-`  | フォントサイズが小さくなります  |
| `command` `+`  | フォントサイズが大きくなります |
| `command` `I`  | 自動的にコードのインデントを調整する |
| `command` `B`  | コードをビルドする  |
| `command` `R`  | コードを実行する  |
| `control` `command` `R`  | 再度ビルドすることなくコードを実行するには （最後にコンパイルされビルドを実行します）。  |
| `shift` `command` `L`  | 使用可能なすべてのライブラリおよびコードコンポーネントのリストを表示することができます。  |
| `option` `command` `/`  | 関数のドキュメントを作成する |
| `control` `6`  | 現在のファイルに含まれるアイテムのリストを表示する  |
| `command` `L`  | 特定の行に移動する |
| `control` `option` `command` `F`  | すべてのコード修正案を適用することができます。  |
| `control` `shift` `command` `M`  | ミニマップの表示・非表示。ミニマップにマウスオーバーすると、アイテム間をすばやく移動できます。 |
| `option` `shift` `command` `return`  | コード変更を見る (git)  |

- `Control` キーと `Shift` キーを押しながら、さまざまな場所をクリックすると、複数のマウスカーソルを置くことができます。次に、キーを放すとて、選択したすべての場所に入力することができます。
- 現在の作業ディレクトリにあるXcodeプロジェクトを素早く開きたい場合は、`xed .` をMacターミナルに入力することができます。

## Xcodeに関する私のQiita記事

- 私が書いた以前の記事の1つで、さまざまなタイプのコードコメントを使用してコードの異なるセクションをマークする方法についても説明しました。
https://qiita.com/MaShunzhe/items/00dbe277d158172fdfc2

- また、Xcodeを設定してデバイスにリモート接続することもできるため、アプリケーションのテスト中にワイヤレス充電を使用することができます。
https://qiita.com/MaShunzhe/items/e553cbc68c891eee0d9a

- 特定の条件に一致した場合 (特別なブレークポイント) には、プログラムを停止するためだけにデバッガーを使用することもできます。
https://qiita.com/MaShunzhe/items/b98d504b9ee6ddbd26b6

- Xcodeビュー要素ライブラリを介して、作成されたSwiftUIビューコンポーネントに簡単にアクセスできます
https://qiita.com/MaShunzhe/items/47f5041528b57127f669

- Xcode 12 でのアプリ内購入のテスト
https://qiita.com/MaShunzhe/items/486f45ba39433ce10d8a

- Xcodeシミュレーター管理コマンド
https://qiita.com/MaShunzhe/items/14d95bb27eb3d51c4233

- iOSアプリのローカライズとローカリゼーションのデバッグ - 開発言語の変更、ストーリーボードと文字列のローカライズ、ローカライズされていない文字列の特定とデバッグ
https://qiita.com/MaShunzhe/items/86200a5c03817497ac29

---

:sparkles: :sparkles: :sparkles: 

この記事が参考になり、Xcodeをより生産的に活用いただけるようであれば幸いです。

:relaxed: [Twitter ツイッター @MszPro](https://twitter.com/MszPro)

[私の公開されているQiita記事をカテゴリー別にご覧いただけます。](http://mszpro.com/ioskiji/)
<img width="150" src="https://cdn.mszmagic.com/static-web-content/AppClipImage_small.png">

:sunny: 今後ともよろしくお願い致します。