🔙

Cursor × Slack MCP × Obsidianで実現する、AIエージェントと作る批判的な一日の振り返り

に公開

この記事はGENDA Advent Calendar 2025 シリーズ1の19日目の記事です。
https://qiita.com/advent-calendar/2025/genda

こんにちは。あでぃです。

はじめに

みなさんは、「times(分報)」を活用していますか? これはSlackなどのチャットツール上に「自分専用のつぶやきチャンネル」を作り、今の状況や考えをリアルタイムで共有する文化のことです。

僕は、このtimesという文化が大好きです。
業務中の気付きはもちろん、ふとした思考をそのままアウトプットすることで、そこから会話が生まれたり、書くことによって思考が整理され深まったりするからです。
もちろん、モラルや節度を守ることは大前提です。業務遂行に直接関係のあることも適切なチャンネルで話す方が良いと考えています。しかし、思考については心理的なハードルを極限まで下げてアウトプットし続けることが、思考のスピードを高めることにダイレクトにつながると思います。
なにより、目の前の事象(具体)と言語化された法則(抽象)を行き来するような思考、それ自体にエンジニアリングに対する本質的な価値があると考えています。

しかし、以前から「もったいない」と感じていたポイントがありました。
こういったログは着実に溜まっていくのですが、日々のスピード感に追われ、どうしても「書きっぱなし」になってしまうことです。

「投げっぱなし」のログは、そのままではタイムラインの彼方に流れて消えていってしまいます。かといって、一日の終わりにゼロから思い出して日報を書くのはコストが高すぎる。

そこで今回は、Slack MCPとCursorを組み合わせて、「Slackのtimesから思考を抽出し、AIと対話しながらObsidianに『最高の振り返り』を自動生成するフロー」を構築しました。

ただの要約ツールではありません。AIに「批判的な壁打ちパートナー」になってもらうことで、自分の思考のバイアスをあぶり出すシステムです。

システム構成:自分専用の「思考エディター」を雇う

構築は非常にシンプルで、CursorでSlack Explorer MCPを利用し、Slackから一日分の情報を取得し、いい感じの振り返り情報にしてObsidianに入れて眺め、自分の気持ちを追記する。そんな流れです。

肝となるのは、「どうやってセキュアに繋ぐか」「AIにどう振る舞わせるか(プロンプト)」 です。特に後者には、単なる効率化ではない「自分なりの振り返りの思想」を詰め込みました。

また、利用にあたってはSlackの社内ポリシーなども十分に確認しておくと良いと思います。

1. Slack Explorer MCPの導入

まずはデータを取ってこないことには始まりません。
SlackのMCPサーバーには、Shibayu36さんが公開されている slack-explorer-mcp を使わせていただきました。

https://github.com/shibayu36/slack-explorer-mcp

MCPを利用するにあたっては、セキュリティについても意識しましょう。MCPの設定ファイル(mcp.json)にSlackのトークンをベタ書きするのは、人為的なミスで事故る未来が見えるので、たとえ自分のローカルだけでも許したくありませんでした。
そこで 1Password CLI (op) を噛ませる構成にしました。最初は op run --env-file=".env" みたいなコマンドを試していたのですが、でもこれだと結局 .env ファイルを作らないといけない。「スマートじゃないな...」みたいなことを考えながら、最終的にたどり着いたのが この形でした。

{
  "mcpServers": {
    "slack-explorer-mcp": {
      "command": "op",
      "args": [
        "run",
        "--",
        "docker",
        "run",
        "-i",
        "--rm",
        "--pull", "always",
        "-e", "SLACK_USER_TOKEN", 
        "ghcr.io/shibayu36/slack-explorer-mcp:latest"
      ],
      "env": {
        "SLACK_USER_TOKEN": "op://Private/Slack MCP User Token/user_token"
      }
    }
  }
}

env プロパティで op://... パスを指定し、op run -- docker ... で直接環境変数を注入する。
これなら設定ファイルに秘密情報は残らないし、.env ファイルの管理も不要になります。
これをObsidian Vaultのディレクトリの .cursor/mcp.json などに保存するといい感じになると思います。
実際のパスはそれぞれの環境に合わせて書き換えてください。実行時には、1Passwordへのアクセスを許可してあげてくださいね。

コピペで使いたい場合は、プライベート保管庫に「Slack MCP User Token」というセキュアノートをつくり、user_tokenというテキストを作ってそこに保管したらいけると思います。

Slack Appは

search:read //日付・期間を絞った検索をするため
channels:history //検索されたポストやそのスレッドを表示するため
users:read //発言者のプロフィール取得のため

くらいの権限で十分だと思います。権限もうまく調整しましょう。
timesがprivateチャンネルなら groups:history も必要です。

2. Cursor Rulesで「人格」を定義する

データ取得の準備ができたら、次はAIへの「人格定義」です。ここが今回のシステムの心臓部であり、なぜわざわざAIを使うのかという理由そのものです。

Cursorには .cursor/rules という、「AIに守らせるルール」を記述できる機能があります。
https://docs.cursor.com/ja/context/rules

これを用いて slack-reflection.mdc というファイルを作り、以下の内容を書き込みました。
振り返りだけじゃなくて、timesに書いていたけどタスクにするのを忘れていたものとかも掘り起こして気づけて、便利です。

Slackの `私のtimesの名前` チャンネルから、直近24時間の履歴を取得し、内省とアウトプットのための振り返りログを生成し、`01_Daily/YYYY-MM/YYYY-MM-DD.md` に保存します。

## 実行フロー

1. **日付の特定**:
- 現在時刻から直近24時間のメッセージを対象にします。
- ユーザーが日付を指定した場合(例:「12/17」「2025-12-16」)は、その日付(JST)の00:00:00から23:59:59までのメッセージを対象にします。
 
2. **データ取得**:
- `slack-explorer-mcp` (server: `user-slack-explorer-mcp`) を使用します。
- `search_messages` ツールを使用:
- `in_channel`: "私のtimesの名前"
- `on`: 日付指定がある場合は `YYYY-MM-DD` 形式で指定。
- `after`: 日付指定がない場合は、24時間前の日付を指定。
- `get_user_profiles` ツールを使用して、抽出された UserID から `display_name` を取得し、ログに反映させます。
- スレッドがある場合は `get_thread_replies` で詳細を取得し、文脈を把握します。
- 主役は 「私のSlackName」(UserID: `私のUserID`)です。

3. **分析ロジック**:
- **他者との絡み**: 他者からの指摘や議論を抽出(なければ省略可)。
- **思考の種(Seeds)**: 「単なる連絡」ではない「独自の哲学」「仮説」「強い感情」「迷い」が含まれる発言を特定。
- **哲学的パートナーとしての分析**: 特定した種に対して、以下の多角的な視点を持つこと。
- **深める(Affirmation & Abstraction)**: その思考の背後にある普遍的な法則や価値観は何か?
- **批判する(Critical / Antithesis)**: あえて反論するなら?その思考の盲点は?「効率化」と言っているが「人間性」を犠牲にしていないか?などのカウンター。
- **広げる(Analogies)**: それを歴史、生物学、社会構造などに例えるとどうなるか?
  
3. **アウトプット生成(Obsidian形式)**:
以下のフォーマットでログを生成します。
---
# 📅 YYYY-MM-DD の思考ログ
## 📝 今日のハイライト
(その日のトピックや感情の動きを、簡潔な言葉で)

## 💬 議論とフィードバック(※ある場合のみ)
- **トピック**: ...
- 🗣️ **[[MemberName]]**: (指摘・コメント)
- 🔄 **結果**: (それを受け入れたか、議論になったか)

## 🌱 アウトプットの種(多角的分析)
(私の思考に対し、AIが「哲学的パートナー」として挑み、深めるセクション)

### 💎 原石A: 「...(発言の引用や要約)」
- **🔍 深掘り(本質)**:
(この発言が示唆する普遍的なテーマや、隠れた前提を言語化)
- **⚡️ 反証(批判的視点)**:
(あえて「いいえ」と言うなら? その仮説が通用しないケースは? バイアスへの指摘)
- **🚀 対話のトリガー**:
(このテーマについて今すぐComposerで議論を始めるための導入質問。
例:「『○○』とおっしゃいましたが、もし××という前提が崩れたらどうなりますか? ここを掘り下げませんか?」)

### 💎 原石B: ...
(同上)

## ✅ ステータス確認
- [ ] **タスク化チェック**: ...
- [ ] **タスク化チェック**: ...
---

もしもprivateな情報も取り扱って振り返りを書こうとしているなら、この情報の取り扱いにも気をつけてくださいね。

なぜ「批判」が必要なのか?

あえて「批判せよ」「反証せよ」と指示しているのには理由があります。
通常、AIに日報の要約を頼むと、「今日は〇〇をしましたね、素晴らしい進捗です!」という肯定的なサマリーになりがちです。AIイエスマン問題です。しかし、それでは「ダブルループ学習」が起きません。

ダブルループ学習とは「やり方を変えて改善する」のではなく、「そもそもその前提は正しいのか?」を問うことです。

例えば「この技術、使いにくいな」という愚痴に対して、AIは「ドキュメントはこれです!代わりに読みますよ!」「こうやったら使いやすくなるかも!」と教えてくれます。本当にありがとうAI、いつもいろんなことを教えてくれて。
でも今回のプロンプトでは「あなたが『使いにくい』と感じているのは、既存の設計モデルへの執着があるからではありませんか?」と言ったことが返されます。厳しいです。

しかし、ここまで踏み込まれて初めて、振り返りは「次のアクション」に繋げられます。
流れていくログの中に眠る「違和感」や「仮説の種」を拾い上げ、AIに鋭く揺さぶってもらう。
自分一人では気づけないことに気づけるようにしたいものです。

3. Obsidianへ出力

実際の運用フローはこうです。

  1. 仕事の終わりに「今日をまとめるか」とおもむろにCursorを開く
  2. 作ったルール(slack-reflection)を呼ぶ( @slack-reflection.mdc をするだけ)
  3. CursorがSlackを見に行き、直近24時間のtimesログを取得・分析。
  4. 指定のフォーマットで 01_Daily/YYYY-MM/YYYY-MM-DD.md に追記・保存する。

このログを読んで次のアクションや、自分のバイアスに気づく。そして明日の仕事に繋げていく。
そして、必要に応じて対話をすぐに実施できる。このインタラクティブ性が、Cursorを使う最大のメリットです。

実際にやってみた結果

ある日、僕はtimesで「AI時代の採用」について書いていました。
きっかけは「AIによるESの均質化を受けて、ESを廃止してショートな面接を導入」といった旨のニュースを見たことです。

自分の経験から、直接話した方が見極められるものが多いのは共感だが、面接を増やすのは並大抵な努力ではないことを知っているのでそこへの単純な尊敬と、AIで書かれたESをAIで評価するという、AI同士のオートバトルみたいな世界観がもう訪れているんだな。みたいなことを書いていました。

これに対して、生成された「振り返りログ」にはこう書かれていました。

💎 原石: 「ES廃止と面接回帰」

⚡️ 反証(批判的視点):
あなたは「面接なら人間性を見極められる」と仮定していますが、その前提は危ういです。
例えば、AI内蔵のイヤホンやスマートグラスを使って、面接官の質問に対する「理想的な回答」をリアルタイムに生成・発話できるようになったらどうしますか?
そうなれば、面接という対話さえも「AI同士のオートバトル」になり、あなたの言う「人間性の見極め」は機能しなくなります。

これを読んだ瞬間、痛いところだな、確かにそこまで考えていなかったな。と素直に思いました。僕は無意識に「対面ならAIは介入できない」という前提(バイアス)を持っていました。
でも、技術の進化速度を考えれば、その前提すら崩れる可能性は高い。

「じゃあ、そのとき『信頼』ってどう担保して、どう評価するんだろう?」

自身の思考のバイアスを指摘され、世界観の更新(Orient)を迫られる。
これこそが、僕が求めていた「AIとの壁打ち」です。OODAループを回していきましょう。

なぜ、人間ではなくAIなのか?

このシステムを運用してみて、技術的な便利さ以上に気づいたことがあります。
それは、対人間では無意識にかけてしまう「ブレーキ」の存在です。

1. 「感情」というノイズこそが、最強のシグナルになる

timesには、論理的なことばかりでなく、「なんか嫌だ」「これ、めちゃくちゃいい!うらやましい!」といった感情的なノイズも書き込まれます。
通常、公的な日報ではこれらの感情は「不要な情報」として削ぎ落とされることが多いです。

しかし、AIとの壁打ちにおいては、この感情こそが重要なObserveのデータになります。
「なぜ、それをうらやましいと思ったのか?」
「その『嫌だ』という感情の裏にある、あなたが譲れない価値観は何か?」

感情というノイズをAIにぶつけることで、そこから自分の潜在的なニーズや改善のアクションがデコードされるような感覚です。作られた日記を見ながら「確かになぁ」と何度言ったことか...笑

2. 「他人の時間を奪う恐怖」からの解放

組織で働く以上、「他人の時間を奪うこと」への心理的ハードルはどうしても高くなります。いや、高くあるべきです。これ自体は大切だと心から思っています。

「こんな初歩的な壁打ちに、あの優秀な人のリソースを使っていいのか?」
「もっと成果を出せるはずの人の時間を、僕の生煮えの思考で奪うのは全体最適じゃないのでは?」

そんな「他者への配慮」がブレーキになって、Slackの入力欄で「書いては消し、書いては消し」を繰り返した経験、みなさんにもありませんか?
結果として、人間相手のアウトプットは、無意識のうちに「自己検閲」されているんだと思います。

でも、AI相手なら丸腰で素のままで挑める感覚があります。
「今さらなんだけど...」というド初歩の質問をしてもマサカリは飛んできませんし、深夜3時に情緒不安定なポエムを投げつけても、彼らは嫌な顔ひとつせず付き合ってくれます。間違って途中で送信してしまっても「途中でおくちゃってますな、ハハハ!」とだけ言ってくれる。

「あ、自分はこんなことも知らなかったのか」という発見を、誰かの時間を奪ってしまったという罪悪感を感じることなく、純粋な「知る喜び」として享受できる。
他者への配慮コストをゼロにして、純粋な学習欲だけに没頭できる環境。これこそが、AIエージェントを使う最大の心理的メリットかもしれません。

いや、もちろんチームのメンバーも付き合ってくれるんです。みんな優しい。だからこそ、時間を奪いたくない。より質の高いアイデアを持って相談にいきたいなと思っています。本当に周囲の方にはいつも感謝しています。

まとめ:「点」の振り返りを「線」の成長へ

こうして毎日ログを残し続けると、振り返りは「点」から「線」へと変化します。

「先週も似たようなことを気にしていましたね」
「最近、この分野への関心が特に高まっていますが、今の学習リソースは適切ですか?」

指摘されて初めて、「あ、自分は同じ思考のループにハマっていたんだ」と気づくことができます。一日の振り返りが積み重なって傾向分析になり、やがては自分自身の思考の癖を矯正する長期的な成長につながる。

心理学に「ジョハリの窓」というモデルがあります。人間には「自分では気づいていないが、他人からは見えている領域(盲点の窓)」が必ず存在します。
そこを照らしてくれるような、自分専用で、口うるさくて、無遠慮だけど、きっと成長に導いてくれるようなファシリテーター。

自分の思考を客観視し、バイアスを壊し続けるために、これからも仲良くしてもらおうと思います。
みなさんも振り返りパートナーを育ててみてはいかがでしょうか。

GENDA

Discussion