mcpField
W
wiki-dashboard

wiki-dashboard

github.com/ar9av生産性3.6k2.8k 回インストール1 日前に更新
リポジトリ

wiki-dashboard について

wiki-dashboardは、Obsidian vaultの動的ビューを作成するスキルです。用途に応じて標準機能のObsidian BasesとDataviewを選び、フィルター、グループ化、数式、クエリの例を示します。

主な機能

  1. 01Obsidian Basesによるライブビュー定義
  2. 02SQL風のDataviewクエリ作成
  3. 03フォルダー、タグ、条件によるノート抽出
  4. 04グループ化、数式、テーブル列の設定
  5. 05一般的なダッシュボードのレシピ

活用シーン

  1. 01カテゴリやタグ別のvaultノート閲覧
  2. 02長期間更新されていないページの確認
  3. 03複数フォルダーのプロジェクトページ集約

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/ar9av/obsidian-wiki --skill wiki-dashboard

インストール後、Claude Code で/wiki-dashboardを入力して読み込まれたか確認します。

詳細

Wiki ダッシュボード — 動的な Vault ビュー

利用できるツールは 2 つあります。Obsidian Bases(標準搭載、GUI 主導、プラグイン不要)と Dataview(コミュニティプラグイン、SQL のような構文、より高機能)です。ユーザーが Dataview を指定した場合、または GROUP BY/計算列が必要な場合を除き、ユーザーがどちらを利用できるかを確認し、Bases を優先してください。

始める前に

執筆プロファイル: 自然言語の Markdown を新規作成または書き換える前に、llm-wiki/SKILL.md の Writing Profile Resolution セクションを読み、その内容を適用してください。フレームワークのスキーマ、出典、安全性、および操作固有の要件が優先されます。 WRITING.md の設定は、任意の Markdown ダッシュボードの文章にのみ適用してください。.base の構文は変更しないでください。

  1. 設定を解決する — llm-wiki/SKILL.md の Config Resolution Protocol に従います(インラインの @name による上書き → CWD から上位へ .env を検索 → グローバル設定 → セットアップを促す)。これにより OBSIDIAN_VAULT_PATH がわかります。
  2. $OBSIDIAN_VAULT_PATH/index.md を読み、存在するカテゴリとページを把握します。
  3. 表示する対象が指定されていない場合は、何を表示したいかユーザーに尋ねます。フォルダー、タグ、カテゴリ、日付範囲などです。
  4. どちらのツールを使うか不明な場合は、Dataview がインストールされているかユーザーに尋ねます。

オプション A — Obsidian Bases(.base ファイル)

Bases は、Vault 内のノートに対するライブビューを定義する YAML ファイルです。Obsidian 1.8+ に標準搭載されており、プラグインは不要です。

公式の標準スキーマ

トップレベルのキー:

filters:      # Global filter applied to all views (expression strings under and/or/not)
formulas:     # Named computed properties — referenced as formula.<name>
properties:   # Display config per property — sets displayName for column headers
summaries:    # Aggregation formulas (e.g. mean, sum)
views:        # Array of view definitions (required)

views: 内の各項目:

views:
  - type: table          # table | list | cards | map
    name: "View Name"    # display label
    limit: 50            # optional max rows
    order:               # column display order (list of property/formula names)
      - file.name
      - note.updated
    groupBy:             # grouping — goes INSIDE the view, NOT at top level
      property: note.tags
      direction: ASC     # ASC | DESC
    filters:             # view-specific filter (merges with global filters)
      and:
        - 'note.status != "done"'
    summaries:
      formula.myFormula: Average
フィルター構文 — 重要

フィルターには型付きオブジェクトではなく、式文字列を使います。 必ず and:、or:、または not: で囲んでください。リストをそのまま指定すると、「and/or/not キーは 1 つだけ指定できます」という解析エラーが発生します。

# CORRECT
filters:
  and:
    - file.inFolder("concepts")

# WRONG — typed objects (parse error)
filters:
  - type: folder
    folder: concepts

フィルターはネストできます:

filters:
  or:
    - file.hasTag("book")
    - and:
        - file.inFolder("concepts")
        - file.hasTag("research")
    - not:
        - file.hasTag("archived")
プロパティ名の規則

コンテキストによって名前の指定方法が異なります。Obsidian の自動整形の動作から確認されています:

コンテキストフロントマターのフィールド tagsファイル名数式
properties: のキーnote.tagsfile.nameformula.<name>
order: の値tags(そのまま)file.nameformula.<name>
groupBy.property:tags(そのまま)file.name—
filters: の式file.hasTag(...) / note.tagsfile.nameformula.<name>
formulas: の式note.tags、note.updatedfile.name—
基本のテーブル — フォルダーフィルター
filters:
  and:
    - file.inFolder("concepts")
properties:
  file.name:
    displayName: Page
  note.tags:
    displayName: Tags
  note.summary:
    displayName: Summary
  note.updated:
    displayName: Updated
views:
  - type: table
    name: Table
    order:
      - file.name
      - tags
      - summary
      - updated
カードビュー — フォルダーフィルター
filters:
  and:
    - file.inFolder("entities")
properties:
  file.name:
    displayName: Entity
  note.title:
    displayName: Full Name
  note.tags:
    displayName: Tags
  note.summary:
    displayName: Summary
views:
  - type: cards
    name: Cards
    order:
      - file.name
      - title
      - tags
      - summary
プロパティでグループ化 — groupBy はビューの内側に置く

groupBy を設定した場合、そのプロパティは order: から省いてください。プロパティはグループの見出し行になるため、列としても追加すると重複します。

filters:
  and:
    - file.inFolder("concepts")
properties:
  file.name:
    displayName: Concept
  note.summary:
    displayName: Summary
  note.updated:
    displayName: Updated
views:
  - type: table
    name: By Domain
    groupBy:
      property: tags        # bare property name, no note. prefix
      direction: ASC
    order:
      - file.name           # do NOT include tags here — already the group header
      - summary
      - updated
タグフィルター
filters:
  and:
    - file.hasTag("machine-learning")
properties:
  file.name:
    displayName: Page
  note.category:
    displayName: Category
  note.summary:
    displayName: Summary
views:
  - type: table
    name: Table
    order:
      - file.name
      - category
      - summary
複数フィルター(フォルダー AND タグ)
filters:
  and:
    - file.inFolder("projects")
    - file.hasTag("active")
properties:
  file.name:
    displayName: Project
  note.summary:
    displayName: Summary
  note.updated:
    displayName: Last Updated
views:
  - type: cards
    name: Cards
    order:
      - file.name
      - summary
      - updated
OR フィルター(2 つのフォルダー)
filters:
  or:
    - file.inFolder("concepts")
    - file.inFolder("entities")
properties:
  file.name:
    displayName: Page
  note.category:
    displayName: Category
  note.updated:
    displayName: Updated
views:
  - type: table
    name: Table
    order:
      - file.name
      - category
      - updated
数式による計算列
filters:
  and:
    - file.inFolder("concepts")
formulas:
  days_stale: "floor((now() - note.updated) / 86400000)"
properties:
  file.name:
    displayName: Page
  note.updated:
    displayName: Updated
  formula.days_stale:
    displayName: Days Stale
views:
  - type: table
    name: Stale
    order:
      - file.name
      - updated
      - formula.days_stale
フィルター式のリファレンス
式動作
file.inFolder("path")そのフォルダー内のページ
file.hasTag("tag")そのタグが付いたページ(# 接頭辞なし)
file.hasLink("Note Name")あるノートへのリンクを含むページ
file.name == "note-name"ファイル名が完全一致するページ
file.ext == "md"拡張子によるフィルター
note.propertyName任意のフロントマターのプロパティ
formula.formulaName名前付き数式の結果
now()現在のタイムスタンプ(ミリ秒)

Obsidian の UI が生成する形式について: Obsidian の GUI で .base ファイルを書き込んだり再整形したりすると、標準スキーマの代わりにトップレベルの columns:、sort:、view: キーを使った簡略形式が出力される場合があります。この形式も動作し、Obsidian は両方を受け付けます。手動で作成するファイルでは、上記の標準スキーマを使用してください。


オプション B — Dataview(コミュニティプラグイン)

Dataview は、あらゆるノート内の ```dataview ``` コードブロックで、SQL のようなクエリ言語を使用します。計算列、GROUP BY、フォルダーをまたぐクエリでは、Bases より高機能です。

基本のテーブル — フォルダー
```dataview
TABLE
  tags AS "Tags",
  summary AS "Summary",
  file.mtime AS "Last Modified"
FROM "concepts"
SORT file.mtime DESC
```
クリック可能なリンク付きテーブル(TABLE WITHOUT ID)
```dataview
TABLE WITHOUT ID
  file.link AS "Entity",
  tags AS "Tags",
  summary AS "Summary"
FROM "entities"
SORT file.name ASC
```
GROUP BY — グループ化後は rows. 接頭辞を使用

GROUP BY の後は、個々のファイルプロパティに rows. 接頭辞を付ける必要があります。付けないと、列が空になるかエラーが発生します。

```dataview
TABLE WITHOUT ID
  rows.file.link AS "Concept",
  rows.summary AS "Summary"
FROM "concepts"
GROUP BY tags[0] AS "Domain"
```
古いページ — 日付計算には file.mtime を使用する

choice(updated, date(updated), file.mtime) は避けてください。updated フロントマターの日付形式が混在すると、算術演算エラーが発生します。file.mtime は常に有効な DateTime です。

```dataview
TABLE WITHOUT ID
  file.link AS "Page",
  category AS "Type",
  file.mtime AS "Last Modified",
  (date(today) - file.mtime).days + " days" AS "Age"
FROM "concepts" OR "entities" OR "projects"
WHERE file.name != file.folder
WHERE (date(today) - file.mtime).days > 30
SORT (date(today) - file.mtime).days DESC
```
複数フォルダーのクエリ
```dataview
TABLE
  summary AS "Summary",
  file.mtime AS "Last Modified"
FROM "projects"
WHERE file.name != file.folder
SORT file.mtime DESC
```
Dataview リファレンス
句用途
FROM "folder"フォルダー内のすべてのノート
FROM #tagタグが付いたすべてのノート
FROM "a" OR "b"2 つのフォルダーの和集合
WHERE file.name != file.folderフォルダーのインデックスページを除外
GROUP BY field AS "Label"行をグループ化 — 以降のプロパティには rows. を使用
SORT field DESC並べ替え順
file.linkクリック可能なウィキリンク
file.mtime最終更新日時(常に有効な DateTime)
(date(today) - file.mtime).days最終更新からの日数

ステップ 3:ファイルを作成する

Bases: 保存先のパス $OBSIDIAN_VAULT_PATH/_meta/<dashboard-name>.base

Dataview: クエリは任意の .md ノートに直接記述します。複数セクションのビューには、専用のダッシュボードノート $OBSIDIAN_VAULT_PATH/_meta/dashboard.md が適しています。

スラッグの例:

  • 「すべての概念」→ _meta/concepts-index.base
  • 「最近の取り込み」→ _meta/recent-ingests.base
  • 「プロジェクト概要」→ _meta/projects-overview.base
  • 「古いページ」→ _meta/stale-pages.base
  • 「完全なダッシュボード」→ _meta/dashboard.md

_meta/ がまだ存在しない場合は作成してください。

ステップ 4:Bases を埋め込む(任意)

.base をノートに埋め込むには:

## Entities
![[_meta/entities-tracker.base]]

既存のノートを変更する前に確認してください。

ステップ 5:追跡情報を更新する

$OBSIDIAN_VAULT_PATH/log.md に追記します:

- [TIMESTAMP] WIKI_DASHBOARD name="<slug>" tool=bases|dataview view=<type> filter="<description>"

ダッシュボードは静的ページではなくライブクエリなので、マニフェストやインデックスの更新は必要ありません。

よく使うダッシュボードのレシピ

ダッシュボード最適なツール表示内容
コンテンツインデックスBases または Dataviewすべてのページをカテゴリ別にグループ化し、更新日順に並べ替え
エンティティトラッカーBases(カード)エンティティページを視覚的なカードギャラリーとして表示
ドメイン別の概念DataviewGROUP BY を使って、最初のタグごとに概念をグループ化
取り込みログどちらでも可created 日付順にページを並べ替え
古いコンテンツDataview30 日以上更新されていないページと経過日数
プロジェクト概要どちらでも可最終同期日を含むプロジェクトページ
調査トラッカーDataviewresearch タグが付いた統合ページ

品質チェックリスト

  • Bases:フィルターには and:/or:/not: の下で式文字列を使用し、型付きオブジェクトは使用しない
  • Bases:groupBy はビュー定義の内部に配置し、トップレベルのキーにはしない
  • Bases:列ヘッダーは columns: [{title}] ではなく、properties: <name>: displayName: "..." で設定する
  • Bases:計算列には formulas: を使用し、order/properties では formula.<name> として参照する
  • Dataview:GROUP BY クエリでは、プロパティ名だけでなく rows.property を使用する
  • Dataview:日付計算には choice(updated, ...) ではなく file.mtime を使用する
  • ファイルが説明的なスラッグを付けて _meta/ に保存されている
  • log.md が更新されている
  • Bases の埋め込み方法(![[_meta/<name>.base]])またはダッシュボードノートの開き方をユーザーに伝えている

Vault 書き込み後の QMD 更新

QMD は検索インデックスであり、信頼できる情報源ではありません。$QMD_WIKI_COLLECTION が空または未設定の場合は、この手順をスキップしてください。このスキルが Vault の Markdown を書き込みまたは書き換えた後にのみ実行します。QMD の更新に失敗しても、Vault の変更はロールバックせず、QMD の状態は別途報告してください。

$QMD_CLI が設定されている場合はそれを使用し、そうでなければ qmd を使用します。

${QMD_CLI:-qmd} update

出力にベクトルが必要、または埋め込みが古い可能性があると表示された場合は、次を実行します:

${QMD_CLI:-qmd} embed

次のいずれかを使ってコレクションを検証します:

${QMD_CLI:-qmd} ls "$QMD_WIKI_COLLECTION"

または、特定のページパスが分かっている場合:

${QMD_CLI:-qmd} get "qmd://$QMD_WIKI_COLLECTION/<page>.md" -l 5

次のいずれかを記録します:

  • QMD refreshed: update + embed + verified
  • QMD refreshed: update only + verified
  • QMD skipped: QMD_WIKI_COLLECTION unset
  • QMD skipped: qmd CLI unavailable
  • QMD failed: <short error summary>

コメント