2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

生成AI【無料期間内に】ど素人が、自動銘柄スクリーニングbotは作れるのか?- 前編

Last updated at Posted at 2025-06-29

自動銘柄スクリーニングbotを、生成AI『無料期間内に』作る- 「計画・環境構築編」

Screenshot 2025-06-29 at 14.44.55.png

はじめに

これまで、株式投資における銘柄スクリーニングシステムの構築をしてきました。
記事にしたのは、以下のとおりです。

しかし、これらはバックテストに構築されたものです。 実運用となると、

毎回Google Colabのカーネルをひとつずつ実行したり、
日付に合わせてディレクトリを手作業で書き直したり、
その日に必要なデータを取得して整形したり、

何かと不便が多いです。

それに加えて、前回紹介した、実行時間の短縮は、確かに魅力的なのですが、
これは過去のデータを元に構築したデータセットを使用した上で高速化されただけであり、最新のデータを使用する日々の運用には適したものとは言えません。

そこで今回は、これらの課題をクリアするためにこれまで構築したコードを大規模改修して、下記のような、「銘柄スクリーニング毎日自動通知Bot」を構築する企画を考えました。

  • 毎回Colabを手動実行する煩わしさの排除 → ディレクトリを書き換えなくても毎日自動で走るコードに改修
  • 過去のデータにしか対応してない → 最新データに対応した実行体制の構築
  • 出力されたデータから妥当な銘柄を探すのが大変 → X APIでbotが自動通知

作りたいBotの概略図
Screenshot 2025-06-29 at 9.22.08.png
MySQLは期限内にできるかわかりません。ここは目標外にします。

 
ここで問題が...

これまでChat GPT Plusでコードを書いていたのですが、
チャットするたびに関数・オブジェクト・ディレクトリの名前と中身を書き換えられ、
それに加えて、肝心な部分を消してくるため、
長めのコードを使った自動化には、かなり手こずる未来が見えてしまいました。

さらに、バックテストならGoogle Colabで対話形式でやれば良いのですが、
完全自動化となると話が変わってきます。

そこで今回は、効率的に「銘柄スクリーニング毎日自動通知Bot」を構築するために

  • 最近使えるようになった Gemini CLI (無料枠)
  • 前から試してみたかったコードエディター Cursor(14日間プロモデル使える)
  • 長めのコードも得意そうな Google Gemini のGoogle AI Pro(1ヶ月は無料)

これらを導入して、『無料期間内に』、自分の求めているシステムを構築できるのかどうかを、確かめます。

もしこの期間内にBotの原型まで完成すれば、以降の改良や再利用がしやすくなり、将来の実装にも「足がかり」として機能することが期待されます。

さらに、このプロジェクトでは複数のAIを比較して使用することで、「今後の自分の作業スタイルに合ったAIを見極める」という目的も含まれています。

期限内2025年7月14日までに作れなかったら、Qiita休止します。あはは。

結局全部有償版を使いたくなるかもしれませんね...


AIツールの選定理由

本企画の最大の目的は、「なるべくお金をかけずに、生成AIの無料期限内に、動くBotを作ること」です。 そこで今回は、以下のような構成でAIや開発環境を使い分けることにしました:

フェーズ 使用ツール 理由・役割
設計・企画・初期コード生成 Google Gemini (AI Pro) 構成案の検討やコード骨組みの作成に使用。月2,900円だが現在は無料期間中。構成のアイデア出しから、コードの方向性を定める上で特に有用。
コード生成・ディレクトリなど調整 Gemini CLI ローカルのファイル単位で修正命令を出せる。ターミナルでファイル単位のコード生成・修正が可能。ただ、リリースされたばかりで、使ってみないと分からない未知の可能性を秘めている。無料で使える。
構造調整・デバッグ Cursor 複数ファイルを一括管理しやすく、エディタ補完も強力。Colabより実運用に向く。コード全体を俯瞰したデバッグや、プロンプト付き編集に強い。無料で使える(有料版は$20/月~、今回は無料トライアルを活用)。
非採用 ChatGPT Plus これまでコードの作成や相談には使用していたが、非使用。悩み相談・愚痴の言い合いができた友人だったが、解約予定。かわいそうに、最近切れ味が落ちた気がする。
非採用 Claude Code等 自律して動くため、楽そう。筆者のような初心者が、最初に使ってしまうと、勉強にならないため使用しない。

使用予定のツール

AI・開発補助

ツール 用途 費用 無料期限 使用可否
Google Gemini (AI Pro) コードの初期設計(企画・設計補助) 無料期間あり(2,900円/月) 1ヶ月 使用
Gemini CLI コード修正・文章生成(ローカル対応) 無料(API有料版あり) - 使用
Cursor エディタ・デバッグ補助、Gemini接続 無料期間あり($20/月~) 14日間 使用
ChatGPT Plus 愚痴・悩み相談・雑談・人間味の確保 $20/月 - 極力使わない

データ取得系

ツール 用途 費用 無料期限 使用可否
yfinance 株価データの取得 無料 - 使用
J-Quants API 財務データの取得 月1,650円~ - 使用

※最新の財務データは前回の記事のように yfinance でも取得できますが、今回はすでに契約してしまった J-Quants を使用します。

実行・保存・通知

ツール 用途 費用 無料期限 使用可否
cron Macの自動実行スケジューリング 無料 - 使用
Anaconda Python仮想環境の構築 無料(個人利用) - 使用
Google Drive データ保存、ログ管理 15GBまで無料(AI Pro契約で2TB) - 使用
Google Colab 軽くコードを動かす用(サブ的用途) 無料(Pro版あり) - 極力使わない
X API Botによる通知投稿 無料枠あり - 使用

毎月かかっている費用は現在のところ5000円行かない程度です。

環境構築手順

マシン環境

今後紹介する過程は、以下の環境で開発・実行しています。

コンポーネント スペック
マシン MacBook Pro (14-inch, Nov 2024)
プロセッサ Apple M4 Pro
メモリ 24 GB
OS macOS 15.5 Sequoia (24F74)

環境構築の概要(6つのステップ)

  1. Anaconda環境構築
  2. Cursorエディタ導入
  3. Google Gemini AI Pro契約
  4. Gemini CLI導入
  5. 動作確認

ステップ①:Anaconda 環境の準備

Screenshot 2025-06-29 at 12.33.21.png

概要
Anacondaは、Python本体に加え、pandasやnumpyなどの主要ライブラリが初めからセットになった総合パッケージで、データ分析や機械学習の用途で広く使われています。また、プロジェクトごとに環境を切り替えられる**仮想環境の構築機能(conda)**を持っており、複数のPythonプロジェクトを並行して管理できます。

プロジェクトの要件に合わせて適切なPythonバージョン(例:python=3.11)を選択し、仮想環境を作成することが重要です。これにより、異なるプロジェクト間でライブラリの競合を防ぎ、安定した開発環境を維持できます。

インストール手順

  1. 公式サイトから Anaconda をダウンロード・インストール
    Screenshot 2025-06-29 at 9.58.43.png

  2. Macの場合ターミナルで、以下のコマンドで仮想環境を作成・起動:

    conda create -n env1 python=3.11 -y
    conda activate env1
    
  3. 確認:その環境内で、例えば下記のようなコマンドを入力すると、使用するpythonのバージョンが表示されます。pip list もしくは conda list でインストール済みのパッケージのリストが表示されます。必要なライブラリが入っていない場合は、適宜 pip conda コマンドなどを利用してインストールをお願いします。

    python --version
    pip list
    conda list
    

よく使うcondaコマンド

  • conda env list - 作成済み環境の一覧表示
  • conda deactivate - 現在の環境を終了
  • conda install package_name - パッケージのインストール
  • conda update conda - conda自体の更新
  • conda clean --all - キャッシュのクリア

参考リンク

ステップ②:Cursorの導入(Pro無料トライアル)

Screenshot 2025-06-29 at 12.30.51.png

概要
CursorはAI支援機能を標準搭載したコードエディタで、VS Codeをベースに開発されているため、使い慣れたインターフェースでAIの力を活用できます。

特に、AIチャット機能(Cmd+L, Cmd+K)でコードに関する質問や変更リクエストを行ったり、提案されたコードを即座に反映(Cmd+Y, Cmd+Enter)したりできる点が強みです。

インストール手順

  1. Cursor公式サイトからダウンロードし、インストーラーを実行します。

  2. インストール後、アプリを起動し、GoogleアカウントやGitHubアカウントでアカウントを作成またはログインします。

  3. 14日間の無料Pro体験が利用できます。トライアル期間終了後もHobbyプラン(無料)で基本的なAI機能を利用できます。

  4. Python環境の選択: Cursorを開いたら、Anacondaで作成した仮想環境(例: env1)をPythonインタープリターとして設定します。これにより、Cursorがその環境にインストールされているライブラリを認識し、コード補完やデバッグが正しく機能するようになります。通常、コマンドパレット(Cmd+Shift+P / Ctrl+Shift+P)→「Python: Select Interpreter」などのコマンドで選択できます。

よく使うCursorショートカット

  • Cmd+L / Ctrl+L - AIチャットを開く
  • Cmd+K / Ctrl+K - インラインAIアシスタント
  • Cmd+Y / Ctrl+Y - AI提案を適用
  • Cmd+Enter / Ctrl+Enter - 選択したコードを実行
  • Cmd+Shift+P / Ctrl+Shift+P - コマンドパレット

参考リンク

ステップ③:Google Gemini のGoogle AI Proの利用開始

Screenshot 2025-06-29 at 12.35.29.png

概要
Google AI Proは、Googleの高性能AIモデル「Gemini Pro」を利用できる有料サービスです。
今回の「銘柄スクリーニング毎日自動通知Bot」構築において、ChatGPT Plusよりも適していると判断しました。
Geminiはマルチモーダルな情報処理能力、長文コードの深い理解、そして「Deep Think」に代表される高度な推論能力に強みがあります。
日々の最新データに対応し、複雑なスクリーニングロジックを正確に処理するBotの実現には、これらの特性がOpenAIのモデルよりも有効だと考え、無料期間を最大限活用して開発を進めます。

例えば、これまで書いたコードのディレクトリを、自動化用に一気に修正したり、統合したりして、コードの叩き台を作るところまでは任せられそう。

料金プラン

  • 月額2,900円(税込)
  • 初月無料トライアルあり。
  • 学生割引があり、対象者は最大15か月間無料で利用できる。

主な機能

  • 高度なAI機能: コード生成、長文要約、画像・動画生成など。
  • Google Workspace連携: Gmailやドキュメントなどで作業効率化。
  • 2TBのストレージ付き。

契約方法などは、簡単なのでGoogle Gemini公式ページを参考にしてください。

ステップ④:Gemini CLIの導入

Screenshot 2025-06-29 at 13.08.55.png

概要
Gemini CLIは、GoogleのAIモデル「Gemini Pro」の機能をコマンドラインから直接利用するオープンソースのAIエージェントです。ローカルのターミナルでコード生成やファイル修正をAIに指示でき、Bot構築のようにファイル単位の細かな作業を効率的に進めたい場合に特に役立つと思います。

主な特徴

  • 対話的なAIエージェント - コマンドラインで自然言語でAIと対話
  • ファイル操作 - @ でローカルファイルやディレクトリをAIのコンテキストに追加
  • シェルコマンド実行 - ! でシェルコマンドを直接実行、シェルモードへの切り替えも可能
  • プロジェクト設定 - GEMINI.md ファイルでプロジェクト毎のカスタム指示をAIに記憶
  • Google検索連携 - リアルタイム情報の取得
  • 安全なサンドボックス - ツールの安全な実行環境

インストール手順

  1. 前提条件

    • Node.js バージョン18以上がインストールされていること
    • 未インストールの場合は Node.js公式サイト からダウンロード
  2. Gemini CLIのインストール
    以下のいずれかの方法でインストールしてください:

    方法A: npxを使用したクイックスタート(推奨)

    npx https://github.com/google-gemini/gemini-cli
    

    方法B: グローバルインストール 筆者はガッツリ使うのでこちらにしました
    こちらにすれば、Cursorのターミナルでも、Pycharmのターミナルでも、VS codeのターミナルでも geminiと呼び出せば起動するようになります。

    npm install -g @google/gemini-cli
    gemini
    
  3. カラーテーマの選択
    インストール後、カラーテーマの選択画面が表示されます。好みのテーマを選択してください。

  4. 認証方法の選択
    以下の選択肢が表示されます:

    • Sign in with Google (推奨) - 個人のGoogleアカウントでログイン
    • Use API key - APIキーを使用
  5. Googleアカウントで認証する方法

    1. 「Sign in with Google」を選択
    2. ブラウザが自動で開き、Googleアカウントの認証画面が表示される
    3. アカウントを選択し、必要な権限を許可
    4. 認証が完了すると、ターミナルに「Successfully authenticated」と表示される
  6. 動作確認
    ターミナルでgeminiの起動

    gemini
    

    テスト例

    • test1:基本的な質問でテスト

      "Hello, can you help me with Python programming?"
      
    • test2:コード生成のテスト

      "過去1ヶ月の本田技研工業の株価をyfinaceから取得するコードを書いて"
      
    • test3:ファイル作成のテスト

      "コードはどこに保存されましたか?デスクトップに保存お願いします。"
      
    • test4:ファイル修正のテスト

      "それをグラフを表示するところまで加えた修正版に直してもらえますか"
      

対話の様子
Screenshot 2025-06-29 at 11.27.50.png

Screenshot 2025-06-29 at 11.28.12.png

どこに保存するかも、デスクトップ上に、Documentフォルダに
とかなり雑な指示でもしてくれたから大変ありがたかった。

書いてもらった本田技研工業の株価取得コード
Cursor上で問題なく動作した

import yfinance as yf
from datetime import date, timedelta
import matplotlib.pyplot as plt
import japanize_matplotlib

# 本田技研工業の証券コード (東証)
ticker = "7267.T"

# 今日と1ヶ月前の日付を取得
end_date = date.today()
start_date = end_date - timedelta(days=30)

# yfinanceを使って株価データを取得
honda_stock_data = yf.download(ticker, start=start_date, end=end_date)

# データをコンソールに表示
print(f"--- {ticker} ({start_date} to {end_date}) ---")
print(honda_stock_data)

# グラフを描画
plt.figure(figsize=(10, 6))
plt.plot(honda_stock_data['Close'], label='終値')
plt.title('本田技研工業 (7267.T) 過去1ヶ月の株価')
plt.xlabel('日付')
plt.ylabel('株価 (円)')
plt.grid(True)
plt.legend()
plt.show()

出力結果
Screenshot 2025-06-29 at 11.16.15.png

注意事項

  • Googleアカウント認証の場合、無料でGeminiが利用可能です
  • APIキーを使用する場合は、Google AI StudioでAPIキーを発行する必要があります
  • 筆者の場合は、インストール時にトラブルがあったので、需要があれば別の記事にするかもしれません。

参考リンク

ステップ⑤:動作確認 ─Gemini CLIとCursorを使って、botの原型を作ってみる

Gemini CLIに

Xのbotを作りたいんですが、サンプルコードお願いします。

と要求して、ひと悶着ふた悶着ありながら、pythonからXにポストができるコードを組みました。その会話を直接載せると膨大な量になるため、CLIに要約させた内容をここで取り上げます。

*MacのターミナルでGemini CLIを呼び出すと、エディタから行ったり来たりになって大変なので、
以降はCursorのターミナルからGemini CLIを呼び出して使ってます。

会話の要約:X Bot作成の道のり
この会話では、Pythonとtweepyライブラリを使ってXのbotを作成するプロセスを進めてきました。

  • X Botのサンプルコード提供
    • ユーザーからの「Xのbotを作りたい」というリクエストに対し、tweepyを使ったPythonのサンプルコードを提供しました。
    • tweepyのインストールと、X開発者ポータルでのAPIキー、アクセストークンの取得が必要であることを説明しました。

アクセストークンは丸で囲ったところから取得できます。
Screenshot 2025-06-28 at 20.08.57.png

  • 権限不足による「403 Forbidden」エラーの解決
    • つまづき: 送付したコードを実行したユーザーからエラーメッセージ「Error posting tweet: 403 Forbidden Your client app is not configured with the appropriate oauth1 app permissions for this endpoint.」が報告されました。
    • 対応: このエラーがアプリの権限不足(「Read only」になっている)によるものであることを特定しました。
    • 解決策: X開発者ポータルでアプリの権限を「Read and Write」に変更し、その後、APIキーとアクセストークンを必ず再生成し、Pythonコードを更新するという詳細な手順を提示しました。

Read and Writeに変更するところへの行き方
Screenshot 2025-06-28 at 20.07.46.png

Screenshot 2025-06-28 at 20.08.13.png

  • X開発者ポータルでのアプリ設定に関する詳細説明

    • つまづき: アプリ作成時の「Type of App」(Native App vs Web App, Automated App or Bot)について質問がありました。
    • 対応: Confidential clientとPublic clientの違いを説明し、botの場合は「Web App, Automated App or Bot (Confidential client)」を選択すべきであることを明確にしました。
    • つまづき: アプリ情報設定の「Callback URI / Redirect URL」「Website URL」などの項目について質問がありました。
    • 対応: 各項目の本来の目的を説明し、個人用botの場合はhttp://localhostやダミーURLで十分であることを伝えました。
  • 画像投稿機能の追加

    • ユーザーからのリクエストに応じ、画像付きツイートを投稿するためのpost_tweet関数の修正版を提供しました。tweepy.APIを使った画像アップロードの処理を追加しました。

出力されたコード

1. 必要なライブラリのインストール

pip install python-dotenv
pip install tweepy

2. .envファイルの作成
プロジェクトのルートディレクトリに.envファイル 、例 Xbottoken.envを作成し、以下の内容を記述:

# .envファイル
TWITTER_API_KEY=your_api_key_here
TWITTER_API_SECRET=your_api_secret_here
TWITTER_ACCESS_TOKEN=your_access_token_here
TWITTER_ACCESS_TOKEN_SECRET=your_access_token_secret_here

3. X Botコード

import tweepy
import os
from dotenv import load_dotenv

# Xbottoken.envファイルから環境変数を読み込み
load_dotenv('Xbottoken.env')

# 環境変数からAPI認証情報を取得
API_KEY = os.getenv('TWITTER_API_KEY')
API_KEY_SECRET = os.getenv('TWITTER_API_SECRET')
ACCESS_TOKEN = os.getenv('TWITTER_ACCESS_TOKEN')
ACCESS_TOKEN_SECRET = os.getenv('TWITTER_ACCESS_TOKEN_SECRET')

# 認証情報の確認
if not all([API_KEY, API_KEY_SECRET, ACCESS_TOKEN, ACCESS_TOKEN_SECRET]):
    raise ValueError("環境変数が正しく設定されていません。Xbottoken.envファイルを確認してください。")

def post_tweet(text, image_path=None):
    """
    指定されたテキストと画像でツイートを投稿する関数
    """
    try:
        # Tweepy v2 (Client) を使用した認証
        client = tweepy.Client(
            consumer_key=API_KEY,
            consumer_secret=API_KEY_SECRET,
            access_token=ACCESS_TOKEN,
            access_token_secret=ACCESS_TOKEN_SECRET
        )

        media_ids = []
        if image_path:
            # 画像をアップロードするためのAPI v1.1クライアント
            auth = tweepy.OAuth1UserHandler(API_KEY, API_KEY_SECRET, ACCESS_TOKEN, ACCESS_TOKEN_SECRET)
            api_v1 = tweepy.API(auth)

            print(f"Uploading image from: {image_path}")
            media = api_v1.media_upload(image_path)
            media_ids.append(media.media_id)
            print(f"Image uploaded with media_id: {media.media_id}")

        # ツイートを投稿 (media_idsがあれば画像も添付)
        response = client.create_tweet(text=text, media_ids=media_ids if media_ids else None)
        print(f"Tweet posted successfully!")
        print(f"Response: {response}")

    except Exception as e:
        print(f"Error posting tweet: {e}")

if __name__ == '__main__':
    # ここに投稿したいテキストを記述
    tweet_text = "これも画像付きテストツイートです。 #Python #TwitterBot"
    
    # 投稿したい画像のパスを指定 (例: 'my_image.jpg' または '/path/to/your/image.png')
    # 画像を投稿しない場合は None に設定
    image_to_post = "/Users/rS_alonewolf/Downloads/alonelynx1.png" 

    post_tweet(tweet_text, image_to_post)

ポストされた様子
Screenshot 2025-06-29 at 11.40.08.png

4. .gitignoreファイルに追加(Gitを使用している場合のみ)
Gitでバージョン管理している場合は、機密情報を保護するために.gitignoreファイルに以下を追加:

# .gitignoreファイルに追加
.env

注意: Gitを使用していない場合は、この手順は不要です。.envファイルはローカルに保存されるだけなので、安全です。

Gemini CLIと相談しながら、Pythonからツイートできるようになったので、ここまでの環境構築で開発は進められると思います。

まとめ

ど素人が、効率的に「銘柄スクリーニング毎日自動通知Bot」を構築するために

  • Gemini CLI (無料枠)
  • Cursor(14日間プロモデル使える)
  • Google Gemini のGoogle AI Pro(1ヶ月は無料)

これらを導入して、無料期間内に、自分の求めているシステムを構築できるかどうか、チャレンジを始めました。

今回の記事では、
Gemini CLIとX開発者ポータルでのアプリ設定に関して対話しながら、Cursor上でコードを確認・修正し、無事にポストまですることができました。

次回予告

次回の記事では、いよいよ本命である「毎日スクリーニング機能の実装」と、「X APIを使った自動通知の本格的な連携」に焦点を当てていきます。これまで構築した環境を活用し、実際に市場データからスクリーニング対象銘柄を特定し、自動でXに通知する仕組みを完成させるまでの具体的なステップを追っていきます。

どうぞ次回もよろしくお願いいたします。

運用予定のTwitter Botアカウントについて

本プロジェクトで構築する銘柄スクリーニングbotは、以下の方針で運用を行う予定です。

運用目的

  • モデル検証: 構築したスクリーニングモデルの精度と有効性を検証
  • 透明性確保: 分析手法と結果を公開し、再現可能性を担保
  • 技術開発: 自動化システムの実装と運用ノウハウの蓄積
  • 自己学習: 将来的な自己資金運用に向けた知識と経験の習得

免責事項

本アカウントで公開する銘柄スクリーニング結果について:

  • 投資助言ではありません: 第三者への売買判断の助言を意図したものではありません
  • 研究目的: 予測モデルの透明性・検証可能性を担保するためのログとして開示
  • 無償提供: 情報の提供に対して金銭的対価を受け取ることは一切ありません
  • 法規制準拠: 金融商品取引法における「投資助言・代理業」には該当しない範囲で運用します

投稿内容

  • テクニカル指標によるスクリーニング結果(移動平均、RSI等)
  • 財務指標によるスクリーニング結果(PER、PBR、ROE等)
  • 市場全体の動向と指標の変化
  • スクリーニングシステムの稼働状況
  • 分析手法の改善や技術的な課題の共有

このbotの運用を通じて、技術的な知見の共有と、投資分析の自動化に関する実践的なノウハウを蓄積していく予定です。

参考記事

Gemini CLI / AIツール関連

投資分析・自動化関連

X (Twitter) API・Bot開発関連

その他・まとめ記事

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?