Personal AI AgentのUIはチャットだけでよいのか

最近考えていること

前回のPersonal AI AgentのためのPersonal Context Hub実装では、ヘルスケア、位置、写真、家計、メモ、予定などを、Hermes Agentから横断参照できる基盤について書きました。

yutashx.hatenablog.com

その基盤が動き始めてから、Personal AI Agent の UI について考える時間が増えました。

この記事は、完成した設計論ではありません。最近考えていることを、一度まとめておくための記事です。

今気になっているのは、主に次の3つです。

  • チャットは強いが、すべての情報を受ける場所にすると重くなる
  • UIは、Agentから情報を受け取るだけでなく、自分の判断を返す場所でもある
  • 事実を見る場所と、Agentに意味づけしてもらう場所は分けたほうがよい

以下では、HermesをSlackで使っていて感じたこと、ChatGPT Pulseを見て面白いと思ったこと、自分が今考えているUIの分け方を順に書きます。

Slackだけだと重くなる

私はHermesとの主なやり取りにSlackを使っています。調査を頼む、相談する、ジョブの失敗通知を受け取る。このくらいの用途なら、Slackだけで十分です。

しかし、そこに記事の推薦、朝の天気や予定の確認、日次レポートまで流し始めると、すべてが同じ未読になります。今すぐ見るべき失敗通知と、興味があれば読めばよい記事が、UI上では同じ優先度で扱われます。生活の情報は、内容の正しさだけでなく、いつ届くかも大事です。

問題はHermesが知っている情報の量ではなく、性質の違う情報をすべてチャットで受け取ろうとしたことでした。

チャットは、目的がまだ曖昧なときに強い

チャットをやめたいわけではありません。むしろ、Personal AI Agentの入り口として、チャットは引き続き必要です。

「このメモから自分が考えていることを整理して」「来週の予定を見ながら、どこで作業時間を取るか相談したい」といった依頼は、最初から到達点が決まっていません。返答を見て追加で条件を出し、必要なら方向を変える。その往復の中で、自分の意図もはっきりしてきます。

ファイル編集や調査のように、Agentの実行結果を見ながら次を決める仕事もチャットに合います。一度の操作で意図を表すより、文章で細かく条件を渡せることのほうが大事だからです。

一方で、「この記事に興味があるか」のような問いに、毎回文章で返事をする必要はありません。問いが単純なら、チャットはむしろ重いUIになります。

ChatGPT Pulseを見て面白いと思ったこと

個人的に、ChatGPT Pulse は面白い取り組みだと思っていました。

従来のチャットでは、ユーザーが問いを投げ、AIが答えます。一方 Pulse では、過去のチャット、Memory、フィードバック、接続アプリの情報をもとに、翌朝に個人向けのトピックをカードとして提示していました。

うまく定着するかどうかとは別に、チャットで蓄積された文脈を、必ずしもチャットで返さなくてよいという発想が面白かった。すべてを「質問されたら答える」形に閉じ込めず、AIの側から静かに候補を置いておく。この方向は、Personal AI Agent のUIを考えるうえでも残しておきたい論点です。

Personal Context Hubがあっても、Agentには分からないことが残る

Personal Context Hubには、私の予定、行動、過去のメモなどが蓄積されています。それでも、Agentが現在の意図や好みまですべて分かるわけではありません。

例えば、私がある記事を長く開いていたとしても、興味があったのか、内容を確かめていただけなのかは分かりません。行動履歴から推定できることには限界があります。

そこで必要になるのが、私からAgentへ判断を返す経路です。推薦記事なら、like / skip / saveのいずれかを返せば十分です。Agentがすでに知っている文脈は再入力せず、分からない差分だけを小さな操作で返します。

この見方に立つと、UIはAgentから情報を受け取る場所だけではありません。自分の判断をAgentへ返し、次の提案を変えるための接点でもあります。

ただし、skipした提案や、開かなかった提案は、未実行のタスクではありません。Personal AI Agentの提案は命令やTODOではなく、選ばないことも含めて判断材料です。未実行を失敗扱いしないことも、生活の中で使い続けるには大事だと思っています。

「いつ見るか」と「何を返すか」で置き場所を決める

今の私は、情報の置き場所を決めるとき、二つのことを考えています。

一つは、いつ見る必要があるか。もう一つは、見た後に私から何を返す必要があるかです。

  • ジョブの失敗や承認が必要な操作は、すぐに気づき、その場で返答する必要があるのでSlackに流す
  • 調査、相談、ファイル編集は、往復しながら目的を詰めるのでSlackで対話する
  • 推薦された記事や軽い判断を求める内容が入るinboxは開いたときにまとめて見て、like / skip / save / snoozeのような少数の操作だけを返す
  • 今日の予定や軽い状態表示は、返事を求めず、必要なときに見える場所に置く
  • 日報や調査ログは、後から検索できればよいのでObsidianに残す
  • ジョブの状態やメトリクスは、ダッシュボードから直接見る

この分け方なら、Slackを「対話と緊急」の場所に戻せます。開いたときに確認すればよい情報のために、作業を中断されることもありません。

Agentが出せる情報を増やすより、邪魔をしないことのほうが難しいと感じています。

Agentを通さないほうがよい情報もある

チャット以外のUIを考えると、すべてをAgentに語らせたくなります。しかし、ジョブが動いているか、今日の歩数がいくつかといった事実は、必ずしもAgentを通す必要がありません。

そこはデータ基盤に直結したダッシュボードで見るほうが、何が起きているかを確かめやすいです。必要になったら、その数値の理由や過去との違いをHermesに尋ねればよい。事実を見る層と、その意味を考える層は分けておきたいと考えています。

専用UIの側に別の人格や判断を持たせないことも同じ理由です。提案を作るのはHermes、UIはそれを表示して私の反応を返す。ここを混ぜると、どの判断を信頼し、問題があったときにどこを直すのかが分からなくなります。

今考えているもの

今の運用では、Slackに流すものを失敗、承認、相談、明示的な実行結果に絞ろうとしています。 その一方で、推薦された記事やinboxをまとめて見て、少ない操作で反応を返せるモバイルアプリを作った方がよいのではないかと考えています。また誰にも邪魔されずただ思考を吐き出したいときはObsidianに残す。こうした分け方を考えています。

ここで関心があるのは、UIをたくさん作ることではありません。情報の性質と、その後に必要な判断に合わせて、最小限の窓口を持つことです。

まとめ

Personal Context Hubがあると、Agentは私の文脈を多く参照できるようになります。ただ、文脈が増えたからといって、UIの問題が消えるわけではありません。

最近考えているのは、チャットをなくすことではなく、チャットに集めすぎないことです。目的が曖昧なら、チャットで対話する。単純な好みなら、likeやskipで返す。返答が要らないものは、必要なときに見える場所に置く。後から探すものは、チャットのログに埋めずに残しておく。

ChatGPT Pulseを見て面白いと思ったのも、チャットで蓄積された文脈を、チャット以外の形で置いておく発想でした。自分のPersonal AI Agentでも、同じように「対話する場所」と「静かに置いておく場所」を分けたいと考えています。

机の片隅の電子ペーパーや、必要なときだけ開く画面のように、通知で呼びつけないが、見ようと思えばすぐ見られる場所のほうが生活には馴染みます。

関連記事

Personal AI AgentのためのPersonal Context Hub実装

背景

前回のPersonal AI Agentのためのデータ基盤設計思想の記事では、AI Agentが個人データを横断参照できる中心を手元に持つという考え方を整理し、その中心を Personal Context Hub と名づけました。

yutashx.hatenablog.com

本記事はその続きで、Personal Context Hub を実際にどう実装しているかと、Hermes Agentからどう使っているかを書きます。

なお私が現在 Personal AI Agent として使っているのは Hermes Agent です。以前 OpenClaw も試しましたが、当時の自分の用途では tool use 周りの安定性や設定の見通しに課題を感じ、Hermes に移りました。ただ、本記事の主題は Hermes そのものではありません。前回の記事で書いたとおり、Personal Context Hub の目的は、特定の Agent にデータ資産を縛らないことにあります。本記事で「Hermes」と書く箇所は、現時点での接続先の一例として読んでもらえればと思います。

この記事で説明するもの

ここで紹介するのは、個人データをすべて1つのDBに押し込む巨大なDWHではありません。目指しているのは、Personal AI Agentが生活データへ迷わず到達できる最小限の基盤です。

具体的に扱うのは次の点です。

  • ヘルスケア・位置・写真・家計・メモ・予定などを、どこに置いているか
  • push / batch / on-demand をどう使い分けて集めているか
  • Hermes Agent から REST API・Postgres直読み・一次ソースをどう読み分けているか
  • raw データと解釈済みデータをどう分離しているか
  • 監視・バックアップ・secrets・外部アクセスを個人運用でどう回しているか

全体構成

現在の構成は、単一ホストを中心に、AI Agentが個人データへ少ない経路で到達できるようにする方針です。

すべてを1つに物理統合しているわけではありません。写真はImmich、メモはObsidian Vault、予定や音楽は外部APIのオンデマンド取得です。そのうえで、横断分析に使う主要データはできるだけ手元のPostgresに寄せています。

全体構成図:外部サービス層・DB ストレージ層・エージェント層の 3 層と、蓄積・参照・オンデマンド取得の経路

主要コンポーネントは次の4つです。

  • postgres-shared: ヘルスケア、位置、家計、環境など、横断分析に使う主要データ
  • postgres-immich: 写真ライブラリ専用
  • Obsidian Vault: メモの一次ソース
  • Hermes Agent: これらを読み分けて、提案や要約を返す層

写真だけpostgres-immichとして別インスタンスに分けているのには理由があります。Immichは類似画像検索のために専用のベクトル拡張(vectorchord。Postgres上でベクトル検索を行う拡張)を必要とし、スキーマやマイグレーションもImmich本体が管理します。これを共用Postgresに同居させると、Immichのバージョン更新やスキーマ変更が、ヘルスケアや家計といった他データの可用性に波及してしまいます。だから写真基盤だけは共用Postgresから切り離しています。

この分け方にしているのは、全部を1つに押し込むためではなく、役割ごとに自然な保存先を保ちながら、Hermesからは一貫して参照できるようにするためです。

集めているデータ

私が現状集めているデータは次の通りです。

カテゴリ データ内容 収集経路 頻度 ストレージ
ヘルスケア 睡眠 / 心拍 / 歩数 / 体重 / 運動 Health Auto Export iOS app → データ収集API push postgres-shared (hae)
位置 滞在地 / 移動 / 高度 Dawarich iOS app → dawarich-server リアルタイム postgres-shared (dawarich)
写真 撮影位置 / ランドマーク / 人物 Immich iOS app → immich-server アップロード時 postgres-immich
家計 取引 / 残高 / 資産 MoneyForward から自前スクリプトで取り込み 1日1回 postgres-shared (agent_lake)
音楽 再生履歴 Spotify API オンデマンド 永続化せず
メモ Obsidianのノート Obsidian Sync ↔ vault直参照 リアルタイム Obsidian Vault
環境 室温 / 湿度 (SwitchBot Hub 2) SwitchBot API から取得する自前スクリプト 数分間隔 postgres-shared (agent_lake)
予定 Google Calendar gog コマンドを使って連携 オンデマンド 永続化せず

保存先がデータごとに違うのと同じく、集め方もソースによってまちまちです。

どう集めているか — push・batch・on-demand

データの集め方は、ソースの性質に合わせて大きく3通りに分けています。

push(iOSアプリから送られてくる)。スマートフォンは、生活に最も密着した個人センサーハブです。位置・ヘルスケア・歩数・睡眠・心拍・写真・カレンダー……生活文脈の宝庫が、常に持ち歩くこの一台に集まっています。ただ、セルフホストのAI Agentからは、HealthKitや写真・位置情報に直接は手が届きません。そこを橋渡しするのが、目的別のiOSアプリです。ヘルスケアはHealth Auto Exportが自前APIの取り込みエンドポイントへ、位置はDawarichアプリが位置情報サーバーへ、写真はImmichアプリがアップロードします。いずれも端末側の変化を起点に送られてくるので、こちらから取りに行かなくても入ってくるのが特徴です。

batch(こちらから定期的に取りに行く)。pushされてこないものは、自前のスクリプトを定期実行して取りに行きます。室温・湿度はSwitchBotのAPIから数分間隔で取得し、家計はMoneyForwardから自前のスクリプトで1日1回取り込んでいます。どちらもsystemd --userのタイマーで起動し、定期ジョブとして基盤側に常駐させています。ただし家計の取り込みは壊れやすく、あくまで個人用途の暫定的な仕組みなので、そのまま再現することは勧めません。

on-demand(Agentが問い合わせ時に取りに行く)。予定や音楽のように、その都度の最新が欲しく永続化の必要が薄いものは、Hermesが問い合わせを受けたときに直接取得します。Google Calendarはgogコマンド経由、SpotifyはAPIをクエリ時に叩きます。手元のDBには残しません。

実装で効いているのは、前回の記事で書いた「まず入れる、整理は後」という方針です。取り込み側ではスキーマを作り込まず、ソースが返す形にできるだけ近いrawを入れて、整える作業は後からSQLで書きます。集めるところに摩擦があると更新がすぐ止まるので、入口はとにかく軽くしています。

取り込みと配信を兼ねる薄いAPI — datalake-api

ヘルスケア・家計・環境のように取得パターンが安定したドメインには、datalake-apiという自前の薄いRESTレイヤを1枚かませています(TypeScript / Honoで書いています)。このAPIは2つの役割を兼ねています。

1つは取り込み口です。Health Auto Export互換の取り込みエンドポイントを持っていて、iOSアプリから来るヘルスケアデータをそのまま受けてPostgresに流します。MoneyForwardを取りに行く収集処理も同じコードベースに同梱し、CLIとして1日1回動かしています。収集と配信を別リポジトリに散らさず、ドメインごとに1か所へまとめています。

もう1つは配信口です。hae(ヘルスケア)・moneyforward(家計)・switchbot(環境)のようにドメインごとにルートを分けてあり、Hermesはそのエンドポイントを叩くだけで必要なデータを読めます。認証はミドルウェアで一括して受けています。

この層を挟む狙いは、前回の記事で書いた「データ資産とAgent実装の結合を弱める」ことの実装版です。Agent側はSQLのスキーマやDBの認証情報を毎回知らなくてよく、安定したエンドポイントだけを見ればよくなります。

これはAgentの挙動とコストにも効きます。取得の仕方が毎回決まっていないと、Agentは「どのテーブルをどう叩くか」をその都度考え込み、余計な探索や試行錯誤に思考トークンを使ってしまいます。定型の取得を決まったエンドポイントに固定しておけば、Agentは迷わず必要なデータに届き、思考トークンは本当に判断が要る部分に回せます。安定したインターフェースを1枚かませることは、結合を弱めるだけでなく、Agentを迷わせない・余計なトークンを使わせないための設計でもあります。

Agentを乗り換えても、作り直すのはこのAPIを呼ぶ薄い部分だけで済みます。

Hermes Agentからどう使うか

この基盤は、データを貯めるだけでなく、Hermes Agentが個人データを横断参照するための土台として使っています。

Hermesからのアクセス経路は大きく3つです。

  • 定型のドメインデータは自前REST API経由で取得する
  • 横断分析が必要なときはPostgresを直接読む
  • メモや写真のように一次ソースを保った方が自然なものは、Vaultや各サービスAPIをそのまま読む

Hermes からの 3 つのアクセス経路:定型は REST API、横断は Postgres 直読み、メモや写真は一次ソースを直読み

ヘルスケアや家計のように取得パターンが安定しているものは、自前REST API経由でHermesから取得しています。 AgentはSQLや認証の詳細を毎回知らなくてよく、必要なドメインデータだけを読めます。

複数ドメインをまたぐ問いは、HermesがPostgresを直接読みます。 たとえば「旅行中、どの日に移動が多く、どの日に支出が多かったかを見たい」のような問いでは、位置、支出、写真、日付を横断して取得します。

こうした日次の横断をやりやすくするため、その日のヘルスケア・移動・支出・写真・室温・天気を1日1行にまとめた集計テーブルも基盤側に持っています。生データはドメインごとに分かれていますが、日次の粒度ではそこを1枚に束ねておく、という二段構えです。

公開している参照実装には、この日次集計テーブルのschemaを含めています。ただし、各データソースからそのテーブルを埋めるbackfill / sync jobは、実運用側の都合が強く出るためデモリポジトリには含めていません。ここでは「横断しやすい粒度を基盤側に1枚作る」という考え方を示す位置づけです。

Postgres直読みといっても、Hermesに管理者権限を渡しているわけではありません。横断分析用にread-onlyのユーザーを分け、参照できるschemaやviewを絞っています。rawテーブルへの書き込みはAgentからは行わせず、解釈や提案は別レイヤに保存する方針です。

メモはObsidian Vault、写真の類似検索はImmichのAPIのように、一次ソースをそのまま読んだ方が自然なものもあります。 全部をDB経由に揃えるのではなく、Hermesから見て扱いやすい経路を残しています。

rawは「真実」ではなく「証拠」として扱う

横断して使おうとすると、すぐに気づくことがあります。手元に集めたrawデータは、そのままでは「真実」ではない、ということです。

たとえば位置データは、滞在地の判定が途中から止まっていたり、移動速度が物理的にありえない値になっていたり、訪問地点が場所に紐づかないまま残っていたりします。センサーや外部サービスから入ってくるデータは、欠測・重複・明らかな異常値を含むのが前提です。これを「正しい記録」として読むと、横断した瞬間に破綻します。

なのでrawは、確定した事実ではなく「こういう観測があった」という証拠として持つようにしています。そして、rawデータと、それを解釈・加工したデータは、完全に別のレイヤとして分けることをポリシーにしています。rawは追記するだけで、上書きも削除もしません。睡眠・運動・滞在・移動のように出来事の単位へ正規化したり、日次に集計したりした「解釈済み」のデータは、rawとは別のテーブルに持ち、横断分析ではそちらを参照します。Agentが束ねた仮説や意味づけも同じで、rawに書き戻すことはありません。

この分離には実利があります。解釈のルールを変えても、別のAgentに乗り換えても、証拠であるrawさえ残っていれば、解釈レイヤはいつでも作り直せます。逆にrawを解釈で上書きしてしまうと、解釈を間違えたときに後戻りできません。Personal Context Hub も、生データの保全と、その上の派生・集計レイヤを分けた構造で作っていて、rawはそのまま残しつつ、日次の集計はそれとは別のテーブルに組み立てています。

レイヤとして整理すると、こうなります。

データの4レイヤ:raw(append-only の証拠)→ event(出来事単位)→ aggregate(集計)→ interpretation(Agent の解釈)。下ほど証拠で不変、上ほど解釈で作り直せる

大まかには、rawをappend-onlyの証拠として残し、そこからevent・aggregate・interpretationの順に、再生成できる解釈レイヤを重ねています。

これは前回の記事で書いた「集めること自体ではなく、Agentに渡せるコンテキストを準備することが目的」の、いちばん地味で泥臭い部分です。横断の価値は、きれいに揃ったデータからではなく、揃っていないデータをどう束ね直すかから出てくる、というのが今のところの実感です。

どこまでを基盤に置き、どこからをAgentに置くか

この構成では、データ取り込み、定期実行、監視、バックアップのような処理は基盤側に置いています。 一方で、文脈の解釈、複数データの意味づけ、提案文の生成、対話はHermes Agent側の役割です。

ルールは単純で、LLMの判断が不要なものは基盤側へ、文脈理解が価値の中心になるものはAgent側へ寄せています。

基盤側と Hermes Agent 側の責務分担:取り込み・定期実行・監視・バックアップは基盤、文脈の解釈・意味づけ・提案・対話は Agent

ただ、この境界の設計は実際にはかなり難しいです。「文脈の解釈」「複数データの意味づけ」といっても、その中には決まりきった部分とそうでない部分が混ざっています。睡眠ログから就寝・起床を切り出す、滞在地から移動と滞在を判定する、といった意味づけはルールが決まっていてLLMの判断を要しません。こうした決まりきった意味づけは基盤側に下ろし、前述のevent単位のログとして持たせています。Agent側に残すのは、その上での開かれた解釈——複数ドメインを跨いで仮説を立てたり、その日の状況に合わせて提案を組み立てたり——の部分です。

線引きの基準は「LLMの判断が要るか」ですが、何が"決まりきっている"かは運用しながら動きます。実際によくやるのは、新しいデータソースや使い方を、まずAgent側に繋いで試すことです。そして、どんなユースケースで使うか・どんなデータ型が要るかが見えてきたら、その部分を基盤側に下ろします。最初はAgentにアドホックに取得・解釈させ、形が固まったら、収集とテーブル、必要ならAPIとして基盤に固定する。立ち上げは軽く、固まったものは安定して回せる、という進め方です。図ではきれいに左右へ分けていますが、現実にはこの境界を行き来させながら引いている、というのが正直なところです。

この構成で生まれる体験

この基盤があることで、Hermesは単なるチャット相手ではなく、個人データを踏まえた伴走者として振る舞えるようになります。ただし、現時点でこの構成から実際に生まれている体験として紹介したいのは、まず旅行の振り返りです。前回の記事で思想として書いた「旅行記」に、この実装でどこまで近づいたか、という話でもあります。

旅行の振り返り

旅行後は、Dawarichの位置情報、Immichの写真、Obsidianに残したメモを横断して、日ごとの行動ログを組み立てます。どの日にどこへ行き、どの写真がその場面に対応するかを、あとから復元しやすくなります。MoneyForwardの支出も合わせれば、移動・写真・支出を同じ旅行の流れとして見直せます。

下の画像は、実際にHermesに「3月のタイ旅行の旅程とその時の写真をURL付きで教えて」と依頼したときの出力例です。Hermesはまず、対象の旅行を2026/3/18〜3/22のタイ旅行として特定し、Immichから該当期間の写真を日別に抽出しています。出力では、合計451件の写真が、3/18は27件、3/19は170件、3/20は112件、3/21は138件、3/22は4件という粒度で整理されています。

そのうえで、Dawarichの位置情報、GPS付き写真、メモに残した手がかりを突き合わせ、日ごとの旅程として文章化しています。たとえば、3/18はドンムアン到着からバンコク市内への移動、3/19は王宮・Wat Pho・Wat Arun周辺からICONSIAM方面への移動、というように、その日の流れがまとまります。さらに各日には代表写真のImmich URLが付くので、文章で旅程を読み返しながら、対応する写真へすぐ戻れます。

ここでやりたいのは、AIに旅行記を創作させることではありません。位置情報、写真、メモという別々の一次ソースを同じ時間軸に寄せ、「その日はどういう日だったか」を復元しやすい形に並べ直すことです。単に写真を時系列に並べるだけではなく、移動・滞在・代表写真を合わせて、あとから読める旅行のまとまりにすることを狙っています。

Personal Context Hubから情報を引き出した3月のタイ旅行のまとめ

運用と再現性

基盤とHermes Agentは、自宅のLinuxマシン1台の上で動かしています。Postgres・Redis・各収集アプリ・バッチジョブ・監視を同居させ、異常時はSlackに通知する構成です。個人用途としては大きめですが、クラウドで分散運用するより管理対象を減らしやすいと感じています。

secrets。APIキーや認証情報はSOPS + ageで暗号化してリポジトリに置き、起動時にsops exec-envで環境変数として注入します。少なくとも、起動に必要なenv secretは平文でリポジトリに置きません。一方で、ブラウザログインのstorage stateやCLIの認証キャッシュのように、実行時にローカルへ残るものはあります。そうしたsession/cache類はgitignoreし、権限を絞ったローカルファイルとして扱う方針です。

監視。コンテナの死活はsystemdタイマーで定期チェックし、状態が変わったときだけSlackに通知します。データの欠測や遅延はGrafanaのアラートで拾い、各コンテナのログはLokiに集約しています。欠測検知のような定型の見張りにLLMは使いません。

監視・通知の流れ:postgres-shared と Loki を Grafana が読み、ダッシュボードでの可視化と欠測・遅延アラートの Slack 通知、コンテナ死活は check-containers が状態変化時のみ Slack 通知

バックアップ。resticでPostgresのダンプとデータディレクトリを別ホストへ自動退避しています。ただバックアップは取るだけでは意味がないので、定期的に別ディレクトリへrestoreしてdumpが読めることを確認したいのですが、そこはまだ運用に乗せきれていません。現時点で最大の課題はオフサイトバックアップで、災害や物理故障まで考えるとまだ改善の余地があります。

ネットワークとアクセス。LAN内のサービスは*.home.arpaの内部ドメインを引き、nginxのリバースプロキシがHostヘッダを見て後段に振り分けます。外部にポートは開けません。家の外から使うときは、ホストもiPhone・Macも同じTailscaleのtailnetに参加させ、tailnet内からのみ到達できるようにしています。位置記録のDawarichのように、iOSアプリがHTTPS(ATS)を要求するサービスは、Tailscale Serveで証明書付きのHTTPSとして終端し、tailnet内のFQDNで配信します。グローバルな口は開けず、必要な端末だけがtailnet越しに届く——データを手元に置いたまま外からも使うための線引きです。

ネットワークとアクセス:インターネットにポートは開けず、外部からは Tailscale の tailnet 経由のみ。LAN 内は AdGuard と nginx で *.home.arpa を名前ベースに引き、Dawarich は iOS の ATS 対応で Tailscale Serve の HTTPS で配信

再現性。上流のOSS(Dawarich・Immichなど)は、自前のcomposeで設定・ポート・環境変数を明示し、公式imageやDockerfileのbase imageを固定して運用しています。公開用の参照実装では、upstream repositoryをgit submoduleとして取り込むのではなく、composeから利用するimage tagやbuild時のbase imageを指定する形にしています。ここで効いているのが、upstreamの中身には手を入れない、という方針です。設定変更はすべて自分のcompose側で行い、必要な拡張は自前のDockerfileや周辺スクリプトに閉じます。こうすると公式パッケージの恩恵を受けながら、upstreamの更新に追従するコスト(フォークの保守やマージ衝突)を最小に抑えられます。イメージタグは固定し、latestは使いません。構成をコードとして固定しておくと、Agentを乗り換えても、壊れて作り直すときも、同じ状態を再現しやすくなります。

参照実装

ここで書いた構成は、参照実装としてGitHubで公開しています(yutashx/personal-context-hub-concept)。IP・ホスト名・秘密情報はplaceholderに置き換えた、そのままでは起動しないデモ用リポジトリです。起動手順の完成品というより、構成・命名・責務分担・compose配線・運用上の判断を読むためのsnapshotとして切り出しています。本記事で触れたdatalake-apiや各stackの構成は、このrepoで具体的に追えます。

実際に手元で動かしているものは、ここで公開しているデモより少し先を行っています。実運用専用のbackup script、cron / systemd timer、外部サービスのsession/cache、一部のbackfill jobは含めていません。構成の考え方が伝わる範囲を切り出して置いています。

今後の展望

今後は、この基盤の上で旅行の振り返り以外の体験も育てていきたいと考えています。たとえば「今日どう動くべき?」と聞くと、当日の予定・前夜の睡眠・最近のメモ・室温などを合わせて、その日の前提を短く返す朝のブリーフがあります。睡眠が短く午前に会議が集中している日は、「午前は判断の重い作業を避け、午後の外出前に軽いタスクを寄せる」といった提案ができるはずです。

また、睡眠・移動・室温・支出・メモが同じ時間軸で並ぶと、「出社が続く週は睡眠が短い」「室温が高い日は集中が落ちやすい」といった生活パターンの仮説も立てやすくなります。大事なのは、AIに結論を丸投げすることではなく、自分では見落としがちなパターンを候補として出してもらうことです。ここは前回の記事で書いた「人間が主役、AIは提案者」とも重なります。

まとめ

Personal Context Hub の実装で目指しているのは、すべてを1つに押し込むことではなく、Hermes Agentが個人データへ少ない経路で到達できるようにすることです。

そのために、横断分析に使う主要データはPostgresに寄せ、写真やメモのように一次ソースを保った方が自然なものは別経路のまま扱っています。 そして、取り込みや監視のような定型処理は基盤側に、解釈や提案はAgent側に分けています。

この基盤の上でまず形になっているのは、旅行の振り返りです。朝のブリーフや生活パターンの検出のような提案系の体験は、今後もう少し育ててから改めて紹介できればと思います。ただ、その上で動くAgentがいまHermesであること自体は、本質ではありません。基盤さえ手元にあれば、Agentは時代に合わせて選び直せる——それがPersonal Context Hubを手元に持つ一番の狙いです。

関連記事

Personal AI AgentのためのPersonal Context Hubという考え方

背景

前回の記事「業務でCoding Agentを触る日々から考えた、Personal AI Agentの輪郭」の最後に、Personal AI Agentを動かすには個人のデータ基盤が必要だと書きました。 本記事はその続きで、データ基盤の中身について書きます。

yutashx.hatenablog.com

本記事で言うPersonal AI Agentは、自宅サーバー上で個人専用に動かすAI Agent (Hermes、OpenClawなど) のことです。

私が考える基盤の核心は、AI Agentが主要な個人データを横断的に参照できる中心を、自分の側に持つことです。本記事では、個人の文脈(Context)をAIに渡すためのこの中心(Hub)を「Personal Context Hub」と呼び、一つの考え方として提案します。 何を、どこに、なぜ集めるのか。 本記事ではその設計思想を整理します。

個人の生活データを一つの Personal Context Hub に寄せる構成図

ここで言う「集める」は、すべてのデータを1つのDBに押し込むことではありません。 AIが横断参照したい主要データを手元に寄せ、必要に応じて外部APIや別の一次ソースも併用する、という意味です。 言い換えると、Personal Context Hub とは個人データを一箇所にコピーする場所ではなく、AI Agentが「どこを見ればよいか」を迷わず辿れる起点のことです。

なぜデータを集めるのか

AI Agentの品質はコンテキストで決まる

LLMやAI Agentを運用していて感じるのは、出力の品質はコンテキストの質と量で決まるということです。 ChatGPTに「今日のスケジュールを最適化して」と聞いても、私の予定や疲労度を知らないので一般論しか返ってきません。

AI Agentの能力を上げる方法は、おおむね次の3つに分かれると考えています。

  • 賢いLLMを使う
  • 良いプロンプトを書く
  • AIに渡せるコンテキストを増やす

前者2つはモデルが新しくなるたびに頭打ちが見え始めていて、現状で残された伸びしろの大部分はコンテキスト側にあると感じています。 Personal Context Hub を自分の側に持つことが、その前提になります。

渡せるコンテキストの量で出力の品質が変わることを示す対比図

既製のクラウドAIでは足りない

「ChatGPT Projectsや各種クラウドAIのコネクタに全部寄せればいいのではないか」という疑問もあると思います。 用途を絞ればChatGPT Projectsは十分機能すると私自身も感じています。 ただ生活密着のAI Agentとして動かそうとすると、決定的に欠ける要素が2つありました。

1つ目は、位置情報や写真ライブラリに該当するコネクタが存在しないことです。 2026年5月時点で、Google PhotosやGoogle Maps Timeline相当のデータをAIに継続的に渡せるサービスは私の知る限りありません。 DawarichImmichのようなセルフホスト製品を立てて、そのDBにAIが直接アクセスする構成しか選択肢がないと考えています。

2つ目は、AIが能動的に動けないことです。 ChatGPT Projectsはチャット起動時に明示的にコンテキストを渡す前提です。 私が欲しいのは「ユーザーが問いかける」より前に「AI側が文脈を踏まえて適切なタイミングで動く」形なので、ライブで書き込まれているデータソースが必要になります。

データが手元の構造化DBに揃っていれば、「先月の出張期間中、睡眠時間と支出と移動距離を重ねたチャートを出して」と頼めばAIがその場で組み立ててくれます。 少なくとも現時点の一般的なクラウドAIコネクタだけでは、この自由度と継続性は出しにくいと感じています。

なぜ今、個人で持てるのか

個人スケールでこの基盤が成立する条件が、ここ数年で揃ってきたと感じています。

1つは、LLMが自然言語で意味を繋いでくれるようになり、集めたデータの使い道がSQLや集計クエリを越えて広がったことです。 「先月のこの週に何をしていたか」のような問いに、自然言語のまま答えが返るようになり、集めること自体ではなくAI Agentに渡せるコンテキストを準備することが目的に変わりました。

もう1つは、CodexやClaude CodeのようなCoding Agentに、インフラ構築自体を任せられるようになったことです。 「壊れたから直して」「新しいデータソースを追加して」と頼めるので、設計思想を書くのは私で、実装を回すのはAIという役割分担が成立しました。 今回の基盤が運用に乗ったのは、この役割分担が成立したからです。

横断したからこそ見えるもの

主要データが手元の基盤から横断参照できると、個別のサービスでは届かない種類の出力が組めるようになります。

たとえば「旅行記を自動で組む」というのは、位置情報、写真、家計簿を横断して初めて成立します。「2026-03-13〜03-18 タイ(バンコク・チェンマイ)、移動約180km、写真420枚、支出¥138,000」のような出力を私は目指しています。さらにそこから、訪問地点・写真・支出・移動経路をつなげて、「どの日にどこへ行き、何にお金を使い、どの写真がその場面に対応するか」を半自動で並べられる状態を狙っていて、今はその土台を仕込んでいる段階です。

「自分の状態のパターン把握」も同じ方向の話です。位置情報・気分のメモ・室温・心拍といったデータが横断して手元に揃い、年単位で積み重なっていけば、「この時期は気分が落ちやすい」といったパターンに気づける可能性があります。確実にできるという話ではなく、単一のサービスでは見えないものが、横断することで見えるようになり得る、という程度に考えています。同じデータが各サービスに散らばっていると、そうしたパターンは見えないままです。

横断データに期待しているのはこの部分です。データを集める動機は、「ダッシュボードを眺めるため」ではなく、「個別のサービスでは見えないものを、AI Agentが横断して拾える状態にしておくため」です。

設計原則

データ基盤の技術判断の前に、もう少し上位の原則をいくつか決めています。

人間が主役、AIは提案者

AI Agentに意味づけや判断を完全に委ねないようにしています。 AIは観測データを横断的に拾い、そこから浮かんだ仮説や視点の提案までを担います。 最終的な解釈、判断、行動は私がする、という線引きです。

「AIに任せたほうが楽じゃないか」という誘惑に抗うための原則でもあります。 任せすぎると、自分の判断軸が痩せていく感覚があります。 AIが提案を増やしてくる時代の人間の役割は、選択する側にシフトしていくと考えていて、「我選択する故に我あり」とでも言うべき構図になっていきそうだと思っています。

データは自分のもの

データの保管場所、フォーマット、アクセス権、削除の判断は、自分の手の届く範囲に置く方針です。

Apple Healthのデータを長年蓄積してきましたが、iCloud以外で参照する方法は限定的です。 Google Maps Timelineは2024年12月にウェブ版が廃止され、データの保管場所がクラウドから端末ローカルに移されました。

特定のサービスの仕様変更で、過去の自分の記録が見えなくなる経験は何度かしてきました。 だから自前のDBにrawデータを置いて、外部のエクスポート仕様にも依存しない構成にしています。

どう集めるか

設計判断のレベルで重要だと考えている3点を書きます。

1つ目は、まずは入れる、整理は後にすることです。 過去にスキーマを正規化してから入れる設計を試して挫折した経験があり、集めるところに摩擦があるとすぐに更新が止まると感じています。 今はrawデータを入れて、横断分析はSQLで書く運用にしています。

2つ目は、主要データを、できるだけ少数の Personal Context Hub に寄せることです。 永続化して横断分析したいデータは、できるだけ同じ基盤から辿れるようにしています。 個人スケールのデータ量では、サービスを越えるETLや分析エンジンを増やすより、AI Agentが少ない経路で参照できる構造のほうが運用コストが低いと感じています。

3つ目は、データ資産とAI Agent実装の結合を弱めることです。 言い換えると、Agent側を入れ替えても、データ側を作り直さなくて済むようにしておく、ということです。 スキーマ、rawデータ、主要な取得経路が残っていれば、Agent実装を入れ替えても作り直す対象をアクセス層に限定できます。 AI業界の進化速度を考えると、特定のAgentフレームワークにデータ基盤を密結合させるのは避けたいと考えています。

リスクと所有のコスト

自前で持つことには、構造的なメリットとリスクがあります。

メリット リスク
rawデータが外部サービスに蓄積されない DB漏洩時のインパクトが極めて大きい (主要データが手元に集まる)
何をいつ送るかを自分でコントロールできる バックアップの責任が自分にある
自分の判断でデータを削除・暗号化できる 物理的な盗難・故障
監査ログを自分で見れる 運用をやめたら全部失われる

DB漏洩が現状最大の懸念です。 運用者と利用者が同一人物というパターンにおいては、データ基盤はLAN内のみに開放、外部からはTailscale経由でのみアクセス、secretsはSOPS + ageで暗号化、DBはresticで別ホストに自動バックアップ、という構成が現状のベストだと考えています。 さらに堅牢にするならオフサイト退避を足す手もありますが、そこは任意です。運用面の具体は次回の実装編で扱います。

データ基盤を守る境界図(LAN内のみ・Tailscale経由・SOPS+age・restic)

まとめ

本記事で書いた設計思想は、上位の原則とデータ層の判断の2層に分かれます。

上位の原則として、

  • 人間が主役、AIは提案者。意味づけと判断は私の側に置く
  • データは自分のもの。保管・フォーマット・アクセス権を手の届く範囲に置く

データ層の判断として、

  • 集めること自体ではなく、AI Agentに渡せるコンテキストを準備することが目的
  • 主要データを少数の Personal Context Hub に寄せ、AI Agentが少ない経路で横断参照できるようにする
  • データ資産とAI Agent実装の結合を弱める。Agentを乗り換えても、rawデータと主要スキーマは残るようにする

Agent実装を乗り換えても、データ基盤に蓄積した主要データは残ります。 データ基盤を育てることは、特定のAgentへの投資ではなく、自分の生活の記憶への投資だと考えています。 今後も収集対象や運用を見直しながら、長く使える基盤に育てていきたいと思います。

業務でCoding Agentを触る日々から考えた、Personal AI Agentの輪郭

1 年前、私は同じ方向で挫折していた

私は 2025 年 3 月、Cline と Claude Sonnet 3.7 を使って、Google Maps Timeline の自前版を作ろうとしていました。位置情報を記録する iOS アプリ、Cloudflare Workers / D1 のバックエンド、そして自作の OpenAPI MCP Server を経由して Claude Desktop から行動履歴を読み解かせる、という構成です。

yutashx.hatenablog.com

yutashx.hatenablog.com

プロトタイピングは形にはなりました。しかし当時の自分の総括は、「作りたいシステムの 1 割しか実現できていない」「自分が理解していないコードのリファクタリングは難しい」というものでした。運用とスケールに耐える構成にはほど遠く、そこから 1 年、私のこの挑戦は止まったままでした。

2026 年 5 月のいま、私はその続きをやり直しています。1 年前と比べて、個人スケールで AI Agent を運用するための条件はかなり変わりました。本記事は、その変化を整理しながら、私自身がこれから作ろうとしている Personal AI Agent の構想を置く、連載 1 本目の記事です。

なお、本記事で扱う AI は、私の関心範囲に合わせて、テキスト入出力の LLM と、それを中核に据えた AI Agent に絞ります。

用語の整理 — AI と AI Agent は別物として扱う

本題に入る前に、本記事で使う用語を整理しておきます。

  • AI は、テキスト入出力の大規模言語モデル (LLM) を指します
  • AI Agent は、「LLM を中核に持ち、plan / action / observation のループを自律的に回せるシステム」と定義します

単発の質問に答える ChatGPT のチャットと、ターミナルや IDE の中で複数手順をこなす Claude Code とでは、できることの幅も運用形態も別物です。本記事ではこの 2 つを別物として区別して扱います。

ChatGPT 以後の 3 年半で、何が変わったか

ChatGPT が公開されたのは 2022 年 11 月で、本稿執筆時点 (2026 年 5 月) で 3 年半が経ちました。私が AI Agent という観点で重要だと思っている変化は、おおむね次の 2 点です。

LLM が環境と密に結合した

最初の ChatGPT は、Web のチャット UI 上でテキスト → テキストの変換装置として優秀、というのが立ち位置でした。そこから AI は徐々に、外部の環境と密に結合する方向へ進化しています。bash や git を AI に直接触らせる、IDE の中で AI がファイルを読み書きする、ブラウザで AI が画面を操作する。AI が能動的に環境に手を伸ばせるようになっています。

私の中で印象的だった転換点は、2025 年 2 月に公開された CLINE に全部賭けろ (mizchi) です。AI に shell やコードベースを直接触らせるという発想に大きな抵抗感がまだあった時期で、MCP も広まり始めたばかりでした。それまで「補助者」だった AI を「一定範囲の作業を任せられる存在」として扱う流れが、この記事の前後で一段と加速したように、私には感じられました。

plan / action / observation のループが回せるようになった

環境と結合した AI は、plan → action → observation のループを継続的に回せるようになりました。ゴールが与えられると、何をすべきかを考え (plan)、行動し (action)、結果を観測して次の手を組み立て直す (observation)。本記事では、このループを自律的に回せるものを AI Agent と呼びます。

代表例:

  • Claude Code / Cursor: ターミナルや IDE で動くコーディング Agent
  • Devin / Manus: クラウド側で長時間タスクを実行する汎用 Agent
  • Computer Use (Anthropic) / Operator (OpenAI): ブラウザや OS の画面を直接操作する Agent

AI Agent の自律度には 3 段階がある

AI Agent の運用形態は、人間がループにどこまで介在するかで、おおむね 3 段階に分かれます。

  • Human in the Loop (HitL): ループの各ステップに人間が関わり、判断や承認を行う形。AI と人間が密に協働する
  • Human on the Loop (HotL): AI Agent が自律的にループを回し、人間は監督として進捗を見て、必要時のみ介入する形
  • 完全自律 (Human out of the Loop): AI Agent が最初から最後まで自律的に動く形。人間は事後確認のみ

実運用では、リスクや評価軸の明確さに応じて、これらが使い分けられます (参考: From Human-in-the-Loop to Human-on-the-Loop)。次節以降で、業務領域と、私がこれから作ろうとしている Personal AI Agent の文脈で、人間と Agent の役割分担がどう変わるかを見ていきます。

業務領域の AI Agent は、もう実用段階に入った

ソフトウェア開発における AI Agent は、すでに「使えるかどうか」ではなく「どう運用するか」のフェーズに入っています。コーディング、レビュー、エラー調査、CI 失敗の自動 retry のように、評価軸が明確で、結果の正誤が比較的判定しやすい閉じた問題から、AI Agent は浸透してきました。

業務領域に AI Agent が先行した理由は、おそらく単純です。評価軸が明確で、ROI が見えやすく、ソフトウェアという市場で直接的に価値を生むからです。実際、各社のテックブログでは、AI Agent ベースの開発フローを実運用に乗せている事例が次々に公開されています。

業務領域での使い分けには、Agent の自律度に応じた傾向があります。

  • 完全自律寄り: テスト失敗の自動修復や定型 PR の自動生成。リスクが低く、評価軸が明確なタスクで採用される
  • HotL: Devin に長時間タスクを任せ、人間は進捗を時々監督して必要時のみ介入する形。コードベースを跨ぐ大きな修正などで採用される
  • HitL: AI Agent が PR を作り、人間がレビューで approve する形。仕様判断や設計方針が絡むものはここに留まる

人間の役割は、ゼロから自分で考えるよりも、AI が出した候補を判断する比率が増えているのが共通の傾向だと、私は感じています。

Personal AI Agent は、業務とは別の難しさを持つ

一方で、私が趣味でこれから本当に作りたいのは、業務用 Agent の延長としての自動化装置ではなく、自分の文脈を背負って伴走する Personal AI Agent です。ここでいう Personal AI Agent は、個人の予定、位置、健康、メモ、家計のようなデータを横断して文脈を理解し、その人に合わせて提案や補助を行う Agent を指します。

この領域が業務より難しいのは、扱う対象が「閉じたタスク」ではないからです。「部屋を片付ける」「健康を維持する」「家計を整える」「食事を作る」のような課題は、TODO リストに乗せれば終わるものではありません。最終的に自分が手を動かして実行する必要があり、気分・体力・時間帯・場所・天気のような変数が常に絡みます。AI が良い提案を出すだけでは、勝手に部屋が片付いたり健康になったりはしません。

生活や日常の意思決定では、人間が主体です。生産性という尺度では測れない領域でもあります。だから Personal AI Agent の役割は、人間に代わって生活を自動化することではなく、観測・コンテキスト把握・提案によって個人に伴走することになるはずです。自律度でいえば、ここで中心になるのは完全自律ではなく、むしろ人間が最終判断を持ち続ける HitL 寄りの運用です。AI が健康・位置・家計・予定・過去のメモを横断して把握しており、適切なタイミングで「今これをやってみては?」と提案する。人間はその提案を受けて判断・実行する。役割は対称ではなく、人間と AI が違う仕事を分担する形です。

私自身、生活の細かいタスクを自力で継続するのが得意ではありません。だからこそ Personal AI Agent に強い関心があります。「自分が能動的に考えなくても、AI が文脈を踏まえて提案してくれる」が動けば、それは私の生活の質に直結します。本連載は、その構想を少しずつ実装に落としていく個人の記録でもあります。

Personal AI Agent には、個人のデータ基盤が要る

ここまで、Personal AI Agent の役割は、人間に代わって生活を自動化することではなく、個人の文脈を踏まえて伴走することだと書いてきました。この伴走を実際に成立させようとすると、避けて通れない問題が 1 つあります。AI Agent はコンテキストがすべてなので、健康・位置・家計・予定・過去のメモといった個人データが、少なくとも AI が横断参照できる形になっていなければなりません。観測すべきデータが断片的に散らばっている状態では、AI はそもそも文脈を持ちようがなく、適切な観測も適切な提案もできません。

既存のサービスでこの位置に最も近いのは、おそらく Google です。Calendar、Gmail、Drive、Maps、Photos、Fit。これらをすでに保有しており、横断的な分析を提供できれば、かなりのことができそうに見えます。

ただ、「Google がデータを持っていること」と、「ユーザーが望む形で自由に横断分析できること」は、私の経験上、別の話です。プライバシー規制やプロダクト方針の制約により、Google が提供できる分析の幅にも限界があります。たとえば 2024 年 12 月、Google Maps タイムラインのウェブ版が廃止 され、データの保管先がクラウドからスマートフォン端末上に移されました。それまで PC で自由に振り返れた訪問履歴が、モバイルアプリの中でしか参照できなくなった例です。さらに Google エコシステムの外側のサービス — メモアプリ、スマートホームデバイス、家計管理サービス、音楽サービス、ウェアラブルの健康データ — と、簡単に連携できるわけでもありません。

加えて、特定のクラウドアカウントに生活データを集約することは、それ自体が単一障害点になります。アカウント停止、仕様変更、エクスポート仕様の変更、サービス終了によって、過去のデータの活用が一方的に制限される可能性があります。

そこで私は、自分自身でデータ基盤を持ち、AI Agent が必要なコンテキストを横断的に参照・検索・更新できる形にするほうが、結局は持続可能だと考えています。所有権は自分にあり、データソースの選択も自分の好みでできて、Agent はその基盤を起点に複数の個人データを横断して扱える。Personal AI Agent が個人スケールで本当に成立するのは、この土台の上に乗ったときからだと、私は思っています。

1 年前と何が違うのか — 個人で持てる条件が揃ってきた

では、その「自分でデータ基盤を持ち、その上に Personal AI Agent を載せる」構成は、本当に個人で組めるものなのか。冒頭で書いた通り、私は 1 年前に同じ方向で挫折しました。それから 1 年で何が変わったのか、私の体感としては次の 4 点です。

  1. モデルの性能と裾野が広がった: GPT、Claude、Gemini、Llama、Qwen、DeepSeek、Kimi など、選択肢が大きく増えました。長いコンテキストを読み、複数ステップで考え、外部ツールを使い、結果を観測してやり直す。これらが個人ユースの料金帯でも一通り使えるようになっています
  2. AI 向けの接続層が整ってきた: MCP や Agent skills のように、AI が外部サービスやローカル環境を操作するための共通形式が広がっています。「API があるかどうか」だけでなく、「AI が読み書きできる操作面が用意されているか」が重要な軸になりつつあります
  3. AI による開発・運用補助が現実的になった: 1 年前の私は、自分でコードを書ききれずに止まっていました。いまは、Codex や Claude Code に「壊れたから直して」「新しいデータソースを追加して」と頼めます。個人で小さな基盤を運用する負担は、目に見えて下がっています
  4. self-host で動く Personal AI Agent の選択肢が出てきた: Hermes Agent (Nous Research)OpenClaw のような、個人スケールで動かせる Agent の選択肢が増えました。私自身、まず OpenClaw を 1 週間ほど試した後、Hermes Agent に乗り換えて、現在に至ります

「個人のデータ基盤を作って、その上に self-host の Personal AI Agent を載せる」という構成は、1 年前は理論上はありえても、実装の労力が見合わない選択肢でした。いまは、基盤の設計と Agent の選定を考え直すだけの実用性が出てきていると、私は感じています。

まとめ

  • 業務領域の AI Agent はすでに実用段階に入っており、人間の役割は「AI の出した候補を判断する」方向にシフトしている
  • 次に私が作りたいのは、業務用 Agent の延長ではなく、個人の文脈を背負って伴走する Personal AI Agent である
  • その伴走を成立させる鍵は、賢い LLM 単体ではなく、健康・予定・家計・過去のメモといった個人データを AI が横断参照できる個人のデータ基盤にある
  • 1 年前と比べて、その基盤を作って Personal AI Agent を載せる前提条件 — モデルの性能、AI 向けの接続層、開発・運用補助、self-host 型 Agent — は揃ってきた

連載の次回は、その「個人のデータ基盤」を具体的にどう設計しているかを書きます。さらにその次以降で、基盤の上で動かしている AI Agent の実例を順次紹介する予定です。

GitHub MCPサーバーの実践的活用例

はじめに

開発の現場でAIを活用する方法は、日々進化を続けています。 その中でも個人的に注目しているのは、CursorとGitHub MCPサーバーの組み合わせです。 この組み合わせにより、GitHub Pull Requestの作成やレビューといった作業にも、Coding Agentの支援を受けられるようになります。 本記事では、実際に私が活用しているCursorとGitHub MCPサーバーの具体的なユースケースについて紹介したいと思います。

MCPサーバーの大きな魅力は、Cursorの機能を拡張できる点と、適切な権限管理が実現できる点にあります。これにより、AIを安全かつ効果的に開発プロセスに組み込むことが可能になります。

CLIではなくMCPサーバーである理由

私自身、最初は「AI AgentにCLIを渡せばMCPサーバーは不要になる」と考えていました。 GitHubの操作に関しても、ghコマンドを使えば十分だろうと。

しかし、実際に試してみると、CLIには以下のような限界があることが分かりました。

  1. セキュリティと権限管理

    • CLIの認証トークンは人間の使用を前提としており、AIに直接渡すのはセキュリティリスクが高い
    • GitHub MCPサーバーでは、使用可能なツールを環境変数で限定できる
    • さらに強く制御したければ、MCP Toolそのものを削除してしまえば良い
  2. データ取得の制限

    • ghコマンドでは、特に長大なPRの場合、コメントをすべて取得できない
    • MCPサーバーはGitHub APIを直接利用するため、必要な情報を漏れなく取得できる
  3. 出力の扱いやすさ

    • CLIの出力は冗長で構造化されておらず、AIが扱いにくい
    • MCPサーバーは入出力をスキーマ化することで、AIが理解しやすい形式でデータを提供できる

これらの理由から、AIと開発環境の橋渡しとして、MCPサーバーはCLIよりも適していると判断しました。

業務で役立つGitHub MCPサーバーの活用例

実際に私が業務で活用しているGitHub MCPサーバーの活用例を4つ挙げたいと思います。 私はCursorを利用していますが、VSCode, Claude Codeでも同様の挙動は実現できると思います。 以降Pull RequestのことをPRと呼びます。

Pull Requestの概要をAIに書かせる

ファイルの変更だけのDraft PRを作成し、そのDraft PRのURLをAIに渡すことで、AIはそのPRの変更差分を取得することができます。 そしてAIにそのファイルの変更差分から、PRの概要を書いてというプロンプトの指示をすると、PRの概要を網羅的に適切な粒度で手早く書くことができます。 PRテンプレートがあると、より安定して概要を書かせることができます。 PRの概要を書くのは、一定のコストがかかりますが、コードの意思決定を遡る際に重要な手がかりになります。 PRの概要のドラフトをAIに任せることで、AIが読み取れない人間が下した意思決定を言語化するのに、人間の思考リソースを使うことができます。

Pull RequestのレビューをAIにさせる

PRのURLをAIに渡すことで、AIはそのPRの変更差分とコメント履歴を取得できます。 AIに「このPRをレビューして」と指示すると、コードの変更点を分析し、潜在的な問題点や改善提案を提示してくれます。

特に効果的なのは、AIとの対話的なレビュープロセスです。AIの指摘に対して「なぜその指摘をしたのか」と問いかけたり、「この部分は意図的にこのように実装した」と説明したりすることで、レビューの精度を高めることができます。 GitHub Copilot Reviewer や Claude Code Action のように、AIがPRの変更点をレビューする機能は増えつつあります。 ただ、AIと対話しながらレビューすること、また必要に応じてPR以外のソースコードを参照できることは、エディタ上のMCPサーバーを利用している利点です。

Pull Requestのレビューの打ち返しを支援させる

レビューコメントが付いたPRのURLをAIに渡し、「このレビューコメントにどう対応すべきか」と問いかけることで、AIは各コメントの意図を解釈し、具体的な対応案を提案してくれます。

長文のレビューコメントでも、AIは一つずつ丁寧に分析し、それぞれの指摘に対する適切な対応方法を提示します。 これにより、レビュー対応の負担を軽減しつつ、重要な指摘を見落とすリスクを減らすことができます。 必要に応じてAIのレビューの問題点を指摘し、より良いレビューを実現できます。

Pull Requestの速読・コード考古学を補助させる

コード考古学とは、そのコードがなぜそのような実装になっているのか、過去のログを調べて探すことです。 GitHub MCPは、この作業を効率化するツールとなります。

具体的な活用方法は以下の通りです:

  1. コードの変更履歴の追跡

    • 特定のコードの変更が含まれるPRのURLをAIに渡す
    • AIが関連するPRの情報を取得し、変更の背景や意図を要約
    • 「このコードはなぜこのように実装されているのか」という問いに対して、実装の経緯や意思決定の背景を説明
  2. 詳細な調査のための手順

    • git blameで特定の行のコミットハッシュを取得
    • gh pr list --search "<commit hash>" --state allでコミットハッシュが含まれるPRを検索
    • 見つかったPRの内容をAIに分析させ、実装の意図や背景を理解

このように、PRの速読とコード考古学を組み合わせることで、コードの文脈を素早く理解し、適切な判断を下すことができます。

その他の活用の可能性

現在はGitHubとの連携に焦点を当てていますが、Cursorの可能性はさらに広がっています。 以下は、今後Cursor上で試してみたいと考えている開発プロセスにおけるAI活用方法です。

Notion / Linear MCPとの連携

  • タスク管理や設計ドキュメントの文脈をAIが理解できる
  • プロジェクトの全体像を把握した上での支援が可能になりえる

Design DocやADRの分析

  • PRの背後にある意思決定や設計背景の理解
  • 設計意図に基づいたコードレビュー
  • アーキテクチャの一貫性チェック
  • テキストファイルでの受け渡しは現状でも可能ですが、動的に必要なファイルを特定し、提供する仕組みが欲しいです

まとめ

AIにコードのすべてを任せるにはまだ不安があります。しかし、Pull Requestやレビューといった「AIに任せるにはちょうど良い粒度の業務」から導入していくなら、MCPサーバーを用いたこのアプローチは非常に有効だと思います。 もし他の活用事例があればぜひ共有してもらえると参考になります。

SINIC理論に関する本を読んで考えたこと

SINIC理論 過去半世紀を言い当て、来たる半世紀を予測するオムロンの未来学を読みましたので、その感想を記します。

モチベーション

Xのフォロワーが度々SINIC理論というものに言及しており興味を持ちました。 その時点での自分の理解は、SINIC理論というものは、現代の最適化社会を数十年前に予測していた理論ということでした。 SINIC理論を体系的に解説している本を読みたいと思い、本書を手に取りました。

AIの発展により社会が急速に変容していっています。 SINIC理論はこの世界が行き着く先の1つを示しているのではないかと考えています。 未来を知ることができれば生き方、キャリア、働き方、作るプロダクトの方向性に関わると考えています。

本の概要と目次

この本は、オムロンの創業者である立石一真氏が提唱したSINIC理論を解説し、過去の予測と結果を振り返り、SINIC理論のアップデートを行い、未来社会の展望を示す内容となっています。 目次は以下の通りです

- 未来を考えるということ  
- 未来予測理論「SINIC理論」  
- よりよい未来づくりへのSINIC理論アップデート  
- 現在進行形の「最適化社会」のゆくえ  
- 自律社会を生きる人、自律社会を支えるテクノロジー  
- SINIC理論を超えていく未来  
- 共に未来をソウゾウする

SINIC理論とは

SINIC理論とは、Seed-Innovation and Need-Impetus Cyclic Evolution of technological innovationの頭文字を取ったものです。 「サイニック」と呼ぶようです。 SINICを和訳すると、「科学が技術の種となり、技術は社会を革新する。そして、社会は技術に新たなニーズを与え、技術はその社会的価値によって、さらなる科学の発展に刺激を与える。そのような、円環的な技術革新の進化」になります。 科学・技術・社会の三者の相互の影響による、技術革新の円環的進化を、未来予測理論として体系化したものです。 以下の図として表現されています。

OMRON 未来への羅針盤「SINIC(サイニック)理論」より引用

SINIC理論のアップデート

SINIC理論が提唱されたのは1970年で、半世紀以上前に現在の「最適化社会」の到来を予測していました。 SINIC理論は単なる予測の当たり外れだけではなく、その理論体系を深く理解し、そこから導かれるシナリオの必然性を理解することが重要だとされています。 SINIC理論を今後も活用し、未来社会を「より良いもの」として多くの人々と共有し、共感を得るためには、理論のアップデートが不可欠だとあると判断されました。 具体的には、この半世紀の間の「地球環境の変化」、「科学技術の革新」、そして「人間の志向性や社会の価値観の変化」という三つの影響が、理論のアップデートを必要とする背景となりました。

SINIC理論は以下の3つの補助理論があり、それらがどのようにアップデートされていったのか見ていきます。 1. 科学技術社会論 2. 社会発展指標とプロセスの理論 3. 社会進化と価値観の理論

1. 科学技術社会論

この理論は、SINIC理論の「背骨をなす」特徴であり、科学と技術と社会の円環的な相互作用を説明します。

  • 元の理論的特徴:
    • 科学は技術の「種」となり、技術は社会を「革新」します。
    • 革新を遂げた社会は、技術に新たな「必要性」を与え、技術はその社会的価値によって、科学にさらなる発展への「刺激」を与えます。
    • この円環的相互作用の原動力は、「人間の進歩志向意欲」と位置づけられ、これが科学に「探究」、技術に「研究・開発」、社会に「教育訓練・適応」という行動を促すとされていました。当時の図解では、科学と社会の間は点線で示され、直接的な相互作用は明記されていませんでした。
  • アップデートが必要な理由:
    • 高度経済成長期を経て社会が成熟期に入り、経済の量的成長が鈍化したことで、従来の「進歩志向意欲」では社会発展が収束してしまう懸念が生じました。
    • 地球環境問題や多様性の尊重といった新たな課題が顕在化し、人間は成長だけでなく他者や環境との「共生」を志向するようになったため、従来の原動力のままでは持続可能な発展が見込めなくなりました。
    • 科学と社会の関係性も大きく変化し、社会が科学に対して単なる恩恵の源泉として信頼するだけでなく、批判的な視点や倫理的な問いを投げかけるようになったため、双方向の相互作用を明確にする必要がありました。
  • アップデートされた理論的特徴:
    • 科学と社会の間に、「可能性(期待)」と「夢」という相互作用が加わり、さらに社会から科学に向けて「倫理(個人的で具体的な問い)」が投じられるようになりました。
    • 円環的相互作用の原動力は、「人間の進歩志向意欲」から「共生志向意欲」へと転換されました。
    • 人間の社会への行動は、変化に「適応」するだけでなく、「新しい未来社会を創り、たぐり寄せるための『参画』」という主体的な行動が必要であると修正されました。

2. 社会発展指標とプロセスの理論

この理論は、社会発展のレベルと、その進展プロセスをどのように捉えるかに関するものです。

  • 元の理論的特徴:
    • 社会発展度を測る最適な指標として、「国民一人当たりGNP(国民総生産)」が選定されました。これは高度経済成長期において、個人の購買力と社会の豊かさが同等と見なされていた時代背景を反映しています。
    • 社会発展のプロセスは、ロジスティック曲線(成熟曲線)に近似させて考えられ、一人当たりGNPが4万米ドルを超えた時点で「自律社会」という成熟段階を迎えると推定されました。
  • アップデートが必要な理由:
    • 2022年時点で日本の一人当たりGNI(GNPの現在の指標)が4万1513米ドルとなり、すでに低成長時代が到来しているなど、従来の経済指標による社会発展の予測が現実化しています。
    • しかし、成熟期を迎えた現在では、経済の量的成長が鈍化しており、従来の経済指標だけでは社会の豊かさや幸福度を測ることが困難になっています。
    • GDP等の経済指標では、社会の豊かさや、幸福度は測定できない」という認識が世界中で広まっており、気候変動や貧困格差などの複合的な課題を考慮した、多様な価値基準に基づく指標が必要となっています。
  • アップデートされた理論的特徴:
    • 「単一の経済指標を尺度として測る社会発展」から、「社会を構成する一人ひとりの価値観」の基準に基づいた、「一人ひとりの幸せの向上の社会総和」という多元的な指標で社会発展を捉える考え方が導入されました。
    • これにより、「人々の生活の質(well-being)」と「地球環境の持続可能性(Sustainability)」の観点が今後の豊かさを測る上で重要視されています。

3. 社会進化と価値観の理論

この理論は、社会進化の方向性が、その社会の中心的な価値観によって決まるとするものです。

  • 元の理論的特徴:
    • 人類史は原始社会の「心」の世界から始まり、工業社会で「物」の世界へと進み、その後再び「心中心の価値観」へと回帰するという二元的な価値観の循環がプロセスに取り入れられました。
    • この「心」か「物」かという二元論に、「集団中心社会」か「個人中心社会」かという観点も加えられ、「心と集団」が中心の社会と、「物と個人」が中心の社会を行き来する進化構造が設定されていました。
    • 社会進化は、円錐形の側面を頂点に向かって螺旋状に登り上がっていくとされ、時間の経過とともに進化の速度が加速することも示唆されていました。
  • アップデートが必要な理由:
    • 従来の「心と集団」「物と個人」という固定的な組み合わせのバイアスでは、現代社会の多様な価値観(例:シェアリング・エコノミーのような「物と集団」の組み合わせ)を捉えきれませんでした。
    • 東洋的と西洋的というステレオタイプの文化観も反映されており、現在の多様な価値観の変化に適合させる必要がありました。
  • アップデートされた理論的特徴:
    • 「心」か「物」かという対抗軸と、「集団」か「個人」かという対抗軸の独立した2軸による座標平面を、社会発展の針路を表す構造として設定するようになりました。
    • これにより、価値観領域だけでなく、価値観の強弱やバランスも表現できるようになり、社会が円錐上を登って発展していく中で、最適なバランスの価値観に収束していくことが示せるようになりました。
    • 現在は、「最適化社会」から「自律社会」への移行期にあり、「心中心」に向かい、かつ「行き過ぎた個」の価値観を是正し「集団」(つながり)の価値観側に進み始めているステージにあるとされています。

考察

本書を読み、特に興味深く感じた点について、私自身の考えを記します。

「暇」の価値の高まり

従来の大量生産・大量消費を前提とした経済活動は、現代社会に物質的な豊かさをもたらした一方で、環境破壊や資源枯渇といった負の遺産も残しました。 本書ではこれからの社会では「機械にできることは機械に任せ、人間はより創造的な分野での活動を楽しむ」という方向へシフトしていくのではないかと述べられていました。

それは、古代ギリシャ時代のような世界観の復活を想起させました。 古代ギリシャでは、市民は家事などの労働を奴隷に任せ、芸術や学問といった創造的な活動に没頭していました。 これからの時代、その奴隷の役割を機械やAIが担うことで、人は多くの「暇」を手にすることになり、その生まれた時間を使って、芸術や学問に再び時間を費やす時代が来るのかもしれないです。 そのとき、創造的な活動そのものの価値が、相対的に高まると思います。

「心中心の価値観」の再来と現代カルチャー

本書で示された「心中心の価値観」への回帰は、現代のカルチャーの中にその兆候を見出すことができます。 特に「推し活」と「写真映え」は、その価値観を象徴する現象だと考えられます。

  • 推し活: 物質的な所有よりも、特定の対象(アイドル、アニメキャラクターなど)への精神的な繋がりや共感、愛着といった感情的な価値を重視する活動である。対象を応援すること自体が喜びとなり、コミュニティの一員としての帰属意識や、他者との共感・共有体験に価値を見出す点で、「心」と「集団(つながり)」を中心とする価値観に合致します。これは、個人の意志や行動が共感によって評価される「評価経済」への移行を示唆しています。
  • 写真映え: 単に物を所有するだけでなく、その物や体験を通じて「感性」や「経験」の価値を追求する傾向の現れです。物理的な「物」(写真の被写体)は介在するものの、そこから得られるのは、美的感覚の充足や共有体験、他者からの承認といった精神的な満足感です。これは、価値観が「モノからコトへ」と転換し、消費の動機が「所有欲」から「承認欲求」へとシフトしていることを反映しています。

最適化社会の実態と、それに対する私のスタンス

かつて、人々が触れる情報は新聞やテレビなどに限られており、画一的で共通の体験が生まれやすかったです。 例えば、小学校の頃には「昨日のテレビ番組の〇〇が面白かった」という共通の話題で誰もが盛り上がれたものです。 しかし、YouTubeSNSの発達によってコンテンツは氾濫し、個人が摂取する情報は細分化されました。その結果、共通の話題を持つこと自体が難しくなっています。 Amazonでレビューを参考に本を選び、Google Mapsで最短経路を検索し、食べログで評価の高い店に入り、Netflixにおすすめされた動画を観る。こうした日常の行動は、すべて最適化社会を象徴しています。

私自身、多くの場面でアルゴリズムや他者のレビューに判断を委ねすぎていると痛感しています。だからこそ、意識的に自らの選択に自信を持ち、偶然の出会いを楽しむようにしています。 いつもと違う道を通ってみる、地図で気になった場所に旅をする、直感で店に入る、居酒屋で知らない人に話しかけてみる、といった具合です。 根底には、他人と同じことはしたくないという反骨精神があるのかもしれません。

「自律社会」はどこから始まるのか

最近では、ChatGPTに自らの意思決定を委ねる場面も増えてきました。就職先の比較検討、購入予定の製品のリサーチ、日々の思考整理など、その用途は多岐にわたります。 これらの行為は、個別最適化をさらに強化するものなのか、それともSINIC理論の示す「最適化社会」の次のフェーズへの移行を示唆しているのだろうかと考えています。

さらに、DevinやClaude Codeといったコーディングエージェントが注目を集めています。これらは、技術が自律的に動作し、自己改良さえ行う時代の到来を予感させます。このような技術の動向は、まさしく「自律社会」の一端ではないでしょうか。自律社会の到来を告げる号砲は、こうしたコーディングエージェントから鳴らされるのかもしれません。

まとめ

SINIC理論が半世紀以上前に提唱され、それが現在までの社会と科学技術を予測しており、その先見性には驚嘆しています。 またオリジナルのSINIC理論が想定できていなかった社会情勢を考慮してアップデートされたSINIC理論も、妥当性のあるもののように見えました。 これからの自律社会を形作る一員として、技術に使われるのではなく、技術を適切に利用・運用する側になるように日々過ごしていきたいと思います。

人生で初めて楽器を買った話

先日エレキギターを買ったので、その経緯と所感について書きたいと思います

音楽コンプレックスの原点

私は昔から音楽に対して苦手意識がありました。小学校の頃に使っていた鍵盤ハーモニカやリコーダー、合唱などはあまり好きではありませんでした。 また、リズム感覚がなく、拍についてもよく分かっていませんでした。 音楽の授業は退屈に感じており、テストのときには一応勉強しましたが、面白いとは思えませんでした。 高校生のとき、初めて「拍」というものを意識して理解したのを覚えています。

演奏への興味の芽生え

あるとき、自分の音楽コンプレックスについてふと考える機会がありました。 「聞く側」から「演奏する側」になれば、音楽への解像度が上がるのではないかと考えたのです。 実際に楽器を演奏している友人たちの話を聞いてみると、その考えはあながち間違っていないと感じました。

新しい趣味を求めて

私は普段、仕事や趣味のソフトウェア開発、Netflixの視聴など、四六時中ディスプレイを見る生活を送っています。 画面を見ない趣味としては水泳やランニングがありますが、どちらも1日あたり2時間ほどが限度で、それ以上続けるのは体力的に難しいと感じています。 さらに、施設に行く必要があったり、天候に左右されたりと、多少の手間もあります。 そのため、自宅でできて、なおかつディスプレイを見ずに取り組める趣味が欲しいと思うようになりました。

ギターとの出会い

ギターに詳しい知人に案内してもらい、楽器の街・御茶ノ水に行きました。 御茶ノ水は通りのほとんどが楽器店で埋め尽くされており、「楽器の街」という呼び名にふさわしい場所だと感じました。 事前知識はゼロでしたが、さまざまなギターに実際に触れることができて、とても貴重な体験になりました(予習せずに行ってしまってすみません)。 知人からは「賃貸の防音ではない環境であれば、エレキギターが良い」というアドバイスをもらいました。

ショップ巡りと選定基準の発見

知人の案内で、最初は3桁万円の高級ギターを扱うお店からスタートし、徐々に価格帯の低い店舗へと回りました。 最終的には1桁万円のギターを扱う店まで巡り、10店舗近くを訪れたことになります。 その過程で、自分の中で「ギターに対する選定基準」のようなものがだんだんと浮かび上がってきました。 形状、色、価格、そして手触りが、自分にとっての決め手になるのだと気づきました。 何店舗か巡るうちに、強く印象に残ったギターが出てきたため、そのギターを改めて見に行くことにしました。

YAMAHA PACIFICA611VFMに決めた理由

最初に手に取ったギターは、YAMAHAのPacifica 100シリーズの赤いモデルでした。 ギターを弾けないなりに試奏させてもらい、手触りを確かめてみました。 すると、ネックのあたりの仕上げが若干粗く、使い込むとすぐに毛羽立ちそうな感触がありました。 そのとき、店員さんから「こちらも試してみては?」と紹介されたのが、Pacifica 600シリーズのモデルでした。 100シリーズと比べてネックの手触りが明らかに良く、おそらく塗装の仕上がりが丁寧なのだと思います。 その日、複数の楽器店を巡った結果として「ギターは奏者にならないと、音の質や求める機能が分からない」という結論に至りました。 演奏する当事者になることで見えてくる世界もあると信じて、とりあえずやってみよう・まず買ってみようの精神で、YAMAHA Pacifica 611 VFMを購入することにしました。

jp.yamaha.com

ギターを買ってから

購入したYAMAHA Pacifica 611 VFM

現在は単弦でドレミの音を出すところから練習しています。 弦を押さえる指がかなり痛いです。 リズム感に変な癖がついてしまうと、あとで矯正が難しいと聞いたので、まずはリズム感覚を身につける練習を優先しようと思っています。 気長に、ゆっくりと続けていくつもりです。 好きなアーティストであるBUMP OF CHICKENの曲を何か一曲弾けたらいいなくらいの気持ちで取り組んでいます。

余談

購入したギターは、アニメ「ぼっち・ざ・ロック!」に登場する、ぼっちちゃんの2代目のギターと同じモデルらしいです。 今このギターを買うと、ミーハーだと思われることもあるそうです。 私自身もアニメは視聴していましたが、ギター購入に際して「ぼっち・ざ・ロック!」から直接的な影響を受けたわけではありません。 「ミーハーに見られるかもしれないな」と思いつつも、演奏を他人に見せるつもりもないので、「そういう認識の人もいるのだな」程度に受け止めています。 ただし、無意識のうちにアニメの影響でギターの形状に好みが出ていた可能性はあるな、とも思っています。