Riderのコードフォーマット設定は.editorconfigに書き出すことができる

# はじめに

個人で「Riderはいいぞ！」と思っていても実際のチーム開発ではVisual Studioを使いたい人が混ざることもあり、コードフォーマットの設定ファイルの管理をどうするかという問題が起きがちです。

本記事ではこうした問題に対してどういうやり方で対応が可能かと、表題のとおりRiderの設定を `.editorconfig` に書き出す方法をご紹介します。

# 設定ファイルのメンテナンス戦略

Riderを使う前提だと大きく分けて以下の３つが考えられます。

| 手法 | メリット | デメリット |
|:----|:------|:-------|
| 1. Riderの設定ファイルとVisual Studioの設定ファイルをそれぞれ作って管理 | エディタに応じた細かい設定が可能 | メンテナンスコストが高い（単純計算だと２倍） |
| 2. Visual Studio使う人にはReSharperを入れてもらう | 設定ファイルが.DotSettingsだけになるのでメンテナンスコストが安い | Visual Studioの数だけReSharperのライセンス料金がかかる |
| 3. 設定ファイルを.editorconfigに一本化する | 設定ファイルが一つで済む | ・書くのが辛い<br>・エディタによって対応しているスタイルに違いがある |

メンテナンスコストを考えると

* お金を払える　→　ReSharper入れてもらう
* 無料がいい！　→　 `.editorconfig` に一本化する

のどちらかになると思います。

# Rider/Visual Studioと `.editorconfig`

[EditorConfigのWiki](https://github.com/editorconfig/editorconfig/wiki/EditorConfig-Properties) を見るとわかるのですが、 `.editorconfig` で設定可能なスタイルというのはめちゃくちゃ少ないです。

* indent_style
* indent_size
* tab_width
* end_of_line
* charset
* trim_trailing_whitespace
* insert_final_newline
* (max_line_length)

https://github.com/editorconfig/editorconfig/wiki/EditorConfig-Properties

ですが、実はVisual Studio独自のカスタムスタイルが多くあり、Riderも（ある程度）対応しています。逆にRider/Resharper独自のカスタムスタイルもあります。

https://docs.microsoft.com/ja-jp/dotnet/fundamentals/code-analysis/code-style-rule-options

https://pleiades.io/help/rider/Using_EditorConfig.html

ということで全てではないにせよ一応コードフォーマットの設定は `.editorconfig` に一本化できるのですが、無から `.editorconfig` を書くのはかなり辛いです。

# Riderの設定を `.editorconfig` に書き出すやり方

「Riderの設定を `.editorconfig` に書き出せたらいいのになぁ」

と思ってたら、自分が知らないだけでRiderにそういう機能があったので紹介します。

以下の説明におけるRiderのバージョンは `2022.2.1` ですが、[ドキュメント](https://pleiades.io/help/rider/2019.1/Using_EditorConfig.html)を見る限りこの機能自体は `2019.1` からあるみたいです。

---

グローバルメニューの `JetBrains Rider`→ `Preferences...`
　↓
左ペインの `Editor`　→　`Code Style`
　↓
右ペインの `Enable EditorConfig support` の右にある `Export` をクリック

![スクリーンショット_2022-09-07_16_49_42.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/27863/2a7a9859-738c-a14f-5c89-208fa9c45b14.png)

`Export to .editorconfig` のウィンドウが開くので下に表示されるdiffを確認して `Export`　をクリックします。

![スクリーンショット_2022-09-07_16_56_51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/27863/9b173635-95f4-b6c9-c53f-d5d728be84f3.png)

すでに `.editorconfig` が存在していればそれを変更・追記する形になります。

`Show additional options` のトグルはデフォルトで閉じているので、オプションを調整したい場合はクリックして開きます。

デフォルトだと一番上の `Export settings that have default values` がoffになっていて、onにすると書き込まれる設定値が増えます。

RiderとVisual Studioとでデフォルトの設定値は違うはずなので厳密な運用をしたいならonにしたいところですが、手元で試したら68行→3483行に膨れ上がったので、どちらがいいかはよく考えたほうがよさそうです。

# 実はVisual Studioにも同様の機能がある

この記事書くのにいろいろ調べてたらVisual Studioにも同様の機能がありました。

https://docs.microsoft.com/en-us/visualstudio/ide/create-portable-custom-editor-options?view=vs-2022

>There are a couple of other ways you can add an EditorConfig file to your project:
>
>・The code inference feature of IntelliCode for Visual Studio infers your code styles from existing code. It then creates a non-empty EditorConfig file with your code-style preferences already defined.
>
>・Starting in Visual Studio 2019, you can generate an EditorConfig file based on your code-style settings in Tools > Options.

以下のブログが参考になります。

https://blog.shibayan.jp/entry/20200322/1584875344

# CIでコードフォーマットする方法

今回は詳しく紹介しませんが、コードをpushしたらCIでコードフォーマットをかける方法も考えられます。

以下が参考になります。

https://pleiades.io/help/resharper/CleanupCode.html

https://tech.guitarrapc.com/entry/2021/12/07/232921

Visual Studio使ってる人にCleanupCodeコマンドラインツール﻿を使ってローカルでフォーマットしてもらう運用を試したことがあるのですが、一回の実行に数十秒〜1分とかかかるので実用性に難ありでした（起動に時間がかかるのでバックグラウンドで起動しっぱなしにするとかできないんだろうか）。

# 最後に
次の技術書典でRiderの解説本が出るらしいので要チェック！

https://twitter.com/udon_qu/status/1566622475458584576?s=20&t=Ce-1cJnFO_PDvIncRwBisA