Skip to content

Kotlinコードスタイルへの移行

Kotlin 1.4.0以降、IntelliJ IDEAのすべてのプロジェクトで公式のコードスタイルフォーマットがデフォルトで有効になっています。

Kotlinコーディング規約とIntelliJ IDEAフォーマッタ

Kotlinコーディング規約は、慣用的なKotlinを書くためのいくつかの側面に影響を与えます。その中には、Kotlinコードの可読性を向上させることを目的とした一連のフォーマット推奨事項も含まれています。

IntelliJ IDEAに組み込まれているコードフォーマッタは、以前は現在推奨されているものとは異なるフォーマットを生成するデフォルト設定になっていました。

IntelliJ IDEAのデフォルト設定を切り替え、Kotlinコーディング規約と一貫性のあるフォーマットにすることで、この不一致を解消したいと考えています。そのため、以下の移行プランが実施されました。

  • Kotlin 1.3.0以降、公式のコードスタイルフォーマットは新規プロジェクトでのみデフォルトで有効になりました(古いフォーマットは手動で有効にできます)。
  • 既存プロジェクトの作成者は、Kotlinコーディング規約への移行を選択できます。
  • 既存プロジェクトの作成者は、プロジェクトで古いコードスタイルを使用することを明示的に宣言することを選択できます(これにより、将来デフォルトが切り替わってもプロジェクトが影響を受けることはありません)。
  • Kotlin 1.4.0以降、Kotlinコーディング規約と一貫性を持たせるため、すべてのプロジェクトでデフォルトのフォーマットが有効になります。

「Kotlinコーディング規約」と「IntelliJ IDEAデフォルトコードスタイル」の違い

最も顕著な変更点は、継続インデント(continuation indentation)ポリシーです。複数行にわたる式が前の行で終わっていないことを示すために、ダブルインデントを使用するという優れたアイデアがあります。これは単純で一般的なルールですが、いくつかのKotlinの構文をこの方法でフォーマットすると、少し不自然に見えることがあります。Kotlinコーディング規約では、以前は長い継続インデントが強制されていたケースでも、シングルインデントを使用することが推奨されています。

Code formatting

実際にはかなりの量のコードが影響を受けるため、これは主要なコードスタイルのアップデートであると考えられます。

新しいコードスタイルへの移行に関する議論

新しいプロジェクトから開始し、古い方法でフォーマットされたコードがない場合、新しいコードスタイルの採用は非常に自然なプロセスとなります。そのため、バージョン1.3.0以降、Kotlin IntelliJプラグインはコーディング規約ドキュメントのフォーマットを適用して新規プロジェクトを作成し、それがデフォルトで有効になっています。

既存のプロジェクトでフォーマットを変更することは、はるかに困難なタスクであり、チーム内ですべての注意点について話し合うことから始めるべきでしょう。

既存のプロジェクトでコードスタイルを変更する主なデメリットは、VCS(バージョン管理システム)のblame/annotate機能が、関係のないコミットを指す頻度が高くなることです。各VCSにはこの問題に対処する方法(IntelliJ IDEAでは「前のリビジョンの注釈(Annotate Previous Revision)」を使用可能)がありますが、新しいスタイルがその労力に見合うかどうかを判断することが重要です。フォーマット変更のコミットを有意義な変更のコミットと分ける慣習は、後の調査に非常に役立ちます。

また、大規模なチームでは、複数のサブシステムで大量のファイルをコミットすると、個人のブランチでマージコンフリクトが発生する可能性があるため、移行が難しくなる場合があります。各コンフリクトの解決は通常簡単ですが、現在作業中の大きなフィーチャーブランチがあるかどうかを確認しておくのが賢明です。

一般的に、小規模なプロジェクトでは、すべてのファイルを一度に変換することをお勧めします。

中規模および大規模なプロジェクトでは、決断が難しい場合があります。すぐに多くのファイルを更新する準備ができていない場合は、モジュールごとに移行するか、変更されたファイルに対してのみ段階的な移行を続けることを選択できます。

新しいコードスタイルへの移行

Kotlinコーディング規約のコードスタイルへの切り替えは、Settings/Preferences | Editor | Code Style | Kotlin ダイアログで行えます。Schemeを Project に切り替え、Set from... | Kotlin style guide を有効にします。

これらの変更をすべてのプロジェクト開発者と共有するには、.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 オプションを設定すると、プロジェクトのインポート中にコードスタイルスキームが変更され、コードスタイル設定が変更される場合があります。

コードスタイル設定を更新した後、プロジェクトビューで対象のスコープに対して Reformat Code を実行します。

Reformat code

段階的に移行する場合は、File is not formatted according to project settings インスペクションを有効にすることができます。これにより、再フォーマットが必要な箇所が強調表示されます。Apply only to modified files オプションを有効にすると、インスペクションは変更されたファイル内のフォーマットの問題のみを表示します。そのようなファイルはいずれにせよ、近いうちにコミットされる可能性が高いものです。

古いコードスタイルをプロジェクトに保存する

プロジェクトの正しいコードスタイルとして、IntelliJ IDEAのコードスタイルを明示的に設定することも常に可能です。

  1. Settings/Preferences | Editor | Code Style | Kotlin で、Project スキームに切り替えます。
  2. Load/Save タブを開き、Use defaults fromKotlin obsolete IntelliJ IDEA codestyle を選択します。

プロジェクト開発者間で変更を共有するには、.idea/codeStyle フォルダをVCSにコミットする必要があります。あるいは、GradleやMavenで構成されたプロジェクトでは、kotlin.code.style=obsolete を使用することもできます。