なまえは まだ ない

思いついたことをアウトプットします

フラーを卒業していった優秀な学生アルバイトに向けたポエム

この記事はフラー株式会社 Advent Calendar 2022の4日目の記事です。3日目は@masaya82さんで「StorybookのCSF 2.0とCSF3.0を見比べてみる」でした。

2年前、弊社の学生アルバイトだったキミへ

2年前、サーバーサイドの学生アルバイトとして手伝ってくれていたキミへ。 新卒で入社した某社では楽しく働けているでしょうか?

キミが在籍中にメンテナンスをしてくれていたあの社内アプリについて、最近また大きめのメンテナンスを入れました。 あの頃と変わったこと、またあの頃知らなかった(できなかった?)ことをいくつか紹介します。

Cloud Functionsを卒業しました

初っ端から大きな変更を書きますが、実行環境をCloud FunctionsからCloud Runに移行しました。

移行の理由は非常に単純で、Cloud Functionsのランタイム更新の遅さにうんざりしたからです。

Cloud Functionsは実行する関数だけを記述するサービスなので、それをアプリとしてビルドするためにある程度ランタイムが制限されています。 例のアプリはGoで書かれていましたが、2022年10月時点で使用できるGoのランタイムは1.16 or 1.13でした*1。Goは最新2世代しかサポートしない(2022年10月の時点で、1.19と1.18)方針なので、サポートが打ち切られたランタイムを使い続けるのに抵抗がありました。事実、依存する一部ライブラリがGo 1.17で追加された機能を利用しており、ライブラリのアップデートができないような事態も発生してました。

Cloud Runはコンテナー化したアプリケーションを簡単にデプロイ、実行できるというサービスなので、アプリケーション自体の言語やビルド環境の制限はありません。 Cloud Functionsと比較するとアプリケーション自体の記述量は増えますが、実装上の自由度も上がったのでトータルでポジティブな移行だったと思っています。

Firestore EmulatorがBetaを卒業しました

Firestoreを使った機能のテストを記述するために、GitHub Actionsワークフロー内でFirestore Emulatorをセットアップしてもらいましたね。当時は gcloud beta で実行する実験的機能でした。

いつの間にかBeta版ではない正式版(?)が gcloud コマンドに追加されていました。

cloud.google.com

使い方は全く一緒で単に beta が抜けただけですが、次のように実行することでエミュレーターを起動できるようになっています。

gcloud emulators firestore start

GCPと連携するためのGitHub Actionsが充実しました

キミにメンテナンスをしてもらっていた当時、GCP周りのGitHub Actionsはあまり充実してなかったような記憶があります。 Cloud FunctionsのデプロイにはこちらのActionsを利用していました。

github.com

現在はGCPと連携するためのActionsが充実し、認証や gcloud コマンドのセットアップ、Cloud FunctionsやCloud Runのデプロイ等が専用のActionsで簡単に実行できるようになりました。

github.com

ローカルでGCPの資格情報を簡単にわたす方法がありました

アプリをローカルでデバッグするときに一番頭を悩ませたのが、アプリに対するGCPの資格情報の渡し方だったと記憶しています。

Cloud Functionsで実行する場合は実行環境のデフォルトの資格情報をSDKがロードしてくれますが、ローカルで起動する場合は何らかの方法で資格情報を準備する必要がありました。当時有効な方法を見つけられず、結局SDKソースコードを追いかけたりしながら GOOGLE_APPLICATION_CREDENTIALS 環境変数にサービスアカウントの資格情報を設定するという強引な方法で解決してましたね。

これも最近たまたま知ったのですが、アプリケーション用の資格情報をセットアップする方法が gcloud コマンドに用意されていました。

cloud.google.com

次のように実行するとブラウザが開き、認証・認可のフローを通るとローカルに資格情報がセットされます。各種SDKはこの資格情報を勝手にロードするので、これでCloud Functions等の各種実行環境と同じような状態をセットアップできるようです。

gcloud auth application-default login

これ、当時からあったのかなぁ。。もうちょっと早く辿り着きたかったですね。

おわりに

このアプリに限らず、フラー社内ではキミが在籍していた頃からたくさんの変化がありました。

今のお仕事は充実しているでしょうか?もしまたフラーのエンジニアリングに興味が湧いてきたら、いつでも連絡をください。 フラーではいつでも一緒に働いてくれるサーバーサイドエンジニアを募集しています。

herp.careers


明日は@Nao1215さんで「【GolangCSV/TSV/LTSV/JSONSQLを実行するsqlyコマンドを作った話【開発背景/設計/使い方】」です。お楽しみに。

*1:この記事の執筆中に気づいたのですが、いつの間にかGo 1.18と1.19がプレビュー版として追加されていました。