Xcode16から.editorconfigがサポートされてインデントの設定など便利になったっぽい🎉

# はじめに
どうも、限界個人開発者の[tsuzuki817](https://x.com/tsuzuki817)です😵

Appleプラットフォームの開発者であれば、プロジェクトごとに異なるコーディングスタイルでインデントの調整などを都度変更して開発をすることもあったでしょう🐢

または新しいメンバーがプロジェクトに参画した際にgitのdiffにスペースが4つ入っていたり、タブ派とスペース派の間で戦争が起きかねません。

これらの作業は大変面倒でしたが、Xcode16で `.editorconfig`がサポートされたことによってその悩みから解放されます :tada: 

`.editorconfig`を置くことで プロジェクトをクローンしてきてXcodeを開いたらそのプロジェクトのインデントやEditingの設定が適応されている状態にすることができるのです（めでたし）

https://developer.apple.com/documentation/xcode-release-notes/xcode-16-release-notes

![スクリーンショット 2024-12-16 18.09.22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/171702/25881fef-3998-0c14-0682-a317174b9b9b.png)

# .editorconfig ファイルの作成
.editorconfigファイルは、 `.xcodeproj`ファイルまたは `Package.swift`のファイルの隣に作成しましょう！

<details><summary>どこにおいてもいいの？</summary>

EditorConfigをサポートする他のエディターの場合と同様、Xcodeは特定のファイルからディレクトリを自動的に検索して.editorconfigファイルを探します。特定のファイルに最も近い.editorconfigファイルが、そのファイルのエディター設定を決定するために使用されます✌️
なのでなるべくプロジェクトに近いところに作りましょう！

</details>

## Xcode16で使えるeditorconfig

もっと追加してもいいんですよ！Appleさん！
 
| プロパティ | 値 |
| -- | -- |
| indent_style | tab, space |
| tab_width | 正の整数 |
| indent_size | 正の整数 |
| end_of_line | lf, cr, crl |
| insert_final_newline | true, false |
| max_line_length | true, false |
| trim_trailing_whitespace | true, false |


## ファイルの種類

ex) [*.swift]
.editorconfigには次のように、ファイルの種類ごとにコーディングスタイルの設定をそれぞれ記述していきます。[ ]内にファイルの種類を指定します。
.editorconfigでは、ワイルドカードを使ってファイル名を指定できます。
（特定のディレクトリを指定しない場合は、プロジェクト内すべてのディレクトリにあるファイルが対象となる）

## indent_style

ex) space

インデントの種類を指定できます。tabかspaceのみ指定可能です。

| tab | space |
| -- | -- |
|![スクリーンショット 2024-12-17 0.22.02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/171702/fa4bbd1f-3ad6-36e1-e881-be4ec4f0c40f.png) | ![スクリーンショット 2024-12-17 0.21.27.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/171702/a33d0422-3874-2fc1-cb53-9f04b4bd5c40.png) |


## indent_size

1インデントの幅を数値で指定します！

| indent_size = 4 | indent_size = 2 |
| -- | -- |
| ![スクリーンショット 2024-12-17 0.23.28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/171702/1d182252-4185-9760-2cb4-dd99c127245f.png) |![スクリーンショット 2024-12-17 0.21.27.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/171702/f81a9964-2012-9d0c-6b0e-39ec62639eb3.png) | 

## tab_width
インデントがタブの場合の1インデントの幅を指定できます！
| tab_width = 4 | tab_width = 8 |
| -- | -- |
| ![スクリーンショット 2024-12-17 0.30.51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/171702/c2e16158-3ebb-a8de-64e9-56c0090b4d3e.png) | ![スクリーンショット 2024-12-17 0.30.51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/171702/957a2139-8949-d0e4-15e6-78950953a19e.png) |

## max_line_length

1行に含めることができる最大文字数
現在、Xcodeでは自動行折り返しはまだサポートされていません！
この設定は、Settings > Editing > Show Reformatting Guideをオンにすることで有効にできるページ ガイドラインに反映されるだけです🐸

![スクリーンショット 2024-12-17 0.44.50.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/171702/54bb8701-5769-5737-0ee4-1c9209899060.png)

ex) 10
(極端な例です！見づらくてしょうがないですね🙈)
![スクリーンショット 2024-12-17 0.46.14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/171702/a17c5c97-c4d4-0e43-7692-7664d32bacc6.png)

## trim_trailing_whitespace

trueに設定することで、行末（改行コードの前）にある空白文字（スペースやタブ）を削除します。

通常はtrueにしておくことでコードがクリーンに保たれます🧹

![animated.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/171702/73862ba3-818d-030b-2869-b3f786720f31.gif)

## end_of_line

改行コードを指定します。
lf、cr、crlfのいずれかを指定できるよ！

## insert_final_newline
最後の行に空行を入れます。

trueに設定して、最後の行は空行にするのが一般的

![スクリーンショット 2024-12-17 1.01.49.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/171702/599039a8-7162-639a-d6a1-28d6040be25e.png)


## Xcodeの設定とeditorconfigファイルの設定どっちが優先？

`Prefer Settings from EditorConfig`が有効になっていれば editorconfigが優先されます。
この設定はデフォルトでオンになっていますが、いつでもオフにして、Xcode でエディター設定を手動で設定することができます！

![スクリーンショット 2024-12-16 18.20.49.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/171702/96d9aa5b-6ef6-bf1a-6419-c433127bee93.png)

## 反映方法
XcodeをQuit and Restart👍

## `おすすめ.editorconfig`

```.editorconfig
# ファイルの種類
[*.swift]
# インデントの種類
indent_style = space
# 1インデントの幅
indent_size = 2
# インデントがタブの場合の、1インデントの幅
tab_width = 2
# trueに設定することで、行末にある空白文字（スペースやタブ）を削除
trim_trailing_whitespace = true
# 最後の行に空行を入れる
insert_final_newline = true

# あとはお好きに
```

これをgit共有すればチームみんなでインデント2の世界に飛び込めますね！
ぜひ、 editorconfig 使ってみてください！

---

おすすめアプリ✈️

https://apps.apple.com/jp/app/%E6%97%85%E8%A1%8C%E6%80%9D%E3%81%84%E5%87%BA%E3%83%9E%E3%83%83%E3%83%97-%E6%97%A5%E6%9C%AC%E3%82%84%E4%B8%96%E7%95%8C%E3%81%AE%E5%9C%B0%E5%9B%B3%E3%82%92%E5%86%99%E7%9C%9F%E3%81%A7%E5%9F%8B%E3%82%81%E3%82%88%E3%81%86/id6478291625

---