Firebase Cloud Functions のNode.js 10更新、わたしの場合
- 2020/06/25
- murave
2020年5月某日、
「Node.js 8のFunctionは来年3/15には止まるから10にしてね。あと、10は無料プランじゃ使えないからそこんとこヨロシク」(要約)
というメールがGoogleさんから来ました。
詳しくはその内容を整理してくださってるステキな記事をどうぞ。
【Firebase】Cloud Functionsが従量課金プランでしか使えなくなるらしい
(https://qiita.com/azukiazusa/items/edd6ca9cba2d48c4c3e2)
1年くらい前(2019年3月末)にリリースしたシステムが該当しており放置すると来年の3月には死。
あの時はまだNode.js 8すらベータ版だったやんか。1年でこんなことになるとは…
まずお客様へご説明し、更新作業のコストや時期について調整しなければなりません。
本番プロジェクトは元からBlaze(従量課金)プランですのでその点は問題ありません。
基盤更新への対応作業の発生は想定していましたが発生頻度が初期の想定を超えそうです。
更新コストについては、今回はサービス、以降は作業料をいただく方向でまとまりました。
実施時期については6月中に行うことに(COVID-19の影響で7月になるまで当該システム稼働なし確定のため)
ということでリリース完了して余裕ができたのでこれを書いてるってわけです。
更新作業どうだった?
Functions関係の更新は、最初に驚きのつまづきがありましたが、順調だったと言えます。
開発用プロジェクトをBlazeプランにする
開発用プロジェクトはSpark(無料)プランでしたので変更が必要でした。
今回のシステムの場合、開発プロジェクトでBlazeの無料枠を超えることはまず無いのでとくに気にせず変えちゃいます。
が、この変更を行う場所が(Google Cloud Platformのコンソールで)見つからなくて「あれ〜?」となりました。
FIrebaseコンソールの存在を忘れてた。変だと思った。— murave (@murave) June 11, 2020
最初のつまづきとはコレです。驚きましたね、Firebaseコンソールの存在を忘れていた自分に。
Google Cloud Platformのコンソールでもプロジェクトは見えてますしCloud FunctionsやFirestoreも見えるのですぐには気づかなかったのでした。専用のコンソールがあるFirebaseがイレギュラーですし〜
念の為書いておくと、Firebaseコンソールには以下のURLからアクセスできます。
https://console.firebase.google.com/

Node.js 10 を指定してデプロイする
Node.js 8の関数がデプロイされていると以下のような表示が出るようになってました。

Node.js 10への変更はFunctionsのpackage.json内で “engines”: {“node”: “10”} を指定します。
変更前のpackage.json
{変更後のpackage.json
"name": "functions",
"description": "Cloud Functions for Firebase",
"scripts": {
"serve": "firebase serve --only functions -p 5000 -o 0.0.0.0",
"shell": "firebase functions:shell",
"start": "npm run shell",
"deploy": "firebase deploy --only functions",
"logs": "firebase functions:log"
},
"dependencies": {
"firebase-admin": "~7.0.0",
"firebase-functions": "^2.2.0"
},
"private": true,
"engines": {"node": "8"}
}
{とりいそぎコレでデプロイしてみる。
"name": "functions",
"description": "Cloud Functions for Firebase",
"scripts": {
"serve": "firebase serve --only functions -p 5000 -o 0.0.0.0",
"shell": "firebase functions:shell",
"start": "npm run shell",
"deploy": "firebase deploy --only functions",
"logs": "firebase functions:log"
},
"dependencies": {
"firebase-admin": "~7.0.0",
"firebase-functions": "^2.2.0"
},
"private": true,
"engines": {"node": "10"}
}

ベータ版じゃねーか!(2020/06/24現在、ベータ版表示は消えたようです)
動作確認したところエラーとなりました。残念。
依存パッケージを更新する
前記package.jsonにありますようにfirebase-adminとfirebase-functionsに依存していますのでこれらを更新してみます。
$ npm install firebase-admin@latest更新後のpackage.json
(出力略)
$ npm install firebase-functions@latest
(出力略)
{デプロイすると正常に動作しました!
"name": "functions",
"description": "Cloud Functions for Firebase",
"scripts": {
"serve": "firebase serve --only functions -p 5000 -o 0.0.0.0",
"shell": "firebase functions:shell",
"start": "npm run shell",
"deploy": "firebase deploy --only functions",
"logs": "firebase functions:log"
},
"dependencies": {
"firebase-admin": "^8.12.1",
"firebase-functions": "^3.7.0"
},
"private": true,
"engines": {"node": "10"}
}
最後に
「メンテナンスコストをさげたくてサーバレスにしたのになぁ」
まぁ、忘れるくらいFirebaseコンソールを使ってなかったんだから成功といえるかな。
しかし
これから更新作業を行うプラットホームのEnd of Lifeが来年4月末だと知ったときの顔をしている— murave (@murave) June 16, 2020
あと、実はついでにクライアントの(一部)依存パッケージ更新やったらハマりまくりでそちらで時間がくわれまくったんですよね(カオスすぎて記事にする気もおきない)