TL;DR

.firebaseディレクトリは.gitignoreに記載する。.firebasercとfirebase.jsonは基本的にgitignoreに記載しなくてよい。ただし、状況に応じて使い分けるべきで、投稿するFirebaseプロジェクトがオープンソースや他の人が別のFirebaseを遣うなら、.firebasercはgitignoreに入れたほうがよいと思われる。

Firebase Hostingとは

静的ファイルをホスティングしたくGCP GCSやAWS S3でいいかと思っていたのですがFirebase Hostingだと通信量やファイルサイズが小さい無料枠に収まることがわかり、実際に試してみることにしました。 実際に使ったところ、htmlなどデプロイしたいものが既に用意されていればすぐにserveできるのでFirebase Hostingは非常にクイックにデプロイできるサービスかと思います。最初のデプロイの解説は他の記事にゆずるとして、この記事ではFirebase Hostingを遣うさいに記載すべき .gitignoreを検討します。

.gitignore記載すべき項目

さきに.gitignoreに記載するために私が検討した項目を記載します。なお、.DS_Storeなどの各開発環境に依存するファイルやホスティングするファイルに関してはここで検討しません。

  • .firebaserc
  • firebase.json
  • .firebaseディレクトリ

上記3つがFirebase Hostingにデプロイするときに主に検討するファイル/フォルダかと思います。

私が調べた範囲ではfirebase.jsonは基本的に.gitignoreに記載せず、そのままgitに記載している意見しかなかったです。 firebase.jsonはFirebase Hostingの構成情報を記載します(参考:Firebase ホスティング動作を構成する )。publicが必須属性でどのディレクトリをFirebase Hostingにデプロイするのか指定する属性になります。他にも省略可ですがigonore属性でホスティングしないファイルなどを指定したり、404のファイルを指定したりとFirebase Hostingを遣う上で必須のセッティングファイルになりますので、このファイルを登録しないと同じレポジトリを遣う他のユーザー/他の環境でデプロイに関する情報を共有できなくなるので基本的にgitに登録すべき情報になります。もちろん他では別のファイルを遣うなどあれば.gitignoreに記載すれば良いですがそのケースは記載するケースに比べて少ないかと思います。

.firebasercはネットで検索すると、Firebaseの有志のfirebase-continueの.gitignoreファイル内で記載されています。また、stackoverflowをみると用途に応じてこのファイルはgitignoreに記載するか記載しないか判断することと回答がありました。例えば、オープンソースや組織内で公開して、別の人が別のFirebase Hostingのプロジェクトを使う場合はこのファイル名が.gitignoreに書いていないと別のFirebaseプロジェクトにデプロイするときに記載しなおさないといけなくなるので.gitignoreに記載したほうが効率的でしょう。他の開発者も同じFirebaseプロジェクトを遣う場合は共通化しておいたほうが良いので、.gitignoreに記載しないほうがよいということになります。

.firebaseディレクトリはFirebase CLI versionが4.2.0から導入された機能で前回のデプロイした内容からの差分がたまるようになっているそうです(参考:stackoverflow What’s the purpose of .firebase/hosting. ALPHANUM.cache)。 こちらの記事をおってgithubの変更からなにが具体的に変更になったのか調べようかと思ったのですが、ご存知な方は教えていただけると助かります。 キャッシュについては登録する環境で異なるでしょうし、githubに登録する必要がないので.gitignoreに登録したほうがよいということになるかと思います。

まとめ

初めて遣う言語やフレームワークのときはgithubのgitignoreレポジトリを参考にして自分のレポジトリのときはどうするか考えていくのですが、今回Firebase Hostingを初めて使うにあたりgithubに登録するファイルの検討をして、フォルダの構成やファイルがどんな役割を持つのか理解が深まったのでまとめてよかったです。もちろんそれぞれのファイルの役割やフォルダについてすべて理解したわけではないのでこれから使いながらより理解を深めたいと思います。

参考

https://firebase.google.com/docs/cli?hl=ja

https://github.com/FirebaseExtended/firebase-continue/blob/master/.gitignore

https://stackoverflow.com/questions/43527359/what-is-the-practice-on-committing-firebase-files-in-a-nodejs-app

https://github.com/firebase/firebase-tools/releases/tag/v4.2.0

https://github.com/github/gitignore