私もまったく同じでした。今日はその面倒を、実際にツールを作って潰してみます。この記事は「こんなアイデアがあります」で終わりません。作って、動かして、失敗したところまで全部出します。
✅ この記事の結論(先に要点だけ)
- 1作ったもの:保有銘柄のニュースを集め、値動きの理由になりそうなものだけ残してHTML1枚に出すフィルター(Python 約150行)
- 2かかった時間:設計から動くまで約50分。うち20分は誤検知の修正に使いました。実行は1回3.0秒です
- 3結果:取得270件 → 通過5件。ただし5件のうち1件はスパム記事が混じりました。ここは正直に書きます
PART1 なぜ、保有銘柄のニュースチェックは面倒なのか
私は今、6銘柄ほどを見ています。JX金属、住友金属鉱山、キオクシア、住友電気工業、トヨタ自動車、ソフトバンク。毎朝これを一通り確認するんですが、正直、10分では終わりません。
この「なんとなく面倒」を、そのまま自動化しようとすると失敗します。面倒の正体が分かっていないと、間違ったものを作るからです。なので、まず「なぜ」を5回だけ降りてみました。
- 1【事実】見る場所が、銘柄数×媒体数だけある。
実際に機械で集めてみたら、6銘柄で270件ありました。人間が全部読むのは無理です。 - 2【事実】その大半が、値動きの理由になっていない。
中身を見ると「前日比◯%で反落」という自動生成の株価まとめと、企業の広報ネタが大量に混ざっていました。実際、ある銘柄では冠スポンサーの話題まで出てきます。 - 3【推論】媒体は「株価が動いたこと」自体を記事にする。
ここからは私の推測ですが、株価の上下は毎日必ず発生するので、記事のネタとして安定しているんだと思います。材料があるかどうかは関係なく量産されます。 - 4【推論】その結果、「材料かどうか」の判定コストを読む側が負っている。
タイトルを見て「これは中身がなさそう」と切る作業。ここに毎朝の時間が消えています。そして、この工程だけがずっと自動化されていません。 - 5【推論】だから必要なのは「集める道具」ではなく「捨てる道具」。
ニュースアプリは全部“集める”方向に進化しています。でも私が困っているのは逆側でした。ここが分かったので、設計方針は「捨てる基準を自分で決められること」に決めました。
この5段目に降りるまでは、正直「AIに要約させればいいかな」くらいに考えていました。でも要約は“集めたあと”の話なんですよね。手前で捨てないと、要約する対象が270件のままです。
PART2 AIに3役で議論させて、1案に絞りました
アイデア出しをAIに任せるとき、そのまま聞くと全部を褒めてくれます。それだと選べません。なので「発案役」「反対役」「実装役」の3人を立てて、社内会議のように議論させました。
発案役が出した5案と、反対役の指摘
| 案 | 反対役の指摘 |
|---|---|
| A 保有銘柄ニュースの自動フィルター | 情報源が止まったら即終わる。キーワード一致だけだと社名が似た会社を取り違える |
| B 決算短信から前回比で変わった一文だけ抜く | 決算は年4回。毎日の面倒じゃないので、作っても使う機会が来ない |
| C 約定履歴から自分の売買のクセを数値化 | 証券会社ごとにCSVの形が違う。読者が真似できない |
| D 議事録から自分宛タスクだけ抽出 | 扱うのが会社の情報になる。公開する記事のネタにできない |
| E 記事HTMLの品質チェッカー | 完全に自分専用。読む人がいない |
反対役の指摘で一番効いたのは、Bへの「作っても使う機会が来ない」でした。これ、私が過去に何度もやってる失敗なんですよね。作った瞬間が満足のピークで、そのあと一度も起動しないツール。心当たりがありすぎます。
Dへの指摘も助かりました。会社の情報を扱うものは、便利でも記事にできません。ネタとして成立しないなら、この連載では作らない。そういう線引きができました。
実装役の判定と、2巡目の詰め
実装役が選んだのはAでした。理由は「毎日必ず発生する面倒だから」。頻度がいちばん高く、結果を「◯件→◯件」という数字で見せられる。この2点で他を上回りました。
ここで終わらせず、選ばれたA案にもう一度だけ反対役をぶつけました。質問は1つだけです。「3日で飽きて使わなくなる理由を挙げてください」
反対役の答え:毎朝ターミナルを開いてコマンドを打つ動作が挟まった時点で終わります。3日目には「今日はいいか」になります。
最小の変更:出力をHTMLファイル1枚にして、自動で生成させる。人間の操作は「ブラウザで開く」だけにすること。
これは的確でした。なので出力はターミナル表示ではなくHTMLにしています。ここが今回いちばん大きな設計変更です。
PART3 実装:150行のスクリプトで作りました
構成はシンプルです。難しい技術は使っていません。
- 1銘柄リストをJSONファイルに書く(社名・別名・検索したい言葉・除外したい言葉)
- 2Googleニュースの検索結果を、RSS(更新情報を機械が読める形にしたもの)で取得する
- 3タイトルを点数化する。材料になる言葉で加点、株価まとめや広報系の言葉で減点
- 4しきい値を超えたものだけを、銘柄ごとにHTML1枚にまとめて書き出す
点数のつけ方が中身のすべてです。実際に使っている部分を抜き出すとこうなります。
# 材料語(株価が動く理由になりうる言葉)
MATERIAL = {
"決算": 3, "上方修正": 4, "下方修正": 4, "増配": 3, "減配": 3,
"受注": 3, "増産": 3, "設備投資": 3, "提携": 3, "買収": 4,
"TOB": 4, "自社株買い": 3, "格上げ": 3, "格下げ": 3,
"規制": 3, "関税": 3, "補助金": 3, "撤退": 3, "リコール": 3,
}
# ノイズ語(自動生成の株価まとめ・広報系)
NOISE = [
"前日比", "で反落", "で反発", "小反落", "の株価", "株価速報",
"出来高", "寄り付き", "大引け", "値上がり率", "ランキング",
"スポンサー", "CM", "クイズ", "イベント", "求人", "キャンペーン",
]
def score(item, stock):
t = norm(item["title"])
sc = 0
for ex in stock.get("exclude", []): # 銘柄ごとの除外語
if norm(ex) in t:
return -99, ["×" + ex]
if any(norm(a) in t for a in stock["aliases"]):
sc += 3 # 社名が入っていれば加点
for w, p in MATERIAL.items():
if w in t: sc += p
for w in NOISE:
if norm(w) in t: sc -= 4 # ノイズは強めに減点
return sc, hits
1回目は失敗しました
動きはしたんですが、結果を見て手が止まりました。270件のうち81件が通過。多すぎます。中身を確認したら、原因は2つでした。
1つ目は、ソフトバンクの誤検知です。私が見ているのはソフトバンク(9434)なのに、ソフトバンクグループ(9984)のニュースが大量に混ざっていました。名前が前方一致してしまうんですね。純利益3.1兆円といった話が全部入ってきます。これは別会社なので、材料としての意味がまったく違います。
2つ目は、古い記事です。Googleニュースの検索結果は期間を絞らないと、数週間前の適時開示や決算記事がそのまま出てきます。8月10日の業績修正のお知らせが、今日のニュースとして並んでいました。
対策は2つだけ入れました。銘柄ごとに「除外したい言葉」を設定できるようにしたことと、配信日時で3日以内に絞ったことです。合わせて20行くらいの追加です。
📊 実行結果(2026年8月24日 実行)
取得 270件 → 期間外で除外 203件 → 重複を除いて 56件 → 通過 5件
処理時間 3.0秒/スクリプト 約150行
残った5件は、JX金属の目標株価引き下げ、住友金属鉱山の決算後の株価分析、キオクシアの株式分割と自社株買い、NAND需給の記事、トヨタ自動車の目標株価引き上げでした。これなら1分で読めます。
PART4 同じことをAIに頼むためのプロンプト
Pythonを書かない方でも、同じ考え方はそのまま使えます。ニュースのタイトルをコピーして、AIに捨てさせるやり方です。
以下は、私の保有銘柄に関するニュースの見出し一覧です。 「株価が動く理由になりうるもの」だけを残し、それ以外は捨ててください。 【残す基準】 ・業績や見通しが変わる話(決算、上方修正、下方修正、受注、増産、撤退) ・資本の話(自社株買い、株式分割、増資、買収、TOB) ・外部環境の話(規制、関税、補助金、価格の急変) 【捨てる基準】 ・株価が動いた事実だけを伝えるもの(前日比、反落、出来高など) ・広報、スポンサー、イベント、採用の話 ・同じ内容を別の媒体が書いているだけの重複 【出力】 1. 残した見出しを、重要と思う順に並べる 2. それぞれ「何が変わったか」を15字以内で添える 3. 捨てた件数を最後に1行で 【見出し一覧】 (ここに貼り付け) 渡したデータのみを使用してください。 推奨は不要です。最終判断は私が行います。
⚠️ 注意ポイント:「捨てる基準」を先に書くのがコツです。残す基準だけ渡すと、AIは判断に迷ったものを全部残します。捨てる側を明示したときの方が、はっきり減りました。
できなかったこと(ここは正直に書きます)
うまくいった話だけ書くと、次から読んでもらえないので、残った問題を全部並べます。
- スパム記事が1件、すり抜けました。キオクシアの通過分に、意味不明な英字が末尾に付いた明らかなスパムが1件残っています。5件中1件なので、通過率でいうと2割です。媒体名でのブロックリストが必要そうです。
- 日曜に実行したので母数が少なめです。週末は材料そのものが出ません。平日に回せば通過件数はもっと増えるはずで、そのときにしきい値が適切かは、まだ分かっていません。
- 言葉の切り出しが雑です。形態素解析(文章を単語に分ける処理)を使わず、単純な部分一致でやっています。だから社名が似ている会社は、今後も取り違える可能性があります。
- 株価そのものは取れません。あくまでニュースの仕分け専用です。値動きと突き合わせたいなら、別の仕組みが要ります。
- 向いていない人がいます。保有が1〜2銘柄なら、手で見たほうが速いです。5銘柄を超えたあたりから効いてくる道具だと思っています。
次にやること
この続きとして、残った5件をAIに渡して「1行の要約」まで自動で作らせることを考えています。捨てる工程ができたので、ようやく要約が現実的な量になりました。順番が逆だと成立しなかった話です。あわせて、すり抜けたスパム記事を潰すための媒体ブロックリストも入れる予定です。
よくある質問
Q. プログラミングができなくても使えますか?
A. PART4のプロンプトだけでも同じことができます。証券会社アプリのニュース一覧をコピーして貼るだけです。むしろこちらから始めて、面倒になったら自動化を考えるほうが自然だと思います。
Q. しきい値は何点がいいですか?
A. 今回は5点にしました。低くすると取りこぼしは減りますが、ノイズが戻ってきます。まず5点で回して、1週間分の結果を見てから調整するつもりです。最初から正解を決めないほうがうまくいきます。
Q. 情報源はGoogleニュースだけで足りますか?
A. 足りない場面はあります。適時開示は取りこぼすことがあるので、重要な発表はTDnetや企業サイトで直接確認しています。この道具は「毎朝ざっと見る」用途で、一次情報の代わりにはなりません。
まとめ
今日いちばんの収穫は、道具そのものより「必要なのは集める機能ではなく捨てる機能だった」という気づきのほうでした。なぜを5回降りていなければ、たぶんニュース要約アプリを作って、270件の要約に埋もれていたと思います。
50分でできる程度のものでも、毎朝10分が1分になるなら、5日で元が取れます。小さく作って、動かして、失敗を記録する。この連載ではそれを毎日続けます。
Udemy講座【ゼロから始めるAI投資】応用講座 暴落対応編
暴落対応・決算分析・ポートフォリオ管理をChatGPTとClaudeで実践する動画講座です。まずは紹介動画から。
▶ 紹介動画を見る
※Udemyの講座ページに移動します。価格は決済画面でご確認ください
※本記事は情報提供を目的としたものであり、特定銘柄の売買を推奨するものではありません。記事中の銘柄はツールの動作を示すための例です。AIやプログラムの出力には誤りが含まれる場合があります。数値は2026年8月24日時点で実際に実行した結果です。投資の最終判断はご自身の責任でお願いします。
🎁 無料プレゼント3点セット
複利シミュレーター(Windowsアプリ)・暴落時のAI相談プロンプト集(PDF・7本)・相場シナリオ要約(PDF・毎月更新)を、LINEの友だち追加だけで受け取れます。
無料で受け取る
