メインコンテンツまでスキップ

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の場合

kotlin.code.style=officialプロパティをプロジェクトルートのgradle.propertiesファイルに追加し、ファイルをVCSにコミットします。

Mavenの場合

kotlin.code.style officialプロパティをルートのpom.xmlプロジェクトファイルに追加します。

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