0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

家族に「1つのAI」は要らなかった 〜妻のChatGPTと私のAIに“同じ記憶”を持たせる家族用外部脳〜

0
Last updated at Posted at 2026-07-15

この記事でやりたかったこと

家族の誰がどのAIに話しかけても、「うちの事情を分かってる」状態を作る。

前回、5つのAIに「共通の記憶」を持たせてみた 〜Obsidianをみんなの“外部脳”にする〜を書きました。あれは「自分ひとりが使う複数のAI」に同じノート置き場(外部脳)を読み書きさせる話です。

今回はその家族版。うちは私と妻で使っているAIが違います。私は自作AI(OpenClaw)や Claude Code、妻は ChatGPT(チャッピー)。この状態で「家族の予定」「買い物リスト」「家の決め事」を、どちらのAIに話しても通じるようにしたい

💡 家族用外部脳とは:家族全員のAIが読み書きする「家の共有記憶」のこと。今回も正体はただのテキストファイル群です。ただし前回と違い、他人(妻)のAIアカウントが、私のPCの中のファイルに安全に届く仕組みが必要になります。


最初の構想と、規約の壁

最初に考えたのは「統一AI方式」でした。家族用のAIボットを1体立てて、家族全員がDiscordから話しかける。1つの人格、1つの記憶。コンシェルジュっぽくて夢があります。

ところが調べるほど、バックエンドLLMの規約問題にぶつかりました。2026年の状況を整理するとこうです。

  • 消費者向けサブスク(Claude Pro/Max、ChatGPT Plus等)は「契約者本人が使う」ライセンス。 家族ボットのバックエンドに使って家族全員にサービスすると、本人以外の利用になってしまう
  • Anthropicは2026年2月に規約を改定し、サブスク由来のOAuthトークンをサードパーティツールで使うことを明示的に禁止。4月には実際に遮断された(The RegisterVentureBeat
  • 規約的にクリーンなのはAPI従量課金(APIは「自分のアプリを作って人に使わせる」ための契約)。ただし家族の全会話をAPIに寄せると、せっかく各自が契約しているサブスクと二重払いになる

もう1つ、規約にもAPIの従量課金にも引っかからない案として、ローカルLLMも考えました。自宅PCの中だけで動かせば、家族の会話を外へ送らずに済みます。ただ、自宅PCで無理なく回せるモデルでは、回答精度・速度・日本語の自然さにまだ不安がありました。

そして家族向けでいちばん怖いのは、技術的に動かないことより最初の数回で見切られることです。初手で微妙な回答を返して、妻から「これ、普通のチャッピーでよくない?」という顔をされたら、その瞬間にプロジェクト終了。妻の顔色をうかがった結果、ローカルLLM案はそっと閉じました。

つまり「統一AI」は、クラウドLLMなら規約かコスト、ローカルLLMなら家族が気持ちよく使い続けられる品質に引っかかる。ここで一度立ち止まりました。

発想の転換:「統一AI」ではなく「統一記憶」

よく考えると、家族で共有したいのはAIの人格ではなく文脈でした。予定、買い物リスト、家の決め事。それが共有されてさえいれば、各自が自分のAIに話しかけても「うちの事情を分かってる」体験になります。

そこで方針転換:

  • AIは各自のものを使う。 私は自作AI、妻はチャッピー。それぞれ自分の契約を、公式アプリで使う。→ 規約問題が消滅
  • 記憶(家族脳)だけ共有する。 外部脳の家族版を作り、双方のAIがそこを読み書きする
  • 副産物として、プライバシー境界が構造的にきれいになる。妻の個人的な会話は私のシステムを一切通らず、家族脳に書かれたものだけが共有される

前回記事の結論は「AIは取り替えのきく道具、記憶だけは自分の資産」でした。今回はその続き――記憶は“家族の資産”にもできる、です。


完成したもの

  • 妻がチャッピーに「買い物リストに牛乳追加しといて」→ 家族脳に書かれる
  • 私が自作AIに「今週の予定は?」→ 同じAPIを通って、妻が入れた予定も出てくる
  • 朝になると「今日・明日の予定、期限が近いタスク、買い物リスト」が家族LINEに届く
  • 私自身はObsidianを開けばスマホからも同じものが見える

AIは2体(しかも別会社・別契約)ですが、記憶は1つです。


使う道具と、その役割

用語 ざっくり言うと この記事での役割
Obsidian Vault ノート全部が入ったフォルダ(前回記事参照) 外部脳の本体。この中に家族用の Family/ を新設
カスタムGPT ChatGPTに人格と道具を持たせて配れる公式機能 妻側の入口。「わが家AI」という家族コンシェルジュにする
GPT Actions カスタムGPTから外部APIを呼ぶ公式の仕組み(OpenAPI定義で登録) 妻のGPTが家族脳を読み書きする“手”
Tailscale Funnel 自宅のポートを安定した公開HTTPSにしてくれる無料サービス ChatGPTのサーバーから自宅PCのAPIへ届く経路。独自ドメイン不要
Bearer認証 リクエストに合言葉(APIキー)を付ける方式 家族以外のアクセスを弾く鍵
LINE Messaging API LINE公式アカウントからメッセージを送る仕組み 毎朝の家族ブリーフィングをグループへpush
GoogleカレンダーのICS カレンダーを読み取り用URLで配る標準形式 家族の既存予定を読み取り専用でブリーフィングに混ぜる

💡 なぜMCPじゃないの?:ChatGPTのフルMCP(書き込みを含むカスタムアプリ)は、2026年7月現在、Business / Enterprise / Edu向けのベータで、利用もWeb版に限られます(OpenAI公式)。一方、カスタムGPTのActionsはOpenAPIスキーマとBearer認証で自作APIを呼べて(OpenAI公式)、作成はWeb版、利用はスマホアプリでも可能です(OpenAI公式)。妻が普段使うスマホから家族脳を読み書きするなら、今回はActionsが素直でした。


どう作ったか

STEP 1. vaultに家族共有領域 Family/ を切る

前回作った外部脳(vault)の直下に、家族用フォルダを新設しました。

Family/
├── README.md        … この領域のルール(人間とAI向け)
├── 予定.md           … - YYYY-MM-DD 内容(1行1件)
├── 買い物リスト.md    … - [ ] 品名(購入済みは - [x])
├── タスク.md          … - [ ] YYYY-MM-DD @担当 内容(期限・担当は任意)
└── 家族メモ/         … 決め事・連絡事項(1メモ1ファイル)
    └── _trash/       … 削除したメモの退避先

ポイントは3つ。

  1. 機械が扱いやすい行フォーマットに固定。予定は - 2026-08-29 19:00 イベント名、買い物は - [ ] 牛乳、タスクは - [ ] 2026-08-29 @ミノ 粗大ごみを出す。APIが正規表現で読み書きできて、人間がObsidianで見ても普通のチェックリストに見える
  2. 書き込みをAPI経由に一本化。妻のGPTだけでなく、私側の自作AIも family コマンドから同じAPIを使う。日付検証・重複チェック・完了処理をサーバー側に寄せ、書き手による形式のブレをなくした
  3. vaultの正典(AI向け運用ルール)に領域を登録。前回記事の「正本を1か所」方式そのままに、Family/ は「家族全員に見せてよい情報のみ・形式厳守」と明文化。メモの削除も完全削除ではなく _trash/ への移動と決めた

STEP 2. 家族脳APIサーバーを立てる

Family/ を読み書きする小さなHTTPサーバーをNode.jsで書きました。server.js、LINE送信用のnotify.js、Googleカレンダー解析用のical.jsまで含めて、依存パッケージはゼロ。Node.js 18以降の標準機能だけで動きます。

最初は7操作でしたが、実際に家族で使うために増えて、現在は17操作です。

メソッド パス 何をする
GET /health 死活確認(認証不要)
GET /calendar 今日以降の予定一覧
POST /calendar 予定追加(日付形式はバリデーション)
GET /shopping 未購入の買い物リスト
POST /shopping 品目追加(重複は弾く)
POST /shopping/complete 購入済みにする(部分一致対応)
GET / POST /tasks 未完了タスクの一覧・追加(期限と担当を任意指定)
POST /tasks/complete タスクを完了にする(部分一致対応)
GET / POST /notes 家族メモの検索・作成
GET /notes/get メモ全文の取得
POST /notes/update メモ本文の差し替え・追記
POST /notes/delete メモを _trash/ へ移動
GET /gcal Googleカレンダーを今日から指定日数分取得(読み取り専用)
GET /briefing/preview 朝ブリーフィングのプレビュー
POST /line/webhook LINEの送信先IDをログで確認(認証不要・家族脳は操作しない)

設計で意識したのは「自由記述で書かせない」こと。AIに生ファイルを渡すと形式が崩れていくので、構造化された操作だけをAPIとして許す。曖昧な部分一致が複数件に当たったときは勝手に処理せずエラーにする、メモ削除はごみ箱へ逃がす、といった安全側の挙動もAPIに寄せました。前回の「ルールはお願いせず環境で守らせる」の応用です。

認証はAuthorization: Bearer <ランダム生成キー>。比較はタイミングセーフに行い、認証失敗はログへ残し、1分20回を超えると429を返します。認証なしで通るのは死活確認と、家族脳に触れずIDをログに残すだけのLINE webhookだけです。

テストも実データとは分離しました。テスト実行時だけ一時フォルダと別ポートに専用サーバーを立て、予定・買い物・タスク・メモ・ごみ箱・ブリーフィング・ICS解析まで確認します。家族の本物のデータへテストを書き込まないためです。

STEP 3. Tailscale Funnelで公開HTTPSにする

GPT ActionsはOpenAIのクラウドから接続しに来るので、自宅PCのAPIに公開HTTPSのURLが必要です。選択肢を比べて:

  • Cloudflare Tunnel(named)→ 独自ドメインが必要
  • ngrok無料枠 → 使えるが帯域制限あり
  • Tailscale Funnel → 無料・ドメイン不要・URL安定 ← 採用
tailscale up                  # アカウントにログイン
tailscale funnel --bg 18800   # ポート18800を公開HTTPSに
# → https://<マシン名>.<tailnet名>.ts.net が生える

初回だけブラウザでFunnel(外部公開)の許可を求められます。露出するのはこのAPI(=Family/の読み書き)だけで、vaultの他領域やPCの他の部分には触れない構造です。

STEP 4. カスタムGPT「わが家AI」を作る

妻側の入口になるChatGPTを作ります。GPTビルダーで:

  1. 指示(instructions): 家族コンシェルジュの人格+「家族の話題が出たらまずActionsで家族脳を確認する(記憶ではなく家族脳が正)」+「登録したら1行で復唱」
  2. アクション: 上のAPIのOpenAPIスキーマ(3.1)を貼り、認証を「APIキー→Bearer」で設定
  3. 公開範囲を「リンクを知っている人のみ」にして妻に共有

指示には、予定を聞かれたら家族脳とGoogleカレンダーの両方を見る、買い物とTODOを使い分ける、メモ更新前は全文を取得する、削除前は本人へ確認する、といった操作手順も入れました。自然言語の曖昧さはGPTが吸収し、最終的な書式と安全策はAPIが受け持つ二段構えです。

instructionsで特に効かせたのがプライバシーの作法です:

家族脳に書くのは家族全員が見てよい情報だけ。誰かへのサプライズや個人的な相談内容は書かない(頼まれたら「家族脳には残さずここだけの話にするね」と伝える)

「妻とチャッピーの会話」自体は私からは一切見えません。見えるのは家族脳に書かれた結果だけ。共有と秘匿の境界線が、アーキテクチャそのもので保証されているのがこの方式の気に入っているところです。

なお、APIを増やしてOpenAPIスキーマを更新しても、カスタムGPTへは自動反映されません。GPTビルダーへ貼り直すまで新しい操作を知らないので、API変更時のチェックリストに「スキーマとinstructionsを貼り直す」を入れています。

STEP 5. 毎朝の家族ブリーフィングをLINEへ送る

カスタムGPTは、こちらから話しかけない限り通知してくれません。そこで通知はAIではなく、常時動いている家族脳APIサーバーの仕事にしました。

  1. LINE公式アカウントを作り、Messaging APIを有効化
  2. 通知専用botとして家族グループへ招待
  3. 招待時のwebhookを自宅APIで受け、ログに出たグループIDを送信先として設定
  4. notify.jsからLINE Messaging APIのpush送信を実行

サーバー内では60秒ごとに小さなタイマーが動き、設定時刻(現在は07:00)を過ぎ、その日にまだ送っていなければブリーフィングを組み立てます。別のタスクスケジューラや常駐プロセスを増やさず、すでに動いているNode.jsプロセスを「時計番」にもしました。

☀️ 家族ブリーフィング (2026-08-29)

📅 今日の予定
・10:30 通院 📆家族

📅 明日の予定
・19:00 家族会議

⏰ 期限が近いタスク
・今日まで @ミノ 粗大ごみを出す

🛒 買い物リスト
・牛乳
・卵

載せるのは、今日と明日の予定、期限が今日・明日または期限切れのタスク、未購入の買い物です。空の欄は省き、全部空なら何も送りません。PCの起動が07:00を過ぎても、その日の最初のタイマーで遅れて送ります。二重送信はstate.jsonに最終送信日を残して防ぎます。

LINE botは送信専用です。家族がLINEでbotへ話しかけても家族脳は更新されません。書き込み経路を「わが家AI」か私側の自作AIに絞ることで、入口を増やしすぎないようにしました。

STEP 6. Googleカレンダーを読み取り専用で混ぜる

家族脳の予定.mdだけでなく、すでに使っているGoogleカレンダーの予定も朝の通知へ載せたくなりました。ただしGoogle Calendar APIのOAuth連携まで持ち込むと構成が重くなります。

そこで、Googleカレンダーが発行する iCal形式の非公開URL(シークレットICS) を最大3つまで設定し、Node.jsの標準fetchで読み取る方式にしました。ical.jsも依存パッケージなしで書き、単発・終日・毎日・毎週・毎月・毎年、第n曜日、除外日、繰り返し予定の個別変更といった日常的なパターンを展開します。

  • 朝ブリーフィングには、家族脳とGoogleカレンダーの予定を時刻順で混載
  • /gcal?days=7では今日から指定日数分を照会(最大31日)
  • カレンダーごとにラベルを付け、どの予定表から来たか分かる
  • 1つの取得に失敗しても、そのカレンダーだけをスキップして通知全体は止めない
  • 読み取り専用なので、Googleカレンダーへの追加・変更は公式アプリで行う

シークレットICSのURL自体が読み取り鍵なので、APIキーやLINEトークンと同じくgitignore済みのconfig.jsonだけに置きます。漏れた場合はGoogleカレンダー側でURLをリセットできます。


規約上、問題ないのか(整理)

今回の構成を規約の観点で棚卸しします。

論点 判定 理由
妻が自分のChatGPT Plusでカスタム GPTを使う 本人が公式アプリで公式機能を使うだけ
GPT Actionsから自宅APIを呼ぶ Actionsはそのための公式機能。呼び先は自作API
私の自作AIが自分のサブスク枠で動く ⭕(条件付き) OpenClawの正規認証経路を使った、契約者本人の利用のみ
❌やってはいけない形 1つのサブスクアカウントを家族で共用する/サブスクのOAuthトークンを自作ボットのバックエンドに流用して家族にサービスする

要するに今回の方式は「各自が自分の契約を、提供元の想定した使い方で使う」に全部を収めた構成です。統一AI方式で悩んだ規約問題は、アーキテクチャの選択で消えました。


課題(正直に)

  1. 公開エンドポイントを1つ持つ運用責任。 FunnelのURLは見つかる前提で、①192bitのランダムなAPIキー、②タイミングセーフ比較、③認証失敗のレート制限(1分20回超で429)、④失敗ログ、⑤露出範囲はFamily/の構造化操作のみ、⑥漏れたら即キー差し替え、で守っています。「URLは公開、鍵で守る」という割り切りです
  2. 常時稼働PC前提。 APIも朝の通知も自宅PCで動くため、PCが落ちていると妻のGPTは家族脳に届かず、LINE通知も送れません。Windowsログオン時の自動起動は仕込みましたが、クラウドのような可用性はありません
  3. 通知失敗時の再送キューがない。 二重送信防止を優先しているため、LINE送信時に一時的なネットワーク障害が起きても同日中は自動再送しません。失敗はログに残りますが、本格的な再送・監視は未実装です
  4. iCloud同期×機械書き込みの競合リスク。 vaultはiCloud同期なので、書き込みタイミングによっては競合コピーが生まれえます。家族脳は書き込み頻度が低い(1日数回)ので実害は出ていませんが、頻度が上がるなら同期方式の見直しが要ります
  5. GPTのAPI仕様同期が手動。 サーバーとOpenAPIスキーマを更新しても、GPTビルダーへ貼り直すまでは「わが家AI」に反映されません。サーバー・スキーマ・instructions・私側のクライアント・テストを同時更新するチェックリストで防いでいます
  6. ICSは必要十分な自作パーサー。 日常的な繰り返し予定には対応しましたが、iCalendar仕様を完全実装したライブラリではありません。特殊な繰り返しルールは取りこぼす可能性があります
  7. 人間の手編集で形式を崩せる。 中身が普通のMarkdownである利点の裏返しです。「閲覧はObsidian、書き込みは原則AI経由」にし、API側で形式を守っています

今後の発展

  • 指名リマインド: 「来週火曜16時にこれを教えて」のような日時指定リマインドを家族脳へ登録し、時刻が来たらLINEへ送る。朝ブリーフィングの次の段階
  • 通知の再送・監視: 一時的な送信失敗を再試行し、一定回数失敗したら別経路で気付けるようにする
  • ファイル肥大対策: 過去の予定や完了済みタスクを月次アーカイブし、プレーンテキストの見通しを保つ
  • 家族メンバーの追加: 子どもが使う日が来たら、同じAPIに向けたGPTなりアプリなりを1つ足すだけ。統一AI方式と違って入口のAIを人数分自由に選べるのがこの方式の拡張性
  • MCP一本化: ChatGPTの個人プランで、書き込み可能な自作MCPをスマホから安定して使えるようになったら、Actions(REST)との二重管理を見直す
  • 家族脳の中身を育てる: 予定・買い物・タスク・メモから始めましたが、「かかりつけ医リスト」「家電の型番と購入日」「旅行の持ち物テンプレ」「献立と在庫」など、“家族の共有知”はまだまだ眠っています

まとめ

  1. 家族でAIを共有したいとき、「1つのAIをみんなで使う」は規約とコストの壁に当たりやすい(サブスクは本人限定、API寄せは二重払い)
  2. 発想を変えて**「AIは各自のもの、記憶だけ共有」**にすると、規約問題が消え、プライバシー境界もきれいになる
  3. 書き込みは小さなAPIへ一本化し、妻のGPTも私の自作AIも同じ検証・重複防止・ごみ箱ルールを通す
  4. LINEの朝ブリーフィングとGoogleカレンダーの読み取り連携まで、Node.js標準機能だけで自宅PC1台に収まった

前回の結論はこうでした――「AIは取り替えのきく道具、記憶だけは自分の資産」。

家族でやってみて、もう一歩先が見えました。記憶は家族の資産にもなる。 夫婦で使うAIがバラバラでも、明日どちらかが別のAIに乗り換えても、家族の文脈はFamily/フォルダに残り続けます。AIの選択は個人の自由、記憶の置き場所は家族の共有財産。この分離が、家庭にAIを持ち込むいちばん筋のいい形なんじゃないかと思っています。


0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?