初めてRoamを使ったのは6年前、2020年の終わりごろだった。同じころ——GPT-3が登場した直後——私は未来のソーシャル情報プラットフォームという記事で、GPT-nモデルによって世界がどう変わるかを書いた。驚いたことに、その予想はおおむね当たっていた——そして、いくつかの興味深い点では外れていた。

実際、世界は変わった。Roamはすばらしい思考環境で、私はXanaduのように、ウェブ全体の基盤にまで育つかもしれないと想像していた。現実はそこに遠く及ばなかった。それでも、今も変わらずわくわくしている——しかも、その大きな理由は、あのGPT-nモデルにある。Roamには、エージェントと人間が共有する思考の基盤として、最高のものになれる可能性があると思う。

このロードマップを書くのは楽しかった。今は部外者だからなおさらだし(以前、1年近くRoamで働いていた)、Roamのロードマップに対する姿勢を考えてもそうだ :) このうちのいくつかを自分でプラグインにするか、チームが自分たちで作りたくなるように仕向けられたらと思っている……。

すでにあるものを改善する

  1. 高水準の視覚的コンポーネントを、もっと扱いやすくする
    • Roamには、ブロックという基本要素から作られたtablekanbanなどの視覚的コンポーネントがある。最近のテーブルのアップデートで、もう手書きで組み立てる必要はなくなった。列の並べ替えなどもできる。
      • カンバンにも、同じくらい手をかけてほしい。
        • 現在、空のテーブルはこんな見た目だ。
        • 一方、空のカンバンはこうなっている。
        • 問題をいくつか挙げると、
          • カンバンの項目にはカードしか表示されず、入れ子のブロックは含まれない(たとえば、カードの中に入れ子になっているブロックは見えない)。
          • カンバンは、横幅いっぱいを使う表示になっていない。
          • キーボード操作が十分に実装されていない——次の列へ簡単に移動したり、Escでカードや列全体を選択したりできない。
          • エージェントにも、テーブルやカンバンなど、ほとんどのコンポーネントを高水準で扱う手段がなく、ブロック単位で操作するしかない。
          • カンバンでできてほしい操作がいろいろ欠けている。並べ替え、列の移動、カンバン内の絞り込みや検索などだ(最後のものは、もっと汎用的な機能としてあるべき「ブロック単位で保存できるフィルター」の一例でもある)。
      • クエリにも同じように手をかけてほしい :(
  2. Roamのコンテンツをもっと共有しやすくする。特に、静的サイトを生成する機能と、Roamグラフの共有時のSEO改善。
    • 今ならRoamチームは、GPT-5.5 / Fableのようなエージェントに任せて、ウェブアプリの挙動をだいたい再現するまで繰り返すよう頼むだけで、静的サイト生成とSEO改善をかなり安く実装できるはずだ。私がquartzでコンテンツを公開している(そしてObsidianを使っている)理由の9割はこれだ。過去にコミュニティによる試みはあったけれど、私の知る限り、手間なく使えて最新の状態に追随したものは、まだ誰も作っていない。
  3. グラフビューの改善
    • ここには、少しの手間で改善できるところがあまりにも多い——全部書き出すだけで丸一日かかるだろう——でも、グラフビューは今よりずっと、ずっと役に立つものにできる。
      • 明示的なリンクだけでなく、意味に基づく配置。
        • 今はベクトル埋め込みがあるので、ある程度は類似度に基づいて配置し、その上にリンクを重ねて表示できる。さらに、トピックなどでクラスターを色分けすることもできる……。
        • 雰囲気が伝わるように、Twitterのエクスポート用に私が作ったグラフビューの例を挙げておく。
      • グラフの軸としての時間。
      • グラフビューでの本格的な検索・絞り込み・クエリ。
      • 詳細度 / 複数の縮尺 / ズーム。
    • 参考までに、現在の見た目はこうなっている。
  4. 高水準の機能を組み合わせられるようにする
    • フラクタルなカンバンを標準機能としてサポートできないだろうか?
    • カンバン・テーブル・クエリを、ほかのコンポーネントへの入力として使えないだろうか?
  5. エクスポートの改善
    • Roamのユーザーは、あるページについて書くとき、そのページのに書くことが多い。たとえば、[[Evolution]]というページで[[People/Charles Darwin]]について書くかもしれない。でも、グラフをMarkdownでエクスポートすると、Charles Darwin.mdを開いても何もない。
      • ここでのわかりやすい解決策は、各ページのエクスポートに「参照」というセクションを付け足し、少なくとも言及の数、言及しているページ、ブロックのテキストなどを載せることだ。
    • エクスポートのプレビューがあってもいい。PDFでのエクスポート、標準の印刷ボタンなども……。
  6. クエリ、フィルター、検索を統合する
    • フィルターの使い勝手は、全体的にかなり改善できる。
    • 考えてみると、これらはよく似た操作で、似たような画面で組み合わせて使う必要があることも多い。
      • 何が違うのだろう?
        • クエリは、検索を具体的な形にしてグラフ内で再利用できるようにしたもので、論理演算子も使える。ただし、全文検索はできない。

          [[Important]] AND [[Project: Work]]
        • 検索は、主にテキスト検索や意味検索に基づいて、候補となるブロックのビューを生成するものだ——今のところ、or/andのようなクエリ操作はできない

        • フィルターは、まあ、さまざまな範囲(全体、ページだけ、リンクされた参照など)にあるブロックのリストを絞り込むものだ。ただし、こちらは絞り込みに使えるページを最初から提示してくれる(何をクエリするか自分で考える必要があるのとは違う)。また、この絞り込み方を保存できる場合もある。

      • いや、これらは同じものであるべきだ! 検索で論理演算子を使えるべきだし、検索結果を一時的に絞り込めるべきだ! 探しているページやブロックを指定したら、その中で部分文字列の検索ができるべきだ!
  7. あの忌々しいウェブサイトを更新する
    • もっとわかりやすくなるように、一新する必要がある。Roamはノートを取るためのツールではない。最初はそういうものとして立ち上がったにせよ。それに、静的サイト生成があれば、ヘルプや開発者向けのグラフもちゃんと簡単に見つかるようになるはずだ。
  8. TODOの改善
    • TODONTという状態を追加するのはどうだろう(結局やらないTODOがよくあるので)? 完了にした日時を記録するのは? もっと使いやすい延期の仕組みは? 繰り返しのTODOを設定する機能を追加するのはどうだろう。たとえば{{[[TODO]]: recurs: [[weekly]]}}のように。
  9. 実装してほしい: Move block to... ——説明するまでもないだろう。
  10. 入力時に 1. と打ったら、番号付きリストのブロックビューへ自動的に切り替わるべきだ。
    • 厳密には「番号付きリスト」になるのが、1.を入力しているブロックの親ブロックだとか、そんなことはどうでもいい——切り替わってほしい! 仮の親ブロックを追加するなり何なり、そこはどうでもいい。

まったく新しい基本要素

エージェントとAIチャットを中心的な要素にする

  • LLMチャットを通じて知識をたどるための基盤として、Roamを本格的に位置づけることを考えてみる。
    • LLMチャットアプリはどれも、同じ問題を抱えている。情報がチャットの中に埋もれてしまうのだ。Roamは、そうしたチャットを行う基盤であると同時に、知識グラフに役立てるために知識を抽出して整理する場所として、ほかにはない適性を持っている。
      • 言い換えれば、入力(チャット)と出力(成果物)の両方を、同じ媒体の中に置ける。
      • この方向への第一歩は、おそらくもっとよいチャットと共同利用の基本要素が必要だで描いたような、チャットの基本要素の改善だろう。
      • そうすれば、Roamの中にNotionのようなAIチャットを持てる。これを実現しているコミュニティ製プラグインはあるけれど、正直、標準機能としてサポートするに値すると思う。
  • エージェント向けの完全なMCP/CLIサポート。
    • 実はこれは今ではほぼ実装済みだけれど、それでも触れておくことは大事だと思う。エージェントは、Roamも、その使い方も、コンポーネントも、最初から理解しているわけではない。
  • エージェント向けに、IDEのような操作や支援機能を充実させる。 Roamには、グラフ内でコードを実行できるroam/jsコンポーネントがある——でも、エージェントがそれをもっとうまく使えるように、できることがあるかもしれない。たとえば、スキルのドキュメント、MCPツールへのよりよい注釈、エージェント向けの意味検索ツールなど……。

もっとよいチャットと共同利用の基本要素が必要だ

  • a) チャット用のブロックビュー / コンポーネントが必要だ。
    • 今はcommentsがある——ただ、これはほぼショートカットキー(コメントボタンをCmd+クリックする)だけの機能で、サイドバーを通じてコメント用のブロック構造を作るものだ。
    • でも、見た目だけでも改善できる。
      • ブロックに書き手の名前を表示する、末端のブロックやスレッドのビューを用意する、など。Max KriegerGlueでチャットするを読み込ませて、ごく短時間で作った実験がこちら。
    • ブロック単位の権限を持つチャットを定義して、一部の人やエージェントだけがそのツリーを閲覧したり発言したりできるようにするのはどうだろう? など。
  • b) ブロックをすぐに確定するのではなく、提案されたブロックとして扱う、Roam内のPR用UXが必要だ。
    • 共同利用やエージェントを考えると、ブロックや差分をすぐに確定するのではなく、確認・承認・却下する手段が必要だと思う。
  • c) ブロックのバージョン管理の改善。
    • AIチャットのウェブサイトは、私が見た中で初めて、実用に耐えるブロックのバージョン管理を実装した。Roamのほうが先にブロックのバージョン機能を持っていたけれど、ほとんど使いものにならない。もっと手をかける必要がある。

時間をもっと適切にモデル化する必要がある

  • a) タイムライン / Google Calendar形式のブロックビューが必要だ。
    • Roamのチームやユーザーの多くは、作業の合間に記録をつけている。それなのに、その粒度で時間を扱うための標準的なサポートがない! デイリーノートの中でGoogle Calendarの使い勝手を再現できたら、とても便利だろう。
  • b) 組み合わせ可能な時間の抽象化(時間 > 日 > 週 > 月 > 年 > 十年 / 世紀)。
    • Roamの大きな問題は、物事が埋もれてしまい、時間を通じた全体像が見えなくなることだ。
    • 今はデイリーノートがあるけれど、「週」や月、年をひとまとまりとして見たり参照したりできない。
    • 視覚的な面では、1週間をシンプルなメイソンリーレイアウトで並べるだけでも、あるいは月単位のカレンダービューがあるだけでも、すばらしい。
  • 検索・フィルター・クエリなどの全体で時間を扱えるようにする——説明するまでもないだろう。このクエリに合う先週の結果を全部見せて、といったことができない……。
  • 問題の一端は、この時間が連続的であると同時に離散的でもあることだ——だから、ここではかなり本格的に数学を考える必要がありそうだ……。

埋め込み可能な媒体としてのRoam

  • 新しいアイデアではないと思うけれど、私は以前から、媒体としてのRoamを、ウェブ上のほかの場所でも入力と出力の両方に使いたいと思うことがよくあった。たとえば、
    • Roamを土台に作られた、ウェブサイトに埋め込めるフォームを想像してみてほしい。
    • 「Roamシート」を埋め込んで、動画の横でメモを取れるようにする。
    • 走り書きのメモを友人に共有する。
    • ブログ記事の中にRoamのコンテンツを埋め込む。
  • APIがいくつか整備された今、こうしたことは以前より実現しやすくなっている……。

本格的なグラフ探索とハイパーグラフの機能

  • エッジは、もっと強力なものになれる。今のRoamでは、エッジを直接操作できない。属性はおおむねこの方向へ向かっているのだと思うけれど、間違っているかもしれない……。
  • 「クラスター」を操作したり、もっと上の階層からグラフを眺めたりする手段もない……。

追伸:この記事はNotionとは何の関係もない。私はNotionの製品を楽しく使っているし、そこには、すばらしいGeoffrey Littをはじめ、才能ある人たちがたくさんいる。ただ、面白いタイトルだと思っただけだ。