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
テンプレートを活用し、賢く運用していきましょう。