なお、上記の用語は私が勝手に制定しようとしているだけです。
前回の、
「Dropboxのディレクトリからファイルを選択して『読み込み』ボタンを押したら、そのままChatGPTが読んでくれないかなあ」
の続きです。
Web版ChatGPTに簡単なI/Oを実装したい。
いろいろ考えた結果、
「Dropboxを経由して、そこに置いてあるファイルの読み書きを自動化すればいいのでは?」
という結論になりました。
Dropbox APIからディレクトリ構造とファイル名を取得して、ブラウザ拡張でWeb版ChatGPTの横にちょっとした小窓を表示。
そこにディレクトリツリーを表示して、ファイルを選択。
「読み込み」ボタンを押すと、
プロンプトを自動生成 → ChatGPTの入力欄へ自動貼り付け → 自動送信
まで行います。
アプリ名は 「Primitive IO」。
実装できた!
こんな感じ。
これで、
「ファイルを選択 → 読み込み」
だけでChatGPTにDropbox上のファイルを読ませられるようになりました。
よし!
……と思って、さらに調査していたら。
公式もDropboxに対応してた
ChatGPTにさらに調査させてみると、2026年9月に入ってから公式のLibrary機能がDropboxに対応したとのこと。
がーん!!
作った直後に知りました。
実際に試してみると、確かにLibraryへ移動すればDropboxのディレクトリツリーが表示されます。
Library
└─ Dropbox
├─ project/
│ ├─ foo/
│ │ ├─ a.md
│ │ └─ b.md
│ └─ ...
└─ ...
ここからDropboxのツリーを辿ってファイルを選択し、そのファイルを会話に参加させることができました。
「俺が作ったもの、公式に実装されてるじゃん……」
と、ちょっと落ち込みました。
でも、チャット中に使ってみるとちょっと違う
ここからは 2026年9月25日時点で、私の環境で実際に確認できた挙動 です。
すでに進行しているチャットの入力欄にある「+」から、Libraryを開くことができます。
しかし、ここで表示されるのはLibraryに入っているファイルで、私の環境ではDropboxのディレクトリツリーまでは表示されませんでした。
また、「+」からDropbox自体を指定することもできます。
ただし、そこから、
「Dropboxのこのディレクトリにある、このファイルを読み込む」
という任意のファイル選択をGUIで行う方法が、私には見つけられませんでした。
つまり、現状私が確認できた範囲では、
【Libraryへ移動】
Library
↓
Dropboxツリーを表示
↓
ディレクトリを探索
↓
ファイルを選択
↓
会話に参加
はできます。
一方で、
【進行中のチャット】
会話
↓
Dropboxツリーを開く
↓
ディレクトリを探索
↓
任意のファイルを選択
↓
そのまま現在の会話へ投入
という操作方法は確認できませんでした。
2026年9月に追加されたばかりの機能なので、これが現在の仕様なのか、まだロールアウトの途中なのかまでは分かりません。
もし方法をご存じの方がいたら教えてください。
Primitive IOは何が違う?
Primitive IOでは、ChatGPTの会話画面そのものから移動しません。
画面横にDropboxのツリーを常時表示しているので、
会話中
│
├── 議論を続ける
│
└── 横のDropboxツリー
↓
ファイルを選択
↓
「読み込み」
↓
現在の会話へ投入
という操作ができます。
つまり、
会話の途中で「あ、あのファイルも見てほしい」と思ったら、その場でツリーから選んで割り込ませる
という使い方ができます。
さらに現在はDropboxだけでなく、GitHubのリポジトリ内にあるファイルも同じUIから指定できるようにしています。
公式Libraryの登場で「Primitive IOいらなくなったか?」と思いましたが、実際に使い比べてみると、欲しかったものが少し違いました。
私が欲しかったのは、
「Dropboxに対応しているChatGPT」
というより、
「今いるチャット画面から動かずに、ファイルを選んで読み込めるUI」
だったようです。
じゃあDesktop版を使えばいいのでは?
ここまで読むと、
「そこまでWeb版のI/Oにこだわるなら、ChatGPTのDesktop版を使えばいいのでは?」
と思うかもしれません。
私もそう思って、Linux版のChatGPT Desktopを入れて試してみました。
しかし、私が欲しかったものとは少し違いました。
ChatGPTには、通常の Chat のほかに Work や Codex があります。
WorkやCodexは、ローカルファイルを扱ったり、実際の作業や実装を任せたりするには便利です。
ただ、私は普段こんな感じで使い分けています。
Chat
└─ 調査・雑談・議論・仕様を考える
Codex
└─ 実装をお願いする
Work
└─ まとまった作業をお願いする
普段一番長く使うのはChatです。
仕様について「ああでもない、こうでもない」と話したり、調査したり、アイデアを整理したりするだけなら、WorkやCodexを起動する必要はありません。
WorkやCodexは、実際の作業や実装まで行ってくれる強力な機能ですが、単に仕様について議論したいだけの場面では、私にとっては少し大掛かりです。
なので、
考えるところはできるだけChatでやりたい。
これが、私がWeb版ChatGPTにこだわっている大きな理由です。
欲しいのは高機能なエージェントではない
Desktop版なら、この問題が全部解決するのではないかとも思いました。
しかし、少なくとも私が試した範囲では、通常のChatからローカルの任意のパスを指定して、
「この
spec.mdを読んで」
という使い方はできませんでした。
一方、Web版ではFirefoxのブラウザ拡張が使えます。
つまり私の用途では、
Web版Chat
+
Dropbox
+
Primitive IO
のほうが、普段の議論では使いやすいという逆転現象が起きました。
Desktop版なのに、私が一番使うChatでは欲しいI/Oが手に入らない。
しかもDesktop版では当然、Firefox用に作ったPrimitive IOも使えません。
「Desktop版ならローカルファイルと近くなるのでは?」
と思って試してみたのですが、少なくとも私が欲しかった方向の近さではありませんでした。
Chatでできた成果物を、そのまま次へ渡したい
そもそも私がやりたいことは、そんなに高度ではありません。
例えばChatでCodexに渡す仕様について30分議論したとします。
最終的にこんなファイルができれば十分です。
shared/
├─ spec.md
├─ todo.md
└─ notes.txt
このフォルダを、
┌─ Chat
│
shared/ ──────┼─ Work
│
└─ Codex
のように共通で読み書きできればいい。
ローカルファイルシステム全体へのアクセス権なんて必要ありません。
ユーザーが明示的に許可した1つのフォルダ階層だけ。
扱えるファイルも、極端な話 .md と .txt だけで構いません。
Chatで議論して、
「ここまでを
spec.mdに保存」
Codexを開いて、
「
spec.mdを実装して」
これだけでいいんです。
今は人間がファイルを運んでいる
ところが、この間のI/Oがうまくつながっていないと、
Chatで議論
↓
仕様が完成
↓
ファイルにする
↓
保存場所を指定する
↓
Codexへ移動
↓
そのファイルの場所を教える
↓
実装開始
となります。
AIはものすごく賢くなったのに、
AIとAIの間でMarkdownファイルを運んでいるのは人間です。
そうです。
冒頭で書いた Meat Protocol が、ここで発生しています。
もちろん、MCPなどを使ってもっと高度な仕組みを構築する方法もあります。
でも、私が欲しいのは自律エージェント同士を接続する巨大なシステムではありません。
ファイルを読む。
ファイルを保存する。
別のツールから同じファイルを読む。
本当にそれだけです。
人間は「この仕様でいこう」「これをCodexに実装してもらおう」と判断する。
コンピュータには、その間のファイル運搬だけやってほしい。
だからPrimitive IOでは、AIをもっと賢くするのではなく、
Chatの入口と出口を少しだけ使いやすくする
ことを目指しています。
こういうUIだったら分かりやすいのに
個人的には、チャットからLibraryへ画面遷移するのではなく、チャットを表示したままサイドバーだけLibraryに切り替わるようなUIだったら、かなり分かりやすいと思います。
┌──────────────┬──────────────────────┐
│ Library │ Chat │
│ │ │
│ ▼ Dropbox │ ~~について議論~~ │
│ project/ │ │
│ ▼ foo/ │ │
│ a.md │ │
│ b.md │ │
│ │ │
│ │ [メッセージを入力] │
└──────────────┴──────────────────────┘
左側でファイルを探して、右側の現在の会話にそのまま渡す。
やりたいことは、それくらい単純です。
そして気づいたら、Primitive IOでだいたいそんなUIを勝手に作っていました。
次はOutput
今度は逆方向です。
例えばChatGPTと仕様について議論したあと、
「ここまでの議論をまとめて」
と頼んで、その結果をファイルとして保存する。
ここも毎回、
「この内容を○○というファイル名で、Dropboxの○○フォルダに保存して」
と自然言語で説明するのではなく、保存先やファイル名をUIから指定して半自動化したいと考えています。
読み込みが Input。
保存が Output。
だから Primitive IO。
高性能なAIと自然言語で会話できる時代になったけど、
I/Oくらいはボタンでやりたいんよねぇ。

