Android StudioでAndroidアプリを作る時の.gitignore


はじめに

諸事情によりAndroid StudioAndroidアプリを開発する時の.gitignoreを作る必要に迫られました。検索すれば他の人の記事やプロジェクトの.gitignoreはすぐ見つかるのですが、Git管理対象外とする理由をまとめておきたいと思い記事として残しておくことにしました。業務やプライベートで学んだり開発してるうちに変化があると思いますし、まだ調べられてないものもあるので、この記事は随時更新していきたいと思います。

参考

この先に自分の考えや調査結果を書いていきますが、基本的には参考サイトを見ていただければ(この記事を読まなくても)問題ないと思います。以下の3つの記事を読めば、Git管理必要かどうかや自動生成されるものかどうかなど、知りたいことは大体知れました。

第34回 バージョン管理 ─プロジェクト管理ファイルについて[中編] | gihyo.jp
第35回 バージョン管理 ─プロジェクト管理ファイルについて[後編] | gihyo.jp
Exploring the .idea Folder in Android | by Oliver Spryn | Better Programming


また以下の記事やリポジトリも参考にさせていただきました。

gitignore/Android.gitignore at main · github/gitignore · GitHub
DroidKaigi · GitHub
Androidアプリ開発探求記(その4) - Qiita
【Android】もっと先へ「加速」したくはないか、少年 〜gitignore編〜 - Qiita

ChatGPTに.gitignoreを教えてもらう

せっかくなので(?)、ChatGPTにも聞いてみました。2022/12/28のやりとりです。『』が自分の入力した内容です。

Android StudioAndroidアプリを作る場合の.gitignoreを教えて』


.gitignoreファイルは、Gitリポジトリから特定のファイルやディレクトリを除外するためのファイルです。Android StudioプロジェクトをGitリポジトリに追加する場合、次のような内容の.gitignoreファイルを使用することができます。

# Built application files
*.apk
*.ap_

# Files for the Dalvik VM
*.dex

# Java class files
*.class

# Generated files
bin/
gen/

# Gradle files
.gradle/
build/

# Local configuration file (sdk path, etc)
local.properties

# Proguard folder generated by Eclipse
proguard/

# Log Files
*.log

# Android Studio Navigation editor temp files
.navigation/

# Android Studio captures folder
captures/

# IntelliJ
*.iml
*.ipr
*.iws
out/

# Keystore files
*.jks

# External native build folder generated in Android Studio 2.2 and later
.externalNativeBuild

# Google Services (e.g. APIs or Firebase)
google-services.json

# Freeline
freeline.py
freeline/
freeline_project_description.json

この.gitignoreファイルは、ビルドされたアプリケーションファイル、Dalvik VM用のファイル、Javaクラスファイル、生成されたファイル、Gradleファイル、ローカル構成ファイル、Proguardフォルダ、ログファイル、Android Studioナビゲーションエディタの一時ファイル、Android Studioキャプチャフォルダ、IntelliJのプロジェクトファイル、キーストアファイル、Android Studio 2.2以降で生成される外部ネイティブビルドフォルダ、Googleサービス用のファイル、およびFreeline用のファイルを除外するように設定されています。

これらの設定は、お使いの環境やプロジェクトによって異なる場合があるので、適宜カスタマイズする必要があります。また、.gitignoreファイルを作成するには、テキストエディタを使用して新しいファイルを作成し、上記のような内容を記述して保存します。


『.ideaフォルダを除外する必要はありませんか?』


.ideaフォルダは、IntelliJ IDEAやAndroid Studioで作成されるプロジェクトの設定や情報が保存されるフォルダです。このフォルダ内には、プロジェクトに関する設定や設定情報、プロジェクトの文書履歴、キャッシュデータ、その他の諸々が含まれています。

一般的に、.ideaフォルダは、Gitリポジトリに含める必要はありません。このフォルダ内のファイルは、プロジェクトを開くために必要であり、他の人がプロジェクトを開く場合にも、このフォルダ内のファイルは新しく生成されます。そのため、このフォルダをGitリポジトリに含めることは意味がありません。

ただし、.ideaフォルダをGitリポジトリに含めることは問題ではありません。ただし、このフォルダ内のファイルは、プロジェクトを開くために必要であり、他の人がプロジェクトを開く場合にも、このフォルダ内のファイルは新しく生成されるため、このフォルダをGitリポジトリに含めることは一般的ではありません。

そのため、通常は、.gitignoreファイルに.ideaフォルダを追加して、Gitリポジトリからこのフォルダを除外することが推奨されます。



2022/12/28時点での.gitignore

調査した結果、調査した結果自分がベースとして考え始める.gitignoreが下記になります。当然プロジェクトによって違いが出てくるはずですが、現状自分が触れているプロジェクトでは下記ベースで問題なさそうです。最初に書いた通り何かあれば随時更新予定です。

.ideaフォルダ内は基本的には不要なので丸ごとGit管理対象外とし、.idea内で必要なものだけGit管理対象とする書き方にしています。

*.apk
*.aab
*.obb
output-metadata.json

*.jks

.gradle
build/
local.properties
*.iml
.idea/*

# Preferences > Editor > Code StyleのSchema: Projectでコードスタイルを設定し利用する場合
!.idea/codeStyles
.idea/codeStyles/*
!.idea/codeStyles/Project.xml
!.idea/codeStyles/codeStyleConfig.xml

# 共通のスペルチェック用辞書ファイルを運用する場合
!.idea/dictionaries
.idea/dictionaries/*
!.idea/dictionaries/スペルチェック用辞書ファイル名.xml


調査結果

「自動生成される〜」と書いてあるのは、どこかのタイミングで別ファイルを参照して自動で作成または更新されるものであり、その自動生成されたフォルダやファイルを共有しても意味がない(結局共有された側でも自動生成されて共有したものが上書きされる)と思っているので、Git管理対象外でよいとしています。

*.apk

アプリを端末に入れる時やリリース時に使うファイルなので、Git管理対象外でよいと考えています。apk、aab、obbについてはこちらが参考になりました。

*.aab

同上。

*.obb

同上。

output-metadata.json

Build > Generate Signed Bundle / APKで署名してapkかaabを作成すると、出力先に作成されます。このファイルも共有する必要がないと思っているのですが、なぜかそういった.gitignoreや記事がほとんど見つかりません。ファイル名で除外すると何か不都合があるのかわからないですが、理由がわかるまでGit管理対象外としておこうと思います。

一応ChatGPTにも聞いてみましたが、Git管理対象外としてよさそうです。

Android Studioでリリース用のAPKを作成すると、output-metadata.jsonが同時に作成されます。output-metadata.jsonについて教えてください。』


output-metadata.jsonは、Android Studioでリリース用のAPKを作成すると同時に生成されるJSON形式のファイルです。このファイルには、APKのリリース情報が記録されています。

output-metadata.jsonには、APKのリリース情報を次のように記録されています。

APKのパッケージ名
APKのバージョンコード
APKのバージョン名
APKのターゲットSDKバージョン

output-metadata.jsonは、Android StudioでAPKをリリースするために必要な情報をまとめたものであり、APKをリリースするために必要な情報を保持しているため、通常はGitリポジトリに含める必要はありません。

ただし、APKのリリース情報をGitリポジトリに記録したい場合は、output-metadata.jsonをGitリポジトリに含めることもできます。ただし、Gitリポジトリにoutput-metadata.jsonを含めることによって、リポジトリのサイズが大きくなる可能性があるため、注意が必要です。



*.jks

リリース用のAPKを作る時などに行うアプリへの署名に使うファイルなので、Git管理対象外でよい(というかリモートリポジトリにアップしてはダメ)と考えています。

.gradle

自動生成されるのでGit管理対象外でよいと考えています。.gradleについてはこちらが参考になりました。

build

自動生成されるのでGit管理対象外でよいと考えています。buildについてはこちらが参考になりました。

local.properties

Android Studioによって開発者のローカル環境の設定値が自動で記載されるファイルなのでGit管理対象外でよいと考えています。local.propertiesについてはAndroid Developersにも少しだけ説明が載っていました。

*.iml

自動生成されるのでGit管理対象外でよいと考えています。

.idea/caches

キャッシュを保存するためのフォルダなのでGit管理対象外でよいと考えています。

.idea/codeStyles

このフォルダ内のファイルには、Android StudioのPreferences > Editor > Code Styleで設定したコードスタイルの情報が記載されるので、チーム内でコードスタイルを共有するためにも対象ファイルのみGit管理対象とすべきだと考えています。Schema: Projectでコードスタイルを設定し利用する場合はProject.xmlとcodeStyleConfig.xmlがGit管理対象になります。

.idea/dictionaries

共通のスペルチェック用辞書ファイルを運用する場合は、対象ファイルのみGit管理対象とすべきだと考えています。こちらが参考になりました。

.idea/libraries

自動生成されるのでGit管理対象外でよいと考えています。

.idea/modules

自動生成されるのでGit管理対象外でよいと考えています。

.idea/.name

全員で共有する必要はないのでGit管理対象外でよいと考えています。プロジェクトによっては共有するのかもしれません。

.ideaディレクトリにひっそり潜んでいる .name ファイルですが、これには「そのプロジェクトのタイトル」が記録されています。このファイルがどこに機能しているかというと、タイトルバーやウェルカム画面に表示されるプロジェクト名で使われています。

第34回 バージョン管理 ─プロジェクト管理ファイルについて[中編] | gihyo.jp
から引用

.idea/compiler.xml

Git管理すべきという意見として以下のように書かれている記事がありました。

All of the modules discovered in your project are stored here, along with the JDK needed to build it. This file is helpful for Gradle projects, especially if you have multiple versions of the JDK installed on your machine. For example, we need to use JDK 11 as a minimum to build our project, even though most of us have JDK 8 installed. Keeping this file could help reduce confusion with build dependencies and save new developers a few extra steps when setting up their IDE.

Exploring the .idea Folder in Android | by Oliver Spryn | Better Programming
から引用

《引用をDeepLで翻訳》
プロジェクトで検出されたすべてのモジュールが、ビルドに必要なJDKとともにここに保存されます。このファイルはGradleプロジェクト、特にマシンに複数のバージョンのJDKがインストールされている場合に便利です。例えば、私たちのほとんどはJDK 8をインストールしていますが、私たちのプロジェクトをビルドするためには最低限JDK 11を使用する必要があります。 このファイルを保持しておけば、ビルドの依存関係で混乱することが減り、新規開発者がIDEをセットアップする際に余分なステップを省くことができます。

compiler.xmlJDKの設定を共有できるかのように書かれていますが、これがどういうことかわかってません。JDKの設定という意味ならAndroid Studioでローカルのファイルパスを各々設定するイメージなので共有できるものではなく、コンパイルに使用されるJavaバージョンもAndroid Developersに書かれている通りで、compiler.xmlで共有するものではないと思っています。他にGit管理すべきとしている記事やリポジトリがほぼ見つからなかったのも後押しとなり、Git管理対象外でよいと考えています。

.idea/deploymentTargetDropDown.xml

Android Studioで選択したAVDの情報が記載されているファイルで、これを他の人に共有する必要はないのでGit管理対象外でよいと考えています。

.idea/gradle.xml

以下の記事を読むとGit管理対象とした方がよさそうに見えます。

.idea/gradle.xmlAndroid Studioに対して「このディレクトリがAndroid Studioのプロジェクトである」ことをたらしめているので、必ず共有しましょう。

第35回 バージョン管理 ─プロジェクト管理ファイルについて[後編] | gihyo.jp
から引用

ですが、自分の知っているプロジェクトだとこのファイルを共有しなくても全く問題なく開発ができています。引用部分にあるAndroid Studioのプロジェクトであることを示すための共有というのが必要なのかがわかりません。他にいい記事が見つからなかったのでChatGPTに聞いてみます。
「.idea/gradle.xmlをGitリポジトリに含める必要がありますか?」


.idea/gradle.xmlは、IntelliJ IDEAやAndroid Studioで作成されるプロジェクトの設定情報が保存されるファイルです。このファイルは、IntelliJ IDEAやAndroid Studioでプロジェクトを開く際に、Gradle関連の設定情報を読み込んで使用するために必要です。また、IntelliJ IDEAやAndroid StudioでプロジェクトのGradle関連の設定を行うと、このファイルが更新されます。

一般的に、.idea/gradle.xmlは、Gitリポジトリに含める必要はありません。このファイルは、IntelliJ IDEAやAndroid Studioでプロジェクトを開く際に、新しく生成されるためです。

ただし、.ideaフォルダをGitリポジトリに含める必要がある場合は、.idea/gradle.xmlも含めることができます。ただし、この場合でも、.gitignoreファイルに.ideaフォルダを追加して、Gitリポジトリからこのフォルダを除外することが推奨されます。これにより、.ideaフォルダ内にある多くの不要なファイルや中間ファイルがGitリポジトリから除外されるため、リポジトリのサイズを小さく保つことができます。



IntelliJ IDEAやAndroid Studioで作成されるプロジェクトの設定情報が保存されるファイルです。このファイルは、IntelliJ IDEAやAndroid Studioでプロジェクトを開く際に、Gradle関連の設定情報を読み込んで使用するために必要です。」を見ると必要な気がしますが、その後に「Gitリポジトリに含める必要はありません。このファイルは、IntelliJ IDEAやAndroid Studioでプロジェクトを開く際に、新しく生成されるためです。」とありますね。

…結局どっちがいいかわからないのですが、自分が携わっているプロジェクトだとGit管理対象外になっていて問題なく進んでいるのと、最初に紹介した参考リポジトリでもGit管理対象外になっているので、とりあえずGit管理対象外として今後何かあったら考えを改めます。

.idea/jarRepositories.xml

GradleをSyncした時にbuild.gradleのrepositoriesを元に自動生成されるようなのでGit管理対象外でよいと考えています。

参考
Exploring the .idea Folder in Android | by Oliver Spryn | Better Programming
android - How can I decide to add .idea/jarRepositories.xml in .gitignore - Stack Overflow

.idea/misc.xml

調べると「プロジェクトで使用するJavaSDKのバージョンの情報」が記載されるのでGit管理すべきという記事が見つかりますが、これがGit管理すべき理由になっているのかどうかが判断つきません(JavaSDK=JDKのことだと思っている)。
compiler.xmlのところでも書きましたが、JDKの設定という意味でも、コンパイルに使用されるJavaバージョンという意味でも、misc.xmlで共有するものではないと思っていますが、misc.xmlを共有することにより何かしらを共有できるということなんでしょうか。
他にGit管理すべき理由が書かれている情報が見つからなかったので、Git管理しなくてよいと書いてある方の意見に乗っかりGit管理対象外でよいと考えています。
またこの記事によると、build.gradleのcompileOptionsでJavaバージョンを指定すればSync時にそのバージョンでmisc.xmlが更新されるようです。

Git管理しておくべきと書いてある記事
Gitで共有管理すべきIntelliJ IDEAの設定ファイルのメモ | takemikami's note
.ideaのgit管理について Android Studio - Qiita

Git管理しなくてよいと書いてある記事
Exploring the .idea Folder in Android | by Oliver Spryn | Better Programming
第35回 バージョン管理 ─プロジェクト管理ファイルについて[後編] | gihyo.jp

.idea/modules.xml

自動生成されるのでGit管理対象外でよいと考えています。

.idea/vcs.xml

バージョン管理の情報なのでGit管理対象外でよいと考えています。

.idea/workspace.xml

各々のAndroid Studioの情報が保存されるファイルなのでGit管理対象外でよいと考えています。

Android Studioを使えば必ず更新される設定ファイルです。ばっちり個々人の環境に依存した内容を保存するので、バージョン管理システムの管理対象にしても仕方がありません(そんなことしたらコンフリクト発生しまくりです⁠)⁠。

第35回 バージョン管理 ─プロジェクト管理ファイルについて[後編] | gihyo.jp
から引用