株式会社ブレインパッドプロダクトユニットでRtoaster GenAIの開発をしている依田です。
この記事は生成AIを組み込んだ簡単なアプリケーションの実装を、プログラミング初心者でも行えるハンズオンです。
この記事で作るもの
英語のテックニュースレター「TLDR」を、生成AIが自動で翻訳・要約するアプリです。
Google Apps Script(GAS)を使用するため、プログラミング言語はJavaScriptで実装します。
利用上の注意
この記事で作成するアプリケーションは、個人利用目的であることを前提としています。詳しくはTLDRの利用規約も参照してください。
処理の流れ
- TLDR(英語のテックニュースレター)がGmailに届く
- GASが未読メールを自動で検出
- Vertex AI(Gemini) が英語を日本語に翻訳し、要点を抽出
- 要約結果を自分宛てにメール送信
- 処理済みのメールを既読にして終了
Vertex AIとは、Google Cloudが提供する生成AIをはじめとしたAIを簡単に試したり作ったり、使えるようにしてくれる、Googleのモデルの実行基盤・管理機能をまとめたサービス群です。
前提条件
- Googleアカウントを持っていること
- Google Cloudプロジェクトを作成できること
Vertex AIの利用には従量課金が発生します。
Gemini 2.5 Flashは比較的安価ですが、利用量に応じて課金されます。料金の詳細はVertex AIの料金ページをご確認ください。
請求額が高額にならないか気になる方は、予算とアラートを設定しましょう。
Step 1. Google Cloudプロジェクトの準備
Vertex AIを使用する準備を、以下の手順で進めます。
1-1. プロジェクトの作成
- Google Cloudコンソールにアクセス
- 左上の「プロジェクトを選択」→「新しいプロジェクト」をクリック
- プロジェクト名を入力(例:
tldr-summary)して「作成」
1-2. Vertex AI APIを有効化
- 上部の検索窓に「Vertex AI API」と入力
- 表示された「Vertex AI API」をクリック
- 「有効にする」ボタンを押す
1-3. プロジェクト番号をメモ
後で使うので、プロジェクトのダッシュボードから「プロジェクト番号」をコピーしておきましょう。
Step 2. OAuth同意画面の設定
GASからGoogleサービスにアクセスするための認証設定を行います。
認証という機能上、初心者には難しく感じるかもしれませんが、この手順通り進めれば問題ありません。
- Google Cloudコンソールで「APIとサービス」→「OAuth同意画面」を開く
- 「開始」ボタンをクリック
- アプリ情報を入力
- アプリ名:
TLDR-Summary(任意) - ユーザーサポートメール: 自分のメールアドレス
- アプリ名:
- 対象を入力
- 個人Gmail(@gmail.com)の場合は外部を選択
- 連絡先情報を入力
- メールアドレス: 自分のメールアドレス
- ユーザーデータに関するポリシーを読み、チェックを入れる
- 「作成」をクリック
- コンソールの左部、「対象」をクリック(下図参照)
- テストユーザーの「Add users」をクリック
- 使用するGmailアドレスを入力し、保存ボタンをクリック
Step 3. Google Apps Scriptの作成
ここからは実装です。
3-1. GASプロジェクトを作成
- Google Driveを開く
- 「+ 新規」→「その他」→「Google Apps Script」を選択
- 警告のダイアログが表示される。「スクリプトを作成」をクリック
- プロジェクト名を「無題のプロジェクト」から、「TLDR-Summary」に変更
3-2. Google Cloudプロジェクトと紐付け
- GASエディタの左側にある歯車アイコン(プロジェクトの設定)をクリック
- 「Google Cloud Platform (GCP) プロジェクト」の「プロジェクトを変更」をクリック
- Step 1-3でメモしたプロジェクト番号を入力して「プロジェクトを設定」ボタンをクリック
3-3. サービスを追加
- 左側の「サービス」横の「+」をクリック(下図参照)
- Gmail APIを探して「追加」
Step 4. コーディング
エディタにある function myFunction() { ... } を削除し、以下のコードを貼り付けてください。
コード内にGoogle Cloudのプロジェクト番号を設定する箇所がある点に注意してください。
/**
* メイン処理:TLDRのメールを取得して要約・翻訳する
*/
function processTldrEmails() {
const query = 'from:dan@tldrnewsletter.com is:unread';
const threads = GmailApp.search(query);
if (threads.length === 0) {
console.log("未読のTLDRメールはありません。");
return;
}
threads.forEach(thread => {
const messages = thread.getMessages();
const latestMessage = messages[messages.length - 1];
const content = latestMessage.getPlainBody();
// カテゴリの判定(表示名から取得)
// 簡易的な分類例なので、お好みで変更してください
const from = latestMessage.getFrom();
let category = "IT";
if (from.includes("AI")) {
category = "AI";
} else if (from.includes("Data")) {
category = "Data";
}
const dateStr = Utilities.formatDate(latestMessage.getDate(), "GMT+9", "yyyy-MM-dd");
const newSubject = `TLDR ${category} ${dateStr} レポート`;
console.log("処理中: " + latestMessage.getSubject());
try {
// Geminiで翻訳・要約
const analysis = callGemini(content);
console.log("要約成功: " + analysis.summary);
// 自分宛てにメール送信
const body = `【TLDR 要約レポート】\n\n${analysis.summary}`;
GmailApp.sendEmail(Session.getActiveUser().getEmail(), newSubject, body);
// 処理済みとして既読にする
thread.markRead();
} catch (e) {
console.error("エラーが発生しました: " + e.toString());
}
});
}
/**
* Vertex AI (Gemini) を呼び出して翻訳・要約を行う
*/
function callGemini(text) {
// Step 1-3でメモしたプロジェクト番号を入力
const projectNumber = 'あなたのプロジェクト番号';
// 好みのリージョンを設定
const region = 'us-central1';
const modelId = 'gemini-2.5-flash';
const url = `https://${region}-aiplatform.googleapis.com/v1/projects/${projectNumber}/locations/${region}/publishers/google/models/${modelId}:generateContent`;
const prompt = `
以下の英文メール(TLDRニュースレター)の内容を日本語で要約してください。
【ルール】
1. 重要なニュースを3〜5個抽出し、各1行の箇条書き(先頭は「・」)で要約すること
2. 全体の文章は短くし、1分で読める量にすること
3. 技術用語はそのまま使用し、必要に応じてカタカナ表記を併記すること
【出力形式】
以下のJSON形式のみで返してください。
{
"summary": "・ニュース1\\n・ニュース2\\n・ニュース3"
}
メール本文:
${text}
`;
const payload = {
contents: [{
role: "user",
parts: { text: prompt }
}]
};
const options = {
method: 'post',
contentType: 'application/json',
headers: { Authorization: 'Bearer ' + ScriptApp.getOAuthToken() },
payload: JSON.stringify(payload),
muteHttpExceptions: true
};
const response = UrlFetchApp.fetch(url, options);
const result = JSON.parse(response.getContentText());
// デバッグ用
console.log("Gemini API Response: " + JSON.stringify(result));
if (!result.candidates || result.candidates.length === 0) {
throw new Error("Geminiから回答が返ってきませんでした。Google CloudコンソールのVertex AI APIが有効か確認してください。");
}
// 返ってきたJSONテキストを解析
const contentText = result.candidates[0].content.parts[0].text;
// Markdownの ```json ... ``` が混じることがあるので除去してパース
return JSON.parse(contentText.replace(/```json/g, "").replace(/```/g, "").trim());
}
コードのポイント
| 関数名 | 役割 |
|---|---|
processTldrEmails() |
メイン処理。未読メールを検索し、Geminiで処理する |
callGemini(text) |
Vertex AI(Gemini)にリクエストを送り、翻訳・要約を取得する |
なお、Vertex AI(Gemini)から回答を取得する際に、JSON構造でsummaryを返却するようコードで指定していますが、プロンプトを調整することで独自の構造で回答を得られるようになります。
このハンズオンが終わったら、ぜひ自由にカスタマイズしてみましょう。
Step 5. appsscript.jsonの設定
GASがGoogle CloudのAPIにアクセスするための権限(スコープ)を設定します。
- GASエディタの左側にある歯車アイコン(プロジェクトの設定)をクリック
- 「『appsscript.json』マニフェスト ファイルをエディタで表示する」にチェック
- 左側の「エディタ」に戻ると
appsscript.jsonが表示される - 内容を以下に置き換える(
oauthScopesを追加する)
{
"timeZone": "Asia/Tokyo",
"dependencies": {
"enabledAdvancedServices": [
{
"userSymbol": "Gmail",
"version": "v1",
"serviceId": "gmail"
}
]
},
"exceptionLogging": "STACKDRIVER",
"runtimeVersion": "V8",
"oauthScopes": [
"https://www.googleapis.com/auth/gmail.readonly",
"https://www.googleapis.com/auth/gmail.send",
"https://www.googleapis.com/auth/gmail.modify",
"https://www.googleapis.com/auth/cloud-platform",
"https://www.googleapis.com/auth/script.external_request",
"https://www.googleapis.com/auth/userinfo.email"
]
}
Step 6. 動作確認
前項で作ったアプリケーションを実際に動かします。
6-1. TLDRに登録
まだの方はTLDRに登録して、テスト用のメールを受信しておきましょう。
6-2. 手動実行
- GASエディタ上部で「processTldrEmails」を選択
- 「実行」ボタンをクリック
- 初回は認証が求められるので、画面の指示に従って許可
- 「このアプリはGoogleで確認されていません」と表示されたら、「続行」→「次へ」
- 「TLDR-Summary が Google アカウントへのアクセスを求めています」と表示されたら、「すべて選択」→「続行」
実行後、自分宛てに日本語の要約メールが届いていれば成功です!
Step 7. 自動実行の設定(トリガー)
毎日自動で実行されるように設定します。
- GASエディタ左側の時計アイコン(トリガー)をクリック
- 右下の「+ トリガーを追加」をクリック
- 以下のように設定
- 実行する関数:
processTldrEmails - イベントのソース: 時間主導型
- 時間ベースのトリガーのタイプ: 日付ベースのタイマー
- 時刻: お好みの時間(例: 午前8時〜9時)
- 実行する関数:
- 「保存」をクリック
これで自動的にTLDRの要約メールが届くようになります。
まとめ
この記事では、GASとVertex AI(Gemini)を使って、英語ニュースレターを自動で翻訳・要約するアプリを作成しました。
ポイント
- GASはサーバー不要で、Googleサービスと連携しやすい
- Vertex AI(Gemini) はOAuth認証で簡単に呼び出せる
- 生成AIからJSON形式の回答を取得することで、アプリケーションへの組み込みが容易になる
- トリガー設定で完全自動化が可能
生成AIを使ったアプリケーション開発は、思っているよりずっとシンプルです。ぜひ自分なりにカスタマイズして、日々の情報収集を効率化してみてください!

