mcpField
M
migrate-googleai

migrate-googleai

github.com/stahura開発24195 回インストール26 週間前に更新
リポジトリ

migrate-googleai について

Google AI Studio のプロトタイプを、静的な Domo App Platform Custom App に移行するためのスキルです。ビルド、サブパス配信、ルーティング、秘密情報の扱い、公開要件を示します。

主な機能

  1. 01Vite で dist/ を生成
  2. 02サブパス配信用の相対アセットパス
  3. 03静的ホスティング向けルーティング案内
  4. 04クライアント側の秘密情報管理ルール
  5. 05Domo の公開手順要件

活用シーン

  1. 01AI Studio アプリの Domo 向け移行
  2. 02ネストしたパスでのアセット読み込み修正
  3. 03静的デプロイ向けルーティング調整
  4. 04AI Studio 環境変数への依存解消

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/stahura/domo-ai-vibe-rules --skill migrate-googleai

インストール後、Claude Code で/migrate-googleaiを入力して読み込まれたか確認します。

詳細

ルール:Google AI Studio のプロトタイプを Domo App Platform のカスタムアプリに移行する(静的な dist をデプロイ)

Google AI Studio で開始されたプロジェクト(多くの場合、Cloud Run またはプレビュー向け)を、Domo CLI で静的アセットとしてデプロイする Domo App Platform のカスタムアプリに変換します。 必要なデプロイ要件は次のとおりです。

  1. npm run build で自己完結型の dist/ フォルダーが生成されること
  2. cd dist && domo publish が機能すること(Domo はアプリをサイトのルートではなく、サブパスから配信します)
  3. アプリがアセットを正しく読み込み、更新やナビゲーションで問題が発生しないこと

AI Studio 由来かどうかを判定する

次のいずれかが見られる場合、そのプロジェクトは「AI Studio 由来」と見なします。

  • README に Google AI Studio/Gemini API/「Build」モード/Cloud Run の記載がある
  • cloudbuild.yaml、Dockerfile、または Cloud Run のデプロイ手順がある
  • process.env.GEMINI_API_KEY の使用、または「AI Studio が提供」と説明されたプレースホルダーがある
  • 静的ホスティングではなく、サーバー/コンテナ経由で実行する構成になっている

該当する場合は、以下の手順を適用してください。


主な目的

次の条件を満たす、標準的なフロントエンドにします。

  • ローカルで npm run dev により実行できる
  • npm run build で本番用ファイルが dist/ に生成される
  • ルート以外のサブパスからホストできる(Domo App Platform)
  • UI の描画にサーバーランタイムを必要としない

ステップ 1 — 標準的なビルドパイプラインを用意する

package.json を開き、選択したツールチェーンに適したスクリプトが存在し、正しく設定されていることを確認します。

  • Vite の場合:

    • dev:vite
    • build:vite build
    • preview:vite preview
    • 出力先が dist/ であることを確認します
  • CRA の場合:

    • build のデフォルト出力先は build/ です(この要件を満たしません)
    • 次のいずれかを選択します。 A) Vite に移行する(App Platform ではこちらを推奨します)、または B) Domo の公開手順/コマンドを更新する(ユーザーが明示的に CRA を希望する場合のみ)

判断に迷う場合は、デフォルトで Vite を使用します。

受け入れ基準:

  • npm install が成功する
  • npm run build により、index.html と assets/* を含む dist/ が作成される

ステップ 2 — Domo でアセットが機能するようベースパスを修正する(サブパスでのホスティング)

Domo App Platform はアプリを / でホストしません。アプリはネストされたパスの下に配置されます。 したがって、アセットのパスは相対パスにするか、明示的に設定する必要があります。

  • Vite の場合:ベースパスを相対パスに設定します

    • vite.config.* に base: './' を設定します
  • その他のバンドラーの場合:同等の「public path」が相対パスになるよう設定します。

受け入れ基準:

  • ビルドした dist/index.html をネストされたパスから開いても、JS/CSS アセットが読み込まれる(404 が発生しない)
  • ホストのルートが確実に分かっている場合を除き、/assets/... のような絶対パスをハードコードしない

ステップ 3 — 静的ホスティングに適した堅牢なルーティングにする

アプリが React Router(または他のクライアントルーター)を使用している場合:

  • プラットフォームが SPA のリライトを提供すると分かっている場合を除き、App Platform では HashRouter を推奨します。
  • HashRouter への切り替えの影響が大きすぎる場合は、Domo でリライト規則を設定しない限り、深い階層のルートを更新すると 404 になることをドキュメントに記載します。

デフォルトの対応:

  • ルーターが存在し、リライトを制御できるか不明な場合は、HashRouter に切り替えます。

受け入れ基準:

  • ビルドしたアプリで、サーバーのリライトなしにナビゲーションと更新ができる

ステップ 4 — 環境変数とシークレット:AI Studio 専用の前提を取り除く

AI Studio は、ホスト上での実行時に Gemini API キーなどのプレースホルダーを「自動的に」提供することがあります。 Domo App Platform では、ブラウザーにシークレットを安全に保持することはできません。

ルール:

  • 生の API キーをクライアントコードに含めてはいけません。
  • UI から Gemini/LLM を呼び出す必要がある場合:
    • 利用可能で許可されていれば、domo.js 経由で Domo AI API を使用することを優先する、または
    • バックエンド(例:Domo Code Engine)を介してプロキシし、サーバー側でシークレットを注入する
  • process.env.* のパターンを、ツールチェーン固有の環境変数の使用方法に置き換えます。
    • Vite:import.meta.env.VITE_*
  • 必要な変数(シークレットを除く)を説明する .env.example を追加します。

受け入れ基準:

  • コミットされたシークレットがない
  • AI Studio による環境変数の注入がないことによる実行時クラッシュがない

Step 5 — Domo のデプロイ契約

最終的な開発者ワークフローが次のとおりであることを確認します。

  • npm run build
  • cd dist
  • domo publish

App Platform プロジェクトで Domo のマニフェスト/設定ファイル(例:manifest.json)が必要な場合は、Domo が想定する場所に配置するか、ビルド中に dist/ へコピーされるようにしてください。

プラットフォームがマニフェストをルートに配置することを想定している一方で、dist/ を公開する場合は、次のいずれかを実装してください。

  • ビルドの一部として、必要な設定/マニフェストを dist/ にコピーする(postbuild スクリプト)
  • または、ユーザーが定めた標準と異なる場合は、公開方法を調整する

デフォルト:

  • 必要な App Platform ファイルが dist/ にない場合にコピーする postbuild スクリプトを追加します。

受け入れ基準:

  • dist/ に公開と実行に必要なものがすべて含まれている。
  • 手動でファイルをコピーせずに、dist/ 内から domo publish を実行できる。

出力要件(アシスタントとして提供するもの)

変更を適用した後、次の内容を提示してください。

  1. 変更したファイルの簡潔な一覧
  2. ローカルで実行する正確なコマンド
  3. 次の項目を確認する「完了チェックリスト」:
    • ビルドによって dist/ が生成される
    • サブパスでアセットが読み込まれる
    • ルーティングが機能する(ハッシュルーター、または必要なリライトについての説明)
    • クライアントにシークレットが含まれていない

決断力を持って変更を実装し、ファイルが不足していて作業を進められない場合を除き、追加の質問はしないでください。

コメント