エムスリーテックブログ

エムスリー(m3)のエンジニア・開発メンバーによる技術ブログです

「先週何したっけ?」をゼロに:Obsidian + Claude Codeを業務アシスタントに

AI・機械学習チームの池嶋 (@mski_iksm)です。 このブログはAI・機械学習チームブログリレー 10日目の記事です。 前日は鴨田さんによる「BigQueryのCronJob向けQAテストを自動化した話」でした。

2025年6月現在、MarkdownエディタのObsidianが注目を集めています。 これはLLM(大規模言語モデル)の活用が普及し、ObsidianとAIを組み合わせることで、単なるメモツールを超えた「知的業務アシスタント」として機能するようになった点が要因の1つと言えるでしょう。 従来のメモツールが「記録」に留まっていたのに対し、AIとの連携により「記録→検索→分析→洞察」という一連のワークフローが自動化されるようになりました。

この記事では、ObsidianとClaude Codeを組み合わせることで、情報の蓄積と活用がいかに改善しているか、そしてどうそれを実践しているかを紹介します。

tl;dr

  • Obsidianで日々の出来事を記録すれば、後はClaude Codeがいい感じにまとめてくれる
  • コマンドラインから簡単にメモが残せるようにしたら、記録習慣が定着してきた

実現できるようになったこと

過去の情報をすぐに引き出せる

Obsidianに蓄積したメモをClaude Codeに読み込ませることで、過去の相談内容や議論を自然言語で質問できるようになりました。

これまでは、そもそも情報を記録していない、どこにあるかわからない、メモの在処がわかっても検索に使う適切なキーワードが思い出せない、といった問題で、過去の情報を活用することが困難なケースがありました。 「先週相談したのなんだっけ? 思い出せない...」「あのミーティングのメモどこに保存したっけ?」「確か似たようなエラーを以前みた気がするけど...」といった経験は、誰にでもあるのではないでしょうか。 特に複数のプロジェクトを並行して進めている場合、情報の管理は深刻な課題となります。

ノートをObsidianに記録し、それをClaudeで抽出することにより過去の議論を容易に検索できるようになりました。 例えば、「先週のXXさんとの1on1何話したっけ?」といった質問でも、Claudeが関連する過去のメモや議事録を特定し、要約して返してくれます。 プロジェクトを複数抱えている場合に、同僚から急に別プロジェクトの質問をされると、そのプロジェクトへのコンテキストスイッチが必要になります。 こうした場面でも、Claudeが過去の情報を即座に引き出してくれるため、スムーズに議論を進めることができました。

ふりかえりが簡単に

週次振り返りが格段に楽になったことも大きな変化の1つです。 従来は「先週何をやったっけ?」と記憶を辿りながらの作業でしたが、現在は先週1週間分のデイリーノートとミーティング記録を基に、Claudeを使って自動的に振り返りメモを生成しています。 具体的には、次のようなプロンプトをClaude Codeに与えると、分散していた情報から重要なポイントを抽出・整理してくれます。 これを毎週月曜朝に実施していることにより、「先週何してたんだっけ」という月曜ボケも軽減され、週の始まりから効率的にスタートできるようになりました。

先週月曜から現在までのメモから、下記のトピックをまとめてください。

### 自分の作業まとめ(日毎に)
### 良かった点
### 改善すべき点
### 改善すべき点に対しての具体的アクション

出力はMarkdown形式にしてください。
ファイルは、`ウィークリーノート/YYMMDD.md`に出力します。

ファイル末尾に参考にしたファイルのパスをwikiリンク形式で追加したいです。

また、エムスリーでは期末評価に360度評価として、同僚のよかった点や貢献を相互に評価する制度があります。 これまでは期末にそこまでの6ヶ月間を思い出しながら書く必要があり、どうしても期初に実施したことは記憶が曖昧になってしまうという課題がありました。 しかし、Obsidian+Claudeを活用することで、過去のメモや議事録から同僚の貢献を自動的に抽出することが可能になりそうです。 「XXXさんの貢献について過去6ヶ月のメモから抽出して」といった依頼で、具体的なエピソードと共に整理された文書が得られるため、より具体的で価値のある評価を提供できるようになると期待しています。

タスク管理もできる

タスク管理についても、Obsidianで一元管理しています。

日常業務では、ミーティングでの決定事項、Slackでの相談から生まれるタスク、あるいは作業中の突発的な思いつきなど、細かいタスクが様々な場面で発生します。 これらがそれぞれのミーティングメモや個別ツールに分散していると、残タスクとして何があるのかの把握が困難になり、タスクの抜け漏れや優先順位付けのミスが発生しやすくなります。

タスクに関しても、他のメモと同様にObsidianに書き連ねた上で、クエリ機能を使って全てのタスクを一箇所に集約しています。 ここで注目なのは、タスク発生時に「todoリスト」といった単一のリストを開いてそこに書き込むのではなく、Obsidian内のどのノートに書いても自動的に集約されるという点です。 ミーティングで発生したタスクは個別ミーティングメモに書いておけばよく、それを再度書き写すというった手間は不要になります。 それでも1箇所にタスクを集約できるので、「あのタスク、どこに書いたっけ?」という時間の無駄がなくなり、タスクの優先順位付けも効率的に行えるようになりました。

どう実現しているか?

デイリーノートの作成

情報管理の基盤となるのが、Obsidianのデイリーノートです。 これは1日に発生する全ての情報のハブとなるルートノートとして機能します。

Obsidianではノートを細かく分けることが推奨されており、1ミーティングや1作業ごとにノートを作成しています。 デイリーノートは、これらの個別ノートへのリンクを持っておくことで、その日何があったかを一目で把握する役割を果たします。 また、リンクをたどることで、内容の詳細を確認することも容易です。

毎日の作業開始時に、テンプレート機能を使って定型のフォーマットでデイリーノートを作成します。 Obsidianのコアプラグインであるデイリーノート機能を使用し、カレンダーボタンを押すだけで自動的に当日のノートが作成される仕組みです。

テンプレートの構成は次のようにしています:

[[タスクリスト]]
## MTG・相談

## 作業

## 明日やる

## thino

thinoを活用したこまめな記録

情報収集の要となるのが、thinoプラグインを活用したマイクロブログ的な記録システムです。 thinoは、Xのような短いつぶやきをObsidianのデイリーノートに記録するためのプラグインで、思考の断片を気軽に記録できる優れたツールです。

インストールするとObsidianにパレットが表示され、ここに投稿するとタイムスタンプ付きでデイリーノートに自動記録されます。 まさに10年前のTwitterのような感覚で、あったことや思ったことを気軽に記録できるのが特徴です。

このシステムの真価は、「記録に残しにくい情報」を捕捉できることにあります。 特に、良かったこと・学び・改善点といった主観的な感想は、どこのノートに書けばいいかも判断がつかないために正式なメモには残しにくく、結果として貴重な知見が失われがちです。 しかし、thinoを使うことで「今のミーティング、○○さんの提案が的確だった」「このライブラリ、思ったより使いやすい」といった散文的な感想も気軽に記録できるようになりました。

重要なのは、完璧な文章である必要がないということです。 思いついたことをそのまま書き留めておけば、後でClaudeが文脈を理解して整理してくれるため、記録時の心理的ハードルが大幅に下がります。

しかし、いくら簡単とはいえ、「Obsidianを開いてパレットを表示して、というのは続かないんだよなぁ。。。」というのが正直なところでした。 そこで、私はコマンドラインから簡単に呼び出せるようにしています。 非常に安易ですが、thという名前のfunctionを設定しています。 これにより、Obsidianを開かずともコマンドラインから直接メモを残せるようになりました。

# thinoコマンド
function th() {
    VAULT_NAME="Obsidian Vault"
    VAULT_PHYSICAL_PATH="${HOME}/Documents/${VAULT_NAME}"

    DAILY_NOTE_RELATIVE_PATH="デイリーノート/$(date +'%y%m%d').md"
    TEMPLATE_RELATIVE_PATH="テンプレ/dailyメモのテンプレ.md"

    DAILY_NOTE_FULL_PATH="${VAULT_PHYSICAL_PATH}/${DAILY_NOTE_RELATIVE_PATH}"
    TEMPLATE_FULL_PATH="${VAULT_PHYSICAL_PATH}/${TEMPLATE_RELATIVE_PATH}"

    if [ ! -f "$DAILY_NOTE_FULL_PATH" ]; then
        echo "デイリーノートが存在しないため、テンプレートから作成します..."
        cp "$TEMPLATE_FULL_PATH" "$DAILY_NOTE_FULL_PATH"
    fi

    CONTENT="$1"
    FORMATED_CONTENT=$'\n- '`date +'%H:%M'`' '"$CONTENT"
    echo -n $FORMATED_CONTENT >> "$DAILY_NOTE_FULL_PATH"
}

例えば、th コードレビューで指摘された点、確かにその通りだったと入力するだけで、タイムスタンプ付きでデイリーノートに追記されます。 コマンドラインはhotkeyで開くようにしているので、その後thと入力するだけでメモが残せるという非常に手軽な仕組みにできました。 この手軽さにより、継続的な記録習慣形成ができました。

全ミーティングのメモとgemini要約の保存

ミーティング情報の管理は、業務効率化において極めて重要な要素です。 私はほぼ全てのミーティングで原則としてメモを取るようにしています。 これは単なる記録ではなく、どんな議論がなされ、どのような決定事項があったかの一次情報源として機能するため、後の業務において極めて重要な役割を果たします。

共有のしやすさを重視し、メモはObsidianではなくGoogleドキュメントで取るようにしています。 これにより、ミーティング終了後にそのまま参加者に共有でき、情報の透明性と迅速な共有が実現できます。 また、リアルタイムでの共同編集も可能なため、複数人でのメモ取りにも対応できます。

...これを徹底できれば何の問題もないのですが、実際には議論が白熱しすぎてメモを取りそびれることも少なくありません。

この課題を解決するため、Google Meetの録画機能を積極的に活用し、Geminiで自動的に議事録を作成してもらっています。 誰がどのような内容を発言したかを話者別に整理し、さらに議論の要点や決定事項を構造化して記録してくれます。 この自動生成された議事録をミーティングメモに貼り付けることで、人手では捉えきれない詳細な情報も漏れなく保存できるようになりました。

完成したミーティングメモは、最終的にObsidianにコピーして保存します。 デイリーノートからリンクで新規のノートを作成し、そのノートにミーティングメモの内容をコピー&ペーストで貼り付けています。

当初は自動でGoogle DocsからObsidianに読み込む仕組みも検討しましたが、Google Docsの「マークダウンとしてコピー」機能を使うと、フォーマットを保持したまま簡単にObsidianにコピーできることが分かり、現在はこの手動プロセスで十分に効率的な運用ができています。 これで手間をかけずにミーティング情報の一元管理が実現できています。

ObsidianとClaudeをMCP連携し、コマンドエイリアスで高速呼び出し

ここまでの手法でメモが蓄積できていれば、次はClaude Codeを使って過去の情報を検索したり、振り返り資料を生成したりする段階です。 ObsidianとClaudeの連携には、MCP Tools for ObsidianというMCPサーバーを使用しています。 MCPを使うことで、Claude CodeはObsidianのノートから依頼内容にそった重要な内容の検索や分析を行えるようになります。

日常的な利便性を向上させるため、コマンドラインから簡単に呼び出せるようにobsという名前のfunctionを定義しています。 これも名前は非常に安易ですが、短くて覚えやすく、日常的に使う上では実用的です。

function obs() {
    claude -p "obsidianで次を調査:「$1」。タイトルだけでなく、本文も含めて探してください。なお、ファイル名にはYYMMDDの形式で日付が含まれています。"
}

ここでのポイントは、本文も含めて検索する旨を明記している点です。 これがないと、本文を調べずにタイトルだけで検索してしまうケースがあり、せっかく蓄積した情報を活用しきれないことがあります。 例えば、「先週のXXXXさんとの議論を振り返って」としても、タイトルに「XXXXさん」のキーワードが含まれていないため検索結果0となってしますケースがありました。 実際には先週の全ミーティングから「XXXXさん」が参加しているものを抽出してほしいので、タイトルだけでなく本文も含めて検索するようにしています。

todo listの集約

私はタスクリストもObsidianで一元管理しています。

まず、todoリスト専用のノートを作成し、全てのタスクがここに集まるようにクエリを設定します。 新規で「todoリスト」というノートを作成し、次のクエリをそのままMarkdownに記述します:

```query
task-todo:""
```

このシンプルなクエリにより、Obsidian内の全てのノートから未完了のタスク(- [ ]形式)を自動的に抽出し、一覧表示してくれます。 これにより、Slackでの相談から生まれた急なタスクをデイリーノートに書いても、ミーティングで決定したtodoをミーティングメモに書いても、全て自動的に集約されるため、タスクの見落としがなくなります。

さらに、Markdownのチェックボックスを拡張して複数のステータスを管理することも可能です。 標準では未着手[ ]と完了[x]の2種類ですが、私は次のような状態管理を行っています:

  • [ ] : 未着手
  • [/] : 進行中
  • [R] : レビュー中
  • [x] : 完了
  • [-] : 中止

この場合、未着手・進行中・レビュー中のタスクを一覧表示するためのクエリは次のようになります:

```query
task-todo:"" OR line:("- [R]") OR line:("- [/]")
```

こうすると全てのノートからタスクを次の図のように集めることができます。

この仕組みにより、タスクの進捗状況を細かく管理しながら、全体の状況を一目で把握できるようになりました。 特に、レビュー待ちのタスクや進行中のタスクを明確に区別できることで、次に取り組むべき作業の優先順位付けが格段に効率的になりました。

まとめ

ObsidianとClaudeを組み合わせることで、従来の「情報の散在」から「統合的な知識管理」への転換を実現しました。 そもそも情報を記録しないという課題も、コマンドラインから手軽にメモを残せる仕組みを導入することで解決しました。 何から記録するのが手軽かは、人によってまちまちかと思いますが、この記事を参考に皆さんも自分に合った方法を見つけていただければと思います。 情報管理に課題を感じているエンジニアの方々にとって、この記事が何らかの参考になれば幸いです。

We are hiring!

エムスリーでは、既存ツールをカスタマイズして自分専用の最適解を作り上げずにはいられない...そんなエンジニアを募集しています。 「標準機能で満足できない」「もっと効率化できるはず」「コマンド一発で済むようにしたい」そんな改善欲求が止まらない方、エムスリーでその情熱を医療プロダクトに注いでみませんか?

「ちょっと直したくなる癖」のある方、お待ちしています。

jobs.m3.com