Toilを無くして徒然なるままに日暮し硯に向かひたい

生成AIアプリケーション開発などを行うエンジニアのブログです。

完結編のそのまた先へ — Gemini 4 Argon 登場! 新仕様 `thinking_level` の罠と、法律判定で87秒考え込んで財布が爆発しそうになった話

Gemini 4 Argonに生成AIが苦手な法規判定をやらせてみた

はじめに

「もう二度と完結編とは書かない」と誓ったはずなのに、Google DeepMind が次世代フラッグシップ推論モデル Gemini 4 Argon (gemini-4-argon) をリリースしてしまいました。 新モデルが出たとなれば、机の前に座ってベンチマークを回さざるを得ません。

本ブログで連載してきた 「自転車の青切符 × 2008年の卒論ロジック」 シリーズも、気がつけば第8弾となりました。

過去の連載記事一覧

今回の対象リポジトリ: shu-kob/gemini-law-compiler
対応 Pull Request: #18 (feat: Gemini 4 Argon サポートおよび 2x2 マトリクス検証レポートの追加)

さっそく Gemini 4 Argon を組み込んでみたところ、「API仕様の地雷」、「推論が深すぎて1分半フリーズする現象」、そして 「見えない思考トークンによる課金の罠」 に直面しました。その検証記録をお届けします。


1. API の罠:thinking_budget から thinking_level へ刷新

まず実装段階で洗礼を受けました。 Gemini 2.5 や 3.x 世代では、推論トークン数を整数で指定する thinking_budget が使われていましたが、Gemini 4 Argon で thinking_budget を渡すと 400 エラーで即死します。

400 INVALID_ARGUMENT.
Thinking budget is not supported for this model.
Use thinking level instead.

Gemini 4 世代からは、トークン数の直接指定が廃止され、段階指定パラメータ thinking_level(low / medium / high)を使う仕様に変わっていました。

互換コード(Python / google-genai SDK)

新旧モデルが混在するリポジトリのため、以下のような自動判定ラッパーを config.py に実装しました。

from typing import Any

def uses_thinking_level(model: str) -> bool:
    """Gemini 4 世代モデルかどうか判定"""
    return "gemini-4" in model or "argon" in model

def get_thinking_config(
    model: str,
    thinking_enabled: bool = False,
    thinking_budget: int = 2048,
) -> dict[str, Any]:
    """モデル世代に応じた thinking_config を返す"""
    if uses_thinking_level(model):
        # Gemini 4 Argon: low / high で制御
        return {"thinking_level": "high" if thinking_enabled else "low"}
    # Gemini 3.x / 2.5: 数値バジェットで制御
    return {"thinking_budget": thinking_budget if thinking_enabled else 0}
from google import genai

client = genai.Client(api_key=API_KEY)

# 推論を最小限に抑えて高速応答させる設定
config = {
    "temperature": 0.0,
    "thinking_config": get_thinking_config("gemini-4-argon", thinking_enabled=False),
}

resp = client.models.generate_content(
    model="gemini-4-argon",
    contents="道路交通法において自転車は軽車両ですか?",
    config=config,
)

Tips: 思考を実質OFFにしたい場合は "low" を渡すと思考トークンがほぼゼロになり最速で返ります(なお "minimal" は Argon では未対応エラーとなりました)。


2. 実測:生条文を渡して推論させたら「87秒」考え続けた

本シリーズでおなじみの難問 「75歳高齢者の歩道通行(TC-001)」 を Argon に解かせてみました。

問題: 75歳の高齢者が普通自転車で歩道を走行しています。これは違反ですか?反則金はいくらですか?
法律の構造: 道交法第63条の4第1項第2号には「政令で定める者」としか書かれておらず、具体的な年齢要件(70歳以上)は道路交通法施行令第26条にジャンプしないと分かりません。

この問題を、以下の 2×2 マトリクスで実測しました。

2×2 マトリクス検証結果(TC-001)

パターン 入力(前処理) Thinking 設定 レイテンシ 判定結果
① 生条文 × 推論OFF 生の条文 level="low" 8.2 秒 ✅ 合法
② 生条文 × 推論ON 生の条文 level="high" 87.7 秒 (約1分半!) ✅ 合法
③ 前処理済 × 推論ON 構造化・政令解決済 level="high" 11.3 秒 ✅ 合法
④ 前処理済 × 推論OFF 構造化・政令解決済 level="low" 4.2 秒 (最速) ✅ 合法 (最高精度)

驚き①:基礎知能は歴代最強(政令を自力で思い出す)

先行世代のモデル(Flash 3.7 / 3.8 / 3.5-Lite)は、生の条文だけを渡すと 100% 施行令を見落とし、「歩道通行違反・反則金6,000円」と捏造していました。
しかし Gemini 4 Argon は生条文だけでも、自身の学習データから施行令第26条を引っ張り出し、「70歳以上なので合法」と自力正答 しました。この知能の高さは本物です。

驚き②:しかし遅すぎる(自問自答で87秒)

問題はレイテンシです。条文の例外規定を検証するために 87秒間も考え込み、Webアプリやチャットとしては完全にタイムアウト級の待ち時間が発生しました。


3. コストの罠:思考トークンは「出力トークン」として丸ごと課金される

「裏で非同期で回すバッチ処理なら87秒待ってもいいのでは?」と思うかもしれません。しかし、お財布へのダメージが強烈です。

画面に出ない思考プロセスが全部「出力」扱い

画面上に表示される回答が「合法です」の数行であっても、裏でモデルが自問自答した「思考プロセス(Thinking Tokens)」はすべて高価な【出力トークン】として課金されます。

パターン 入力トークン 思考・出力トークン 1回あたりの総トークン
② 生条文 × 推論ON (力技) 約 4,000 tok(条文丸投げ) 約 1,100 tok(大量の自問自答) 5,097 tok
④ 前処理 × 推論OFF (本命) 約 1,100 tok(必要な条文のみ) 約 160 tok(確定出力のみ) 1,292 tok (約75%削減)

さらに、Gemini 4 Argon はフラッグシップモデルのため、モデル単価自体が Flash の数倍〜10倍高価です。

「フラッグシップ単価」×「思考トークンによる4倍の消費量」 のダブルパンチにより、前処理なしで推論させると コストが 10〜30 倍に跳ね上がります。

10,000 回リクエスト時のシミュレーション

構成 10,000回処理の推定コスト 処理時間(累計)
② 生条文 × Argon 推論ON 約 20,000 円 〜 30,000 円 約 152 時間(6.3日分)
④ 前処理済 × Argon 推論OFF 約 3,000 円 〜 5,000 円 約 10 時間
参考: 前処理済 × Flash-Lite 推論OFF 約 150 円 〜 300 円 約 3 時間

4. 解決策:2008年の卒論で解いて、推論は切る(④)

第5弾の記事 で実証した「確定ロジックでの推論(Thinking)不要論」は、Gemini 4 世代でも完全に当てはまりました。

2008年式の古典的XMLパーサ(Layer 1)で事前に法令参照を解決し、「反則金と根拠条文はこれです」と確定情報をプロンプトに注入した上で thinking_level="low" で呼び出します。

結果: - 遅延:87.7 秒 → 4.2 秒(95% 高速化) - 総トークン数:5,097 tok → 1,292 tok(75% 削減) - コスト:推論ONの約 1/5〜1/10 へ圧縮 - 出力品質:法律文書として隙のない論理的な回答


5. まとめ

  1. API 仕様の刷新: Gemini 4 Argon では thinking_budget は廃止。thinking_level="low" / "high" を使うべし。
  2. 生テキストでの推論丸投げは「遅い・高い」: 自力で解く知能はあるが、1分以上悩み、高価な思考トークンを大量消費する。
  3. 「古典的決定論パーサー × Thinking Low」が次世代でも最強: 事実関係の確定(グラウンディング)は古典アルゴリズムで行い、LLMには推論をさせずに評価器・文章生成器として使う設計が、Gemini 4 世代でも「速度・コスト・精度」すべての面で圧倒的なベストプラクティスでした。

現場からは以上です。次回こそ、本当に完結編になることを祈りつつ……。

Google Cloud 認定資格を全冠しました(14試験・2年半の記録)

2026年8月8日、Google Cloud 認定試験の全冠を達成しました。

Google Cloud 認定資格は現在14試験あり、その全てに合格した状態です。全冠されている方は業界内に他にもいらっしゃいますが、私の場合は1年などという短期間で凝縮して駆け抜けたタイプではなく、約2年半かけてゆっくり積み上げた形になります。

初めて受けたのが2年半前の Google Cloud Certified - Cloud Digital Leader(以下 CDL)。そこからガツガツ受けた時期もあれば、まったく受けていない時期もありました。この間、IPA の情報処理技術者試験(高度情報)も並行して受けていて中断時期もありますし、モチベーションの波もそれなりにありました。

ただ、「全冠を取るぞ」と決めてからは、コンスタントに取っていけたという実感があります。

受験費用とバウチャーの事情

私は Google Cloud のパートナー企業であるスリーシェイクに勤めています。パートナー企業の社員には受験費用が無料になるバウチャーが配布されるため、費用面ではかなり恵まれた環境でした。

ただ、この配布方式が2026年4月頃に変わりました。

  • 旧方式(Kryterion 時代): クーポンコードが配布され、それを適用すれば受験できた
  • 新方式: Google Cloud Skills Boost で特定のコースを完了することで、バウチャーが適用される

2026年2月にテスト配信プロバイダーが Kryterion から Pearson VUE に変わったタイミングと前後して、この変更が入りました。

正直、この Skills Boost の対応になかなか本腰を入れられず、バウチャーを受け取るのが遅れました。ただ、一度やってみると他の試験分の Skills Boost もどんどん消化できるようになり、最終的には問題なく受験できました。面倒がって後回しにしていた期間が、結果的に一番のロスでした。

受験履歴

日付 試験 結果
2024/02/10 Google Cloud Certified - Cloud Digital Leader(CDL) 合格
2024/05/31 Google Cloud Certified - Associate Cloud Engineer(ACE) 合格
2024/06/26 Google Cloud Certified - Professional Cloud DevOps Engineer(PCDOE) 不合格
2024/07/13 PCDOE(2回目) 合格
2024/07/26 Google Cloud Certified - Professional Cloud Architect(PCA) 不合格
2024/08/10 PCA(2回目) 合格
2024/11/28 Google Cloud Certified - Professional Cloud Developer(PCD) 不合格
2024/12/29 PCD(2回目) 不合格
2025/07/19 PCD(3回目) 合格
2025/08/09 Google Cloud Certified - Generative AI Leader(GAIL)【英語版】 合格
2025/11/20 Google Cloud Certified - Professional Data Engineer(PDE) 不合格
2025/11/23 Google Cloud Certified - Associate Data Practitioner(ADP) 合格
2025/12/14 PDE(2回目) 合格
2025/12/27 Google Cloud Certified - Professional Machine Learning Engineer(PMLE) 合格
2025/12/28 Google Cloud Certified - Associate Google Workspace Administrator(AGWA) 合格
2026/01/11 Google Cloud Certified - Professional Cloud Security Engineer(PCSE) 合格
2026/02/18 Google Cloud Certified - Professional Cloud Database Engineer(PCDBE)【英語版】 不合格
2026/06/18 PCDBE(2回目)【日本語版】 合格
2026/07/23 Google Cloud Certified - Professional Cloud Network Engineer(PCNE) 合格
2026/07/29 PCDOE 更新試験 合格
2026/08/08 Google Cloud Certified - Professional Security Operations Engineer(PSOE) 合格

※ PCAはRenewal Skillsにて試験なしで更新

こうして並べると、私はかなり落ちています。しかも落ちているのは最初の方に集中していて、初期の Professional は受けるたびに一度落ちていました。

  • PCDOE: 1回落ちて2回目で合格
  • PCA: 1回落ちて2回目で合格
  • PCD: 2回落ちて3回目で合格

それが次第に、Professional でも一発で合格できるようになっていきました。

印象に残っている試験

GAIL — 受験登録後に日本語化が発表される

GAIL は英語版で受験しました。当時は日本語版がなかったためです。

ところが、受験登録をしてから受験日までの間に Google Cloud Next Tokyo '25 が開催され、そこで「Generative AI Leader を日本語化します」という発表がありました。

このまま英語版で受けるか、キャンセルして日本語版を待つか悩みましたが、そのまま英語版で受けて無事合格。日本語版の発表を聞いた時は、非常に複雑な心境でした。受験登録前だったら大喜びだったんですが……。

とはいえ、英語で受験したのは今振り返るととても良い経験でした。

PDE → ADP — 順番を間違えた話

PDE(Professional Data Engineer)を1回目で落ちました。

本来であれば、ADP(Associate Data Practitioner)を受けた後に PDE を受けるべきです。ではなぜ逆になったのか。ADP が日本語化されているのを知らなかったからです。英語版しかないと思い込んで後回しにし、先に PDE に手を出してしまいました。

ちゃんと確認しておくべきでした。

そして PDE に落ちて悔しくなり、3日後に ADP を受けて合格しました。これは PDE のために積んだ土台があり、かつ試験の難易度が下がる分、3日で行けたという面が大きいと思います。

その後、1回目から2回目の受験制限期間(2週間)を明けて、2025年12月14日に PDE を合格。この試験は12月半ばあたりで試験内容が変わるという情報があったので、変わる前に取りに行くことを決めて臨みました。

PMLE — PDE の土台があれば2週間で行けた

PMLE(Professional Machine Learning Engineer)は難関と言われる試験です。

ですが、ADP・PDE と積み上げてきた土台、特に PDE が土台になることで、PDE 合格から2週間(12/14 → 12/27)でクリアできました。

PMLE が難しいと言われる理由は、Google Cloud の知識だけでなく機械学習そのものの知識も必要になるためです。ただ、生成 AI をがっつりやっている方であれば、ML 領域の素養も次第についてくるので、そこは段階的に埋まっていくと思います。

AGWA — PMLE の翌日、一夜漬け

PMLE に合格した翌日(12/28)に、AGWA に合格しました。

やったことは、ほぼ一夜漬け。今振り返ると、かなり詰め込んだなと思います。

この流れで、2025年11月から2026年1月までの3ヶ月で5試験(ADP・PDE・PMLE・AGWA・PCSE)に合格できました。

PCDBE — 英語版で落ち、日本語版で合格

2026年2月18日、PCDBE を受験。当時は英語版しかなく、久しぶりの不合格となりました。英語版はやはりきつかったです。

その後、テスト配信プロバイダーの変更(Kryterion → Pearson VUE)やバウチャー方式の変更を挟んで間が空き、6月18日に日本語版で再受験して合格しました。

勉強法:Gemini Notebook(旧NotebookLM)の活用

途中から取り入れたのが Gemini Notebook(旧NotebookLM) です。PDE を受けるにあたって使い始めました。

私の勉強の流れはこうです。

公式ドキュメントやUdemyの模擬試験をGemini Notebookに入れ、生成されるスライドと音声でポイントを抑えます。

スライドはかなり分かりやすく解説してくれる形に整えてくれますし、音声解説も理解しやすい。動画を作って見るのもアリだと思います。

なお、この方法が特に効いた試験と、そうでもなかった試験があります。その辺りの使い分けは別記事で書く予定です。

受験順の戦略:垂直に積み上げる

全冠を目指す方に一番お伝えしたいのが、受験順です。

結論から言うと、垂直に積み上げるのが良いと考えています。つまり、ある試験に合格したら、同じ上位系統の資格に続けて挑戦するということです。

なぜかというと、試験のために記憶した内容は、時間が経つと薄れていくからです。薄れる前に次を受けたい。そして、それを最も有効に活用できるのが同じ上位系統の資格なのです。

アーキテクト・開発・運用系

CDL → ACE → PCA → PCD → PCDOE

一番易しい CDL から入り、その上位である ACE、さらに上位の PCA へ。PCA の次は王道的には PCD、そして開発系という括りで近い PCDOE、という流れです。

(私自身は PCA より先に PCDOE を受けているのと、PCDは最後なので、この順番を守っていません。)

AI・ML・データ系

GAIL → ADP → PDE → PMLE

AI とデータは結びつきが非常に強い領域です。GAIL の出題範囲には ML の問題も含まれていますし、ADP・PDE の領域にも ML が含まれます。AI・ML・データはひとつの塊として捉えて良いと思います。

難関と言われる PMLE も、ADP → PDE と駆け上がっていけば、かなり取りやすくなります。

データベース

PCDBE については、PDE でデータベース関連の内容もそれなりに出てくるので、繋がりはあります。ただ、PDE と PMLE の方が結びつきは強い印象です。

なので PDE の後に PCDBE でも良いですし、逆でも良いと思います。

ネットワーク・セキュリティ系

PCSE・PCNE・PSOE の3つは、「ネットワーク・セキュリティ系」と括れそうに見えますが、実際に受けてみると試験問題の内容としての結びつきはそこまで強くないと感じました。それぞれタイプが違います。

なので、ここは垂直に積み上げるメリットが他の系統より薄いかもしれません。

難易度は人それぞれの経験で変わる

一般的に「この試験は難しい」と言われるものはありますが、難易度は本人の実務経験で大きく変わります。

私の場合、難関と言われる PMLE の後に、(英語版とはいえ)PCDBE で落ちています。普段の業務で触っているサービスと、試験範囲の重なり方によって、体感難易度は全然違ってきます。

AI 系が強い方は、まず PMLE を目指してみるのも良いかもしれません。

なお、PCNE も難しいと言われる試験ですが、こちらは対策をしっかりやって一発合格できたので、そこは良かったなと思っています。

費用について

パートナー企業でない方は、受験費用がそれなりにかさみます。会社の資格試験補助制度などを活用して臨むのが現実的だと思います。

パートナー企業の場合は、年1回の全冠表彰(Google Cloud Partner All Certification Holders ← リンク先は2025年のもの)もあります。私もこれを忘れずに申請したいと思います。

おわりに

私の場合は約2年半かけて、ゆっくり全冠まで到達しました。

途中で何度も落ちていますし、順番を間違えたり、英語版で苦戦したり、バウチャーの対応を面倒がって時間をロスしたりもしています。それでも、系統ごとに垂直に積み上げることと、Gemini Notebookを使いこなすことを続けていれば、全冠は十分に射程内だと感じました。

Google Cloud を触っている方は、ぜひ全冠を目指してみてはどうでしょうか。

shu-kob.hateblo.jp

↑以前の記事で書きましたが、Google Cloud Next Tokyoで獲得した全冠バッチ!

お読みいただきありがとうございました。

部下としてのAI 世界一流エンジニアの進化術 第1章を読んで 〜理解こそが最も重要〜

↑こちらの画像はGoogle Nano Banana 2で生成

牛尾剛さん著『部下としてのAI 世界一流エンジニアの進化術』Kindle版を購入。

Amazon.co.jp: 部下としてのAI 世界一流エンジニアの進化術 (文春e-book) eBook : 牛尾 剛: Kindleストア

6月11日に出て、2ヶ月遅れだが、気になり読んでみました。

Amazon.co.jp: 世界一流エンジニアの思考法 (文春e-book) eBook : 牛尾 剛: Kindleストア

前作、『世界一流エンジニアの思考法』もKindle版買うて読んでいましたが、実践に至ってない箇所も多いな、と思いつつ、今作を読み進め、第1章『生成AIをマネジメントする』を読み終えました。

第1章は生成AIによる目まぐるしい変化の解説とともに、前作でも力説されていた「深い理解の重要性」が今作でもやはり大事なんだと書かれています。

第1章まで読んで、理解力の向上は基礎練かな、と前作読んだ記憶を頼りに仮説を立ててみました。

例えば、個人的に思い浮かんだのは、受験勉強では基礎問題の反復で応用問題も解けるようになる。応用問題は分解すると、基礎の組み合わせでできている。

そのような展開かな、と思いましたが、第2章 『「理解」をブーストする』では、「できるエンジニアはコードをたくさん読んでいる」から始まります。

自分が建てた仮説の答え合わせをしながら、第2章以降も読み進めていきます。

Google Cloud Next Tokyo 26 で 公式ユーザー会 Jagu'e'r ブースに立ってきました

Google Cloud Next Tokyo 26

2026年7月30日(木)・31日(金)、東京ビッグサイト南展示棟で「Google Cloud Next Tokyo 26」が開催されました。日本国内では最大規模の Google Cloud のイベントです。

クラウドには AWS や Microsoft Azure など他の選択肢もある中で、Google Cloud は Google 検索や YouTube を支える基盤としても使われているクラウドです。開発者体験の良さが特徴のひとつですが、最近は生成 AI の広がりもあって、「Gemini を使いたいから Google Cloud を触り始めた」というユーザーさんも増えている印象があります。実際、今年の Next Tokyo も来場者がとても多く、会場は熱気にあふれていました。

↓参加されてない方もイベント登録でアーカイブ動画を視聴できます

www.googlecloudevents.com

私と Google Cloud

私は2023年12月にスリーシェイクに入社しました。スリーシェイクは Google Cloud のプレミアパートナーであり、AWS のアドバンストティアパートナーでもあります。

入社をきっかけに仕事で初めて Google Cloud を触り、そこから資格試験もがっつり取り、案件もほとんどが Google Cloud という状況になりました。開発者体験の良さや、生成 AI との相性の良さもあって、今ではすっかり私の中で「大好きなクラウド」になっています。

Next Tokyo との関わり方の変化

2024年(パシフィコ横浜開催):スリーシェイクの自社ブースに立つ。セッションは聞かず

2025年(26年と同じく東京ビッグサイト南展示棟):1日だけ一般参加者として、セッションやブースを回る

2026年:1日目は一般参加者としてセッション中心、2日目は Jagu'e'r のブースに立つ

参加の仕方が「見る側」や「立つ側」混ざってますが、26年2日目はがっつり立つ側を楽しみました!

Jagu'e'r というコミュニティ

jaguer.jp

jaguer.connpass.com

Jagu'e'r は Google Cloud の公式エンタープライズユーザー会です。参加には会員登録が必要で、その意味では少しクローズドではあるのですが、その分きちんと熱量のある方が集まっていて、とても活気のあるコミュニティになっています。

私は今年1月から AI/ML 分科会の運営に入り、定例会議に参加したり、各種イベントの運営に携わってきました。6月30日には Antigravity のハンズオンで講師も担当しています。

そんな中で「Next Tokyo 26 の Jagu'e'r ブースに立つ人を募集」というお知らせがあり、手を挙げて、2日目にブースに立つことになりました。

ブースには、書籍『優れたエンジニアがコミュニティの中でしていること 会社の外で技術を磨くには?』の著者である黒須義一さん・酒井真弓さん・宮本佳歩さんも立たれていて、著者3人が揃う場面も見られました。コアメンバーの方々がたくさんいる中で、とても刺激を受けました。

↑黒氏さんのX投稿を拝借

この書籍は、その場で入会してくださった方に先着でお配りしていました。Jagu'e'r メンバーが中心となって書かれた本ですが、Jagu'e'r に限らず、いろいろなコミュニティでの活動の仕方を考えるうえで、とても良い教科書になっていると思います。

⇒『優れたエンジニアがコミュニティの中でしていること 会社の外で技術を磨くには?』をAmazonで見る

ブースに立ってみて

↑1日目の様子をMarioさんのX投稿から拝借(私は2日目なのでこのときはいません)

一般参加の方に Jagu'e'r について説明し、できれば入会を促す、というのがブースでの役割でした。

こうして入会のお誘いをしていく中で、「自分ももっと Jagu'e'r にコミットしていきたい」「Google Cloud をもっとみんなに知ってもらいたい、触ってもらいたい」という気持ちがどんどん強くなっていきました。同時に、コミュニティに入る意義を、自分の言葉でもっと整理して説明できるようになりたいとも思いました。先ほどの書籍に書かれているようなことを、自分なりに言語化していきたいです。

普段は関西分科会運営で、関西から来てブースに立ってくださった方も!

数字で見ると

ブースには 約600名 の方が来場 そのうち 約100名 の方が、その場で会員登録の手続きをしてくださいました

仲間がぐっと増えた2日間でした。

印象に残ったこと: 非エンジニアの方の声

来場者の中には非エンジニアの方も多くいらっしゃいました。「非エンジニアでも大丈夫ですよ」とお声がけをする中で、

非エンジニアが AI コーディングをするうえで、気をつけないといけないことを教えてほしい

というご意見をいただきました。これはとても貴重な声でした。

AI/ML 分科会で6月末に実施した Antigravity ハンズオンは、まさに非エンジニアの方も意識した内容だったので、こうしたニーズをもっと拾って広げていけたらと思っています。ブースに立って直接話すことで、皆さんが何を思っているのかを生で聞ける。これが何よりの学びでした。

Googler の方と一緒に

ブースには Google の方も交代で立ってくださり、一緒に Jagu'e'r を盛り上げることができました。

普段の本業では「Google Cloud のプレミアパートナーの一員」という立場ですが、Jagu'e'r という公式コミュニティを通じて、Google Cloud に対する当事者意識がより一層芽生えたように思います。

コミュニティとの関わり方について思うこと

仕事以外の時間で、IT エンジニアのコミュニティに所属して何をしていくか。

最初は参加してインプットする、というのが中心になると思います。そこから、

参加してインプットする 発表する側に回ってみる 運営側に回ってみる

と進んでいくことで、当事者意識が生まれ、コミュニティへのコミットも、プロダクト(Google Cloud)への思い入れも増えていきます。そしてそれは、本業の仕事にもつながっていきます。

もうひとつ、コミュニティは 仲間づくりの場 でもあります。同じプロダクトを愛する仲間ができる。家庭・職場に次ぐ「サードプレイス」ができるという意味でも、人生の中で良い場所を持てるのだと思います。

私自身、Jagu'e'r 以前にもコミュニティに所属したり運営したりしてきましたが、Jagu'e'r は規模が大きい分、活動も面白いことが多く、そして何より Google Cloud にめちゃくちゃ詳しい方が運営に携わっている。その中に入ることで、視座がかなり広がったと感じています。

実際、Google Cloud の資格も14ある中であと1つで全冠というところまで来ました。Next Tokyo の資格認定者ラウンジでは全冠特典のバッジがいただけるのですが、残っている SecOps は今回の特典の対象外だったため、条件を満たしてバッジを受け取ることができました。Jagu'e'r に関わることで、Google Cloud の学習もどんどん進められたなと思います。

運営に関わっている方の多くは、複数の分科会を掛け持ちしていたりして、本当に熱量が高い。Jagu'e'r 以外のコミュニティも運営されている方も多く、それがライフワークになっている方もいらっしゃいます。私には小さな子供もいるので、私生活とのバランスを取りながら、無理のない形でコミュニティにコミットしていきたいと思っています。

GDG のブースも

Jagu'e'r ブースの真向かいには、Google Developer Groups(GDG)のブースもありました。

gdg-tokyo.connpass.com

↑GDG Tokyo以外にも地方のグループがあります

私も GDG のイベントには参加していて、2025年の DevFest Tokyo では懇親会 LT をやらせていただきました。運営の方に知り合いがいたので、少しお話もできました。GDG も同じく Google のコミュニティとして、とても良いコミュニティだと思います。GDGの今後のイベントも楽しみです!

おわりに

2日目に一日中ブースに立って、足はとても疲れましたが、達成感と充実感、そして幸福感で心が満たされた一日でした。このブログを書いているのは1日経ってからですが、まだその幸せな気持ちが続いています。

これからも Google Cloud についてもっといろいろ学んで、どんどんアウトプットしていきたいですし、仕事でも Google Cloud のポテンシャルを活かしていきたいと思います。

Jagu'e'rブースに来てくださった皆様、一緒にブースに立ってくださったJagu'e'r運営の皆様、Googlerの皆様、Google Cloud Next Tokyoにご来場くださった皆様、本当にありがとうございました。

Jagu'e'r AI/ML 分科会も引き続き盛り上げていきますので、どうぞよろしくお願いいたします!

【お詫びと訂正】

Jagu'e'r ブースにて「Jagu'e'r Camp 2026」を 2026年11月18日開催 としてご案内しておりましたが、日程が延期となりました。

大変申し訳ございません。お詫びいたします。

新しい日程が決まりましたら、改めてお知らせいたします。

HTTP 200 OKの「その奥」へ!AIアプリでユーザとの話が噛み合わないことを観測し満足度を上げるオブザーバビリティ手法

HTTP 200 OKのホワイトアウトその皿のさらに奥に潜む影 〜 Gemini 3.5 Flashで意味的意味論的フリクションをデジタル信号に落とし込み、遅延結合でねじ伏せる

shu-kob.hateblo.jp

↑ さて、前回の記事の続きです!

前回の記事では、Reactのユーザー不満をオブザーバビリティで拾っていく、つまり「SRE(Site Reliability Engineering)の信頼性の中に『満足性』も加えるべきだ」という話をさせていただきました。

今回は、その「満足性」の要素に AI・LLMの挙動 というものも含めてみました。これが、ユーザーと生成AIの対話の裏で発生している 『意味論的フリクション(セマンティック・フリクション)』 です。

この意味論的フリクションをシステムに組み込んだらどうなるのか? を検証してみました。

🌀 1. 200 OK のホワイトアウト、その「さらに奥」に潜む影

1.1. 「HTTP 200 OK」の死角

前回の記事で、私は「画面が真っ白にフリーズしても、インフラ監視は200 OKを返す死角」を暴きました。

そして、それを: * レイジクリック(怒りの連打) * 探索の迷子(画面の往復) * パースエラー(Error Boundary)

といった「物理的センサー」によって、デジタルシグナル『0か1』の決定論的な世界に落とし込んで、監視・制御する手法を実証をしました。

1.2. インフラ100%正常なのに、ユーザーが激怒している死角

しかし、プロダクトを実際に運用し始めると、インフラも物理UIも 「100%正常稼働」 しているのに、ユーザーが画面の向こうで激しいストレスを感じる場面っていうのがあるんじゃないかと考えたわけですね。

例えば、AIの返答に対して、ユーザーが:

「それ違うって!」 「違うって言ってんだろうが!」 「そういう話じゃない!」

とイライラしながら言葉をぶつけているシーンです。最近のLLMはかなり賢くなったので少なくなったかもしれませんが、少し前のLLMや、プロンプトの調整が甘いシステムだと、こういう会話のズレが結構起こります。

システム的には、パースエラーは1件も起きていません。ボタンの連打もありません。インフラも完璧に「HTTP 200 OK」を返しています。 でも、ユーザーはイライラしてフラストレーションを抱えている。

この「会話のズレ」という非決定論的なカオスを、私たちはどうやって決定論的な世界に規律化したらいいのでしょうか?


🛠️ 2. 解決策:Gemini 3.5 Flashによる「セマンティック・フリクションセンサー」

2.1. 非決定論的なズレを『0か1』のデジタル信号へ

その解決策として考案したのが、Googleの 「Gemini 3.5 Flash」 を使った 「セマンティック・フリクションセンサー」 です。

ユーザーの入力と、AIの出力の文脈(コンテキスト)を、バックエンドでリアルタイムに分析して、これも 「0か1の決定論的デジタルシグナル」 に変換してしまおうという手法です。

これを実現するために、データパイプラインのフロントエンド境界線(UXEventSchema)に、以下の新たなシグナル(Zodスキーマ)を追記しました。

// articles/article.md のパイプライン境界線に追記した新スキーマ
export const UXEventSchema = z.object({
  eventId: z.string().uuid(),
  sessionId: z.string(),
  timestamp: z.string().datetime(),
  
  // ─── [NEW] 意味的(セマンティック)フリクションシグナル ───
  is_context_correction: z.number().int().min(0).max(1).default(0), // ユーザーの言い直し・訂正(0 or 1)
  is_context_deepening: z.number().int().min(0).max(1).default(0),  // 満足度の高い会話の深掘り・継続(0 or 1)
  
  // 物理センサー系(前回実装)
  rageClicks: z.number().int().nonnegative().default(0),
  pogoSticking: z.number().int().nonnegative().default(0),
});

2.2. 立ちはだかる大きなトレードオフ:監視の自己矛盾

しかし、ここで巨大なトレードオフが立ちはだかります。いわゆる 「監視の自己矛盾」 です。

[!CAUTION] ⚠️ 監視の自己矛盾とは? LLMによる文脈の分析や推論には、どんなに早くても 1秒から3秒 の時間がかかってしまいます。 もし、チャットの送信や、テレメトリーのIngest処理の中で、同期的にこの分析を走らせたら、ユーザーの画面は分析が終わるまで数秒間フリーズしてしまいます。

つまり、「UXを監視するための仕組みのせいで、UXが著しく低下する」という、本末転倒な状態が発生してしまうのです。

これを絶対に回避する必要があります。


⚡ 3. 完全非同期の裏技:インメモリー判定キャッシュ & 遅延結合(Lazy Merge)メカニズム

この「監視の自己矛盾」を解決するために、私は 「インメモリー判定キャッシュ」 と 「遅延結合(Lazy Merge)メカニズム」 という、完全非同期設計でシステムを構築しました。

プロダクトのメインストリーム(ユーザーのチャット体験)を1ミリ秒たりとも汚さない(遅延させない)ために、以下のようなパッチワーク型の非同期トランスポートを用意しました。

このアーキテクチャがもたらしてくれる「3つの価値」

① メイン応答を10ミリ秒も阻害しない「完全非ブロッキング」

ユーザーへのチャット応答と、行動テレメトリー送信は、どちらもバックエンド側で 10ミリ秒以内 にレスポンスを返します。 Geminiによる文脈分析は裏の非同期スレッドで完全に分離して実行されるため、ユーザーにはミリ秒単位の遅延も感じさせません。

② 次の波に乗せる「遅延結合レイティマージ(レイジーマージ)」

非同期で抽出されたGeminiの分析結果は、クライアントが次に定期送信するテレメトリーパケットが、バックエンドを通過する瞬間に、パッチワークのようにマージされます。 クライアントが余計な分析待ちをすることも、追加のAPI通信を走らせる必要も一切ない、極限のデータトランスポートです。

③ PII(個人情報)漏洩リスクの完全防御

[!IMPORTANT] 🛡️ 生データをデータベース(イククエリ)に残さない! AIとのやり取りの中に個人情報(クレジットカード情報やパスワードなど。LLMにそんなのを入れる人はいないと信じたいですが、万が一入れてしまったら大変です)が入っていた場合、そのままデータベースに保存すると致命的な情報漏洩リスクになります。

本システムでは、生の対話テキストデータを一切永続化しません。Geminiはメモリ上で「意味合い(メタ情報)」だけを瞬時に分解し、安全な 0か1のデジタルフラグ数値に変換 してからBigQueryに書き込みます。 これにより、情報漏洩リスクを完全にゼロにした状態で、安全な追跡監視を可能にしています。


📊 4. 実機動作検証:Gemini 3.5 Flashが暴いた「ズレ」のエビデンス

Gemini 3.5 Flashを用いて構築したこの非同期セマンティックパイプラインを、Google CloudのSandbox環境で実際に稼働させ、複数のシナリオで実機テストを行ってみました。

その実機ログ(エビデンス)を公開します!

シナリオ A:「さっきからエラーが出てるって言ってるじゃん」(ズレ・ストレス検出)

物理的な画面クラッシュや遅延は起きていませんが、会話が全く噛み合っておらず、ユーザーがイライラを言葉としてぶつけてきている、最も検知したいセマンティック・フリクションの状況です。

  • ユーザー: 「さっきからエラーが出てるって言ってるじゃん、なんで同じこと繰り返すの?」
  • AIの一つ前の応答: "Indeed! Rage clicks are tracked..."(完全に会話が噛み合っていない)

【Gemini 3.5 Flashの判定ログ】

[Semantic Analysis] Raw Gemini Response: {
  "is_context_correction": 1,
  "is_context_deepening": 0
}

➔ 判定結果: is_context_correction = 1 ユーザーのフラストレーションを検知し、会話が噛み合っていないズレをデジタルシグナルの「1」として見事にキャプチャしました。


シナリオ B:「ありがとう。ばっちり!ちなみに〜」(会話の深掘り・満足)

ユーザーがAIの回答に満足し、さらに対話を深掘りして継続している、UXが非常に良い状態です。

  • ユーザー: 「ありがとう。ばっちり!ちなみに、その Pub/Sub から BigQuery への書き込みってどれくらいのタイムラグがあるの?」
  • AIの一つ前の応答: "The telemetry endpoint is designed to be fully non-blocking..."

【Gemini 3.5 Flashの判定ログ】

[Semantic Analysis] Raw Gemini Response: {
  "is_context_correction": 0,
  "is_context_deepening": 1
}

➔ 判定結果: is_context_deepening = 1 「ありがとう」という言葉だけで終わらせず、文脈がさらに深掘り(deepening)されているポジティブな対話であることを、Geminiが裏できちんと見抜いています。


シナリオ C:「了解、ありがとう!」(クローズ・ニュートラル)

お礼を言って会話をクローズするだけの、ニュートラルな状態です。ここで「深掘り」や「訂正」としてカウントしてしまうとノイズになってしまいます。

  • ユーザー: 「了解、ありがとう!」

【Gemini 3.5 Flashの判定ログ】

[Semantic Analysis] Raw Gemini Response: {
  "is_context_correction": 0,
  "is_context_deepening": 0
}

➔ 判定結果: is_context_correction = 0, is_context_deepening = 0 細かく文脈を読み解き、不要なノイズを発生させない完璧なニュートラル判定を下しました。


【遅延結合マージの瞬間】

これらの判定が行われたコンテキストに対して、フロントエンドからテレメトリーが飛んできた瞬間のサーバーログがこちらです。

Received Telemetry Event: {"session_id":"aee60731-...","revision_id":"v2-experimental"}
[Telemetry Ingestion] Merged semantic signals for session aee60731-...: correction=1, deepening=0
Telemetry published to Pub/Sub. Message ID: 20158219837893566

インメモリー判定キャッシュからミリ秒単位で判定データをすくい上げ、後から流れてきたテレメトリーに自然合流させて、ストリーミングインジェクションすることに100%成功しています!


📈 5. 200 OKの死角を剥ぎ取った「UXOps Cockpit」と自動ロールバック

こうして作ったセマンティック信号は、Pub/Sub)を通過して、BigQueryにニアリアルタイムにストリーミング蓄積されます。

そして、私が作成した管理者用のダッシュボード画面(/admin 面)で、インフラ稼働率や可用性と並んで以下のように表示されます。

  • インフラ稼働率(可用性): 99.9%(グリーン:正常)
  • ユーザー満足度(セマンティック): 75.0%(レッド:異常発生!)

画面のフリーズもインフラのダウンもない。インフラ監視のモニターはGreen。

しかし、その真横で、ユーザーの「言葉のズレ」を検知した満足度メーターはRedになっており、エラーバジェットが急激に燃焼して、バーンレートが上昇していることを警告しています。

これが、このシステムによって可視化された 「200 OKのホワイトアウトの向こう側の景色」 です。

これまで、生成AIプロダクトの回答品質の微妙な悪さや、ユーザーの不満といったものは、Good/Badボタンを設置したり、コメント欄を用意するくらいしか追う方法がありませんでした。 しかし、この考え方を使えば、客観的なデジタルシグナルとして、リアルタイムにバーンレートを監視する ことができます。

もし、ちょっと作り込みがおかしい生成AIアプリを本番にリリースしてしまい、ユーザーの言い直し率「コンテキストコレクションレイト(context_correction_rate)」が急上昇してしまった場合、わずか5分の観測でエラーバジェットの過剰消費アラートを発砲し、自動ロールバックをトリガーする。

そんな決定論的なUX運用の世界が、もう実現可能なのです!


🚀 6. 完璧な規律を固めるからこそ、極限のスピードで攻められる

6.1. 可用性のその先にある「満足性」

SRE(Site Reliability Engineering)は、可用性(システムがただ動いていること)だけを追うものではありません。 「信頼性の究極のゴールは、満足性であるべきだ」 と、私は考えています。可用性のその先にこそ満足性があり、そこが最も到達すべきポイントです。

ユーザーがどれだけ快適にシステムと対話できているかを、インフラエンジニア、アプリケーションエンジニア、プロダクトマネージャー(PM)、そしてビジネスサイドの全員が、決定論的な指標(SLI/SLO、バーンレート)で語れるようにする。これが達成できたら、会議室での長時間に及ぶ不毛なUI/UX議論はすべてなくなります。

6.2. 少人数・フルスタックチームにこそ必要な「最強の盾」

「できるデザイナーさんがいない…」 「フロントエンドの専属がいなくて、バックエンドも含めたフルスタックエンジニアが1人で回している…」

そうした開発現場では、UI/UXをきっちり仕上げたり、ユーザーの不満を事細かに追うのがどうしても甘くなってしまいがちです。そういう時にこそ、この 「SRE的な、オブザーバビリティ的な考え方(UXOps)」 がめちゃくちゃ刺さります。

「インフラ側で完璧にユーザーの不満や会話のズレを検知し、即座にアラートを飛ばして自動ロールバックできる無敵のガードレール(盾)を用意した。だから、何時間も会議室で悩む前に、さっさと本番にリリースして、データ(ユーザーの生の反応)で語ろう!」

完璧な守り(規律)を固めるからこそ、ビジネスのアクセルを全開に踏み込むといった「攻め」が可能になり、結果としてビジネススピードが劇的に向上するわけですね。

さあ、200 OK のさらに向こう側へ、意味論のカオスすら決定論的な規律でねじ伏せに行こうぜ!

夜露死苦!!🚀🔥


※本記事の検証データは、GitHubリポジトリ friction-determinism にて実際に動作する実装をもとに執筆されました。

ピザは飲み物 〜配達したての熱々を食え〜

ピザは飲み物というお話

shu-kob.hateblo.jp

↑こちらの記事に続きで、結果になります。

はじめに:ピザは飲み物?

今回は「ピザは飲み物」というお話をさせていただきたいと思います。

「カレーは飲み物」といったユニークな表現はよくありますが、「ピザは飲み物」と言う人も、実はこれまでにもいました。

ドミノ・ピザから「飲めるピザ」が出ていますが、このメニューでなくても、そもそもピザは飲み物になりうるのです(笑)

なぜピザが飲み物になるのか、私はコミュニティ勉強会の飲食提供スポンサーを務めたことで、その理由を体験しました。

勉強会でのこだわり:ジャストタイムの熱々配達

この間、コミュニティ勉強会の飲食スポンサーをさせていただいた時のことです。

ドミノ・ピザで十分な枚数のピザを注文していたにもかかわらず、一瞬でなくなってしまいました。

なお、私も参加者としてコミュニティ勉強会でピザをいただくことがあり、他と比べて、私がスポンサーした勉強会では体感的にピザの減りはかなり早かった。

なぜだろうと考えたとき、ある私の「こだわり」が理由だと気づきました。

参加者のみなさんに熱々を食べてほしかったため、勉強会本編が終わる時間、つまり懇検会が開始するジャストのタイミングでピザを配達してもらえるように手配していたのです。

多くの勉強会では余裕を持って、例えば15分前などにピザが到着するようにしていることが多いと思うのですが、私は熱々のピザが大好きすぎるため、ちょうど懇親会が始まる時間に到着するようにしました。

参加者の反応と「うどん」との違い

このこだわりが功を奏したのか、ピザはあっという間に売り切れました。

「何が起きたんだろう?」と思い、参加者の方々にヒアリングをしてみました。

「すみません、ピザがすぐなくなっちゃいましたね」と声をかけると、「いえ、熱々で美味しかったですよ!チーズも伸びたし」と言っていただけました。

そこで私なりに理由を考えてみました。

以前書いたブログでは、「冷たいうどんは、よく噛まないと満足できない。だからパクパク食べられるけれど、温かいうどんだと熱さもあってバクバクとは食べられない。結果として温かいものの方が満足度が高い」という内容を書きました。

しかし、今回のピザの場合で、咀嚼に関してはその逆転現象が起きていたのです。

なぜ熱々のピザは一瞬で消えるのか

冷めたピザは脂が固まって硬くなります。

そのため、咀嚼(そしゃく)回数が増えて、食べるスピードが遅くなります。

また、冷たいピザだと味が落ちてどうしても手が伸びにくく、結果として余りがちになります。

一方で、アツアツのピザは脂がまだ固まっておらず、柔らかい状態です。

そのため非常に食べやすく、熱々で美味しいので、ついつい手が伸びてしまいます。

噛む回数も少なくて済むので、まるで飲み物のように次から次へと食べ進められてしまいます。

その結果、私が飲食スポンサーをした勉強会では、ピザが一瞬で売り切れたんじゃないかなと思います。

面白い現象:ピザが「ウェルカムドリンク」に?

ほかにも面白い現象がありました。

事前に生成AIのClaudeと相談して、ドリンクやピザの量を決めていたのですが、ドリンクの減り具合が思ったほど早くありませんでした。

これもなぜだろうと考えたところ、ピザが「ウェルカムドリンク」の代わりを果たしたのではないかと思ったのです。

ピザを最初に勢いよくガーッと食べた結果、ある程度お腹も喉も満たされたのかもしれません。

まさに、ピザが「飲み物」として機能した瞬間でした。

リスクヘッジとしてのスナック菓子

私はピザの配達時刻を懇親会の開始時刻ぴったりに合わせていたため、「もし少しでもピザが遅れたらフードが何もない状態になってしまう」というリスクを考えていました。

そこで、安価で用意できるスナック菓子(湖池屋の個包装でミニサイズのポテトチップスや、グリコのクラッツ、亀田の柿の種)を少し予備として用意していました。

結果的にはピザが懇親会の開始に間に合ったのですが、用意していたスナック菓子は、ピザがなくなった後に大活躍しました。

結果オーライですが、こういった予備も注文しておいて本当によかったなと思います。

参加者の面白い行動と結論

また、面白い観察もありました。

目の前に熱々のピザがあるにもかかわらず、まずポテチの袋を開ける方もいらっしゃったのです。

「こういう方もいるんだな。まずはポテチを食べたいんだな」と、新たな発見がありました。

今回の経験を通して、本当に色々な面白い学びがありました。

結論

ピザは配達したての熱々を(飲み物のように)食べましょう。

「ごちそうさまでした!」

HTTP 200 OKの死角を暴け!非決定論的なUXフリクションを決定論的にねじ伏せる「UX駆動型オブザーバビリティ」を実証した話

200 OKの向こう側へ!非決定論的なカオス(UXストレス)を決定論の規律でねじ伏せる「Friction Determinism」

皆さんのプロダクトの監視ダッシュボードは「オールグリーン」ですか?

「エラー率0%、今月も平和!」と安心しているなら、少し危険かもしれません。そこには最悪のサイレントキラーが潜んでいます。

近年、生成AI(LLM)の組み込みが主流になりました。しかし、AIの出力フォーマット(JSON)が崩れてフロントエンドでパースエラーが起き、画面が真っ白にフリーズしたとしても、バックエンドサーバーは正常に 「HTTP 200 OK」 を返します。

インフラ監視のチャートは、美しい「Green」を示し続けたままです。

ユーザーは画面の前でフリーズし、不快感を感じているのに、インフラは「正常」と判断してしまう。

これが私が提唱する「200 OKのホワイトアウト(死角)」です。


🌀 不確実なカオス(確率論)を、決定論の規律でねじ伏せる

ユーザーのストレス行動やAIの出力の揺らぎは、予測不可能な確率論のカオス(非決定論)です。

会議室で何時間議論しても答えは出ません。

それなら、

「非決定論的なカオスを、フロントエンドの境界線(React/Zod)でデジタルシグナル『0 or 1』に強制変換し、100%制御可能な因果律(決定論的世界)の規律に引きずり戻せばいい」

そう考え、Google Cloud上にリアルタイムな非同期データパイプラインをフルスクラッチしました。
リポジトリ名は friction-determinism。

今回はその検証結果と、このアプローチがビジネスをどう加速させるのか、簡潔にレポートします。


🛠️ 1. 検証結果サマリー:自作コックピットUIが証明した真実

構築したデータパイプライン(React ➔ Cloud Run (API) ➔ Cloud Pub/Sub ➔ BigQuery)に対し、仕様書(spec.md)に準拠した2つのシナリオで計120件の疑似UXテレメトリデータを流し込みました。

結果、私が自作した管理者ダッシュボード(/admin)は、「200 OKの死角」を暴き出しました。

🧪 2つのデプロイ・シナリオとBigQueryの実データエビデンス

  • 🟢 安定版リリース (v1): 84件送信 ➔ つまづき率 7.14%(SLOである「10%未満」を達成)
  • 🔴 実験版リリース (v2-experimental): 40件送信 ➔ つまづき率 52.50%(SLO大幅違反 / 高バーンレート)
-- BigQueryにリアルタイム蓄積された実データ
SELECT 
  revision_id, 
  COUNT(*) as cnt, 
  SUM(is_rage_click) as rage, 
  SUM(is_maigo) as maigo, 
  SUM(schema_validation_error) as err 
FROM `[YOUR_GCP_PROJECT].friction_ops.ux_events_raw` 
GROUP BY revision_id;

実データ集計結果

リビジョン (revision_id) 送信件数 レイジクリック 探索迷子 パース/クラッシュエラー つまづき率
🟢 v1 (安定版) 84 1 1 4 7.14% (SLO内)
🔴 v2-experimental (不安定版) 40 10 7 4 52.50% (SLO違反)

ダッシュボードの左上をご覧ください。 「INFRASTRUCTURE SLI/SLO」は 99.98% で Green(正常) に輝いています。
しかし、その真横の 「USER SATISFACTION SLI/SLO」は 78.2% で Red(異常) を示しています。

これが、データによって可視化された「200 OKの向こう側」の景色です。


🏛️ 2. この仕組みがビジネスと技術にもたらす「3つの絶対的価値」

価値 ①:「HTTP 200 OK」の死角(サイレント障害)を完全に殺す

従来のインフラ監視では、レスポンスが極端に遅く、ユーザーが苛立ちから画面を連打していても検知できません。

本システムでは、フロントエンドに仕込んだセンサーがユーザーの生のフリクションを直接検知します。

  • レイジクリック検知: 1秒間に5回以上の怒りの連打。

  • 探索迷子検知: 30秒以内に画面(ルート)を4回以上ピンポン往復する迷走状態。

  • スマート・フォールバック: Zodのパースエラーを ErrorBoundary でキャッチ。ユーザーには「AIが少し考え込んでいます」と上品な画面を見せて救済しつつ、裏では例外メッセージをデジタルシグナル「1」として裏流しする。

[!NOTE] 💡 用語補足:サイレント障害
システムはエラー(500 Internal Server Error等)を返していないためインフラ監視ツールには正常に見えるが、UIのフリーズやロジックの崩壊によってユーザーが機能を利用できなくなっている致命的な障害のこと。


価値 ②:エラーバジェットとバーンレートによる迅速な「意思決定」

これまでプロダクトの「使いづらさ」は、感覚的・定性的なフィードバックに頼るしかありませんでした。

そのため、UI/UX of 仕様決定に何時間も会議を重ねて時間を溶かしていたわけです。

本システムでは、客観的な数値をもとに高速な判断を下します。

新リリースの v2-experimental のようにつまづき率が 52.5% に急上昇した際、わずか5分の観測でバーンレートアラートを発報できます。
SNSや問い合わせで炎上してから気づくというタイムラグを回避し、リリース後数分で切り戻し(ロールバック)を決定する超高速なフィードバックループが実現します。

[!IMPORTANT] 💡 用語補足:エラーバジェット & バーンレート
* エラーバジェット: SLO(サービスレベル目標、例:快適性90%以上)に基づき、ユーザーに許容される「不快(エラー)の総予算(例: 10%)」。 * バーンレート: その予算を消費する「燃焼速度」。一瞬で大量の予算が消費された場合(高バーンレート)、重大な障害とみなして即座にアラートを飛ばす。


価値 ③:「監視の自己矛盾」を防ぐ、極小オーバーヘッド設計

UXを監視するための仕組みが、アプリのパフォーマンスを低下させては本末転倒(監視の自己矛盾)です。本システムはGoogle Cloudのマネージドの力を借りて極小の負荷で動作します。

  • 非ブロッキング送信(フロント): navigator.sendBeacon や fetch(..., {keepalive: true}) を活用し、メインスレッドを阻害せずバックグラウンドでテレメトリを送信。

  • バックプレッシャーの完全排除(バックエンド): Cloud Run APIは同期的な書き込み処理を行わず、データを Cloud Pub/Sub に投げ込んだ瞬間、10ミリ秒未満で 202 Accepted を返却。高負荷時はPub/Subが強力なクッション(バッファ)になります。

  • ニアリアルタイム分析(データ基盤): BigQuery へのストリーミングインジェストにより、データが到着した瞬間にリアルタイムSQLクエリで集約可能です。

[!TIP] 💡 用語補足:バックプレッシャー
後続の処理(DB書き込みなど)の詰まりが原因で、システムの上流(APIやクライアント)に負荷逆流が発生し、システム全体が引きずられて停止してしまう現象。Pub/Subを挟むことでこれを完全に防御できる。


🏎️ 3. 総括:守りのSREから、ビジネスを加速させる攻めのSREへ

SRE(サイト信頼性エンジニアリング)でまず真っ先に「可用性」を思い浮かべますが、私は「信頼性」の中に「満足性」も加えたい。

「ユーザーがどれだけ快適にシステムを使えているか」を、インフラエンジニア、プロダクトマネージャー、精度重視のビジネスサイドの全員が決定論的な同一指標(SLI/SLO・バーンレート)で語れるようにする。

これが達成できたら、会議室での不毛な空中戦は終わりです。

「インフラ側で『絶対に画面がクラッシュしない、かつヤバければ秒で検知できる』無敵のセーフティネット(ガードレール)を作ったから、仕様決定に時間を溶かす前にさっさと本番に投げてデータで語ろう」

と、ビジネスのアクセルを床まで踏み込めるようになります。

完璧な守り(規律)を固めるからこそ、究極の攻め(スピード)が可能になる。

魂のエンジニアリングを、世界へ。

さあ、準備はできた。

行こうぜ、200 OKの向こうへ!夜露死苦!!🚀🔥

氣志團「One Night Carnival」の歌詞から着想を得ました!

↓ソースコードはこちら github.com