バージョン: 1.0 作成日: 2026-03-07 対象リポジトリ: NAKADANobuhiro/CosenseLink
CosenseLink は、Cosense(旧 Scrapbox)のエクスポートデータを読み込み、ページ間のリンク関係をインタラクティブなネットワークグラフとして可視化するブラウザアプリケーションである。
現在のリリース(CosenseLink-A6J.html)は「アトロク2ファンサイト」プロジェクトに特化したデータを同梱したスタンドアロン版として提供される。コアエンジン(cosense-graph.js)は他プロジェクトからも再利用可能な汎用設計となっている。
| 項目 | 要件 |
|---|---|
| 実行環境 | モダンブラウザ(Chrome / Firefox / Safari / Edge 最新版) |
| ネットワーク | CDN から D3.js v7 を読み込むため、初回はオンライン必須(キャッシュ後はオフライン可) |
| サーバー | 不要(静的ファイルのみ。ローカルファイルシステムまたは任意のHTTPサーバーで動作) |
| 外部依存 | D3.js v7(https://cdnjs.cloudflare.com/ajax/libs/d3/7.9.0/d3.min.js) |
ページのタイトルまたは本文先頭行に基づき、以下のカテゴリに自動分類される。
| カテゴリ | 判定条件 | 表示色 |
|---|---|---|
date(日付) |
タイトルが YYYY-MM-DD 形式で始まる |
黄(#e3b341) |
movie(映画) |
本文に [映画] タグを含む |
紫(#d2a8ff) |
person(人物) |
本文に [人物] タグを含む |
白(#ffffff) |
default(その他) |
上記以外 | 青(#58a6ff) |
カテゴリ判定の優先順位は date > movie > person とする。
#f78166)、隣接ノードをカテゴリ色で強調表示する。ノードを選択するとサイドパネル(幅 460px)が右側に展開し、以下の情報を表示する。
パネルには「戻る(←)」ボタンがあり、直前に閲覧したページに戻れる。「×」ボタンでパネルを閉じる。
サイドパネル内でのCosense 独自記法のHTMLへの変換ルールを以下に示す。
| 記法 | 出力 |
|---|---|
[*** テキスト] |
大見出し(font-size: 1.25em) |
[** テキスト] |
中見出し(font-size: 1.1em) |
[* テキスト] |
太字(<strong>) |
[/ テキスト] |
イタリック(<em>) |
[- テキスト] |
取り消し線(<del>) |
`code` |
インラインコード(<code>) |
[画像URL] |
画像(<img>) |
[YouTube/Vimeo URL] |
動画リンク(▶ 動画) |
[ラベル URL] |
外部リンク(<a target="_blank">) |
[URL] |
URL そのままをリンク表示 |
[ページ名] |
内部リンク(クリックでそのページへ移動) |
#タグ |
ハッシュタグ(内部リンクと同等) |
code:言語名 |
コードブロック(ファイル名付き) |
> テキスト |
引用 |
| タブインデント | 箇条書き(レベルに応じて • / ◦ / ▸ を表示) |
コアエンジンは2つの読み込み方式をサポートする。
方式 A(自動起動): window.COSENSE_DATA にデータをセットした後 cosense-graph.js を読み込むと、DOMContentLoaded 時に自動でグラフを初期化する。
方式 B(手動起動): cosense-graph.js 読み込み後、任意のタイミングで initGraph(data) を呼び出す。fetch() などで非同期にデータを取得してから初期化する場合に使用する。
| 項目 | 要件 |
|---|---|
| パフォーマンス | フォースシミュレーション収束後はアニメーションを停止し、CPU 使用率を抑える |
| 可搬性 | 単一ディレクトリ(HTML + JS + CSS)で動作し、サーバー不要 |
| 拡張性 | コアエンジン(cosense-graph.js)を他プロジェクトに流用可能 |
| セキュリティ | 外部サイトへのリンクは rel="noopener" を付与する |
| アクセシビリティ | 現バージョンでは特段の対応なし(将来課題) |
入力データは Cosense のエクスポート JSON 形式に準拠する。
{
"name": "project-id",
"displayName": "プロジェクト表示名",
"pages": [
{
"title": "ページタイトル",
"lines": [
{ "text": "ページタイトル(1行目)" },
{ "text": "本文..." }
],
"linksLc": ["リンク先タイトル(小文字)"],
"views": 100,
"updated": 1700000000
}
]
}
pages が直接配列として渡される形式にも対応する。
CosenseLink/
├── CosenseLink-A6J.html # アトロク2ファンサイト向けエントリーポイント
├── a6j.js # アトロク2ファンサイトのデータ(window.COSENSE_DATA)
├── js/
│ └── cosense-graph.js # コアグラフエンジン(汎用)
└── css/
└── cosense-graph.css # スタイルシート
a6j.js)は約 9.5MB あり、モバイル環境では読み込みに時間がかかる場合がある。fetch() を使う場合はHTTPサーバー経由での提供が必要。