JetBrainsのIDE(IntelliJ IDEA, PyCharm, WebStormなど)を使っていると .idea/ ディレクトリがプロジェクトに作成されます。このディレクトリには IDE の設定が保存されており、.gitignoreに含めるべきか含めないべきか、いつも悩んでしまいます。

一般的に.idea/全体を除外するという方法も有力ですが、それだとプロジェクト設定をまったく共有することはできません。必要なファイルを共有すれば便利な場合もあるはずです。

今回はこの.idea/ ディレクトリをどのように扱うべきなのかを調べて見ました。

JetBrains公式の推奨事項は?

JetBrains公式記事「How to manage projects under Version Control Systems」によると、次のような指針が示されています。

共有すべきファイル(=コミットOK)

  • .idea/ディレクトリ内のプロジェクト構成情報(ただし除外すべきファイルを除く)
  • .iml(モジュールファイル)

除外すべきファイル(=.gitignoreで無視)

  • workspace.xml:ユーザー固有のウィンドウ配置や履歴など
  • usage.statistics.xml:使用履歴や統計情報
  • shelf/:一時作業保存領域
  • aws.xml:AWS設定
  • dataSources.xml などのDB設定(パスワード含まれる可能性あり)
  • .idea/libraries, gradle.xml(Maven/Gradleの場合は自動生成)

.gitignoreテンプレートの活用

JetBrains専用の .gitignore テンプレートを使うことで、安全かつ効率的な設定が可能です。GitHubには以下のようなテンプレートがあります:

# Covers JetBrains IDEs: IntelliJ, GoLand, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio, WebStorm and Rider
# Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839

# User-specific stuff
.idea/**/workspace.xml
.idea/**/tasks.xml
.idea/**/usage.statistics.xml
.idea/**/dictionaries
.idea/**/shelf

# AWS User-specific
.idea/**/aws.xml

# Generated files
.idea/**/contentModel.xml

# Sensitive or high-churn files
.idea/**/dataSources/
.idea/**/dataSources.ids
.idea/**/dataSources.local.xml
.idea/**/sqlDataSources.xml
.idea/**/dynamic.xml
.idea/**/uiDesigner.xml
.idea/**/dbnavigator.xml

# Gradle
.idea/**/gradle.xml
.idea/**/libraries

# Gradle and Maven with auto-import
# When using Gradle or Maven with auto-import, you should exclude module files,
# since they will be recreated, and may cause churn.  Uncomment if using
# auto-import.
# .idea/artifacts
# .idea/compiler.xml
# .idea/jarRepositories.xml
# .idea/modules.xml
# .idea/*.iml
# .idea/modules
# *.iml
# *.ipr

# CMake
cmake-build-*/

# Mongo Explorer plugin
.idea/**/mongoSettings.xml

# File-based project format
*.iws

# IntelliJ
out/

# mpeltonen/sbt-idea plugin
.idea_modules/

# JIRA plugin
atlassian-ide-plugin.xml

# Cursive Clojure plugin
.idea/replstate.xml

# SonarLint plugin
.idea/sonarlint/
.idea/sonarlint.xml # see https://community.sonarsource.com/t/is-the-file-idea-idea-idea-sonarlint-xml-intended-to-be-under-source-control/121119

# Crashlytics plugin (for Android Studio and IntelliJ)
com_crashlytics_export_strings.xml
crashlytics.properties
crashlytics-build.properties
fabric.properties

# Editor-based HTTP Client
.idea/httpRequests
http-client.private.env.json

# Android studio 3.1+ serialized cache file
.idea/caches/build_file_checksums.ser

# Apifox Helper cache
.idea/.cache/.Apifox_Helper
.idea/ApifoxUploaderProjectSetting.xml

IntelliJ 2019.1以降の補足

IntelliJ 2019.1以降では、共有すべき設定を自動でバージョン管理対象に含める機能が追加されました。しかし、ユーザー固有ファイルや機密情報まで自動検出できるわけではないため、.gitignoreによる制御は依然として有効です。

実践的な運用方法

IntelliJで.idea/フォルダを共有する場合、推奨の.gitignoreを使用する方法が簡単です。

オープンソースプロジェクトなどでは.idea/全体を除外する方法も有力ですが、この場合、自分が使っている複数のマシン(開発環境)でも設定が同期できなくなります。対策としてrsynなどを使って設定部分だけをコピーする方法を使えます。

rsync -avz ./myproject/.idea/ user@linuxhost:~/myproject/.idea/

まとめ

IntelliJでの開発において.ideaの扱いは「除外か共有か」だけでなく、チーム開発の効率とトラブル回避を左右する重要なポイントです。公式ガイドと.gitignoreテンプレートを活用し、賢く運用していきましょう。