このドキュメントでは、Smalruby3-GUIでGoogle DriveおよびGemini AI機能を有効にするために必要なGoogle Cloud Platform (GCP)の設定手順を説明します。
- Googleアカウントを持っていること
- Google Cloud Platformへのアクセス権限があること
- Google Cloud Consoleにアクセス
- 画面上部の「プロジェクトを選択」をクリック
- 「新しいプロジェクト」をクリック
- プロジェクト名を入力(例:
smalruby3-gui) - 「作成」をクリック
- Google Cloud Consoleで作成したプロジェクトを選択
- 左側のメニューから「APIとサービス」→「ライブラリ」を選択
- 検索ボックスに「Google Drive API」と入力
- 「Google Drive API」を選択
- 「有効にする」をクリック
- 同じく「ライブラリ」画面で検索ボックスに「Google Picker API」と入力
- 「Google Picker API」を選択
- 「有効にする」をクリック
- 同じく「ライブラリ」画面で検索ボックスに「Generative Language API」と入力
- 「Generative Language API」を選択
- 「有効にする」をクリック
- 左側のメニューから「APIとサービス」→「OAuth同意画面」を選択
- ユーザータイプで「外部」を選択(テスト用途の場合)
- 「作成」をクリック
- アプリ情報を入力:
- アプリ名:
Smalruby3 GUI - ユーザーサポートメール: あなたのメールアドレス
- デベロッパーの連絡先情報: あなたのメールアドレス
- アプリ名:
- 「保存して次へ」をクリック
- 「スコープ」画面で「スコープを追加または削除」をクリック
- 以下のスコープを追加:
https://www.googleapis.com/auth/drive.file(Google Drive機能用)https://www.googleapis.com/auth/generative-language(Gemini AI機能用)
- 「更新」→「保存して次へ」をクリック
- テストユーザー画面で「保存して次へ」をクリック
- 確認画面で「ダッシュボードに戻る」をクリック
- 左側のメニューから「APIとサービス」→「認証情報」を選択
- 画面上部の「認証情報を作成」→「OAuth クライアント ID」をクリック
- アプリケーションの種類で「ウェブアプリケーション」を選択
- 名前を入力(例:
Smalruby3 GUI Web Client) - 「承認済みのJavaScript生成元」に以下を追加:
http://localhost:8601(開発環境)- 本番環境のURL(例:
https://smalruby.github.io)
- 「承認済みのリダイレクトURI」は空欄でOK(Picker APIでは不要)
- 「作成」をクリック
- 表示されたダイアログで「クライアントID」をコピーして保存
重要: クライアントシークレットは今回の実装では使用しません(フロントエンドのみの実装のため)
- 「認証情報」画面で「認証情報を作成」→「APIキー」をクリック
- APIキーが作成されるので、コピーして保存
- (推奨)「キーを制限」をクリック
- 「アプリケーションの制限」で「HTTPリファラー(ウェブサイト)」を選択
- 「ウェブサイトの制限」に以下を追加:
http://localhost:8601/*- 本番環境のURL(例:
https://smalruby.github.io/*)
- 「APIの制限」で「キーを制限」を選択
- 「Google Picker API」を選択
- 「保存」をクリック
注意: Gemini APIはAPIキーではなくOAuth 2.0のアクセストークンで認証します。APIキーの制限にGemini APIを追加する必要はありません。
重要: このプロジェクトはDockerを使用しているため、プロジェクトルートに .env ファイルを作成します。
- プロジェクトルートに
.envファイルを作成:
# Google API設定
GOOGLE_CLIENT_ID=your-client-id.apps.googleusercontent.com
GOOGLE_API_KEY=your-api-key-
注意事項:
.envファイルは.gitignoreに含まれているため、Gitにコミットされませんdocker-compose.ymlがこの.envファイルを自動的に読み込みます- 環境変数を変更した場合は、
docker compose restart appでサービスを再起動してください
-
サービスの再起動:
# 環境変数を反映させるため再起動
docker compose restart appDockerを使用せず、直接npmコマンドを実行する場合:
# packages/scratch-gui/ ディレクトリに .env ファイルを作成
cd packages/scratch-gui
cat > .env << 'EOF'
GOOGLE_CLIENT_ID=your-client-id.apps.googleusercontent.com
GOOGLE_API_KEY=your-api-key
EOF
# 開発サーバー起動
npm start本番環境では、ビルド時に環境変数を設定します:
GOOGLE_CLIENT_ID=your-client-id.apps.googleusercontent.com \
GOOGLE_API_KEY=your-api-key \
npm run buildまたは、GitHub ActionsなどのCI/CD環境では、シークレット変数として設定します。
Google DriveとGemini AIは同一のOAuth 2.0認証を共有します:
- Google Driveへの保存またはGeminiモーダルのAIボタンを最初に押すと認証画面が表示されます
- 認証後はアクセストークンが1時間有効です
- 1度認証すれば、その1時間以内はGoogle DriveとGemini AIの両方が使えます
- トークンが期限切れになると、次の操作時に自動的に再認証を促します
ユーザーがAIボタン or Googleドライブボタンを押す
↓
アクセストークンが有効かチェック
↓(期限切れの場合)
Google Identity Services のポップアップで再認証
↓
新しいアクセストークンを取得
↓
APIリクエスト実行(Drive保存 または Gemini呼び出し)
- クライアントID: 公開しても問題ありませんが、承認済みのJavaScript生成元で制限することを推奨
- APIキー: HTTPリファラーで制限し、API制限を有効にすることを強く推奨
- クライアントシークレット: フロントエンドでは使用しないこと(セキュリティリスク)
このアプリケーションでは以下のスコープを使用します:
-
drive.file(Google Drive機能):- アプリが作成したファイルの読み書き
- ユーザーがGoogle Pickerで選択したファイルへのアクセス
- ファイルのアップロード機能に必要
- 完全なDriveアクセスより制限されているため安全
-
generative-language(Gemini AI機能):- Gemini APIを使ってRubyコードを生成する機能に使用
- スモウルビー先生(AIアシスタント)が必要とする権限
注意: drive.readonly(読み取り専用)では、Google Pickerのアップロードタブが機能しません。
-
開発サーバーを起動:
docker compose up app
-
ブラウザで
http://localhost:8601を開く -
ファイルメニューから「Google ドライブから読み込む」を選択
-
Google認証画面が表示されることを確認
-
認証後、Google Driveのファイル選択画面が表示されることを確認
-
開発サーバーを起動し、ブラウザで
http://localhost:8601を開く -
Rubyタブを開く
-
ツールバーのAIボタン(🤖アイコン)をクリック
-
初回はGoogle認証画面が表示されることを確認
-
認証後、スモウルビー先生のチャット画面が表示されることを確認
-
テストメッセージを送信し、Rubyコードが生成されることを確認
- OAuth同意画面の設定が完了していない可能性があります
- テストユーザーに自分のアカウントが追加されているか確認してください
- APIキーが正しく設定されていない可能性があります
- APIキーの制限設定を確認してください
- Picker APIが有効になっているか確認してください
"The origin http://localhost:8601 is not allowed"
- OAuth クライアントIDの「承認済みのJavaScript生成元」に
http://localhost:8601が追加されているか確認してください
- OAuth 2.0のスコープに
generative-languageが含まれているか確認してください - OAuth同意画面のスコープ設定を確認してください
- アクセストークンが期限切れの場合は、AIボタンを再度クリックして再認証してください
- Google Cloud ConsoleでGenerative Language APIが有効になっているか確認してください
- APIを有効にした後、数分待ってから再試行してください
- ブラウザのコンソールでエラー内容を確認してください
- Content Security Policy (CSP) の設定を確認してください