MIXI TECH CONFERENCE 2023 にてお話した吉川の資料です。
動画:https://youtu.be/TCNogLzvdSo
https://techcon.mixi.co.jp/d3-4
Google Cloud のArtifact Registry を使った private な npmpackage の管理次世代エンターテインメント事業本部 TIPSTAR開発部 クライアントグループ Webチーム吉川勇太郎
View Slide
自己紹介吉川 勇太郎 吉川 勇太郎YUTARO YOSHIKAWAプロフィール基本情報 所属 TIPSTAR Webチーム基本 長野/1998年8月27日/O型好きな食べ物 インドカレー経歴2021年に株式会社ミクシィ(現 株式会社MIXI)に新卒入社2022年新卒研修のフロントエンド研修講師を担当認定スクラムマスター
TIPSTAR Web の紹介
TIPSTAR Web の紹介●TIPSTAR とは競輪・PIST6・オートレースのネット投票を行うことができるサービスです。●iOS・Android アプリの他 Web でもサービスを提供していて、ブラウザ上からもTIPSTAR のネット投票を行うことができます。
プロジェクト構成
プロジェクト構成●yarn workspace による monorepo 構成をとっています。●workspace 内訳○ アプリケーション本体(Next.js)○API Client○Storybook をホスティングするための Express server などなど…●API は REST API○API 定義は OpenAPI による管理●ビルドしてパッケージングした Web アプリケーションは App Engine 上にホスティング
API Client
API Client の更新手順1. OpenAPI.yaml の変更2. Git Submodules の参照コミットの切り替え3. API Client コードの生成4. 新しい型定義の更新などあれば、それにあったデータ構造に修正5. 差分をコミット6. レビュー
API Client の課題点●OpenAPI.yaml の更新ごとに、人力で API Client を更新するのが辛い○ 機械生成した差分のレビューは省きたい○API Client 自体の更新と、それに伴う破壊的変更の対応を分離したい●monorepo でのパッケージ管理だと、複数バージョンの管理ができないので APIClient 自体の更新と、それに伴う破壊的変更の対応を分離しづらい●App Engine にデプロイするときのコード量上限に引っかかる○ ビルドした成果物の必要なさそうなところを一部分 ignore したりあまりきれいではない…
monorepo から private npmregistry に移すことのメリット
monorepo から private npm registry に移すことのメリット●複数バージョンをストアすることができるようになる○ 例えばアプリケーションでは v1 をインストールしたままで、v1.1 の API Client を用意しておけるようになる○API Client 自体の更新と、それに伴う破壊的変更の対応を分離したい●コードを常に別のレジストリから引っ張ってこれるのでデプロイ時にパッケージの実体がなくてもいい○Cloud Build 上で npm package としてイントールされるので
Artifact Registry
Artifact Registry とは?●Google Cloud のサービスの一つ●Docker コンテナや npm パッケージなどをストアすることができる●IAM によるアクセス権限管理ができるので、Google Cloud がメインのプロジェクトと相性がいい○Workload Identity を使えば、クレデンシャルファイルを GitHub リポジトリの secrets に置かずに認証できる。
プロジェクトの変化
プロジェクトの変化本体アプリケーション PJ の CI 上のビルド手順1. Google Cloud のアクセストークンを生成して .npmrc に値を設定2. 依存関係解決、テスト3. App Engine デプロイ4. Cloud Build 上でビルド処理
プロジェクトの変化Cloud Build 上でのビルド処理●Buildpack というデプロイしたアプリケーションを本番環境用のコンテナイメージに変換してくれるツールを使用してアプリケーションをビルドします。●プロジェクトで npm を使用している場合は Cloud Build 上で自動的に認証情報が記載された .npmrc ファイルを生成して、Artifact Registry などでストアしている npm packageを取得できます。●yarn v1 の場合は、Cloud Build にデプロイする前にアクセストークンを書き込んだ.npmrc ファイルをあらかじめ含めておくことで Cloud Build 上で依存関係解決を可能にします。
プロジェクトの変化API Client を管理しているレポジトリでの CI1. Google Cloud のアクセストークンを生成して環境変数に設定1. Workload Identity federation 認証2. gcloud auth print-access-token2. OpanAPI.yaml の fetch3. npm package 生成1. OpenAPI generator を使用して ES modules, CommonJS 両対応の npm package を生成4. npm publish5. Artifact Registry に新しいバージョンの npm package をストア6. Slack に完了通知
プロジェクトの変化API Client の更新を自動化することで、運用工数の削減○ API Client の更新は GitHub Action dispatch によるリリースボタンをクリックするだけ○ 新バージョンの API Client 以降時は package.json の更新と新しい型定義の対応のみの差分に減る
おわりに
おわりにWeb チームではこういった新しい取り組みを日々実践しつつプロダクトの改善に取り組んでいます。今後もより品質の高いプロダクトを素早く提供していくために模索し続けます。