Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
ZennとCloud Runの歩み - プロダクト開発に全集中できる相棒になるまで
Search
Yusuke Wada
September 25, 2025
Technology
5
700
ZennとCloud Runの歩み - プロダクト開発に全集中できる相棒になるまで
こちらのイベントで Zenn と Cloud Run の事例を紹介しました。
https://offers-jp.connpass.com/event/366307/
Yusuke Wada
September 25, 2025
Tweet
Share
More Decks by Yusuke Wada
See All by Yusuke Wada
Claude Code でアプリ開発をオートパイロットにするためのTips集 Zennの場合 / Claude Code Tips in Zenn
wadayusuke
8
5k
Zennの運営完全に理解した #完全に理解したTalk
wadayusuke
1
310
ZennにCloudflare WAFを導入してDDoSを防いだ例 / zenn-cloudflare-waf-blocked-ddos
wadayusuke
1
690
Google Cloud でシンプルなブログサイト Xenn をつくろう / xenn-google-cloud-handson
wadayusuke
4
260
Google Cloud で プロダクト開発 事業として成長させるZennの例 / grows-zenn-with-google-cloud
wadayusuke
3
800
ZennにみるCloudRunとBigQueryによるアプリケーション構築 / zenn-cloudrun-bigquery-serverless
wadayusuke
16
7k
Zennを支える Google Cloud の技術
wadayusuke
5
1.4k
個人ブログサイトを構築して学ぶGraphQL NestJSとNext.js使うよ! / graphql nestjs nextjs bootcamp
wadayusuke
6
4.1k
Step Functions と Lambda Function で組む Athena によるファイル処理 / serverless lightweight etl
wadayusuke
3
4.1k
Other Decks in Technology
See All in Technology
リーダーになったら未来を語れるようになろう/Speak the Future
sanogemaru
0
380
セキュアな認可付きリモートMCPサーバーをAWSマネージドサービスでつくろう! / Let's build an OAuth protected remote MCP server based on AWS managed services
kaminashi
3
300
Geospatialの世界最前線を探る [2025年版]
dayjournal
1
210
リセラー企業のテクサポ担当が考える、生成 AI 時代のトラブルシュート 2025
kazzpapa3
1
150
業務効率化をさらに加速させる、ノーコードツールとStep Functionsのハイブリッド化
smt7174
2
130
Adapty_東京AI祭ハッカソン2025ピッチスライド
shinoyamada
0
270
20201008_ファインディ_品質意識を育てる役目は人かAIか___2_.pdf
findy_eventslides
2
610
Performance Insights 廃止から Database Insights 利用へ/transition-from-performance-insights-to-database-insights
emiki
0
220
Where will it converge?
ibknadedeji
0
210
綺麗なデータマートをつくろう_データ整備を前向きに考える会 / Let's create clean data mart
brainpadpr
3
400
OCI Network Firewall 概要
oracle4engineer
PRO
2
7.9k
Git in Team
kawaguti
PRO
3
350
Featured
See All Featured
Building an army of robots
kneath
306
46k
The Power of CSS Pseudo Elements
geoffreycrofte
79
6k
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
31
9.7k
Build The Right Thing And Hit Your Dates
maggiecrowley
37
2.9k
Docker and Python
trallard
46
3.6k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
30
2.9k
Embracing the Ebb and Flow
colly
88
4.8k
Practical Orchestrator
shlominoach
190
11k
Gamification - CAS2011
davidbonilla
81
5.5k
How To Stay Up To Date on Web Technology
chriscoyier
791
250k
How to Ace a Technical Interview
jacobian
280
24k
Agile that works and the tools we love
rasmusluckow
331
21k
Transcript
Zenn と Cloud Run の歩み プロダクト開発に全集中できる相棒になるまで クラスメソッド株式会社 和田祐介
自己紹介 クラスメソッド株式会社 Zennチーム エンジニア 和田祐介 Zennの開発と運営を担当 Zennチームへ異動 2021年7月 勤務地 生まれ
大学時代 東京 福岡県 北九州市 糸島市(九州大学) Google Developer Experts プログラム認定 Google Cloud / 2024年04月 クラスメソッドへ入社 2016年2月 AWS EC2、Scala、Backend API Cloud Run、Next.js、Ruby on Rails、 Zenn全般
今日お話する内容 Zennでの Cloud Run の使い方をなるべく具体的に紹介 みなさまのサービス開発の手札に加えていただく
Zenn - 技術情報共有コミュニティ 2025年8月時点 1,500 万/月 PV 16万 登録ユーザー 19万
投稿記事数 1,300 組織利用 記事や本を書いて投稿
Zennは2021年にクラスメソッド社が買収しました
2021年当時のおおよその構成 Zennを支える技術とサービス構成 データベース Cloud SQL Analytics 画像など Cloud Storage Assets
Scheduled Tasks Cloud Scheduler タスクAPIへ Monitoring Logging Bulk Tasks Cloud Tasks タスクAPIへ 著者‧読者 管理者 ユーザーAPI App Engine 管理サーバー App Engine タスクAPI App Engine
2022年初頭、Cloud Run へ移行する機運が高まった • 課題1: Vercel のまま利用者が増えるとコストがかさむ ◦ 当時Bandwidth制限が厳しく、Enterprise or
Migration • 課題2: App Engine フレキシブル環境の起動が遅い ◦ スケールアウト時、起動に数分かかっていた… • 課題3: GKEなど管理コストがかかるものは回避 ◦ 3人で開発・運用していたため(今も) アプリケーションをコンテナベースに統一し、Cloud Run へ移行すると決定
現在も Ruby on Rails と Next.js がメイン イベントデータ Cloud Load
Balancing データベース Cloud SQL Analytics 画像など Cloud Storage タスク API Cloud Run 管理用サーバー Cloud Run ユーザーAPI Cloud Run HTML / JS Cloud Run Assets Stats BigQuery Scheduled Tasks Cloud Scheduler タスクAPIへ Monitoring Logging Bulk Tasks Cloud Tasks タスクAPIへ 著者‧読者 管理者 WAF CDN Cloud Armor
いまふりかえって移行はどうだったか? • 成功です。移行してよかったです • 何が良かった? ◦ 課題がほぼ解消できた ◦ Cloud Run
のサービス抽象度がZennと合っていた。ビジネスに集中できる ◦ Cloud Run のアップデートにあやかれる
プロダクトを成長させるとなると… • そうなんです、移行するだけでは不足です • Webアプリをデプロイするのは圧倒的に得意 • 継続的な開発と運用には、いろいろなサービスのちからを借りる必要あり
Cloud Run 活用 具体例 DBマイグレーションしたい キューイングしたい Geminiをアプリに組み込みたい
DBマイグレーションしたい DBマイグレーションはどの現場でも実施されていることと思います ZennのアプリはRuby on Railsの db:migrate コマンドでDBマイグレーションし ている App Engine
時代は SSH ログインして実行していたが、いまは Cloud Run ジョ ブ でDBマイグレーション用のジョブを定義してそれを実行する方式
DBマイグレーションしたい GitHub - mainブランチへマージ ステップ1 Cloud Build - Dockerイメージ作成 ステップ2
Cloud Build - Cloud Run ジョブ 更新 ステップ3 Cloud Build - Cloud Run リビジョン作成 ステップ4 Cloud Shell - DBマイグレーション実行 ステップ5 Cloud Shell - リリース ステップ6
DBマイグレーションしたい GitHub - mainブランチへマージ ステップ1 Cloud Build - Dockerイメージ作成 ステップ2
Cloud Build - Cloud Run ジョブ 更新 ステップ3 Cloud Build - Cloud Run リビジョン作成 ステップ4 Cloud Shell - DBマイグレーション実行 ステップ5 Cloud Shell - リリース ステップ6 - id: deploy-rails-command-job name: gcr.io/google.com/cloudsdktool/cloud-sdk:a lpine entrypoint: gcloud args: - [“run”, “jobs”, “deploy”] - rails-command - --quiet - --image=$IMAGE_NAME - --service-account=$ACCOUNT - --set-cloudsql-instances=$NAME - --command=bundle,exec,rails - --args=db:migrate,db:migrate:status cloudbuild.yaml
DBマイグレーションしたい GitHub - mainブランチへマージ ステップ1 Cloud Build - Dockerイメージ作成 ステップ2
Cloud Build - Cloud Run ジョブ 更新 ステップ3 Cloud Build - Cloud Run リビジョン作成 ステップ4 Cloud Shell - DBマイグレーション実行 ステップ5 Cloud Shell - リリース ステップ6 gcloud run jobs update rails-command \ --project zenn-project \ --region=asia-northeast1 \ --command=bundle,exec,rails \ #なくてもOK --args=db:migrate \ #なくてもOK --execute-now \ --wait
運用してどうか? Cloud Run ジョブ は指定した Docker イメージでコマンドを実行する手段 検証環境ではdb:migrateまでCloud Buildで実行してしまうなど、柔軟性も◯ db:rollback
は本番環境では実質封印 なにか問題が起きた場合は修正を db:migrate したほうが安定すると判断
キューイングしたい Cloud Tasks を使います。ZennではMarkdownの一括変換で利用 Zennでは読み込み速度向上のため変換済みHTMLをDBに保存している Markdown => HTML の変換仕様がかわり、すべての記事を洗いがえるケース
キューイングしたい Cloud Tasks を使います。ZennではMarkdownの一括変換で利用 create_params = { queue: "markdown-convert", target_path:
"/tasks/md_convert/run", payload: { id: new_task.id, item_name: item.class.name, item_id: item.id } } tasks.create(**create_params) enqueue.rb Scheduled Tasks Cloud Scheduler タスクAPIへ 投入側
キューイングしたい Cloud Tasks を使います。ZennではMarkdownの一括変換で利用 create_params = { queue: "markdown-convert", target_path:
"/tasks/md_convert/run", payload: { id: new_task.id, item_name: item.class.name, item_id: item.id } } tasks.create(**create_params) enqueue.rb Scheduled Tasks Cloud Scheduler タスクAPIへ 投入側 post "/tasks/md_convert/run" def run convert(target_item) end markdown.rb 変換側
運用してどうか? 最高です。PUSH型のキューイングサービス • アプリ側の仕事 ◦ エンキュー(パラメータをセットしてリクエストするだけ) ◦ 受け側のエンドポイントと処理を実装(ふだんのWeb APIとかわらない) Markdown
変換処理はユーザー利用のものと共通にできる オフロードしたくなったら Cloud Tasks を第一に考える ステートレス思想なCloud Runがここまで戦えるのは Cloud Tasks のおかげ
Geminiをアプリに組み込みたい 特別なことをせずともRails(Cloud Run)から Vertex AI API で呼び出せる Zenn ではAIレビュー機能、スパムチェック機能で利用中 Cloud
Run の サービスアカウントに “Vertex AIユーザー” がついていればOK
AIレビュー機能 書いた記事をAI(実体は gemini-2.5-flash)にレビューしてもらえる @gemini = VertexAiApi::Gemini.new( model: "gemini-2.5-flash", response_schema: response_schema,
) @gemini.call(“”” ## はじめに あなたはIT技術系ブログプラットフォーム ZennのAIレビュー担当者です。 以下の記事について、品質向上のためのレ ビューを行ってください。 “””) ai_reviewer.rb ユーザー API Cloud Run
スパムチェック機能 明らかな誘導記事などを自動で凍結(強制非公開)措置をとる機能 データベース タスク API Cloud Run Cloud SQL @gemini
= VertexAiApi::Gemini.new( model: "gemini-2.5-flash", response_schema: response_schema, ) @gemini.call(“”” あなたはIT技術系ブログプラットフォームの Zennのスパム検知ロボットです。 次のコンテンツがスパム投稿である確率を判定 してください。 “””) spam_checker.rb
運用してどうか? 他の Google Cloud サービスと同じ手順でGeminiが利用できる点がよい 少ないステップでアプリに生成AIを組み込める リーズナブルに利用できる • 2025年8月 ◦
AIレビュー機能: 611回利用された ◦ スパムチェック: 5550投稿された記事に対して適度に間引いて実行した ◦ __________円
運用してどうか? 他の Google Cloud サービスと同じ手順でGeminiが利用できる点がよい 少ないステップでアプリに生成AIを組み込める リーズナブルに利用できる • 2025年8月 ◦
AIレビュー機能: 611回利用された ◦ スパムチェック: 5550投稿された記事に対して適度に間引いて実行した ◦ 8,846円
Cloud Run だけでアプリ作れるって本当? • 本当です。Zennが作れます • Cloud Run ジョブ や
Cloud Tasks など、手数少なく統合できる • 事業のフェーズやユースケースに合わせて強化できる • Zennにとってはなくてはならない相棒です 年月 プルリクエスト合計 2025年4月 175 2025年5月 198 2025年6月 191 年月 プルリクエスト合計 2021年4月 56 2021年5月 47 2021年6月 25
Zenn と Cloud Run のこれから • SLAやSLOの設定 • 取り扱う個人情報が増えた場合 •
連携するサービスが増えた場合 • コンテンツのパーソナライゼーションとロジック
None