giga-router-query-manifest-storeバケットの構造
hatena-manga-media アカウントのS3バケットにはPersisted Queryを保存するためのバケットが2つある。
- giga-router-query-manifest-store
- giga-e2e-graphql-api
giga-router-query-manifest-store
Section titled “giga-router-query-manifest-store”このバケットにはほとんど全て1のGraphQLオペレーションが保存されていて、ファイルの構造は以下のようになっている。各リポジトリからアップロードされるのはこちら。
{リポジトリオーナー}/{リポジトリ名}/{アプリ名}/{アプリバージョン}/persisted-query-manifest.json- リポジトリオーナー: 基本的には hatena で固定のはず
- リポジトリ名: Giga-Usagi や giga-apps など
- アプリ名: Giga-Usagi の場合は nextjs で、他のリポジトリは各アプリの名称
- アプリバージョン: nextjs の場合はコミットハッシュ、他のアプリは公開バージョン
そのはずだけど、develop2 や giga-loadtest など別の構造を持つオブジェクトも リポジトリオーナー と同じ階層に存在している。
{環境名}/{コミットハッシュ}.jsonこれは環境ごとに全てのアプリを統合したものになっている。環境によって違いはあるのか?開発中の機能が出ていく順はあると思うが。
バケットへのアップロードはリポジトリごとにワークフローで行っているようだった。
- Giga-Usagi(Next.js): .github/workflows/wf-upload-persisted-query-manifest.yml
- giga-apps(アプリ全般): .github/workflows/on-dispatch-operations-push.yml
- コミックDAYS(iOS): .github/workflows/upload-persisted-query-manifest.yml
- コミックDAYS(Android): .github/workflows/upload-persisted-query-manifest.yml
Giga関連のリポジトリと関係性も参照。
giga-e2e-graphql-api
Section titled “giga-e2e-graphql-api”こちらは giga-router-query-manifest-store をツールで書き換えるなどして、各アプリ単位で実際に使っているオペレーションだけを持っているらしい。マニフェストに関する部分についてファイルの構造はこのようになっている。
testdata/request/{アプリ名}-{プラットフォーム名}-{アプリバージョン}/persisted-query-manifest.jsonプラットフォーム名は ios, android または web などがある。こちらの方が扱いやすい。
Footnotes
Section titled “Footnotes”-
2026年7月時点では、Perlで Giga::Web::Core::GraphQL->execute_via_server しているクエリを含まない ↩