Kotlinコードスタイルへの移行
Kotlinコーディング規約とIntelliJ IDEAフォーマッタ
Kotlinコーディング規約は、イディオマティックなKotlinの記述に関するいくつかの側面に影響を与え、その中にはKotlinコードの可読性を向上させることを目的とした一連のフォーマットに関する推奨事項が含まれています。
残念ながら、IntelliJ IDEAに組み込まれているコードフォーマッタは、このドキュメントがリリースされるはるか以前から機能しており、現在推奨されているものとは異なるフォーマットを生成するデフォルト設定になっています。
IntelliJ IDEAのデフォルト設定を切り替え、フォーマットをKotlinコーディング規約と一致させることで、この不明瞭さを解消することが論理的な次のステップに思えるかもしれません。しかし、これは既存のすべてのKotlinプロジェクトで、Kotlinプラグインがインストールされた瞬間に新しいコードスタイルが有効になることを意味します。プラグインの更新としては、あまり期待される結果ではありませんよね?
そのため、代わりに以下の移行計画を立てています。
- Kotlin 1.3以降、デフォルトで公式のコードスタイルフォーマットを有効にし、新しいプロジェクトにのみ適用します(古いフォーマットは手動で有効にできます)。
- 既存プロジェクトの作成者は、Kotlinコーディング規約に移行することを選択できます。
- 既存プロジェクトの作成者は、プロジェクトで古いコードスタイルを使用することを明示的に宣言することを選択できます(これにより、将来的にデフォルトへの切り替えによる影響を受けなくなります)。
- Kotlin 1.4でデフォルトのフォーマットに切り替え、Kotlinコーディング規約と一致させます。
「Kotlinコーディング規約」と「IntelliJ IDEAのデフォルトコードスタイル」の違い
最も注目すべき変更は、継続インデントのポリシーです。複数行の式が前の行で終了していないことを示すために、ダブルインデントを使用するという良い考え方があります。これは非常にシンプルで一般的なルールですが、この方法でフォーマットされると、いくつかのKotlinの構文は少し不格好に見えます。Kotlinコーディング規約では、以前に長い継続インデントが強制されていたケースでは、シングルインデントを使用することが推奨されています。

実際には、かなり多くのコードが影響を受けるため、これは主要なコードスタイルの更新と見なすことができます。
新しいコードスタイルへの移行に関する議論
新しいコードスタイルの採用は、古い方法でフォーマットされたコードがない新しいプロジェクトから開始される場合、非常に自然なプロセスとなるでしょう。そのため、バージョン1.3以降、Kotlin IntelliJプラグインは、デフォルトで有効になっているコーディング規約ドキュメントからのフォーマットで新しいプロジェクトを作成します。
既存のプロジェクトでフォーマットを変更することは、はるかに要求の厳しいタスクであり、チームとすべての注意点を議論することから始めるべきでしょう。
既存のプロジェクトでコードスタイルを変更する主な欠点は、blame/annotate VCS機能が無関係なコミットを指すことが多くなることです。各VCSにはこの問題に対処するための何らかの方法がありますが(IntelliJ IDEAでは"Annotate Previous Revision"を使用できます)、新しいスタイルがすべての労力に見合う価値があるかどうかを決定することが重要です。再フォーマットのコミットを意味のある変更から分離する慣行は、後続の調査に大いに役立ちます。
また、大規模なチームにとっては移行がより困難になる場合があります。複数のサブシステムで多数のファイルをコミットすると、個人のブランチでマージの競合が発生する可能性があるためです。各競合の解決は通常は些細なことですが、現在作業中の大規模な機能ブランチがあるかどうかを知ることは依然として賢明です。
一般的に、小規模なプロジェクトでは、すべてのファイルを一度に変換することをお勧めします。
中規模および大規模プロジェクトの場合、その決定は困難な場合があります。すぐに多くのファイルを更新する準備ができていない場合は、モジュールごとに移行するか、変更されたファイルのみを段階的に移行し続けることを決定できます。
新しいコードスタイルへの移行
Kotlinコーディング規約のコードスタイルに切り替えるには、設定/環境設定 | エディター | コードスタイル | Kotlin ダイアログで行えます。スキームをプロジェクトに切り替え、設定から... | Kotlinスタイルガイド を有効にしてください。
すべてのプロジェクト開発者とこれらの変更を共有するには、.idea/codeStyle
フォルダーをVCSにコミットする必要があります。
外部ビルドシステムがプロジェクトの設定に使用されており、.idea/codeStyle
フォルダーを共有しないと決定された場合、追加のプロパティを使用してKotlinコーディング規約を強制することができます。
Gradleの場合
プロジェクトのルートにある gradle.properties
ファイルに kotlin.code.style=official
プロパティを追加し、そのファイルをVCSにコミットします。
Mavenの場合
ルートの pom.xml
プロジェクトファイルに kotlin.code.style official
プロパティを追加します。
<properties>
<kotlin.code.style>official</kotlin.code.style>
</properties>
kotlin.code.style オプションが設定されていると、プロジェクトのインポート中にコードスタイルスキームが変更され、コードスタイル設定が変わる可能性があります。
コードスタイル設定を更新した後、プロジェクトビューで目的のスコープに対してコードの再フォーマットを有効にしてください。

段階的な移行のために、プロジェクト設定に従ってファイルがフォーマットされていませんというインスペクションを有効にすることができます。これにより、再フォーマットすべき箇所がハイライトされます。変更されたファイルにのみ適用オプションを有効にした後、インスペクションは変更されたファイルのみでフォーマットの問題を表示します。そのようなファイルはいずれにせよすぐにコミットされる可能性が高いからです。
プロジェクトに古いコードスタイルを保存する
プロジェクトの正しいコードスタイルとしてIntelliJ IDEAのコードスタイルを明示的に設定することは常に可能です。
- 設定/環境設定 | エディター | コードスタイル | Kotlin で、プロジェクトスキームに切り替えます。
- ロード/保存タブを開き、デフォルトを使用からKotlin廃止済みIntelliJ IDEAコードスタイルを選択します。
プロジェクト開発者間で変更を共有するには、.idea/codeStyle
フォルダーをVCSにコミットする必要があります。あるいは、GradleまたはMavenで構成されたプロジェクトでは、kotlin.code.style=obsoleteを使用することもできます。