いろいろ試験的な

あれこれを置く場所

Webアクセシビリティチェッカーその後-4(課金問題・2段ロケットへ)

引き続き↓この記事のことについて、つまり生成AIとの共同開発について、ぶちぶちと・・・取り留めなく・・・。

 

 

静的ページ + Cloud Runの2段ロケットへ

ようやく新しい構造(アーキテクチャ)への移行が済みました。
「静的ページ + Cloud Run」の二段構えになりました。これでようやく安心して眠れます。

Webアクセシビリティ・チェッカー

 

なぜそんなに悩んでいたのか?(課金問題のリアル)

一番の理由は、Cloud Runの課金システムです。
ブラウザのタブを閉じ忘れて寝落ちすると、裏で通信が走り続け、朝起きたら「400円の課金」なんてことになります。

(3/8までの無料クレジットがあと3万円あるので実害はまだありません。)

 

自分でもやらかすこの問題を、「ユーザーへのお願いや注意」で解決してはいけないです。

Cloud Runの課金には、主に4つの要因があります。

  1. インスタンスが起動して準備ができるまでの時間
  2. 診断実行時間

  3. ユーザーが画面を見ている時間

  4. 使っていないのにインスタンスが起きている時間

今回、AIたちと格闘したのは、主に「4」の問題。「いかにして、使い終わったらすぐ眠ってもらうか」でした。

 

3人のAIとの攻防戦

Gemini、GPT、Claudeの3人に相談すると、彼らは即座に「プログラム側やサーバ側の設定で通信を切ってインスタンスを落とせます!」と自信満々に答えます。なかなか「できません」とは言いません。

でも、結局Streamlit(ユーザのブラウザ画面を作っている)を思う通りに眠らせることはできませんでした。

そこで、GPTが初期に提案していた「静的スタートページ方式」への大改造を決心。正直、大掛かりになるので踏ん切りがつかなかったのですが、ようやく腹をくくりました。

 

アニメーションで時間を稼ぐ!

いま公開しているバージョンは、こんな仕組みになっています。

  1. 入り口は静的HTML: 診断ボタンを押すまでは、Cloud Runは一円もかからず眠っています。

  2. 叩き起こして待機: ボタンを押すとCloud Runを起動させますが、ここで35秒かかります(コールドスタート)。

  3. 演出でカバー: その間、表の静的ページではアニメーションを流して「待たされている感」を減らします。

  4. 結果をパス: 処理が終わったら結果をまた静的ページに送ります。これなら、ユーザーは課金を気にせず、ゆっくり結果を読めます。

  5. 再度診断へ:続けて診断したい場合は、5分以内ならCloud Runはまだ起きてますので、3秒ほどで診断画面が表示されます。

 

これがGeminiが描いてくれた現在の構造です。

 

静的HTML+Cloud Runアーキテクチャ

 

「35秒」を少しでも短くするために

起動に30秒以上かかるのは、プログラム一式を「倉庫から取り出して、ほどいて、起動する」のに時間がかかるからです。ここもスリム化を進めています。

  • プログラムの減量: ブラウザを軽量なChromiumに変えたり、重いフォントを削除したり。

  • 場所の引っ越し: 倉庫(保存先)を米国から、実行環境と同じベルギーへ。

  • なぜベルギー?: 東京に置けば速くて安くなりそうですが、実はそうでもありません。Cloud Runの単価が安いベルギーのメリットが、速度の差を上回るからです。

  • マルチステージビルド:っていうのもあるらしい・・・

 

え、なぜブラウザが必要なの?って話もしたいなぁ・・・

それと、日本のサイトはページを解析する時間がヨーロッパのサイトと比べて3倍ぐらいかかります。こればかりは、距離の問題なので妥協することに。

 

おまけ

Geminiに静的ページを作ってもらうためのプロンプトもGeminiに作ってもらいました。

依頼内容:Webアクセシビリティ・チェッカー「Bring Your Alibis」の扉ページ(index.html)を制作してください。

【目的】 サーバー(Cloud Run)の起動待ち時間(約30秒)を、ユーザーがワクワクして待てるようなアニメーションで演出し、診断ページへ誘導する。

【デザイン要件】

  1. テーマ: 「優しさ」「最新技術」「世界基準のアクセシビリティ」。
  2. メインビジュアル: ベルギー(ヨーロッパ)の地図、あるいはコンテナが運ばれてくるような、クリーンでミニマルなアニメーションをHTML/CSSのみで表現してください。
  3. メッセージ: 「現在、ベルギーの専用コンテナを起動しています。AIの目を準備中...」といった状況説明を表示してください。
  4. 機能:
    • 診断したいURLを入力するテキストボックス。
    • 「🚀 診断を開始する」ボタン。
    • ボタン押下後、アニメーションを表示し、30秒後に自動的に指定のURL(StreamlitのURL)へ遷移する。

【技術制約】

  • 画像ファイルを使わず、単一の HTML ファイル(CSS, JS内包)で完結させてください。
  • Google Cloud Storage (GCS) にアップロードするだけで動くようにしてください。

ベルギーの地図はあまりにあまりだった(子供のおねしょみたいだった)ので、ベクトルのデータを探してきて差し替えました。

なんか垢抜けてないけど、自分じゃ作れないのでまぁいいです。

待ち時間のアニメ

 

と、きょうはここまで。