どうも、たくチャレ(@takuchalle)です。

Firebase Advent Calendar 2018の8日目の記事です。

昨日のFirebase Advent Calendar 2018@wamisnetさんのFlutterとFirebaseで始めるモバイルアプリでした!僕もFlutterを始めてみようと思ってるので参考になります!

さて、みなさん Firebase Hosting を使っていますか?

このブログは GitLab の CI/CD 機能を使って、プッシュされるたびに Firebase Hosting にデプロイされています。(参照記事)

Firebase Hosting では簡単に前回のバージョンにロールバックできるように古いバージョンを残しておいてくれます。 何かトラブルが発生した時に簡単に前のバージョンに戻せるのありがたいです。

しかし、Firebase Hosting のストレージサイズが1GBしかないので、数か月も前のバージョンを残しておく余裕はありません。

古いバージョンが増えてしまう問題

先述した通り、僕の設定だとプッシュされるたびにデプロイされます。Hugo で生成されるファイルは HTML くらいしかなく1大きなサイズではないのですが、サイトによってはサイズが大きくなってストレージを使い切ってしまうこともあるでしょう。

この問題は GitHub の issue も立っていますが、まだ根本的な解決には至ってないようです。

自動で削除するスクリプト

先ほどの issue のコメントを見ると根本的な解決には修正範囲が大きいということで、Firebase の中の人である mbleigh さんがワークアラウンドとして削除スクリプトを公開してくれてました。ブラウザから古いバージョンをポチポチ消してた僕の時間とはいったい…

Automate the deletion of old Firebase Hosting versions. - README.md

こういうワークアラウンド的な対処はband-aidって言ったりするんですね。

スクリプトを使ってみた

gistからクローンしてインストールします。firebase-toolsを使ってるはずなので、npmのセットアップは済んでいるはずです。

$ git clone https://gist.github.com/5be2e807746cdd9549d0c33260871d21.git firebase-hosting-cleanup-script
$ cd firebase-hosting-cleanup-script
$ npm install

次のようにプロジェクト名と残したいバージョン数を指定することで、削除対象のリストが表示されます。この時はまだ削除されません。

$ node cleanupVersions.js [プロジェクト名] [残したいバージョン数]

末尾にcommitをつけて実行したら実際に削除されます。

$ node cleanupVersions.js [プロジェクト名] [残したいバージョン数] commit

【追記】公式でサポートされた

Twitter で公式サポートされたっぽい情報が流れてきたので、さっそくやってみました。

Firebase コンソールの Hosting を開いてみると僕のところにも新機能のポップアップがありました!

吹き出しが出ている点々をクリックするとVersion history settingsが出てくるのでこれをクリックします。

クリックすると以下のような設定画面が出てきます。僕は直近の5つのバージョンを残すようにしてみました。5つ残した場合の推定サイズが表示されます。この場合34.5MBですね。

これでSaveを押してしばらくすると最新の5つより古いバージョンはすべて削除されました。

まとめ

今回は Firebase Hosting で自動で古いバージョンを削除する(今のところ)最善の方法を紹介しました。正式対応がアナウンスされるまではこの方法で対処したいと思います。

これをデプロイスクリプトに組み込んだり、cronで定期的に実行させたりすることで、Firebase Hosting の容量を削減させることが可能です。

【追記】公式でサポートされました。これで

Firebase Advent Calendar 2018の9日は、daisuke0131さんが何か書くそうです。楽しみにしてます!


  1. 画像は極力 Firebase Storage に置いてます

同じカテゴリの記事