はじめに:NISA成長枠240万円、いつ買う問題
「NISA成長枠の240万円、いつ一括投資すればいいんだろう...」
毎年この時期になると悩みませんか?
ネットで調べると「年初一括が統計的に最強!」という記事がたくさん出てきます。
理屈はわかります。でも...
- 「今年に限って暴落したらどうすんの?」
- 「円安すぎない?もうちょっと待つ?」
- 「なんか不安だから様子見...」
結局、悩んでるうちに時間だけが過ぎていきます。
もう悩むのやめました。
毎週、生成AIに「今週買っていい?」って聞くことにしました。
この記事では、Google Apps Script(GAS)を使って、Claude・GPT-4・Geminiの3つのAIに毎週自動で投資判断を聞く仕組みを作ります。プログラミング初心者でもコピペで完成できるように解説していきます。
この記事で作るもの
完成イメージ
毎週月曜日の朝、こんなメールが届くようになります:
【AI投資判断レポート】2026年1月20日
■ 現在の株価
・S&P500: 5,996.66 USD
・オルカン(2559): 2,145円
・FANG+(2244): 5,890円
■ Geminiの判断
結論: 様子見
推奨度: 45/100
根拠:
・S&P500は直近高値圏で調整リスクあり
・為替が円安方向で割高感
・VIXは落ち着いているが楽観しすぎない方が良い
来週の注目ポイント: FOMCの発言内容仕組みの全体像
┌─────────────────┐
│ Googleスプレッド │ ← GOOGLEFINANCE関数で株価自動取得
│ シート │
└────────┬────────┘
↓ GASで読み取り
┌─────────────────┐
│ Google Apps │ ← プロンプト + 株価データを送信
│ Script │
└────────┬────────┘
↓ API呼び出し
┌─────────────────┐
│ 生成AI │ ← Claude / GPT-4 / Gemini
│ (3社比較) │
└────────┬────────┘
↓ 判断結果
┌─────────────────┐
│ メール通知 │ ← 毎週月曜に届く
└─────────────────┘前編・後編の内容
必要なもの一覧
すべて無料で揃います。
API料金の目安(週一回実行の場合)
→3社全部使っても月額30円以下でいけます。
Step1: APIキーを取得する
Gemini API(Google)
Geminiは無料枠が大きいので、まずこれから始めるのがおすすめです。
- Google AI Studioにアクセス
- Googleアカウントでログイン
- 「Create API Key」をクリック
- プロジェクトを選択(なければ新規作成)
- 表示されたAPIキーをコピーして保存
注意: APIキーは他人に見せないでください!
OpenAI API(GPT-X)
- OpenAI Platformにアクセス
- アカウント作成またはログイン
- 右上のアイコン→「View API Keys」
- 「Create new secret key」をクリック
- 名前をつけて作成、表示されたキーをコピー
注意: 初回は無料クレジットがもらえることもあります。従量課金なので使いすぎ注意です。
Anthropic API(Claude)
- Anthropic Consoleにアクセス
- アカウント作成またはログイン
- 「API Keys」メニューへ
- 「Create Key」をクリック
- 表示されたキーをコピー
注意: 最初にクレジット購入が必要な場合があります(最低$5〜)
Step 2: Googleスプレッドシートを準備する
新規スプレッドシートを作成
- Google スプレッドシート にアクセス
- 「空白」で新規作成
- ファイル名を「NISA投資判断AI」などに変更
GOOGLEFINANCE関数で株価を取得
以下をスプレッドシートに入力してください:
A列(ラベル)とB列(数式)
=GOOGLEFINANCE("SP500")=GOOGLEFINANCE("INDEXNIKKEI:NI225")=GOOGLEFINANCE("CURRENCY:USDJPY")補足:
- FANG+やオルカンのETFは東証の銘柄コードで取れます
- 例:
=GOOGLEFINANCE("TYO:2244")でFANG+ ETF - ただし、GOOGLEFINANCE関数は日本株の対応が不安定なこともあります
入力したら、B列に現在の株価が表示されるはずです。
Step 3:GAS(Google App Script)の基本セットアップ
スクリプトエディタを開く
- スプレッドシートのメニューから「拡張機能」→「Apps Script」
- 新しいタブでスクリプトエディタが開きます
- 最初から書いてある
function myFunction()は消してOKです
まずはGeminiだけで動かしてみる
以下のコードを丸ごとコピペしてください:
// ============================================
// 設定(ここを編集してください)
// ============================================
const CONFIG = {
// Gemini APIキー(あなたのキーに置き換え)
GEMINI_API_KEY: 'ここにGeminiのAPIキーを貼り付け',
// 通知先メールアドレス
EMAIL: 'あなたのメールアドレス@gmail.com',
// スプレッドシートの株価データ範囲
SHEET_NAME: 'シート1',
PRICE_RANGE: 'A2:B4',
};
// ============================================
// メイン処理
// ============================================
function main() {
// 1. スプレッドシートから株価データを取得
const priceData = getStockPrices();
// 2. プロンプトを作成
const prompt = createPrompt(priceData);
// 3. Geminiに問い合わせ
const aiResponse = askGemini(prompt);
// 4. メールで通知
sendEmail(priceData, aiResponse);
Logger.log('完了しました!');
}
// ============================================
// 株価データ取得
// ============================================
function getStockPrices() {
const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(CONFIG.SHEET_NAME);
const data = sheet.getRange(CONFIG.PRICE_RANGE).getValues();
let result = [];
for (let i = 0; i < data.length; i++) {
if (data[i][0] && data[i][1]) {
result.push({
name: data[i][0],
price: data[i][1]
});
}
}
return result;
}
// ============================================
// プロンプト作成
// ============================================
function createPrompt(priceData) {
const today = new Date();
const dateStr = Utilities.formatDate(today, 'Asia/Tokyo', 'yyyy年MM月dd日');
// 株価データを文字列に
let priceText = '';
priceData.forEach(item => {
priceText += `・${item.name}: ${item.price}\n`;
});
const prompt = `
あなたは投資アドバイザーです。
今日は${dateStr}です。
以下のデータを元に、今週NISA成長枠で一括投資すべきか判断してください。
対象はS&P500連動のインデックスファンドです。
■ 現在の市場データ
${priceText}
■ 判断の観点
- 直近の株価トレンド
- 為替(ドル円)の水準
- 総合的な買い時かどうか
■ 出力形式(この形式で回答してください)
結論: 「買い」「様子見」「待機」のいずれか
推奨度: 0〜100のスコア
根拠: 3つ以内で簡潔に
来週の注目ポイント: 1つ
`;
return prompt;
}
// ============================================
// Gemini API呼び出し
// ============================================
function askGemini(prompt) {
const url = 'https://generativelanguage.googleapis.com/v1beta/models/gemini-1.5-flash:generateContent?key=' + CONFIG.GEMINI_API_KEY;
const payload = {
contents: [{
parts: [{
text: prompt
}]
}]
};
const options = {
method: 'post',
contentType: 'application/json',
payload: JSON.stringify(payload),
muteHttpExceptions: true
};
try {
const response = UrlFetchApp.fetch(url, options);
const json = JSON.parse(response.getContentText());
if (json.candidates && json.candidates[0].content.parts[0].text) {
return json.candidates[0].content.parts[0].text;
} else {
return 'エラー: レスポンスの形式が不正です\n' + JSON.stringify(json);
}
} catch (e) {
return 'エラー: ' + e.toString();
}
}
// ============================================
// メール送信
// ============================================
function sendEmail(priceData, aiResponse) {
const today = new Date();
const dateStr = Utilities.formatDate(today, 'Asia/Tokyo', 'yyyy年MM月dd日');
// 株価データを文字列に
let priceText = '';
priceData.forEach(item => {
priceText += `・${item.name}: ${item.price}\n`;
});
const subject = `【AI投資判断レポート】${dateStr}`;
const body = `
NISA成長枠 AI投資判断レポート
============================
日付: ${dateStr}
■ 現在の市場データ
${priceText}
■ Geminiの判断
${aiResponse}
============================
※このレポートはAIによる参考情報です。
投資判断は自己責任でお願いします。
`;
GmailApp.sendEmail(CONFIG.EMAIL, subject, body);
Logger.log('メール送信完了: ' + CONFIG.EMAIL);
}Step 4: 動かしてみる
設定を編集
コードの上部、の部分を編集してください:CONFIG
const CONFIG = {
GEMINI_API_KEY: 'AIzaSy...', // ← あなたのGemini APIキー
EMAIL: 'your-email@gmail.com', // ← あなたのメールアドレス
SHEET_NAME: 'シート1', // ← スプレッドシートのシート名
PRICE_RANGE: 'A2:B4', // ← 株価データの範囲
};実行してみる
- 上部のプルダウンで「main」を選択
- 「▶ 実行」ボタンをクリック
- 初回は権限の確認画面が出ます 「権限を確認」→「詳細」→「(安全ではないページ)に移動」→「許可」
- 実行が完了するとメールが届きます!
うまくいかない場合
- 「表示」→「ログ」でエラー内容を確認してください
- APIキーが間違っていないか確認してください
- スプレッドシートのシート名が合っているか確認してください
前編まとめ
ここまでで、以下ができました:
✅ 3社分のAPIキーを取得
✅ スプレッドシートで株価を自動取得
✅ GASでGeminiに投資判断を聞く
✅ 結果をメールで受け取る
次回(後編)では:
- Claude、GPT-4も追加して3社比較
- プロンプトのカスタマイズ方法
- 週1回の自動実行設定
- 実際の回答を比較検証
お楽しみに!
注意事項
- 投資は自己責任です。AIの判断はあくまで参考情報であり、投資助言ではありません。
- AIは未来を予測できません。過去のデータに基づく判断には限界があります。
- APIの利用規約を確認の上、ご利用ください。
- 株価データはGOOGLEFINANCE関数の仕様上、リアルタイムではなく遅延がある場合があります。
この記事が役に立ったら、Xでシェアしてもらえると嬉しいです!
後編はこちらです。
💬 コメント
ログイン か 会員登録 するとコメントできます