KabuMartのスクリーンショットから銘柄を分析し、インタラクティブなHTMLダッシュボードを生成するスキル。 ユーザーがKabuMartのスクショを貼り付けたら、画像解析→yfinanceデータ取得→WebSearch調査→HTML生成を自動で行う。 「銘柄分析」「KabuMart」「株分析」「企業分析」「スクリーニング結果」「この銘柄どう?」など、 日本株の個別銘柄を調べたいときに必ず使う。スクリーンショットが添付されていなくても、 銘柄コード(4桁)や企業名が指定されていればWebSearchのみで分析を実行できる。
Install
npx skillscat add bi-al1/kabumart-analyzer Install via the SkillsCat registry.
KabuMart銘柄分析ダッシュボード
KabuMartのスクリーンショットを読み取り、yfinanceで定量データを取得し、
WebSearchで定性情報を補完して、初心者にもわかりやすいインタラクティブHTMLダッシュボードを生成する。
対象ユーザー
投資初心者の「ふゆさん」。専門用語はすべて噛み砕いて説明する。
「つまりどういうこと?」という問いを常に意識し、具体例や日常の比喩で伝える。
実行フロー
ユーザーから画像または銘柄情報が提供されたら、以下を順番に実行する。
Step 1:画像解析(スクショがある場合)
KabuMartのスクリーンショットから以下を正確に読み取る:
- 企業名・銘柄コード(4桁)・業種
- 総合スコアとランク(S, A+, A, B+ など)
- 5軸スコア:成長性、安定性、収益性、余力、新規性(それぞれ数値とランク)
- 予想PER(倍率)
- 株価チャートから直近の株価水準を推定
- ポジティブ要素(全件、原文のまま抽出)
- ネガティブ要素(全件、原文のまま抽出)
スクショがなく銘柄コードのみの場合はこのStepをスキップし、
KabuMartスコアのセクションは「データなし」として空欄にする。
Step 2:yfinanceデータ取得(定量データの確保)
銘柄コードが判明したら、scripts/fetch_yfinance.py を実行して定量データを取得する。
python scripts/fetch_yfinance.py {銘柄コード} --full --pretty取得できるデータ:
- 株価情報:現在値、52週高値/安値、出来高
- バリュエーション:PER(実績/予想)、PBR、PSR、EV/EBITDA
- ファンダメンタルズ:ROE、ROA、利益率、売上成長率、自己資本比率
- 配当:利回り、配当額、配当性向
- アナリスト情報:目標株価(高/平均/低)、推奨、アナリスト数
- テクニカル指標(
--full時):RSI、ボリンジャーバンド位置、SMA50/200ステータス、リターン - 変化スコア(
--full時):アクルーアルズ、売上加速度、FCFマージン変化、ROE趨勢 - 推定リターン(
--full時):楽観/ベース/悲観の3シナリオ
yfinanceが使えない場合: pip install yfinance が未実行の場合はエラーJSONが返る。
その場合はStep 2をスキップし、従来通りWebSearchのみで分析を続行する(Graceful degradation)。
データの役割分担:
- yfinance → 定量データ(数字):PER、PBR、ROE、配当利回り、株価、アナリスト目標株価
- WebSearch → 定性データ(文脈):ビジネスモデル、成長戦略、競合状況、リスク要因
Step 3:WebSearch調査(定性情報の補完)
yfinanceで取得済みの数字系(PER、株価など)は検索不要。
定性的な情報に集中してWebSearchを実行する。
必須(常に実行):
"[企業名] ビジネスモデル 収益構造 セグメント"
"[企業名] 決算 業績 最新 2026"
"[企業名] 競合 市場シェア"推奨(できるだけ実行):
"[企業名] 成長戦略 中期経営計画"
"[企業名] リスク 課題"条件付き(yfinanceでデータが取れなかった項目のみ):
"[企業名] ROE 自己資本比率 財務 配当"
"[銘柄コード] PER 株価"
"[企業名] アナリスト 目標株価"クエリの詳細パターンは references/search_queries.md を参照。
Step 4:データ構造化
調査結果を以下の構造で整理する(内部処理用、ユーザーには見せない):
company: 企業名、コード、業種、市場
scores: KabuMartの5軸スコア + 総合スコア
financials: PER、PBR、ROE、自己資本比率、配当利回り(yfinance優先、なければWebSearch)
price: 現在株価、52週高値/安値(yfinance)
business: ビジネスモデル概要、主力事業、収益構造(WebSearch)
segments: セグメント名、売上比率、利益率(WebSearch)
positives: ポジティブ要素(KabuMart原文 + WebSearch追加分)
negatives: ネガティブ要素(KabuMart原文 + WebSearch追加分)
change_score: 変化スコア(yfinance、取得できた場合のみ)
technical: テクニカル指標(yfinance、取得できた場合のみ)
analyst: アナリスト情報・推定リターン(yfinance、取得できた場合のみ)
verdict: 強み3つ、懸念3つ、初心者向けまとめStep 5:分析JSONの生成・保存・push
HTMLは生成しない。 分析結果は webapp/data/stocks/{コード}.json に保存する。
表示は webapp/frontend/stocks/detail.html が動的に読み込んで行う(1枚で全銘柄に対応)。
保存先: webapp/data/stocks/{銘柄コード}.json(例:402A.json)
JSONの構造(必須フィールド):
company:企業名、コード、業種、市場、調査日scores:KabuMartスコア(total_score, total_rank, axes)financials:PER, ROE, 自己資本比率, バリュエーションテーブルprice:現在株価, 52週高値/安値price_history:株価履歴([{"date": "YYYY-MM-DD", "close": 1234}, ...])business:catchcopy, paragraphs, tags, segmentspositives/negatives:title, impact, explain, sourceverdict:strengths, risks, summaryhas_yfinance,has_websearch,has_kabumart:データソースフラグlinks:参考URLリスト
詳細なJSONスキーマは webapp/data/stocks/402A.json を参照(実例)。
生成後に以下を必ず実行する:
- manifest.jsonを更新(
scripts/update_manifest.pyを実行) - git add + commit + push(Claude が自動実行)
# manifest更新(--file と --url は省略可能・自動補完される)
python scripts/update_manifest.py \
--code {銘柄コード} \
--name "{企業名}" \
--date {YYYY-MM-DD} \
--rank {ランク}
# git push(必須)
git add webapp/data/stocks/{コード}.json webapp/manifest.json
git commit -m "feat: {企業名}({コード})分析データを追加"
git pushデータ反映フロー(push直後に反映):
| データ | 読み込み元 | 書き込み |
|---|---|---|
| 分析JSON(銘柄データ) | GitHub Raw URL | git push |
| watchlist.json | Render /api/watchlist → GitHub API |
git push or Render API → GitHub API |
| manifest.json | GitHub Raw URL | git push |
| healthcheck | Render FastAPI(yfinance) | — |
- 分析JSON / manifest:git push後にブラウザリロードで即時反映
- watchlist:Render API経由でGitHub APIから直接取得(CDNキャッシュ問題を回避)
- ステータス変更はWebダッシュボード上でもClaudeへの依頼でも可能
pushが完了したら、URLを案内する:https://kabumart-analyzer.vercel.app/stocks/detail.html?code={コード}
ダッシュボードの構成(8セクション)
テンプレートを読む前に、各セクションの目的を理解しておく。
1. ヘッダー
- 企業名(銘柄コード)、業種、市場、調査日
- 「ひと言で言うと?」キャッチコピー(初心者がイメージできる一文)
- データソース表示:yfinanceデータの有無を小さくバッジ表示(「📊 yfinance取得済」/「📝 WebSearchのみ」)
2. この会社は何をしている?(ビジネスモデル)
- 左カラム:平易な文章で事業内容を説明(3段落程度)
- 右カラム:事業ごとのハイライトカード
- タグ:BtoB/BtoC、収益モデルの種類、市場特性
- この会社の具体的な製品やサービスが何に使われているかまで踏み込んで書く
3. KabuMartスコア
- 左:総合スコアの円形表示 + ランクバッジ
- 右:レーダーチャート(5軸。Chart.jsで描画)
- 基準ライン(70点)の点線を重ねて表示
- レーダーのラベルにスコア値とランクを含める
4. 主要財務指標(ゲージメーター×3 + バリュエーション表)
- 予想PER:業種平均との比較 ← yfinanceの値を優先
- ROE:目安10%との比較 ← yfinanceの値を優先
- 自己資本比率:目安40%との比較 ← yfinanceの値を優先
- 各ゲージにホバーで「つまりどういうこと?」ツールチップ
- 追加:バリュエーション補足テーブル(yfinanceデータがある場合)
- PBR、配当利回り、EV/EBITDA、売上成長率を小さなテーブルで表示
- 各指標に一般的な目安値を併記
5. 変化スコア(yfinanceデータがある場合のみ表示)
- 4つのゲージまたはバー:アクルーアルズ、売上加速度、FCFマージン変化、ROE趨勢(各25点満点)
- 合計スコア(100点満点)と解釈ラベル(📈強い改善 / ↗️改善傾向 / ➡️横ばい / 📉悪化)
- ホバーで「つまりどういうこと?」解説:
- アクルーアルズ → 「利益がちゃんとキャッシュで裏付けられているか。高いほど"見せかけ"じゃない利益」
- 売上加速度 → 「売上の伸びが加速しているか。プラスなら勢いが増している」
- FCFマージン変化 → 「自由に使えるお金の割合が増えているか。企業の"余裕度"の変化」
- ROE趨勢 → 「株主のお金をどれだけ効率よく増やせているかの変化」
- このセクションの趣旨:KabuMartスコアは"今の状態"、変化スコアは"方向性"。
両方見ることで「高スコアだけど下り坂」「低スコアだけど改善中」を見分けられる。 - yfinanceデータがない場合はこのセクションをまるごとスキップ
6. テクニカル&推定リターン(yfinanceデータがある場合のみ表示)
- 左カラム:テクニカルサマリー
- RSI(売られすぎ/買われすぎの判定付き)
- SMAステータス(上昇/下降トレンドをアイコンで)
- ボリンジャーバンド位置
- リターン一覧(1M / 3M / 6M / 1Y)
- 右カラム:推定リターン3シナリオ
- 楽観 / ベース / 悲観 の棒グラフまたはカード
- アナリスト数の表示(少数の場合は信頼度注意のバッジ)
- アナリスト目標株価 vs 現在株価のかい離率
- ホバーで初心者向け解説:
- RSI → 「70以上は"買われすぎ"で一旦下がりやすい、30以下は"売られすぎ"で反発しやすい」
- SMAクロス → 「短期と長期の移動平均が交差するタイミング。ゴールデンクロスは上昇サイン」
- yfinanceデータがない場合はこのセクションをまるごとスキップ
7. ポジティブ / ネガティブ分析
- 左右2カラム(緑カード / 赤カード)
- 各カードに:タイトル、情報源(📌 KabuMart / 📌 WebSearch / 📊 yfinance)、インパクトバッジ、星評価
- 「つまりどういうこと?」解説は常時表示(カード内に埋め込み)
- KabuMartの要素 + WebSearchで追加発見した要素の両方を含める
- yfinanceデータから追加できるポジティブ/ネガティブ要素:
- PBR < 1.0 → 「資産価値以下で買える(割安の可能性)」をポジティブに追加
- 配当利回り > 3% → 「高配当銘柄」をポジティブに追加
- 変化スコア > 60 → 「業績改善トレンド」をポジティブに追加
- 変化スコア < 30 → 「業績悪化傾向」をネガティブに追加
- RSI > 70 → 「短期的に買われすぎ」をネガティブに追加
- デッドクロス → 「テクニカル的に弱い」をネガティブに追加
8. 総合評価
- 強み3つ・懸念3つを左右に並列表示
- 「初心者向けまとめ」ボックス(結論ファーストの平易な文章)
- 変化スコアがある場合:まとめに「今の方向性」(改善中 or 悪化中)を一文追加
9. ウォッチリスト追加ボタン(フッター上部に固定配置)
- ダッシュボード下部に「👀 ウォッチリストに追加」ボタンを表示
- ボタンクリックで以下のテキストをクリップボードにコピー:
ウォッチリストに追加: {銘柄コード} {企業名} {調査日} - コピー成功時:ボタンが「✅ コピーしました!Claudeに貼り付けてください」に変化(2秒後に元に戻る)
- JavaScript実装:
navigator.clipboard.writeText()を使用 - デザイン:ダークテーマに合わせたアクセントカラー(#4a9eff 系)のボタン、角丸、ホバーで明るく
- このボタンはanalyzerの役割の終点。コピーされたテキストをClaudeに貼り付けると、watchlistスキルが引き継いで保存処理を行う
Step 6(HTML生成後):ウォッチリスト追加の提案
ダッシュボードを生成・表示した後、Claudeはユーザーに対して以下のように提案する:
「ウォッチリストに追加しますか?ダッシュボードのボタンからコピーするか、ここで『追加して』と伝えてください」
- ユーザーがクリップボードからテキストを貼り付けた場合 → watchlistスキルが処理
- ユーザーが「追加して」「入れといて」等と口頭で伝えた場合 → watchlistスキルが処理
- analyzerは提案するだけで、保存処理には関与しない(役割分離)
ライティングルール
初心者が「つまりどういうこと?」と迷わないように以下を徹底する。
- 専門用語(PER、ROE、自己資本比率など)は登場するたびに平易な言葉で言い換える
- 「つまり〇〇ってこと」という言い換えを必ず入れる
- 抽象的な業種名だけで終わらせず、具体的に何をしている会社かを伝える
- 友人に分かりやすく教えるような口調で、でも投資判断に必要な情報は漏らさず提供する
- 数字は可能な限り具体的に入れる
- 事業セグメントの「つまり」解説はホバーツールチップで表示
- ポジネガの「つまり」解説はカード内に常時表示
- yfinanceの数字とWebSearchの数字に差がある場合、yfinanceの値を優先し、
「(yfinance取得値。WebSearchでは〇〇との記載あり)」と注記する
データソースの優先順位
| データ項目 | 第1ソース | 第2ソース(フォールバック) |
|---|---|---|
| PER, PBR, 配当利回り | yfinance | WebSearch |
| ROE, 自己資本比率 | yfinance | WebSearch |
| 株価, 時価総額 | yfinance | WebSearch |
| アナリスト目標株価 | yfinance | WebSearch |
| テクニカル指標 | yfinance | 表示しない |
| 変化スコア | yfinance | 表示しない |
| ビジネスモデル, 事業内容 | WebSearch | ― |
| 競合, 市場シェア | WebSearch | ― |
| 成長戦略, リスク | WebSearch | ― |
| KabuMartスコア | 画像解析 | 表示しない |
技術仕様
- 出力:単一HTMLファイル(CSS・JS全て埋め込み)
- チャートライブラリ:Chart.js(CDN:
https://cdnjs.cloudflare.com/ajax/libs/Chart.js/4.4.1/chart.umd.min.js) - カラースキーム:ダーク系(背景 #0f1117、カード #1a1d2e)
- レスポンシブ対応:CSS Gridベース、768px以下で1カラムに切り替え
- ツールチップ:ゲージ・セグメントのみホバー表示。ポジネガは常時表示
- Pythonスクリプト:
scripts/fetch_yfinance.py(要pip install yfinance)
テンプレート参照
HTMLダッシュボードの完全なテンプレートは assets/dashboard_template.html にある。
実データで生成する際は、このテンプレートの構造・スタイル・Chart.js設定をそのまま使い、
データ部分だけを差し替える。テンプレートにはダミーデータが入っているので参考にする。
yfinanceデータがある場合は、セクション5(変化スコア)とセクション6(テクニカル&推定リターン)を
テンプレートの既存セクションと同じデザインテイストで追加生成する。
注意事項
- このレポートは投資助言ではないことをフッターに必ず明記する
- データの出典(KabuMart、yfinance、WebSearch元)を可能な範囲で記載する
- 株価や市場データは現在の日付を基準に検索する
- 調査はあくまで公開情報に基づくものであり、正確性を保証するものではない
- yfinanceのデータは無料APIであり、リアルタイムではなく遅延データの可能性がある旨を注記する