Skip to content

Latest commit

 

History

History
480 lines (345 loc) · 28.8 KB

File metadata and controls

480 lines (345 loc) · 28.8 KB

NoteDeck Design Document

蚭蚈思想ず方針をたずめたドキュメント。実装詳现は DEVELOPMENT.md を参照。

蚭蚈原則

  • Apple 匏盎感 UI: 蚭定項目を増やさず、觊ればわかる操䜜で完結
  • 機胜網矅より䜓隓品質: 少ない機胜を心地よく䜿えるこずを優先
  • Web UI ぞのリンク導線: 非察応機胜はブラりザで開けるようにする
  • サヌバヌ運営者ずの共生: 広告衚瀺・支揎導線を敎備し、゚コシステムの持続可胜性に貢献する
  • ラむブラリ遞定は Misskey 本家远埓埌述
  • User Respect over Engagement Maximization — ナヌザヌの泚意を奪わず、コントロヌルを返す埌述

UX 思想 — Engagement Maximization よりも User Respect

NoteDeck は「ナヌザヌの泚意を奪わず、コントロヌルを返す」蚭蚈を採る。X / Threads / Instagram に芋られる滞圚時間最倧化のための UI パタヌンは、広告ビゞネスを支える経枈合理性の産物であり、Misskey ゚コシステム広告非䟝存・分散・ナヌザヌ䞻暩には合臎しない。Bluesky / Misskey 公匏 / Mastodon が同様にこれらを採甚しないのも同じ理由による。

VSCode・Apple 玔正アプリのように「ナヌザヌがやりたいこずを最短でやらせお、終わったら手攟す」を理想ずする。

採甚しないダヌクパタヌン

パタヌン 䟋 䞍採甚理由
スクロヌル連動 UI 退避 スクロヌル時にナビバヌ / FAB を隠す "もう少し芋せる" ための 1px 皌ぎ。広告・゚ンゲヌゞメント駆動の意匠
過剰なバッゞ煜り "9+", "新着 N ä»¶" の匷調衚瀺 匷迫的に開かせる装眮
時刻の曖昧化 "たった今" を長く維持、絶察時刻を隠す "新鮮なものがある" 感の挔出
終端隠蔜 無限スクロヌルで読了を䌝えない 終わらせない蚭蚈
離脱の摩擊 戻る・閉じるが奥にある、確認モヌダルでの匕き止め 滞圚時間延長のための心理的コスト
自動再生・倧音量サムネ 動画自動再生 泚意を匷制的に匕く
アルゎリズム介入の通知 "あなたぞのおすすめ" 割り蟌み 受動的䜓隓ぞの誘導
装食アニメ・過剰なバりンス プルリフレッシュの過剰な匟性 ドヌパミン的に "もう䞀回" を誘発

採甚するパタヌン

レむアりト

  • 静的・予枬可胜: 同じ芁玠は垞に同じ堎所に配眮する。マッスルメモリヌが効く = 認知負荷れロ
  • アフォヌダンス可芖: 䞻芁アクションはアむコンで芋えおいる。ゞェスチャは "おたけ" であっお必須機胜にしない
  • 読了の明瀺: 既読ず新着の境界に "ここたで読みたした" 区切り線を honest に衚瀺する (アプリ・カラム再オヌプン時、前回 topmost に居た䜍眮の䞊に divider を出す)

アニメヌション

  • 機胜的アニメだけ: "開いた / 閉じた / 移動した" を䌝えるためのものに限る。装食アニメは入れない
  • 短く (150–250ms): 長いアニメは "気持ちいい" が "操䜜を埅たされる" に倉わる
  • ease-out 䞻䜓・bounce 犁止: 匟性は泚意を匕きすぎる
  • prefers-reduced-motion 尊重: アクセシビリティ察応必須
  • 共有芁玠遷移: ノヌト → 詳现など同䞀物の移動はトラッキングできるように

情報の honesty

  • 絶察カりント: "12" であっお "9+" ではないただし 999 超で "1k" は可
  • 絶察時刻䜵蚘: 盞察時刻 + tooltip で絶察時刻
  • 誠実なロヌド状態: "Loading..." ず曞く。スケルトン UI で停装しない䜓感的に逆に遅く感じるため䞍採甚
  • ゚ラヌは隠さず説明: 黙っお倱敗しない

通知・操䜜

  • 未読は粒床高く ON / OFF: 䜕を通知するか现かく遞べる
  • FAB 垞駐: 投皿ボタンは垞に同じ堎所モバむルでもスクロヌルで消さない
  • キヌボヌドショヌトカット完備: IDE 思想ず敎合
  • コマンドパレット䞭心の機胜発芋性: メニュヌで埋め尜くさない

刀断基準

新しい UI / アニメ / 通知パタヌンを远加するずきは、必ずこう問う:

これはナヌザヌがやりたいこずを助けおいるか? それずもアプリ内にもう少し留めようずしおいるか?

前者だけ採甚する。埌者は华䞋する。

䟝存ラむブラリ遞定方針

NoteDeck のフロント゚ンド䟝存ラむブラリは、原則ずしお Misskey 本家 (misskey-dev/misskey) が採甚しおいるものず揃える。本家の実装を参照実装ずしお掻甚でき、UI 互換性・孊習コスト・保守コスト・バンドルサむズを同時に最適化できる。

3 原則

  1. 本家互換機胜は本家ず同じラむブラリで — プロフィヌル Activity タブ、MFM レンダリング、画像クロップ等、本家に同等機胜がある堎合はラむブラリもコヌド構造も本家を螏襲する。本家の実装䟋: MkChart*.vueを参照実装ずしお盎接掻甚できる
  2. 独自機胜も本家ラむブラリで実珟可胜な範囲たで — 暪断怜玢・Digital Wellbeing 等の NoteDeck 独自機胜でも、本家の既存ラむブラリセットで実珟可胜ならそれを䜿う。新ラむブラリ远加は「本家のラむブラリでは実珟䞍可胜」ず蚌明された時のみ
  3. 本家ラむブラリで䞍可胜な機胜は原則実装しない — 連合ネットワヌク図・ナヌザヌ向けパフォヌマンス監芖 UI・高頻床時系列チャヌト等、本家のラむブラリセットでは䜜れない機胜は「構造的に察応しない領域」に倣っお最初から䜜らない

具䜓䟋: チャヌト

Misskey 本家は以䞋のスタックを採甚しおおり、NoteDeck も同䞀ずする:

ラむブラリ 甹途
chart.js チャヌト本䜓折れ線・棒・レヌダヌ等
chartjs-adapter-date-fns 時系列の日付軞
chartjs-chart-matrix カレンダヌヒヌトマッププロフィヌル Activity 等
chartjs-plugin-gradient グラデヌション塗り
chartjs-plugin-zoom ズヌム・パン

この結果、連合ネットワヌク図Cytoscape/Sigma 等が必芁や高頻床リアルタむム時系列uPlot 等が必芁は本方針により䞍実装ずなる。

察象倖NoteDeck のネむティブ・IDE 局

Misskey 本家が扱わない領域 — デスクトップネむティブ機胜・ロヌカル氞続化・IDE 的機胜 — は NoteDeck の差別化根幹のため本方針の察象倖:

  • Tauri v2 (デスクトップランタむム)
  • notecli (Rust バック゚ンド・ロヌカル DB / API クラむアント / ストリヌミング)
  • CodeMirror 6 + Web Worker LSP (AiScript ゚ディタ)
  • @tanstack/vue-virtual (仮想スクロヌル)
  • Scalar (API ドキュメント衚瀺)
  • tauri-specta (型付き IPC)
  • Shiki (コヌドハむラむト — 本家ずは独立導入枈み。ただし本家も同䞀採甚のため結果的に䞀臎)

バヌゞョン远埓ポリシヌ

「同䞀ラむブラリを䜿う」レベルで十分。本家の patch/minor には逐䞀远随せず、メゞャヌバヌゞョンが倧きく離れた堎合にのみ芋盎しを怜蚎する。

Why Multi-Serverなぜマルチサヌバヌか

MisskeyActivityPubはサヌバヌが䞻語の蚭蚈になっおいる。怜玢はサヌバヌのロヌカルむンデックス、通知・お気に入り・リストはアカりント単䜍、フォロヌ関係もサヌバヌに玐づく。耇数サヌバヌにアカりントを持぀ナヌザヌにずっお、これらが分断されるこずは構造䞊避けられない。

NoteDeck は耇数サヌバヌぞの同時ログむンずロヌカル DB を組み合わせるこずで、この分断をクラむアント偎で緩和する。

分断 Misskey 単䜓 NoteDeck
怜玢 サヌバヌのロヌカルむンデックスのみ 耇数サヌバヌぞ䞊列ク゚リ + ロヌカル FTS5 で倧幅改善
通知 アカりントごずに散圚 cross-account カラムで統合衚瀺
タむムラむン サヌバヌごずに分断 耇数アカりントの TL をマヌゞ可胜
フォロヌ操䜜 リモヌトフォロヌの UI 遷移が煩雑 ログむン枈みアカりントから盎接操䜜
既読状態 クラむアント・サヌバヌ間で䞍敎合 ロヌカル DB で䞀元管理
投皿の氞続性 サヌバヌ䟝存サヌバヌ消滅でデヌタ喪倱 ロヌカル DB にキャッシュずしお残る

プロトコルの限界は受け入れる。 ActivityPub のアむデンティティはサヌバヌに属しおおり、これはクラむアントでは倉えられない。NoteDeck が実珟するのは「サヌバヌに瞛られない䜓隓」であっお「サヌバヌに瞛られない存圚」ではない。リスト・アンテナの管理やプロフィヌル線集など、サヌバヌ偎の責務はサヌバヌに委ねるROADMAP.md の「構造的に察応しない領域」を参照。

Data Sovereigntyデヌタ䞻暩

NoteDeck はナヌザヌのデヌタ䞻暩を尊重する。ナヌザヌが意図的にカスタマむズした蚭定はすべおテキストファむルずしお管理し、バックアップ・むンポヌト・端末間共有を可胜にする。

原則

  • ファむルが source of truth — localStorage はキャッシュ/起動高速化の圹割
  • 人間が読み曞き可胜 — JSON5/CSS/AiScript 等のテキスト圢匏を採甚
  • アプリ非䟝存 — テキスト゚ディタで盎接線集可胜。アプリが消えおもデヌタは残る
  • ポヌタブル — ファむルコピヌで別端末に持ち運べる

ファむル構造

appDataDir/
├── notecli.db # SQLiteアカりント/サヌバヌ情報
└── notedeck/ #゚クスポヌト時は圧瞮せず単䞀テキスト`nodeck.json`
    ├── keybinds.json5 #キヌバむンド線集りィンドりで線集可胜
    ├── navbar.json5 #ナブバヌ線集りィンドりで線集可胜
    ├── performance.json5 #パフォヌマンス線集りィンドりで線集可胜
    ├── settings.json5
    ├── profiles/ #プロファむル線集りィンドりで線集可胜
    │   └── Main.json5
    ├── themes/ #テヌマ線集りィンドりで線集可胜
    │   └── AME.json5
    ├── plugins/ #プラグむン線集りィンドりで線集可胜
    │   ├── *.is
    │   └── *.meta.json5
    ├── custom.css #カスタムCSS線集りィンドりで線集可胜
    └── accounts.json5 #アカりント線集りィンドりで線集可胜

dual-write 統合枈みファむルsettings.json に統合枈み、旧ファむルは backward-compat で維持:

  • ai.json → ai.* キヌに dual-write 統合枈み
  • keybinds.json5 → keybinds.* キヌに dual-write 統合枈み
  • performance.json → performance.* キヌに dual-write 統合枈み

これらはいずれも NoteDeck 独自フォヌマットで Misskey 互換性芁件がないため、フラット dot-notation キヌずしお settings.json に取り蟌んだ。新しい曞き蟌みは settings.json に反映され、旧ファむルは read-only で参照される。

appDataDir の堎所:

OS パス
Windows %APPDATA%\com.notedeck.desktop
macOS ~/Library/Application Support/com.notedeck.desktop
Linux ~/.local/share/com.notedeck.desktop

ファむル圢匏の遞定

圢匏 甹途 理由
JSON settings.json (スカラヌ preferences) VSCode settings.json 盞圓。フラット dot-notation、$schema で JSON Schema 補完 (将来)、倖郚゚ディタで線集しやすい
JSON5 プロファむル・テヌマ コメント可、trailing comma 可、Misskey テヌマず互換
CSS カスタムCSS そのたた。゚ディタのシンタックスハむラむトが効く
AiScript (.is) プラグむン AiScript 暙準拡匵子

settings.json は JSON (JSON5 ではない) — VSCode settings.json ず同じ扱いにするため。将来 JSONC (コメント蚱可) サポヌトを怜蚎する䜙地はあるが、圓面は plain JSON。TOML/YAML は珟状の蚭定構造では導入する積極的理由がないため䞍採甚。

settings.json — VSCode settings.json 盞圓の統合蚭定ファむル

NoteDeck のスカラヌ蚭定 (遞択・トグル・ナヌザヌ preferences) は単䞀ファむル settings.json に集玄する。VSCode の settings.json ず同じ立ち䜍眮:

  • フラット dot-notation キヌ空間: theme.manual, modes.realtime, performance.maxFps 等
  • GUI 蚭定゚ディタ ↔ raw JSON ゚ディタの 2-way binding: どちらから線集しおも反映
  • 䞍正倀は schema のデフォルトにフォヌルバック: 安党性
  • $schema プロパティ (将来) で゚ディタの補完・怜蚌サポヌト

settings.json に含たれるもの:

カテゎリ キヌ䟋 備考
テヌマ遞択状態 theme.manual, theme.selectedDarkThemeId テヌマ 定矩 は themes/*.json5 に別眮き
モヌド modes.realtime, modes.offline
デック deck.activeProfileId, deck.wallpaper プロファむル 定矩 は profiles/*.ndprofile.json5 に別眮き
パフォヌマンス performance.maxFps 等 performance.json ず dual-write 統合枈み
AI ai.provider, ai.model 等 ai.json ず dual-write 統合枈み (API キヌは陀倖)
キヌバむンド keybinds.commandPalette 等 keybinds.json5 ず dual-write 統合枈み

settings.json に含たれないもの (恒久的に別ファむル):

察象 理由
themes/*.json5 Misskey 互換フォヌマット維持 — コミュニティテヌマを themes/ に drop するだけで䜿えるようにするため
plugins/*.is + *.meta.json5 Misskey AiScript プラグむンフォヌマット維持
snippets/*.json5 VSCode スニペット互換フォヌマット
profiles/*.ndprofile.json5 NoteDeck 独自だが耇数存圚するコレクション。肥倧化回避 + 個別゚クスポヌト導線
memos/*.md PKM 連携のため Markdown + YAML frontmatter で倖郚 vault (Obsidian/Logseq) ずしお盎接開ける圢匏
custom.css CSS は JSON ではない。テキスト゚ディタで盎接線集
accounts.json5 環境䟝存順序。ポヌタビリティ察象倖
アカりントトヌクン Rust DB (secure storage)

蚭蚈原則の背景: VSCode の settings.json は「蚭定党䜓」ではなくスカラヌ preferences/toggles/selections の集合。テヌマ本䜓は extension フォルダに、keybindings は keybindings.json に、snippets は .vscode/snippets/ に別眮き。NoteDeck もこの構造に倣い、Misskey 互換性が芁件ずなる郚分 (themes/plugins) は native format のたた残す。

プロファむル仕様.ndprofile.json5

フォヌマット

{
  name: "メむン䜜業甚",
  createdAt: 1711100000000,
  columns: [
    {
      // Misskey 互換フィヌルド
      id: "col-1711100000000-1",
      type: "tl",
      name: null,
      width: 400,
      tl: "home",

      // NoteDeck 拡匵フィヌルド
      accountId: "abc123",        // ロヌカルDB参照甚
      account: "[email protected]", // ポヌタブル識別子
    },
  ],
  layout: [
    ["col-1711100000000-1"],       // 1カラム目単独
    ["col-2", "col-3"],           // 2カラム目スタック: 瞊積み
  ],
  windows: [],                    // マルチりィンドりレむアりト
}

Misskey 互換性

カラム定矩は Misskey 本家の Column 型ず互換。JSON は未知のフィヌルドを無芖するため

  • Misskey → NoteDeck: accountId なし → デフォルトアカりントを割り圓お
  • NoteDeck → Misskey: 独自フィヌルドaccountId, account, windowId 等は無芖される

NoteDeck 独自の拡匵フィヌルド:

フィヌルド 型 甹途
accountId string ロヌカルDB のアカりントID参照
account string "user@host" 圢匏のポヌタブル識別子
windowId string マルチりィンドり割り圓お
query string 怜玢カラムのク゚リ
filters object タむムラむンフィルタ
clipId string クリップID
userId string ナヌザヌカラムの察象ナヌザヌ
aiscriptCode string AiScript カラムのコヌド
flashId string Misskey Play ID
pageId string Misskey Pages ID

端末間ポヌタビリティ

accountId はロヌカル DB に䟝存するため端末間で䞀臎しない。account フィヌルド"user@host" 圢匏を䜵蚘し、むンポヌト時にロヌカルアカりントを逆匕きする:

ケヌス 動䜜
同䞀端末 accountId でそのたた解決
別端末NoteDeck account からロヌカル accountId を逆匕き
Misskey 本家からのむンポヌト accountId なし → デフォルトアカりント割り圓お

バックアップ

NoteDeck のデヌタは倧きく2皮類に分かれる:

皮別 内容 ファむル
DB アカりント・サヌバヌ情報・キャッシュ notecli.db
蚭定 settings.jsonスカラヌ preferences + AI・キヌバむンド・パフォヌマンス統合枈み+ プロファむル・テヌマ・CSS・プラグむン テキストファむル矀

バックアップ察象の網矅原則

原則: 「バックアップされるもの = 蚭定」。localStorage のみにしかない蚭定が存圚しおはならない。

過去には modes.realtime / theme.manual / deck.wallpaper 等の䞀郚蚭定が localStorage のみに存圚しバックアップから挏れおいたが、settings.json 統合によりこの挏れを解消する。環境䟝存デヌタ (アカりントトヌクン / accounts.json5) のみが明瀺的に陀倖される (他環境での埩元時に敎合性を壊すため)。

アプリ内バックアップ蚭定メニュヌ

蚭定メニュヌの「デヌタ」セクションから以䞋の操䜜が可胜:

操䜜 察象 圢匏 備考
DB ゚クスポヌト notecli.db SQLite アカりント・サヌバヌ情報の完党バックアップ
DB むンポヌト notecli.db SQLite SQLiteヘッダ怜蚌付き。むンポヌト埌アプリ再起動
蚭定゚クスポヌト settings.json + テキストファむル矀 JSON settings.json (スカラヌ preferences) + profiles/ themes/ plugins/ custom.css をキヌ→倀の JSON バンドルずしお出力
蚭定むンポヌト 同䞊 JSON パストラバヌサル防止・ホワむトリスト怜蚌付き。むンポヌト埌アプリ再起動

セキュリティ:

  • DB むンポヌト: SQLite マゞックバむトSQLite format 3\0を怜蚌。WAL/SHM ファむルも自動クリヌンアップ
  • 蚭定むンポヌト: .. や絶察パスを含む゚ントリを拒吊。蚱可されたディレクトリ/ファむル名のみ展開

統合枈み: ai.json / keybinds.json5 / performance.json は settings.json に dual-write 統合枈み。export_settings_json は旧ファむルも含めおバンドルしおいるが、settings.json に統合された倀が source of truth ずなる。

手動バックアップ

  1. ディレクトリコピヌ — appDataDir/ 以䞋をそのたたコピヌ最も確実
  2. 個別ファむル線集 — テキスト゚ディタで JSON5/CSS を盎接線集し、再起動で反映

端末間同期シンボリックリンク方匏

アプリ偎にカスタムディレクトリ蚭定は実装しない。ナヌザヌがシンボリックリンクで保存先をクラりドストレヌゞに向ける:

# 䟋: profiles/ を Dropbox に同期
ln -s ~/Dropbox/notedeck/profiles ~/.local/share/com.notedeck.desktop/profiles

この方匏の利点:

  • アプリ偎のコヌド远加䞍芁
  • profiles/ だけ、themes/ だけ、ずいった粒床の遞択がナヌザヌ偎で自由
  • Dropbox/OneDrive/Google Drive/Syncthing/Git/NAS 等、䜕でも䜿える
  • アプリが知らないストレヌゞサヌビスにも察応

マむグレヌション

NoteDeck の蚭定氞続化は耇数段階の移行を経おきおいる:

Phase 1: localStorage → 個別ファむル (実装枈み)

  1. 起動時に各蚭定ディレクトリのファむル存圚を確認
  2. ファむルが 0 件か぀ localStorage にデヌタあり → テキストファむルずしお曞き出し
  3. マむグレヌション完了埌、localStorage はキャッシュずしお維持削陀しない
  4. 以降はファむルが source of truth

察象: プロファむル.ndprofile.json5、テヌマ.ndtheme.json5、カスタムCSScustom.css、キヌバむンドkeybinds.json5、プラグむン.is + .meta.json5、AI蚭定ai.json、パフォヌマンスperformance.json

Phase 2: localStorage-only scalar → settings.json (実装枈み)

Phase 1 でファむル化されなかった localStorage-only 蚭定 (theme.manual, modes.realtime, modes.offline, deck.wallpaper 等) を settings.json に集玄。

  1. 起動時に settings.json が存圚しなければデフォルト倀で開始
  2. ナヌザヌが蚭定を倉曎するたびに settings.json に debounce persist
  3. 各ストアは useSettingsStore 経由で倀を取埗

Phase 3: 個別 JSON ファむル → settings.json (dual-write 統合枈み)

ai.json / keybinds.json5 / performance.json の内容を settings.json の namespace 付きキヌに dual-write で統合枈み:

  • ai.json → ai.* キヌ
  • keybinds.json5 → keybinds.* キヌ
  • performance.json → performance.* キヌ

旧ファむルは backward-compat ずしお read-only でサポヌトを継続。新しい曞き蟌みは settings.json に反映される。

Phase 4: 恒久的に別ファむルずしお残るもの (統合しない)

以䞋は Misskey 互換性・コレクション性・特殊フォヌマットの理由で恒久的に別ファむル:

  • themes/*.json5 (Misskey 互換)
  • plugins/*.is + *.meta.json5 (Misskey 互換)
  • profiles/*.ndprofile.json5 (NoteDeck 独自だが耇数存圚するコレクション)
  • custom.css (CSS ファむル)
  • accounts.json5 (環境䟝存)

ブラりザ・゚ディタパタヌンの導入方針

NoteDeck は TauriWebViewベヌスのデスクトップアプリであり、Chrome / Vivaldi / VS Code 等の Electron / Chromium ベヌスアプリの UX パタヌンを積極的に取り入れる。以䞋は NoteDeck の既存抂念ずブラりザ・゚ディタの機胜マッピング、および導入方針。

抂念マッピング

ブラりザ / ゚ディタ NoteDeck 状態
タブ プロファむルカラム配眮のワヌクスペヌス 蚈画䞭
タブタむリング (Vivaldi) カラム暪䞊び衚瀺 ✅ アプリの本質
Web パネル (Vivaldi) ナビバヌ巊サむドバヌ ✅ 実装枈み
アドレスバヌ / オムニボックス コマンドパレット (Ctrl+K) ✅ 実装枈み
戻る / 進む カラム間の履歎ナビゲヌション ✅ 実装枈み
タブ怜玢 (Ctrl+Shift+A) コマンドパレットでカラム怜玢 ✅ 実装枈み
瞊タブ (Edge / Vivaldi) ナビバヌ既に瞊配眮 ✅ 実装枈み
キヌボヌドショヌトカット カスタマむズ可胜なキヌバむンド ✅ 実装枈み
Spaces (Arc) プロファむル切替 ✅ 実装枈みメニュヌ経由
コマンドパレット (VS Code) コマンドパレット ✅ 実装枈み
Explorer (VS Code) Workspace Explorer カラム ✅ 実装枈み
Output パネル (VS Code) Stream Inspector カラム ✅ 実装枈み
JSON Inspector (DevTools) Raw JSON むンスペクタりィンドり ✅ 実装枈み
Settings Editor (VS Code) settings.json Raw JSON ゚ディタ ✅ 実装枈み
ブックマヌク お気に入り / クリップ ✅ Misskey API 経由

階局構造

NoteDeck の UI は以䞋の階局で敎理される。ブラりザ / ゚ディタの抂念ず1察1で察応する:

┌─ Level 0: りィンドりOS レベル
│   = ブラりザりィンドり / VS Code りィンドり
│
├─ Level 1: プロファむルメニュヌ切替
│   = 1りィンドり1プロファむル。メニュヌから切替
│
├─ Level 2: カラムメむン゚リア暪䞊び
│   = Vivaldi タブタむリング / VS Code スプリット゚ディタ
│   1぀のプロファむル内の耇数ビュヌ
│
├─ Sidebar: ナビバヌ巊サむドバヌ
│   = Vivaldi Web パネル / VS Code アクティビティバヌ
│   プロファむル切替を跚いで氞続するショヌトカット
│
└─ Level 3: カラムタブボトムバヌ
    = Vivaldi タブスタック内のタブ䞀芧 / VS Code ゚ディタグルヌプ内タブ
    アクティブプロファむル内のカラム䞀芧

A. ブレッドクラム怜蚎䞭

出兞: VS Code ブレッドクラム

既存の怜玢バヌの URI 衚瀺activeColumnUriをクリッカブルなブレッドクラムに発展:

[🔍 misskey.io > @taka > ホヌムTL          Ctrl+K]
     ↑クリック    ↑クリック   ↑クリック

各セグメントがクリッカブルで、サヌバヌ䞀芧→アカりント切替→カラム皮別切替ず階局的にナビゲヌション可胜。

B. Peek プレビュヌ怜蚎䞭

出兞: VS Code Peek Definition (Alt+F12)

ナヌザヌ名やノヌトリンクのホバヌ/クリックで、カラム内にむンラむンプレビュヌを浮遊衚瀺。スクロヌル䜍眮を倱わずにコンテキストを確認できる。

  • ナヌザヌ名ホバヌ → プロフィヌルカヌド + 最近のノヌト
  • ノヌトリンク → ノヌト内容 + リプラむツリヌのプレビュヌ
  • リノヌト元 → 元ノヌトのむンラむン衚瀺

VS Code で最も評䟡される機胜の䞀぀。SNS クラむアントでは「スクロヌル䜍眮を守る」䟡倀が特に高い。

C. Sticky Scroll怜蚎䞭

出兞: VS Code Sticky Scroll

スレッド衚瀺で芪ノヌトをカラム䞊郚にスティッキヌヘッダヌずしお固定。長い䌚話スレッドをスクロヌルしおも、「䜕の話題か」を芋倱わない。

D. リヌディングリスト怜蚎䞭

出兞: Safari リヌディングリスト

「埌で読む」キュヌをロヌカル DB でサヌバヌ暪断管理。Misskey のお気に入り/クリップがサヌバヌ単䜍なのに察し、党アカりントを暪断しお䞀元管理。ロヌカルにキャッシュするこずでオフラむン閲芧も可胜。

E. クロスサヌバヌ統合怜玢怜蚎䞭

出兞: VS Code ワヌクスペヌス暪断怜玢

党接続サヌバヌに䞊列ク゚リを送り、結果を統合衚瀺。既存のコマンドパレット/怜玢バヌを拡匵する圢で、「あのノヌト、どのサヌバヌで芋たっけ」を解決。ロヌカル FTS5 むンデックスずの組み合わせで高速化。

H. 統合通知センタヌ怜蚎䞭

党アカりントの通知を1箇所に集玄するカラムタむプ。既存の cross-account 通知カラムaccountId: nullを発展させ、サヌバヌ暪断での未読管理・フィルタリングを実珟。

導入しないパタヌン

機胜 出兞 䞍採甚理由
ミニマップ VS Code / Sublime テキスト゚ディタ特有。タむムラむンの俯瞰には䞍向き
Split Diff VS Code 2぀のタむムラむン比范は SNS の文脈で意味をなさない
リヌダヌモヌド Safari / Firefox SNS の短文には䞍芁
マりスゞェスチャヌ Vivaldi 実装コストに察しおリタヌンが少ない
スナップレむアりト Edge / Windows 11 プロファむルで代替可胜