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
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
Yusuke Wada
September 25, 2025
Technology
6
920
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
6.5k
Zennの運営完全に理解した #完全に理解したTalk
wadayusuke
1
430
ZennにCloudflare WAFを導入してDDoSを防いだ例 / zenn-cloudflare-waf-blocked-ddos
wadayusuke
1
1.1k
Google Cloud でシンプルなブログサイト Xenn をつくろう / xenn-google-cloud-handson
wadayusuke
4
310
Google Cloud で プロダクト開発 事業として成長させるZennの例 / grows-zenn-with-google-cloud
wadayusuke
3
880
ZennにみるCloudRunとBigQueryによるアプリケーション構築 / zenn-cloudrun-bigquery-serverless
wadayusuke
16
7.2k
Zennを支える Google Cloud の技術
wadayusuke
5
1.7k
個人ブログサイトを構築して学ぶGraphQL NestJSとNext.js使うよ! / graphql nestjs nextjs bootcamp
wadayusuke
6
4.2k
Step Functions と Lambda Function で組む Athena によるファイル処理 / serverless lightweight etl
wadayusuke
3
4.2k
Other Decks in Technology
See All in Technology
A4)シラバスを超えて語る、テストマネジメント
moritamasami
0
120
【PHPerKaigi2026】OpenTelemetry SDKを使ってPHPでAPMを自作する
fendo181
1
170
CloudFrontのHost Header転送設定でパケットの中身はどう変わるのか?
nagisa53
1
150
AgentCoreとLINEを使った飲食店おすすめアプリを作ってみた
yakumo
2
230
イベントで大活躍する電子ペーパー名札を作る(その2) 〜 M5PaperとM5PaperS3 〜 / IoTLT @ JLCPCB オープンハードカンファレンス
you
PRO
0
200
AIエージェント×GitHubで実現するQAナレッジの資産化と業務活用 / QA Knowledge as Assets with AI Agents & GitHub
tknw_hitsuji
0
210
Astro Islandsの 内部実装を 「日本で一番わかりやすく」 ざっくり解説!
knj
1
240
スピンアウト講座03_CLAUDE-MDとSKILL-MD
overflowinc
0
1.2k
事例から紐解くSHIFT流QA支援 ~大規模プロジェクトの品質管理支援、QA組織立ち上げ~ / 20260320 Nozomu Koketsu
shift_evolve
PRO
0
140
大規模ECサイトのあるバッチのパフォーマンスを改善するために僕たちのチームがしてきたこと
panda_program
1
380
DDD×仕様駆動で回す高品質開発のプロセス設計
littlehands
5
2.3k
The Rise of Browser Automation: AI-Powered Web Interaction in 2026
marcthompson_seo
0
300
Featured
See All Featured
Building Better People: How to give real-time feedback that sticks.
wjessup
370
20k
Leveraging Curiosity to Care for An Aging Population
cassininazir
1
200
Leveraging LLMs for student feedback in introductory data science courses - posit::conf(2025)
minecr
1
200
Designing Experiences People Love
moore
143
24k
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
31
10k
Mind Mapping
helmedeiros
PRO
1
130
Imperfection Machines: The Place of Print at Facebook
scottboms
269
14k
Design of three-dimensional binary manipulators for pick-and-place task avoiding obstacles (IECON2024)
konakalab
0
390
The Limits of Empathy - UXLibs8
cassininazir
1
270
Bash Introduction
62gerente
615
210k
ラッコキーワード サービス紹介資料
rakko
1
2.7M
How To Stay Up To Date on Web Technology
chriscoyier
790
250k
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