🧠 AIが僕の代わりに市場を読むまで
AWS Lambda × Docker × Gemini × LINE でJPXオプション解析を完全自動化した話
🎯 はじめに
Python、AWS、ほとんど触ったことがなかった。
毎日、JPX(日本取引所)の日経平均先物・オプションデータを手動でダウンロードし、AIに読ませて市場のコメントをもらう──そんな日々を過ごしていました。
「これ、全部自動化できるんじゃないか?」
そう思い立って作り始めたのがこのシステムです。
この記事では、
JPXの先物オプション価格データを自動取得 → スマイルカーブ生成 → GeminiでAI解析 → LINE通知
までを完全自動化した仕組みの構築過程を紹介します。
AWSやPython、AI連携に興味がある方の参考になれば幸いです。
🧩 システム概要
最終的に完成した構成は次の通りです。
📊 処理フローまとめ
| ステップ | サービス | 主な機能 | 詳細 |
|---|---|---|---|
| ① | JPX | オプション情報ファイル提供 | 先物オプション情報のZIPデータをLambdaが取得 |
| ② | Lambda (Docker Python) | 自動処理の中心 | 16:50にEventBridgeで起動 |
| ③ | S3 | 一時保存・入出力 | スマイルカーブ画像、CSV、AIプロンプトファイル |
| ④ | Gemini | AI解析 | IVスキューやセンチメント分析 |
| ⑤ | LINE | 通知出力 | AIコメント+画像を送信 |
各モジュールの役割
-
EventBridge
└ 毎日16:50に自動トリガーでLambdaを起動 -
Lambda(Dockerコンテナ)
├ JPX先物・オプションデータを取得
├ スマイルカーブ画像を生成(matplotlib)
├ Gemini解析用CSVを抽出
├ S3へアップロード
├ Gemini APIでAI解析
└ LINEへ通知送信 -
S3
└ スマイルカーブ画像とAI解析用CSVを保存 -
Gemini API
└ CSVを入力にAI解析を実行し、結果を返す -
LINE API
└ スマイルカーブ画像+AI解析コメントを送信
🧭 開発の進め方
最初から全部を一気に作ったわけではありません。
少しずつ動作を確認しながら、部品を組み合わせていくスタイルで進めました。
スマイルカーブのグ映像を生成するPythonソフトは既にあるので、これをそのまま呼び出す。
基本的に「コードはAIで作成し、自分が結合・調整する」方式です。
1. Lambda入門:Hello Worldからの出発
まずは「Hello World!」を出すだけのLambda関数を作成。
AWSのアカウント登録から始め、デプロイ、テスト実行の方法を理解するまでにかなり手間取りました。
PythonもAWSも初心者なので、「動いた!」という感動を何度も味わいながら進めました。
2. LINE通知の実装
次に、Lambdaから自分のスマホへ通知を送る機能を作成。
LINE DevelopersでBotアカウントを作り、Message APIを有効化、チャネルアクセストークンを発行します。
最初はうまくいったものの、途中で突然通知が止まるトラブルが発生。
AIが古い「LINE Notify API」に勝手に書き換えていたことが原因でした。
地味なトラブルですが、解決に時間を取られました。
この頃まではZIP形式でLambdaへ直接デプロイしていましたが、
のちにサイズ制限の壁にぶつかることなります…。
3. スマイルカーブ生成のDocker化
JPXオプション分析の肝となる「スマイルカーブ生成スクリプト」をLambda上で動かしたい。
しかし、matplotlibのサイズが大きすぎてZIPデプロイでは限界に。

軽量ライブラリ(Klayers)を試すも失敗。
最終的に「DockerでLambdaを動かす」という方針に切り替えました。
- WSL2上のUbuntuにDockerをインストール
-
docker build,docker pushの使い方を習得 -
docker build --provenance=falseでエラー解消 -
TZ=Asia/Tokyoを指定してUTC→JSTに調整
🐋 Dockerを使うのは初めてで、「Hello World」からのスタート。
WSL2のパスワードを忘れてリセットしたのも良い思い出です。
ローカルPC→Docker→Lambdaの環境順に動作を確認し、
同じ出力(スマイルカーブ画像)が得られることを検証しました。

💡 補足:スマイルカーブとは?
先物オプションを扱う人ならお馴染みの「IV(インプライド・ボラティリティ)」の分布グラフ。
これを見ながら市場のセンチメント(強気・弱気)を読み解く分析手法です。
4. JPXデータの自動取得とS3連携
boto3を使ってS3へのアップロード・ダウンロードを実装。
JPXのZIPファイルを展開し、スマイルカーブ生成に必要なCSVを自動整形します。
S3に、AIへの指示用プロンプト内容をファイルとして置くことで、プロジェクトの構成を変更しなくても運用できるように対応。
このステップで、Lambdaが単なる関数実行環境ではなく、
クラウド上のストレージ(S3)と密に連携できることを実感しました。
5. Gemini APIとのAI連携
いよいよAI連携。
Gemini APIをPythonから呼び出し、CSVを入力に解析を実行します。
ChatGPTと違って無料枠でAPIを試せたため、まずはこちらを採用。
- プロンプトをS3上のテキストとして管理、プロンプト修正時もデプロイ不要で更新可能
- 予備としてソースコードにもデフォルトプロンプトを埋め込み
「プロンプトの最後にdoneを返すように」と指定し、最後まで受信できたことを確認できるようにしました。
単体でGeminiのAIモジュールをテスト中のイメージ
6. 全体統合とスケジュール実行
各モジュールを統合し、ローカル・Lambdaの両方で動作確認。
最終的にEventBridgeで毎日16:50に自動実行する設定を追加。
そしてついに──
📩 LINEにスマイルカーブ画像とAI解析コメントが届く!

開発3日目、ようやくすべてがつながった瞬間でした。
⚙️ ハマりポイントと学び
- 🧱 Pythonのインデント
スペースとタブを混ぜると確実にエラー。エィデタの可視化設定で解決。
C++を触っているとインデントに意味があるとは知らずハマる - 📦 Lambda ZIPのサイズ制限
matplotlibなどの重いライブラリを使うならDockerを使うのが良さそう - 🧩 ライブラリの環境差
WindowsでビルドしたパッケージはLambda(Linux)で動かない。WSL2で統一(当然だが案外見落とす) - ⏰ Dockerのタイムゾーン
デフォルトUTC。TZ=Asia/Tokyoで修正。 - 🤖 AIのコード自動生成
大きなソースコードを一括でAIに任せるとデグレード多発。機能単位で分けてコード生成を依頼し、人間が統合した方が安定。
🧠 まとめ
このプロジェクトの構築には約3日。
「毎日の手作業を、AIとクラウドで置き換える」という発想から始まりましたが、
結果的に“お試し”の域を超えた感じに完成しました。
⚠️ データ利用と免責事項
本記事で使用している JPX データは、日本取引所グループ(JPX)が一般公開している情報をもとに、個人の研究・学習目的 で解析したものです。
- 商用利用・再配布は行っていません。
本記事および AI による分析結果は、特定の銘柄や金融商品の 売買を推奨するものではありません。
投資判断は必ず ご自身の責任 で行ってください。
本記事は 教育・技術紹介 を目的としており、
金融商品取引法上の「投資助言」には該当しません。
📅 Project Duration: 約3日
🔧 Tech Stack: AWS Lambda / Docker / Python / Gemini API / LINE Messaging API

