AI,API,gemini,Google Apps Script,クラウド,バイブコーディング,中級,生成AI

このチュートリアルでは、Google Gemini APIを使って手書きで描いた絵の説明をして改善点を教えてくれるアプリを作ります。

Google Gemini APIの呼び出しにはGoogle Apps Script(GAS)を使います。GASのスクリプトはGoogle Gemini 2.5 Proで書いています。バイブコーディングです。

Google AI Studio で作るGemini APIは課金方法を登録しなくても以下の範囲ならば無料で使えます。

  • 1 分あたりのリクエスト数: 5
  • 1 日あたりのリクエスト数: 250,000
  • 1 分あたりのトークン数(入力): 100

Google Apps Scriptの設定

API呼び出し処理を行うサーバー側のプログラムをGoogle Apps Scriptに設定します。

Gemini 2.5 Pro を使って Google Apps Script を書く

無料のアカウントでもこちらからGemini 2.5 Proが使えます。

プロンプト

App inventorのキャンバスに描いた絵に説明をつけて改良点を提案させたい。Google apps script とGoogle ai studio を使う。キャンバスに描いた絵はエクステンションでbase64エンコードしてJSONでアップロードする。結果はJSONで戻す。APIキーはスクリプトプロパティから読む。App inventor部分は自分でやるから、それ以外の部分を教えて。

返答

Google Apps Scriptだけではなく、Gemini APIの設定からウェブアプリとしてのデプロイ方法、使い方まで詳しく教えてくれます。

はい、承知いたしました。
App Inventorで描いた絵をGoogle AI(Gemini)で分析し、説明と改善点を返すGoogle Apps Scriptのウェブアプリケーションを作成します。

App Inventor側の実装はご自身でされるとのことですので、Google Apps Script側の設定方法とコードを提供します。

全体の流れ
App Inventor:

Canvasに絵を描く。

描いた絵をBase64形式でエンコードする。

Base64文字列をJSONに含めて、Google Apps Scriptで作成したウェブアプリのURLにPOSTリクエストを送信する。

Google Apps Script (今回作成するもの):

App InventorからのPOSTリクエストを受け取る。

JSONからBase64形式の画像データを取り出す。

スクリプトプロパティに保存したAPIキーを読み込む。

Google AI (Gemini Pro Vision) APIに画像データとプロンプトを送信する。

Geminiから返ってきた「説明」と「改善点の提案」をJSON形式で整形する。

整形したJSONをApp Inventorに返す。

App Inventor:

Google Apps Scriptから返ってきたJSONを解析し、結果をアプリに表示する。

それでは、Google Apps Scriptの設定とコードを以下に示します。

Google Apps Script (GAS) の設定手順

Google AI (Gemini) APIを利用するためのGoogle Apps Scriptプロジェクトの設定手順です。

1. Google Apps Script プロジェクトの作成

  1. Google Drive を開きます。
  2. 「+ 新規」 > 「その他」 > 「Google Apps Script」 をクリックして、新しいプロジェクトを作成します。
  3. プロジェクトに名前を付けます(例:「画像分析AI」)。

2. APIキーの保存

APIキーをコードに直接書き込むのはセキュリティ上好ましくありません。代わりにスクリプトプロパティに保存します。

  1. GASエディタの左側メニューから「プロジェクトの設定」(歯車のアイコン)をクリックします。
  2. 「スクリプト プロパティ」のセクションにある「スクリプト プロパティを追加」をクリックします。
  3. 以下の情報を入力します。

    • プロパティ: GEMINI_API_KEY
    • 値: ご自身のGoogle AI StudioのAPIキー

  4. 「スクリプト プロパティを保存」をクリックします。

3. ウェブアプリとしてデプロイ

作成したスクリプトを外部(App Inventor)から利用できるように、ウェブアプリとして公開します。

  1. GASエディタの右上にある「デプロイ」ボタンをクリックし、「新しいデプロイ」を選択します。
  2. 「種類の選択」の横にある歯車アイコンをクリックし、「ウェブアプリ」を選択します。
  3. 設定を以下のように変更します。

    • 説明: (任意)画像分析用のAPIなど
    • 次のユーザーとして実行: 「自分」
    • アクセスできるユーザー: 「全員」

  4. 「デプロイ」ボタンをクリックします。
  5. 初回は「アクセスを承認」を求められます。ご自身のアカウントを選択し、詳細画面で「(安全でないページに)移動」をクリックして、アクセスを許可してください。
  6. 承認が終わると、ウェブアプリのURLが表示されます。このURLをコピーしてください。App Inventorからリクエストを送信する先のURLになります。

重要: コードを修正した場合は、再度「デプロイ」 > 「デプロイを管理」から、新しいバージョンを公開する必要があります。その際、「バージョン」を「新バージョン」にしてデプロイしてください。ウェブアプリのURLは通常変わりません。

これで、Google Apps Script側の準備は完了です。次に示すコードをGASエディタに貼り付けて保存してください。

Code.gs – 画像分析スクリプト

/**
 * App InventorからのPOSTリクエストを処理する関数
 * @param {Object} e - App Inventorから送信されるイベントオブジェクト
 * @return {ContentService.TextOutput} - Gemini APIからの結果をJSON形式で返す
 */
function doPost(e) {
  // エラーハンドリング
  try {
    // 1. App Inventorから送信されたJSONデータを解析
    const postData = JSON.parse(e.postData.contents);
    const base64Image = postData.image; // App Inventor側で "image" というキーに設定

    // 2. スクリプトプロパティからAPIキーを読み込む
    const API_KEY = PropertiesService.getScriptProperties().getProperty('API_KEY');
    if (!API_KEY) {
      return createErrorResponse('APIキーが設定されていません。');
    }

    // 3. Gemini APIのエンドポイントURL
    const API_URL = `https://generativelanguage.googleapis.com/v1beta/models/gemini-pro-vision:generateContent?key=${API_KEY}`;

    // 4. Gemini APIに送信するリクエストボディを作成
    const payload = {
      "contents": [{
        "parts": [{
          "text": "この絵を説明して、改善点を提案してください。説明と提案は明確に分けて記述してください。"
        }, {
          "inline_data": {
            "mime_type": "image/png", // App InventorのCanvasはPNG形式
            "data": base64Image
          }
        }]
      }]
    };

    // 5. Gemini APIにリクエストを送信するための設定
    const options = {
      'method': 'post',
      'contentType': 'application/json',
      'payload': JSON.stringify(payload),
      'muteHttpExceptions': true // エラーレスポンスを例外ではなくオブジェクトとして取得
    };

    // 6. APIにリクエストを送信
    const response = UrlFetchApp.fetch(API_URL, options);
    const responseCode = response.getResponseCode();
    const responseBody = response.getContentText();

    if (responseCode !== 200) {
       return createErrorResponse(`APIリクエストエラー: ${responseCode} ${responseBody}`);
    }
    
    // 7. APIからのレスポンスを解析
    const resultJson = JSON.parse(responseBody);
    
    // レスポンスの構造をチェックし、テキスト部分を取得
    let generatedText = "解析結果を取得できませんでした。";
    if (resultJson.candidates && resultJson.candidates.length > 0 &&
        resultJson.candidates[0].content && resultJson.candidates[0].content.parts &&
        resultJson.candidates[0].content.parts.length > 0) {
      generatedText = resultJson.candidates[0].content.parts[0].text;
    } else {
       // Geminiからのレスポンスが期待した形式でない場合
       return createErrorResponse(`予期しないAPIレスポンス形式です: ${responseBody}`);
    }

    // 8. App Inventorに返すJSONを作成
    const output = JSON.stringify({
      "status": "success",
      "result": generatedText
    });

    // 9. 結果をJSON形式で返す
    return ContentService.createTextOutput(output).setMimeType(ContentService.MimeType.JSON);

  } catch (error) {
    // スクリプト全体で発生したエラーをキャッチ
    return createErrorResponse(`スクリプトエラー: ${error.toString()}`);
  }
}

/**
 * エラーレスポンスを生成するヘルパー関数
 * @param {string} message - エラーメッセージ
 * @return {ContentService.TextOutput} - エラー情報を格納したJSONオブジェクト
 */
function createErrorResponse(message) {
  const errorOutput = JSON.stringify({
    "status": "error",
    "message": message
  });
  return ContentService.createTextOutput(errorOutput).setMimeType(ContentService.MimeType.JSON);
}

プロンプト

Gemini APIのAPIキーの取り方が無かったので、追加で尋ねます。

APIキーの取り方教えて

返答

残りのコンテンツを表示するにはログインする必要がありますどうぞ . 会員ではないですか ? 入会のご案内

AI,API,gemini,Google Apps Script,クラウド,バイブコーディング,中級,生成AI

このチュートリアルでは、Google Cloud Vision APIを使って手書き文字の文字認識を行うアプリを作ります。クラウド光学文字認識(OCR)アプリでは写真で撮影した文字の光学文字認識を行いましたが、このアプリでは画面に手書きした文字を認識します。

Google Cloud Vision APIの呼び出しにはGoogle Apps Script(GAS)を使います。GASのスクリプトはGoogle Gemini 2.5 Proで書いています。バイブコーディングです。

Google Cloud Vision API1月1,000回まで無料ですが、それ以降は1,000回 あたり$1.50課金されます

Google Apps Scriptの設定

API呼び出し処理を行うサーバー側のプログラムをGoogle Apps Scriptに設定します。クラウド光学文字認識(OCR)アプリで使ったものとまったく同じなので、すでに設定済みの場合は同じものを使ってください。

Gemini 2.5 Pro を使って Google Apps Script を書く

無料のアカウントでもこちらからGemini 2.5 Proが使えます。

プロンプト

Google Apps ScriptでVision APIを使ってOCRするウェブアプリを作りたい。JSONでBase64画像をPOSTで受け取り、返すJSONには、認識したテキスト全文と、Vision APIからの生のレスポンスデータの両方を含める。Vision APIのAPIキーはスクリプトプロパティから読み込む。

返答

Google Apps Scriptだけではなく、Vision APIの設定からウェブアプリとしてのデプロイ方法、使い方まで詳しく教えてくれます。わからないところはGeminiに聞けば詳しく説明してくれます。たとえばこんな感じに。「コードをもっと詳しく説明して」

はい、承知いたしました。Google Apps Script (GAS) を使用して、Base64エンコードされた画像をJSON形式で受け取り、Google Cloud Vision APIでOCR処理を行うウェブアプリの作成方法を解説します。

完成したウェブアプリは、以下の仕様を満たします。

  * HTTP POSTリクエストで動作します。
  * `{"base64Image": "..."}` という形式のJSONを受け取ります。
  * Vision APIのAPIキーは、コードに直接書き込まず、安全なスクリプトプロパティから読み込みます。
  * 処理結果として、認識したテキスト全体 (`text`) と、Vision APIからの生のレスポンス (`rawResponse`) を含むJSONを返します。

-----

## 1\. Google Apps Script コード

まず、GASプロジェクトに記述するコードです。以下のコードをスクリプトエディタにコピー&ペーストしてください。

```javascript
/**
 * POSTリクエストを受け取り、Vision APIでOCRを実行するメイン関数
 * @param {Object} e - GASがPOSTリクエスト時に自動的に渡すイベントオブジェクト
 * @returns {ContentService.TextOutput} - JSON形式のレスポンス
 */
function doPost(e) {
  try {
    // 1. リクエストボディからBase64画像データを取得
    if (!e.postData || !e.postData.contents) {
      return createJsonResponse({ error: 'Invalid request body.' }, 400);
    }
    const postData = JSON.parse(e.postData.contents);
    const base64Image = postData.base64Image;

    if (!base64Image) {
      return createJsonResponse({ error: 'The "base64Image" key is missing in the JSON payload.' }, 400);
    }

    // 2. スクリプトプロパティからAPIキーを読み込む
    const apiKey = PropertiesService.getScriptProperties().getProperty('VISION_API_KEY');
    if (!apiKey) {
      return createJsonResponse({ error: 'Vision API key is not set in Script Properties.' }, 500);
    }

    // 3. Vision APIへのリクエストを作成
    const visionApiUrl = `https://vision.googleapis.com/v1/images:annotate?key=${apiKey}`;
    const payload = {
      requests: [
        {
          image: {
            content: base64Image,
          },
          features: [
            {
              // 高精度なOCRのためにDOCUMENT_TEXT_DETECTIONを推奨
              type: 'DOCUMENT_TEXT_DETECTION', 
            },
          ],
        },
      ],
    };

    const options = {
      method: 'post',
      contentType: 'application/json',
      payload: JSON.stringify(payload),
      muteHttpExceptions: true, // APIからのエラーレスポンスを正しく受け取るため
    };

    // 4. Vision APIを呼び出し
    const response = UrlFetchApp.fetch(visionApiUrl, options);
    const responseCode = response.getResponseCode();
    const visionResponse = JSON.parse(response.getContentText());

    // Vision APIからのエラーをハンドリング
    if (responseCode !== 200) {
      return createJsonResponse({
        error: 'Vision API returned an error.',
        details: visionResponse,
      }, responseCode);
    }
    
    // 5. レスポンスからテキスト全体を抽出
    // ?. (オプショナルチェイニング) を使い、プロパティが存在しない場合でもエラーを防ぐ
    const fullText = visionResponse.responses[0]?.fullTextAnnotation?.text || '';

    // 6. 成功レスポンスを生成
    const result = {
      text: fullText,
      rawResponse: visionResponse,
    };

    return createJsonResponse(result, 200);

  } catch (error) {
    // JSONのパース失敗など、その他の予期せぬエラーをハンドリング
    return createJsonResponse({
      error: 'An unexpected error occurred.',
      details: error.message,
    }, 500);
  }
}

/**
 * JSON形式のレスポンスを生成するヘルパー関数
 * @param {Object} data - レスポンスとして返すオブジェクト
 * @param {number} statusCode - HTTPステータスコード (GASでは直接設定不可だが、ログ等のため)
 * @returns {ContentService.TextOutput}
 */
function createJsonResponse(data, statusCode) {
  // GASではHTTPステータスコードを直接設定できないため、
  // 返却するJSONデータにエラー情報を含めることでクライアント側で処理を分岐させます。
  console.log(`Response (Status ${statusCode}): ${JSON.stringify(data)}`);
  return ContentService.createTextOutput(JSON.stringify(data))
    .setMimeType(ContentService.MimeType.JSON);
}
```

-----

## 2\. セットアップ手順

コードを動作させるには、いくつかの準備が必要です。

### ステップ1: Cloud Vision APIの有効化とAPIキーの取得

1.  **Google Cloudプロジェクト**に移動し、Vision APIを使用したいプロジェクトを選択または新規作成します。
2.  ナビゲーションメニューから **[APIとサービス] \> [ライブラリ]** を選択します。
3.  「**Cloud Vision API**」を検索し、**[有効にする]** をクリックします。
4.  次に、**[APIとサービス] \> [認証情報]** に移動します。
5.  **[+ 認証情報を作成]** をクリックし、**[API キー]** を選択します。
6.  作成されたAPIキーをコピーしておきます。セキュリティのため、このキーには適切な制限(IPアドレス制限やAPI制限など)をかけることを強く推奨します。

### ステップ2: スクリプトプロパティにAPIキーを設定

APIキーをコードに直接書き込むのは危険です。GASのスクリプトプロパティ機能を使って安全に管理します。

1.  GASのスクリプトエディタ画面で、左側のメニューから**歯車アイコン (プロジェクトの設定)** をクリックします。
2.  「**スクリプト プロパティ**」のセクションで、**[スクリプト プロパティを追加]** をクリックします。
3.  以下の通りに設定し、**[スクリプト プロパティを保存]** をクリックします。
      * **プロパティ:** `VISION_API_KEY`
      * **値:** 先ほどコピーしたAPIキー

-----

## 3\. ウェブアプリとしてデプロイ

スクリプトを外部から呼び出せるように、ウェブアプリとしてデプロイします。

1.  スクリプトエディタの右上にある **[デプロイ]** ボタンをクリックし、**[新しいデプロイ]** を選択します。
2.  種類の選択で**歯車アイコン**をクリックし、**[ウェブアプリ]** を選択します。
3.  以下の通り設定します。
      * **説明:** (任意) Vision API OCR Web App など
      * **次のユーザーとして実行:** **自分**
      * **アクセスできるユーザー:** **全員**
4.  **[デプロイ]** をクリックします。
5.  初回デプロイ時には「承認が必要です」というポップアップが表示されるので、指示に従ってアカウントへのアクセスを許可してください。
6.  デプロイが完了すると「**ウェブアプリのURL**」が表示されるので、このURLをコピーします。これがAPIのエンドポイントになります。

-----

## 4\. 使い方 (curlでのテスト例)

デプロイしたウェブアプリをテストするには、`curl` コマンドや他のAPIテストツール(Postmanなど)が使用できます。

まず、テストしたい画像をBase64形式にエンコードします。macOSやLinuxでは以下のコマンドでエンコードできます。

```bash
base64 -i path/to/your/image.png -o image.txt
```

次に、`curl` を使ってPOSTリクエストを送信します。

```bash
# ウェブアプリのURLをあなたのものに置き換えてください
WEB_APP_URL="ここにデプロイしたウェブアプリのURLを貼り付け"

# Base64エンコードされた画像データをファイルから読み込み、JSONを作成して送信
curl -L -X POST "${WEB_APP_URL}" \
-H "Content-Type: application/json" \
-d '{ "base64Image": "'"$(cat image.txt)"'" }'
```

### 成功時のレスポンス例

```json
{
  "text": "これはテスト用の\n画像です。\nGoogle Cloud Vision\n",
  "rawResponse": {
    "responses": [
      {
        "fullTextAnnotation": {
          "pages": [
            // ... Vision APIからの詳細なレスポンスデータ ...
          ],
          "text": "これはテスト用の\n画像です。\nGoogle Cloud Vision\n"
        },
        "textAnnotations": [
            // ... 各単語の位置情報など ...
        ]
      }
    ]
  }
}
```

App Inventorアプリ

ページの最後にあるダウンロードセクションからソースコードをダウンロードできます。

[プロジェクト]メニューから[新規プロジェクトを始める]を選択し、"HandOCR"と名前を付けます。

デザイン編集

残りのコンテンツを表示するにはログインする必要がありますどうぞ . 会員ではないですか ? 入会のご案内

AI,API,gemini,Google Apps Script,クラウド,バイブコーディング,中級,生成AI

このチュートリアルでは、Google Cloud Vision APIを使って光学文字認識を行うアプリを作ります。

光学文字認識(OCR)アプリではウェブビューでJavaScriptのTesseract.jsを使って光学文字認識を行いましたが、日本語の認識精度があまりよくありませんでした。Google Cloud Vision APIを使うとはるかに精度の良い光学文字認識が行えます。

Google Cloud Vision APIの呼び出しにはGoogle Apps Script(GAS)を使います。GASのスクリプトはGoogle Gemini 2.5 Proで書いています。バイブコーディングです。

Google Cloud Vision API1月1,000回まで無料ですが、それ以降は1,000回 あたり$1.50課金されます

Google Apps Scriptの設定

API呼び出し処理を行うサーバー側のプログラムをGoogle Apps Scriptに設定します。

Gemini 2.5 Pro を使って Google Apps Script を書く

無料のアカウントでもこちらからGemini 2.5 Proが使えます。

プロンプト

Google Apps ScriptでVision APIを使ってOCRするウェブアプリを作りたい。JSONでBase64画像をPOSTで受け取り、返すJSONには、認識したテキスト全文と、Vision APIからの生のレスポンスデータの両方を含める。Vision APIのAPIキーはスクリプトプロパティから読み込む。

返答

Google Apps Scriptだけではなく、Vision APIの設定からウェブアプリとしてのデプロイ方法、使い方まで詳しく教えてくれます。わからないところはGeminiに聞けば詳しく説明してくれます。たとえばこんな感じに。「コードをもっと詳しく説明して」

はい、承知いたしました。Google Apps Script (GAS) を使用して、Base64エンコードされた画像をJSON形式で受け取り、Google Cloud Vision APIでOCR処理を行うウェブアプリの作成方法を解説します。

完成したウェブアプリは、以下の仕様を満たします。

  * HTTP POSTリクエストで動作します。
  * `{"base64Image": "..."}` という形式のJSONを受け取ります。
  * Vision APIのAPIキーは、コードに直接書き込まず、安全なスクリプトプロパティから読み込みます。
  * 処理結果として、認識したテキスト全体 (`text`) と、Vision APIからの生のレスポンス (`rawResponse`) を含むJSONを返します。

-----

## 1\. Google Apps Script コード

まず、GASプロジェクトに記述するコードです。以下のコードをスクリプトエディタにコピー&ペーストしてください。

```javascript
/**
 * POSTリクエストを受け取り、Vision APIでOCRを実行するメイン関数
 * @param {Object} e - GASがPOSTリクエスト時に自動的に渡すイベントオブジェクト
 * @returns {ContentService.TextOutput} - JSON形式のレスポンス
 */
function doPost(e) {
  try {
    // 1. リクエストボディからBase64画像データを取得
    if (!e.postData || !e.postData.contents) {
      return createJsonResponse({ error: 'Invalid request body.' }, 400);
    }
    const postData = JSON.parse(e.postData.contents);
    const base64Image = postData.base64Image;

    if (!base64Image) {
      return createJsonResponse({ error: 'The "base64Image" key is missing in the JSON payload.' }, 400);
    }

    // 2. スクリプトプロパティからAPIキーを読み込む
    const apiKey = PropertiesService.getScriptProperties().getProperty('VISION_API_KEY');
    if (!apiKey) {
      return createJsonResponse({ error: 'Vision API key is not set in Script Properties.' }, 500);
    }

    // 3. Vision APIへのリクエストを作成
    const visionApiUrl = `https://vision.googleapis.com/v1/images:annotate?key=${apiKey}`;
    const payload = {
      requests: [
        {
          image: {
            content: base64Image,
          },
          features: [
            {
              // 高精度なOCRのためにDOCUMENT_TEXT_DETECTIONを推奨
              type: 'DOCUMENT_TEXT_DETECTION', 
            },
          ],
        },
      ],
    };

    const options = {
      method: 'post',
      contentType: 'application/json',
      payload: JSON.stringify(payload),
      muteHttpExceptions: true, // APIからのエラーレスポンスを正しく受け取るため
    };

    // 4. Vision APIを呼び出し
    const response = UrlFetchApp.fetch(visionApiUrl, options);
    const responseCode = response.getResponseCode();
    const visionResponse = JSON.parse(response.getContentText());

    // Vision APIからのエラーをハンドリング
    if (responseCode !== 200) {
      return createJsonResponse({
        error: 'Vision API returned an error.',
        details: visionResponse,
      }, responseCode);
    }
    
    // 5. レスポンスからテキスト全体を抽出
    // ?. (オプショナルチェイニング) を使い、プロパティが存在しない場合でもエラーを防ぐ
    const fullText = visionResponse.responses[0]?.fullTextAnnotation?.text || '';

    // 6. 成功レスポンスを生成
    const result = {
      text: fullText,
      rawResponse: visionResponse,
    };

    return createJsonResponse(result, 200);

  } catch (error) {
    // JSONのパース失敗など、その他の予期せぬエラーをハンドリング
    return createJsonResponse({
      error: 'An unexpected error occurred.',
      details: error.message,
    }, 500);
  }
}

/**
 * JSON形式のレスポンスを生成するヘルパー関数
 * @param {Object} data - レスポンスとして返すオブジェクト
 * @param {number} statusCode - HTTPステータスコード (GASでは直接設定不可だが、ログ等のため)
 * @returns {ContentService.TextOutput}
 */
function createJsonResponse(data, statusCode) {
  // GASではHTTPステータスコードを直接設定できないため、
  // 返却するJSONデータにエラー情報を含めることでクライアント側で処理を分岐させます。
  console.log(`Response (Status ${statusCode}): ${JSON.stringify(data)}`);
  return ContentService.createTextOutput(JSON.stringify(data))
    .setMimeType(ContentService.MimeType.JSON);
}
```

-----

## 2\. セットアップ手順

コードを動作させるには、いくつかの準備が必要です。

### ステップ1: Cloud Vision APIの有効化とAPIキーの取得

1.  **Google Cloudプロジェクト**に移動し、Vision APIを使用したいプロジェクトを選択または新規作成します。
2.  ナビゲーションメニューから **[APIとサービス] \> [ライブラリ]** を選択します。
3.  「**Cloud Vision API**」を検索し、**[有効にする]** をクリックします。
4.  次に、**[APIとサービス] \> [認証情報]** に移動します。
5.  **[+ 認証情報を作成]** をクリックし、**[API キー]** を選択します。
6.  作成されたAPIキーをコピーしておきます。セキュリティのため、このキーには適切な制限(IPアドレス制限やAPI制限など)をかけることを強く推奨します。

### ステップ2: スクリプトプロパティにAPIキーを設定

APIキーをコードに直接書き込むのは危険です。GASのスクリプトプロパティ機能を使って安全に管理します。

1.  GASのスクリプトエディタ画面で、左側のメニューから**歯車アイコン (プロジェクトの設定)** をクリックします。
2.  「**スクリプト プロパティ**」のセクションで、**[スクリプト プロパティを追加]** をクリックします。
3.  以下の通りに設定し、**[スクリプト プロパティを保存]** をクリックします。
      * **プロパティ:** `VISION_API_KEY`
      * **値:** 先ほどコピーしたAPIキー

-----

## 3\. ウェブアプリとしてデプロイ

スクリプトを外部から呼び出せるように、ウェブアプリとしてデプロイします。

1.  スクリプトエディタの右上にある **[デプロイ]** ボタンをクリックし、**[新しいデプロイ]** を選択します。
2.  種類の選択で**歯車アイコン**をクリックし、**[ウェブアプリ]** を選択します。
3.  以下の通り設定します。
      * **説明:** (任意) Vision API OCR Web App など
      * **次のユーザーとして実行:** **自分**
      * **アクセスできるユーザー:** **全員**
4.  **[デプロイ]** をクリックします。
5.  初回デプロイ時には「承認が必要です」というポップアップが表示されるので、指示に従ってアカウントへのアクセスを許可してください。
6.  デプロイが完了すると「**ウェブアプリのURL**」が表示されるので、このURLをコピーします。これがAPIのエンドポイントになります。

-----

## 4\. 使い方 (curlでのテスト例)

デプロイしたウェブアプリをテストするには、`curl` コマンドや他のAPIテストツール(Postmanなど)が使用できます。

まず、テストしたい画像をBase64形式にエンコードします。macOSやLinuxでは以下のコマンドでエンコードできます。

```bash
base64 -i path/to/your/image.png -o image.txt
```

次に、`curl` を使ってPOSTリクエストを送信します。

```bash
# ウェブアプリのURLをあなたのものに置き換えてください
WEB_APP_URL="ここにデプロイしたウェブアプリのURLを貼り付け"

# Base64エンコードされた画像データをファイルから読み込み、JSONを作成して送信
curl -L -X POST "${WEB_APP_URL}" \
-H "Content-Type: application/json" \
-d '{ "base64Image": "'"$(cat image.txt)"'" }'
```

### 成功時のレスポンス例

```json
{
  "text": "これはテスト用の\n画像です。\nGoogle Cloud Vision\n",
  "rawResponse": {
    "responses": [
      {
        "fullTextAnnotation": {
          "pages": [
            // ... Vision APIからの詳細なレスポンスデータ ...
          ],
          "text": "これはテスト用の\n画像です。\nGoogle Cloud Vision\n"
        },
        "textAnnotations": [
            // ... 各単語の位置情報など ...
        ]
      }
    ]
  }
}
```

App Inventorアプリ

ページの最後にあるダウンロードセクションからソースコードをダウンロードできます。

[プロジェクト]メニューから[新規プロジェクトを始める]を選択し、"CloudOCR"と名前を付けます。

デザイン編集

残りのコンテンツを表示するにはログインする必要がありますどうぞ . 会員ではないですか ? 入会のご案内

AI,API,Google Apps Script,クラウド,中級

このチュートリアルでは、Google Apps Script (GAS) とApp Inventorを連携させた翻訳アプリを作成します。

このアプリは、入力した英語のテキストをGASのLanguageAppを利用して複数の言語(スペイン語、フランス語、ドイツ語、日本語、中国語)に翻訳します。さらに、その翻訳結果をApp Inventor標準の翻訳コンポーネントによる結果と共に表示し、精度を比較することができます。

GASのスクリプトはGoogle Gemini 2.5 Proで書いています。

GASによる翻訳は基本無料ですが、一般のGoogleアカウント(@gmail.comなど)の場合、APIの呼び出し回数に1日5,000回という上限が設けられています。個人での利用や開発のテストには十分な回数と言えるでしょう。

Google Apps Scriptの設定

翻訳処理を行うサーバー側のプログラムをGoogle Apps Scriptに設定します。

Gemini 2.5 Pro を使って Google Apps Script を書く

プロンプト

ソース言語からターゲット言語へテキストを翻訳するAPIとして機能するGoogle Apps Scriptのウェブアプリを作成してください。

このウェブアプリは、以下の要件を満たす必要があります。

名前: 「Translation API」とします。
翻訳サービス: LanguageAppサービスを使用します。
リクエスト処理: doPost(e)関数を介してHTTP POSTリクエストを処理します。
パラメータ: 以下の3つのパラメータを受け付けます。
text: 翻訳するテキスト。
source: ソース言語の言語コード(例: 英語の場合は 'en')。
target: ターゲット言語の言語コード(例: スペイン語の場合は 'es')。
エラー処理: 必須パラメータが欠けている場合のエラー処理を実装します。いずれかのパラメータが不足している場合は、JSON形式のエラーメッセージを返します。
レスポンス: 翻訳されたテキストを、キーが「translatedText」のJSONオブジェクトとして返します。
コンテンツタイプ: レスポンスはContentService.MimeType.JSONとして提供します。

返答

/**
 * HTTP POSTリクエストを処理してテキストを翻訳するウェブアプリ
 * @param {Object} e - Apps Scriptのイベントオブジェクト
 * @return {ContentService.TextOutput} - JSON形式のレスポンス
 */
function doPost(e) {
  let response;
  try {
    // POSTされたリクエストボディをJSONとしてパース
    const params = JSON.parse(e.postData.contents);
    const text = params.text;
    const sourceLang = params.source;
    const targetLang = params.target;

    // 必須パラメータ(text, source, target)が存在するかチェック
    if (!text || !sourceLang || !targetLang) {
      // パラメータが不足している場合のエラーレスポンス
      response = {
        'error': "リクエストに必須パラメータ(text, source, target)がありません。"
      };
      // エラーレスポンスをJSON形式で返す
      return ContentService.createTextOutput(JSON.stringify(response))
                         .setMimeType(ContentService.MimeType.JSON);
    }

    // LanguageAppサービスを使用して翻訳を実行
    const translatedText = LanguageApp.translate(text, sourceLang, targetLang);

    // 成功レスポンスを作成
    response = {
      'translatedText': translatedText
    };

  } catch (err) {
    // JSONのパースエラーやその他の予期せぬエラーを処理
    response = {
      'error': 'リクエストの処理中にエラーが発生しました: ' + err.message
    };
  }

  // 最終的なレスポンスをJSON形式で返す
  return ContentService.createTextOutput(JSON.stringify(response))
                     .setMimeType(ContentService.MimeType.JSON);
}

Google スクリプトを開く

https://script.google.com/ にアクセスし、Googleアカウントでログインします。「+ 新しいプロジェクト」をクリックしてください。

スクリプトの貼り付け

エディタに表示されている初期コード (function myFunction() { ... }) をすべて削除し、上記コードを貼り付けます。

プロジェクトの保存

上部のフロッピーディスクアイコンをクリックし保存します。プロジェクトに名前(例:「Translation API)を付けてください。

ウェブアプリとしてデプロイ

このスクリプトをApp Inventorから呼び出せるように、ウェブ上に公開します。

  • 右上の青い「デプロイ」ボタンをクリックし、「新しいデプロイ」を選択します。
  • 「種類の選択」の横にある歯車アイコン⚙をクリックし、「ウェブアプリ」を選択します。
  • 以下の通りに設定します。

    • 説明: (任意)翻訳アプリAPIなど
    • 次のユーザーとして実行: 自分 (あなたのGoogleアカウント)
    • アクセスできるユーザー:全員 この設定を「全員」にしないと、App Inventorからアクセスできずエラーになります。
    • デプロイ」をクリックします。

新しいデプロイが下のように表示されます。

ウェブアプリのURLはApp Inventorで使いますので、必ず「コピー」ボタンを押して控えておいてください。

App Inventorアプリ

日本語化プロジェクトのApp Inventorサーバーでは翻訳コンポーネントが使えないため、MIT本家のApp Inventorサーバー(https://ai2.appinventor.mit.edu/)を使用します。MITのサーバーでも日本語表示は可能ですが、翻訳の品質に難があるため、このチュートリアルは英語環境で作成しています。

MIT本家のApp Inventorサーバー(https://ai2.appinventor.mit.edu/)にアクセスしてGoogleカウントでログインします。言語はEnglishです。

[Projects]メニューから[Start new project]を選択し、"TranslateBenchmark"と名前を付けます。

残りのコンテンツを表示するにはログインする必要がありますどうぞ . 会員ではないですか ? 入会のご案内

AI,ChatGPT,チュートリアル,生成AI

画像フィルターアプリで使っているJavaScriptを含む imagefilter.html に新しいフィルターを追加してもらう方法です。生成AI関連チュートリアルは通常はゴールド会員特典ですが皆さんに生成AIに興味を持ってもらいたいので無料会員特典として公開します。無料のChatGPTでできるので試してみてください。

残りのコンテンツを表示するにはログインする必要がありますどうぞ . 会員ではないですか ? 入会のご案内

AI,gemini,アプリ開発,チュートリアル,生成AI

最近特に賢くなってきている生成AIで簡単なアプリを作れるか、GoogleのGemini 2.0 Flash Thinking Experimentalで試してみました。結果は予想以上でGeminiは作り方のチュートリアル を出力してくれました。まだ100%これだけでOKというわけにはいきませんが、少しの調整で動くアプリを作れました。調整した点は以下です。

  • バーコードスキャナー外部スキャナーの使用のチェックを外す
  • BarcodeScanner1.AfterScanで「format」は渡されない

実際に作ったQRコード読み取りアプリのチュートリアルはこちらです。実験日: 2025年2月6日

App InventorでQRコードを読んで内容を表示するアプリ作れる?

残りのコンテンツを表示するにはログインする必要がありますどうぞ . 会員ではないですか ? 入会のご案内

AI,クラウド,チュートリアル

人工知能の機械学習モデルを使って画像を精度良く分類するアプリを作りましょう

このチュートリアルでは、機械学習モデルを使用し、画像を自動的に分類するアプリを作成します。カメラで撮影した画像をAIが解析し、その結果を英語で表示し、さらに日本語に翻訳して音声で読み上げます。

ページの最後にあるダウンロードセクションからアセットに使用するindex.htmlファイルをダウンロードしてください。 また、ソースコードもダウンロードできます。

[プロジェクト]メニューから[新規プロジェクトを始める]を選択し、"VisionApp"と名前を付けます。

アプリの概要

このアプリでは、Googleが提供するオープンソースの機械学習ライブラリである TensorFlow.js を使用して画像分類を行います。分類モデルには MobileNet を採用しており、簡単に他のモデルへ置き換えることも可能です。アプリの仕組みは次のようになっています。

  1. 画像の取得: カメラで撮影した画像を外部サーバーにアップロードし、URLを取得します。
  2. 画像の分類: ウェブビューで画像を表示し、JavaScript関数で画像の分類処理を行います。
  3. 英日翻訳と音声読み上げ: 推論結果は英語で表示されますが、多言語翻訳アプリで使っているのと同じ翻訳方法で日本語に変換し、音声で結果を出力します。

このアプリでは、JavaScriptコードを含むHTMLファイル(index.html)をウェブビューで読み込み、JavaScript関数をアプリから呼び出すことで画像分類を実現しています。index.html の詳細はダウンロードセクションで確認できます。

デザイン編集

Screen1のタイトルを"ビジョンアプリ"にします。

残りのコンテンツを表示するにはログインする必要がありますどうぞ . 会員ではないですか ? 入会のご案内