Skip to content

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コーディング規約では、長い継続インデントが以前に強制されていた場合に、シングルインデントを使用することが推奨されています。

Code formatting

実際には、かなりの量のコードが影響を受けるため、これは主要なコードスタイル更新と見なすことができます。

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

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

既存のプロジェクトでフォーマットを変更することは、はるかに要求の厳しいタスクであり、おそらくチームとすべての注意事項を議論することから始めるべきです。

既存のプロジェクトでコードスタイルを変更する主な欠点は、blame/annotate VCS機能が、関連性のないコミットをより頻繁に指すようになることです。各VCSにはこの問題に対処する何らかの方法がありますが(IntelliJ IDEAでは「Annotate Previous Revision」を使用できます)、新しいスタイルがそれだけの労力を費やす価値があるかどうかを決定することが重要です。再フォーマットコミットを意味のある変更から分離する実践は、後の調査に大いに役立ちます。

また、大規模なチームにとって移行はより困難になる可能性があります。なぜなら、複数のサブシステムで多数のファイルをコミットすると、個人のブランチでマージの競合が発生する可能性があるためです。各競合の解決は通常は些細なことですが、現在作業中の大規模なフィーチャーブランチがあるかどうかを知っておくことは賢明です。

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

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

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

Kotlinコーディング規約のコードスタイルに切り替えるには、Settings/Preferences | Editor | Code Style | Kotlin ダイアログで行います。スキームを 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>

DANGER

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 を使用することもできます。