📓

Claude Code × MCP × Notion で「Jupyter Notebookから分析レポート」ことはじめ

に公開

株式会社松尾研究所の大岡です。この記事は、松尾研究所 Advent Calendar 2025の記事です。今回は、Jupyter NotebookからNotion上に分析レポートを自動生成することに挑戦してみます。Notionを利用していなくても、ConfluenceやObsidianも公式からMCP[1]が発表されているので、現場で試してみようかな、という気持ちになっていただけたら嬉しいです。

データ分析現場でNotebookが増殖し続ける問題

データ分析の現場では、気を緩めるとJupyter Notebookがすぐにリポジトリの中心として存在感を示してきます。
コードを書きながら結果を即座に確認でき柔軟に分析を進められるという、試行錯誤のしやすさこそが Jupyter Notebookの最大の魅力であり、多くの人に愛されている理由でもあります。

しかしその一方で、すぐにメンテ不可能な負債になってしまいます。セルが増え、実行順序が乱れ、どのセルが正しい結果なのか、どこまでが最新なのか、わからなくなったことも多いはずです。私のスタンスとしては脱Notebookなのですが、Notebookという道具自体は非常に強力で無視できない存在...

ということで今回は、Notebookを「お手軽に分析レポートにしてくれたらみんなハッピーではないか?」というモチベーションのもと、Notebookが書きっぱなしのコード、負債、ではなく、資産として残すためにいいアイデアはないか、というものを探ってみようと思います。

本ブログでは、Notebookという人気便利ツールはそのまま使いながら、そこに書かれた分析内容をClaude CodeとNotionリモートMCPを利用し、社内ナレッジツールであるNotionに分析レポートを作成するための検証を行いたいと思います。

Claude Code × MCP × Notion で試してみる

Notebookを資産として残すには、どこに、どのような形で、蓄積するかが重要になります。社内ナレッジとして扱うなら、Notebookのまま放置するよりも、整理された文章としてNotionのデータベースに格納できるほうが圧倒的に扱いやすいです。

そこで今回は、Notebookの分析内容をClaude Code → (Remote MCP Server) → Notionという流れでレポート化する仕組みを組んでみました。

Claude Codeを使うと、ローカルのコード実行環境で「ツールを使って外部と対話してほしい」という指示をClaudeに向けて書くことができます。そしてそのツールを定義するのがMCPという仕組みで、今回はNotionのRemote MCP Serverを利用することにします。導入方法は本家のNotion MCPの始め方をご確認いただければと思います。

Notion側の準備としては、実際のプロジェクトを想定して、分析チケット用のデータベース・分析レポートを格納するデータベース、の2つを用意し、分析レポートを格納するデータベースにはレポートのテンプレート−ページを事前に作成しておきます。こうすることで、MCP経由で操作したときに、安定したレポートを作成できることを狙います。

ここまでの準備により、Claude CodeがNotebookの内容を整理し、必要であればチケット情報を読み取り、それらを分析レポートとしてNotionに保存するという一連の流れをすべて自動化できるのではないか、という狙いです。

実際に動かしてみると、ローカルのNotebookを、そのまま社内ナレッジとしてNotionに登録することができ、もう少しチューニングすれば分析メンバーにもガンガン利用してもらえるようになりそう、という結果を得ることができました。

今回の実験セットアップとデータ準備

Notebook をレポートとして資産化するというテーマに向けて、まずは小さく検証できる題材を準備するところから始めました。せっかくなので、実際の分析者が業務で取り組むときの流れに寄せて進めてみることにします。

最初に取り組んだ準備は、「どんな分析テーマでNotebookを作るか」 という部分です。今回は簡単にシミュレーションできる金融系のテーマをひとつ決め、その内容をChatGPTとディスカッションしながら“分析チケット”としてNotionに落とし込みました。チケットの作り方や表現も、日常の実務にできるだけ寄せています。実際に作成したチケットの全文は、この章の下にそのまま掲載する形にしようと思います。

Notionチケット記載内容
## 背景

- 一般的なMLタスクとはことなる金融取引の特徴を実際のシミュレーションで示したい。
- 例えば、「精度51%」は金融取引においては試行回数により十分な精度となり得る。
- 現実味を持って金融取引を理解するため、手数料や勝率を調整した環境下での資産推移をシミュレーションしたい。

## 受け入れ条件

- パラメータ設定: 勝率XX%、SRXX、手数料XXbp、t分布の自由度、を設定可能であること
- 勝率分布: 設定したパラメータにおける勝率分布が可視化されていること
- 資産推移: 横軸を10年とした資産曲線が描画されること。10本のランダムウォークのパスが描画されること。平均リターンの1σ領域がグラフに描画されること

## アウトプット

- ipynbファイル
- 受け入れ条件を満たす関数

## 備考

- なし

このチケットをベースに、Notebookの実装を行っていきます。全体としては、だいたい10セル程度の構成で、

  • パラメータ設定
  • 勝率分布の可視化
  • 横軸10年の資産推移の描画
  • ランダムウォークの複数パスの描画

といった内容を、チケットの受け入れ条件を満たすように組み立てています。
実務でありがちな「背景→受け入れ条件→実装→確認」という流れをそのまま再現する形です。

Notebookの結果の一部としてスクショを以下に貼ることにします。


Notebookの結果の一部

テーマ自体はシンプルですが、グラフを書いたり、色々試行錯誤するとNotebookが散らかって分析レポートにしづらいこともあるような気がするタスクなので、今回のプロトタイプの検証には十分かと思います。

この準備が整った段階で、いよいよNotebookを分析レポート化する検証内容を実際に動かしてみるフェーズに入ります。

Claude Code のセットアップと最初のプロンプト実行

今回のプロトタイプでは、Notebookをレポート化するという目的ですので、リポジトリ側でも最低限の準備を行いました。まず、プロジェクトのREADME.mdに、今回利用するNotionのデータベース(分析チケット用/分析レポート用)それぞれのリンクを整理しておきます。Notebookの内容を Claude CodeとMCPで扱う以上、「どのデータベースを触るべきか」 が明示されていることは必須情報かと思います。
Notionには以下の画像のようにチケットを記載しておき、Claude Codeがチケットを見に行くべきと判断したときは、以下の情報にアクセスできるという状況にしています


今回の分析チケット例。チケット記載内容は上述のものと同様

また、このREADME.mdはClaude Codeが参照できるよう、CLAUDE.mdにもリンクしておくことで、Claude Code側がレポート先のNotionデータベースやチケットDBを理解しやすい状態にしています。

README.md
# プロジェクト情報
本プロジェクトの各種情報はNotionに集約しています。

# チケット管理
チケットを管理しているスクラムボードは以下にあります。
https://www.notion.so/XXXXXXXXXX

# 分析レポートの記載方法
分析レポートは、Notionの以下のデータベースで新規ページを作成し、データベースのデフォルトテンプレートのフォーマットを利用してレポートを作成してください。
https://www.notion.so/YYYYYYYYYY
CLAUDE.md
# 参考文献
@README.md

準備が整ったところで、Claude Codeを起動し、実際に Notebook → 分析レポート化の一連の流れを試していきます。
まずはClaude Codeに対して次のようなプロンプトを投げました。

demo.ipynbから分析レポートを作成してください。以下が補足情報です。
- このNotebookは"金融取引シミュレーションの設計と可視化"というチケットに対応します

チケットDBや分析レポートDBの場所はCLAUDE.md経由で教えているので、上記のような簡単な指示で動いてくれる...はず!

Claude Codeにこのプロンプトを投げると、まずMCPを通じてNotionから最新の分析チケットを取得し、内容を読んで理解しはじめ...ませんでした(後程改善策を講じます)。チケットを自発的に見に行くことはありませんでしたが、無事に分析レポートDBに新規ページを作成することができたのはよい成果でした。良かった点としては、テンプレートページを利用する構成にしておいたことで、見出しや構造が乱れず、安定した形式のレポートが作成できた点です。

初版として完成した分析レポートを以下のトグル内に転記しています。

分析レポート ver1

チケット: 金融取引シミュレーションの設計と可視化

やること

  • WHY:勝率51%というわずかなエッジが、金融取引において複利成長により強力な武器となることを実証的に示すため。また、取引コストがエッジに及ぼす破壊的影響を可視化するため。
  • GOAL:t分布を用いた現実的なリターン分布の可視化、10年間の資産推移シミュレーション、勝率・手数料・リターンのパラメータ実験を行い、洞察を得る。

やったこと

  • t分布(自由度5)を用いた日次リターン分布のモデリングと可視化。正規分布より裾が厚く、極端なイベント(大損益)の発生確率を現実的に表現。
  • 10年間の資産推移をモンテカルロシミュレーション(10パス)で可視化。解析的な1σ範囲も重ねて表示し、期待値とバラツキを同時に理解可能に。
  • 3つの実験を実施:①勝率51%の威力(年間リターン2.5%、コスト0bps)、②コストの恐怖(同条件でコスト20bps)、③トップヘッジファンドレベル(年間30%、勝率55%、コスト5bps)。
  • analyzer.pyに分析関数(win_rate_to_sharpe_ratio、plot_daily_return_distribution、simulate_random_walks)を実装。パラメータは平均リターン、勝率、自由度、手数料で直感的に設定可能。

考察

  • 勝率55%の威力:機械学習では「失敗」とされる55%の精度が、金融取引では複利成長により10年間で十分な資産増加を実現できる。小さなエッジでも試行回数(時間)が十分あれば顕在化する。
  • コストの破壊力:わずか20bpsの取引コストが、勝率51%のエッジを完全に無力化し、資産を減少させることが実証された。高頻度取引ではコスト管理が極めて重要。
  • 長期視点の必要性:短期ではバラツキ(ボラティリティ)が大きく、マイナスになるパスも存在するが、10年間という長期で見ればエッジの効果が明確に表れる。
  • パラメータ設計の工夫:平均リターンと勝率を独立に設定できる設計により、直感的なシミュレーションが可能に。シャープレシオは事後的に計算されるため、設定ミスを防げる。

ネクストアクション

  • Action&Why:実際の市場データを用いたバックテストを実施。現在のシミュレーションは理論的モデルであり、実際の市場の特性(自己相関、ボラティリティクラスタリングなど)を反映できていないため。
  • Action&Why:リスク管理手法(最大ドローダウン、VaRなど)を追加。資産の期待値だけでなく、最悪ケースの损失を把握することが実務上重要であり、リスク評価指標が必須。
  • Action&Why:ポートフォリオ最適化への拡張。複数の戦略や資産を組み合わせた場合のシミュレーションを行い、分散効果を検証する。

改善点として、少なくともチケットを見に行くようにしてほしいので、README.mdに少しだけリッチに情報を与えることにします。

README.md改善番
# プロジェクト情報
本プロジェクトの各種情報はNotionに集約しています。

# チケット管理
チケットを管理しているスクラムボードは以下にあります。
https://www.notion.so/XXXXXXXXXX

# 分析レポートの記載方法
分析レポートは、Notionの以下のデータベースで新規ページを作成してください。
https://www.notion.so/YYYYYYYYYY

## **重要:デフォルトテンプレートのフォーマットを厳守してください**
- **レポート作成時は、データベースのデフォルトテンプレートに定義されているセクション構造を必ず遵守してください**
- テンプレートで定義されているセクション(見出し)を削除したり、順序を変更したりしないでください
- 各セクション内に、チケット情報や分析コードの実装内容を十分に記載してください

## レポート作成時のポイント
### チケット情報の確認と反映
- レポート作成前に、対応するチケットの内容を必ず確認すること
- チケットに記載された目的・背景・期待される成果を理解した上で記述すること

### 分析コードの実装内容の記述
- 分析手法の選択理由や背景・意図を記述すること
- 別の分析者が読んでも再現できる程度の具体性を持たせること
- コードを読まなくても分析の流れが理解できるよう記述すること

### 結果の解釈と考察
- 単なる結果の羅列ではなく、何がわかったのかを明確に記述すること
- チケットの目的に対してどのように答えられたかを説明すること

最終的には、以下画像のような分析ページを作成することができました。README.mdを少し修正することで、期待に沿ったレポート内容へと様変わりしました。


Notionに分析レポートが作成された様子(レポートの具体内容は以下トグル内を参照)

分析レポート ver2

やること

  • WHY:タスクを行う理由

  • 一般的なMLタスクとは異なる金融取引の特徴を実際のシミュレーションで示す

  • 機械学習では「失敗」とされる精度51%が、金融取引においては試行回数により十分な精度となり得ることを示す

  • 現実味を持って金融取引を理解するため、手数料や勝率を調整した環境下での資産推移をシミュレーションする

  • GOAL:タスクの終了条件

  • パラメータ設定:勝率、シャープレシオ、手数料(bps)、t分布の自由度を設定可能であること

  • 勝率分布:設定したパラメータにおける勝率分布が可視化されていること

  • 資産推移:横軸を10年とした資産曲線が描画され、10本のランダムウォークのパスと平均リターンの1σ領域がグラフに描画されること

やったこと

  • t分布を用いた現実的なリターン分布の設計と実装:正規分布よりも裾が厚いt分布(自由度=5)を採用し、極端な値(大きな利益・損失イベント)の確率をより現実的にモデル化。plot_daily_return_distribution関数で可視化を実装。
  • 勝率からシャープレシオへの変換ロジックの実装:win_rate_to_sharpe_ratio関数を実装し、勝率をパラメータとして直感的に指定できるようにした。これにより、シャープレシオは事後的に計算される形になり、パラメータ設計がシンプルになった。
  • 10年間の資産推移シミュレーション機能の実装:simulate_random_walks関数で10本のランダムウォークを生成し、解析的な1σ範囲(確率的な上下限)を重ねて表示する機能を実装。手数料(bps)を考慮した現実的なシミュレーションを可能にした。
  • 複数のパラメータ実験の実施:実験1(勝玅51%、コスト0bps、年間リターン2.5%)でわずかなエッジの威力を確認。実験2(勝玅51%、コスト20bps)でコストがエッジを破壊する様子を観察。実験3(勝玅55%、年間リターン30%、コスト5bps)でヘッジファンドレベルのパフォーマンスをシミュレーション。
  • ノートブックの構成:マークダウンでパラメータ設計思想、各実験の目的と設定を詳細に記載し、再現性を確保。他の分析者がコードを読まずとも分析の流れを理解できるよう構成した。

考察

  • 勝玅55%の威力:デフォルト設定(年間リターン10%、勝玅55%、手数料5bps)でのシミュレーションでは、10年間で十分な資産成長が可能であることが確認できた。機械学習の文脈では「失敗」と評価されるレベルの精度であっても、金融取引では複利効果により強力なエッジとなる。
  • コストの現実:実験2で示された通り、わずかな手数料(20bps)でも、わずかなエッジ(勝玅51%)を完全に破壊し得る。これは、高頻度取引や流動性の低い市場での取引において、手数料最適化が極めて重要であることを示唆している。取引コストを上回るエッジがなければ、長期的には資産が減少する。
  • 長期視点の重要性:試行回数(時間)が増えるほど、エッジの効果が顕在化する。短期的にはランダムネスにより大きな変動があるが、長期的には平均リターンに収束していく。これは大数の法則に基づく現象であり、金融取引における「試行回数」の価値を示している。
  • t分布の有効性:自由度5のt分布を使用することで、極端なイベント(ブラックスワン事象)をより現実的にモデル化できた。正規分布では過小評価される裾のイベントが、実際の市場ではより高頻度で発生するため、リスク管理の観点からも重要な設計選択である。

ネクストアクション

  • Action&Why:ネクストアクションとその理由
  • リスク管理手法の追加:現在のシミュレーションにストップロスやポジションサイジングの機能を追加することで、より実践的な取引戦略の検証が可能になる。特に最大ドローダウンの制御は実践上極めて重要。
  • 実際の市場データとの比較検証:シミュレーション結果を実際の市場データ(例:S&P500、先物市場)と比較し、モデルの妥当性を検証する。特にボラティリティの時系列クラスタリングや極端イベントの頻度を確認する。
  • 感度分析の実施:各パラメータ(勝率、手数料、リターン、自由度)が最終的な資産曲線に与える影響を体系的に分析する。これにより、どのパラメータが最も重要かを定量的に評価できる。

まず明らかにテンプレートを意識した内容になっていること、そして、チケットの中身が分析レポートに反映されていることもわかります。

まとめ:Notebookを「負債」から「そこそこいい資産」に寄せる

ここまで、ちょっとした金融シミュレーションの分析チケット、Notebookを用意し、それをClaude Code × Notion Remote MCPを経由して分析レポートDBにレポートを自動生成するという流れを一通り試してみました。

結果として、

  • 分析官がレポートを書くことなくして、Notebookの内容をそれなりの分析レポート(「背景〜やること〜やったこと〜考察〜ネクストアクション」といったレポート構造)に落とし込めたこと

  • Notion側でテンプレートを決めておくことで、レポートのフォーマットがブレずに安定すること

  • README / CLAUDE.md に最低限のプロジェクト情報を書いておくだけでも、Claude Code側の「文脈理解」がかなりやりやすくなること
    あたりは、今後も使えそうな手応えだったと感じています。また、今後さらに発展させていとしたら以下のポイントは試してみたいと思いました。

  • MTGから議事録を作成し、複数のチケットに落とし込む

  • チケット作成をトリガーにClaude Codeが分析コードの生成を始める

  • 分析コードをレポートとしてNotionに格納する(今回の範囲)

  • レポートを元にクライアント向けPPT資料を作成する

一方で、今回の検証を行うにあたり、Notion MCPの物足りなさ、というのも感じており、2025年12月時点の使い勝手を踏まえた感想としては、技術的に楽しくはあるものの、使い込んで便利に仕上げる...というような感じでもないなという感覚でいます...

  • せっかくNotebookにグラフ画像出力があるのだからNotionページにも転記してほしい(NotionMCPがまだマークダウンテキストにしか対応していない)
  • Notion MCPが遅い。その上、400番台のエラーによりClaude Codeが何度かリトライをかけてさらに遅い、みたいな状況が発生する

松尾研究所のテックブログでは、今後もデータサイエンス実務目線での検証内容を発信していきますので、興味を持たれた方は是非応援、フォローをよろしくお願い致します!

脚注
  1. MCP入門(松尾研テックブログ↩︎

松尾研究所テックブログ

Discussion