GASのモックから作り直した社内向けWebシステムをIAP付きCloud Runで運用
株式会社コロプラ / 尾崎隆一郎
バックエンドエンジニア / 従業員規模: 501名〜1,000名 / エンジニア組織: 101名〜300名
| 利用機能 | 事業形態 |
|---|---|
リクエストに応じてオートスケールするCloud Runサービス、Cloud Buildからのビルド・デプロイ、構造化ログからのログベースメトリクスとCloud Monitoringダッシュボード | B to C |
| 利用機能 | リクエストに応じてオートスケールするCloud Runサービス、Cloud Buildからのビルド・デプロイ、構造化ログからのログベースメトリクスとCloud Monitoringダッシュボード |
|---|---|
| 事業形態 | B to C |
導入の背景・解決したかった問題
導入背景
社内向けに、スプレッドシートをデータソースにした小規模なWebシステムを運営しています。最初はGoogle Apps Script(GAS)のHtmlServiceで画面や操作感を確認するためのモックを作り、データ取得もgoogle.script.run経由で試していました。
ただ、このモックの段階でGAS特有の制約に何度か当たりました。画面はサンドボックスiframeの中で動くので、alert()やconfirm()はブロックされ、確認ダイアログひとつでも自前でUIを組むことになります。またGASにはユーザーごとの同時実行数が30、スクリプト全体では1,000という上限があり、本番で使うならここも気になるところでした。
そこで、モックで固めた見た目や操作感は活かしつつ、コンテナで動かせる構成に本番用として作り直すことにしました。そのデプロイ先としてCloud Runを選んでいます。
比較検討したサービス
- Google Apps Script(GAS)のHtmlServiceによるウェブアプリ機能
比較した軸
- GASのサンドボックス制約(
alert()やconfirm()が使えないなど)を受けずにフロントを実装できるか - 同時実行数を自分たちで調整できるか
- モックで作った見た目や操作感をどこまで活かせるか
- コンテナベースで動かせて、保守運用の手間が小さいか
選定理由
Dockerベースのアプリケーションをそのまま動かせるので、GASのランタイム制約から離れられます。フルマネージドなので運用の手間も小さく、リクエストがない時間はゼロまでスケールインしてくれるためコストも抑えられます。モックの画面をほぼそのまま持ち込めて、作り直しの手間が小さくて済んだのも決め手になりました。
導入の成果
GASのサンドボックス制約がなくなったことで、モーダル表示やフィルタリングなど、モックの段階では実装しづらかったUIをそのまま作れるようになりました。同時実行数についても、固定の上限に縛られるのではなく、コンテナあたりの最大同時リクエスト数や最大インスタンス数を自分たちで設定できるようになっています。本番化してからは大きな障害もなく、安定して稼働しています。
導入に向けた社内への説明
上長・チームへの説明
元々弊社ではCloud Runの利用実績があったため、採用する上で特に説明を求められることはありませんでした。実際に他プロダクトでもCloud Runの活用が進んでいて、直近では生成AIをゲームに組み込む事例がアーキテクチャカンファレンス2025でも紹介されています。
活用方法
現在の活用状況
フロントエンドとAPIサーバーをひとつのコンテナにまとめ、Cloud Runの単一サービスとして動かしています。フロントはビルドした静的ファイルをそのAPIサーバーから配信する形にしていて、別途ホスティング先を用意していません。リクエストが少ない時間はゼロまでスケールインする設定にしているので、常時起動のコストをかけずに運用できています。
アクセス制御はアプリケーションに実装せず、IAPに寄せました。社内のGoogleアカウントを持つ利用者だけに絞れて、ログイン画面を自分で作る必要もありません。一方でスプレッドシートの読み取りは利用者本人の権限で行うため、そこはアプリケーション側で読み取り専用スコープ(spreadsheets.readonly)のOAuthトークンを扱っています。
ログはJSONで構造化してCloud Runの標準出力に出しています。これだけでCloud Loggingに取り込まれるので、そこからgcloud logging metrics createでログベースのメトリクスを定義し、Cloud Monitoringのダッシュボードで可視化しています。
普段どのような使い方をしているか
IAPを通して社内の利用者であれば誰でもアクセスできる形で運用しています。cloudbuild.yamlにビルドからデプロイまでの手順をまとめてあり、コマンド1つで変更を反映できるようにしています。
よく使う機能
- IAP(Identity-Aware Proxy)によるアクセス制御
- アプリケーション側に認証を実装せず、IAPで社内のGoogleアカウントを持つ利用者だけに絞っています。公開範囲は既存のメーリングリストやGoogleグループを指定するだけで決められます。IAPはブラウザにCookieを発行するので、画面のログイン後の
fetch('/api/*')にも認証が引き継がれます。
- アプリケーション側に認証を実装せず、IAPで社内のGoogleアカウントを持つ利用者だけに絞っています。公開範囲は既存のメーリングリストやGoogleグループを指定するだけで決められます。IAPはブラウザにCookieを発行するので、画面のログイン後の
- 標準出力からCloud Loggingへの自動連携
- 標準出力にJSONで出したログがそのままCloud Loggingに入ります。そこからログベースメトリクスを定義して、Cloud Monitoringのダッシュボードで見ています。
ツールの良い点
- インフラの管理をほとんど意識せずに済むので、アプリケーションの実装に集中できます
- ログイン機能を自作しなくても社内の利用者だけに公開でき、利用者が増えても個別の登録が要りません
- アクセスの増減に合わせて手を入れる必要がなく、使った分だけの課金で収まります
- Cloud Buildと組み合わせてcloudbuild.yamlに設定を書いておけば、変更の反映をコマンド1つに収められます
ツールの課題点
- Cloud Loggingとの連携は容易ですが、ログベースメトリクスは自分で定義します。カウンタ型ならCloud Monitoring側で合計を出せますが、トークン使用量のように分布型で記録した値は一定期間の総量をメトリクスから直接は出せず、Logs Explorer側で集計することになりました
- フロントエンドとAPIサーバーを1つのコンテナに同梱しているため、フロントの表示を少し直すだけでもコンテナ全体を再ビルドして再デプロイすることになります
ツールを検討されている方へ
今回は社内向けのWebシステムを題材にしましたが、コンテナをそのまま動かせるので用途はこれに限りません。インフラの運用に手をかけずにアプリケーションを動かしたい場合に向いていて、アクセスが一定しない用途ならゼロまでスケールインする分コストも抑えられます。アクセス制御をIAPに任せるか、アプリケーション側で持つかは先に決めておくと、認証まわりの手戻りが少なくなると思います。
株式会社コロプラ / 尾崎隆一郎
バックエンドエンジニア / 従業員規模: 501名〜1,000名 / エンジニア組織: 101名〜300名
よく見られているレビュー
株式会社コロプラ / 尾崎隆一郎
バックエンドエンジニア / 従業員規模: 501名〜1,000名 / エンジニア組織: 101名〜300名
レビューしているツール
目次
- 導入の背景・解決したかった問題
- 活用方法



