0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Obsidian の Dataview プラグインで PDF ファイルの目次を作成する方法

0
Last updated at Posted at 2026-09-24

Obsidian の Dataview プラグインは手軽に保管庫内のノートの目次を作成でき、「各ディレクトリ以下の最新ノート 5 件」なども表示できて便利です。ただし、表示対象が PDF の場合は、JavaScript クエリを使う必要があります。その方法を記します。

参考文献
Index with dataview for all pdf files? - #4 by mnvwvnm - Help - Obsidian Forum
https://forum.obsidian.md/t/index-with-dataview-for-all-pdf-files/43359/4

Dataview プラグイン が導入されていることを前提とします。

そもそも通常の Markdown ファイルの場合

例えば保管庫直下の qiita-drafts/ ディレクトリ直下にある Markdown ファイルであって、更新日時が新しい 5 件を表示するには、dataview ブロックに以下を書けば OK です。

  • ただし、以下のクエリはフロントマターに title キーがあるノートに絞っているので、フロントマターがない場合は where 句の and title と table 句の , title は除去します。
  • また、以下のクエリはディレクトリ名をべた書きしていますが、このクエリを書いたノートと同じディレクトリのファイルを集めるなら FROM this.file.folder ともできます。
  • 更新日時に年も必要なら "yyyy/MM/dd HH:mm" などとします。
README.md
```dataview
table
  dateformat(file.mtime, "MM/dd HH:mm") AS "更新日時",
  title
from "qiita-drafts"
where file.folder = "qiita-drafts" and title
sort file.mtime desc
limit 5
```

そうすると、以下のように最新ノートが 5 件表示されます。私の場合は、保管庫直下の README に各サブディレクトリの最新ノートを 5 件だけ表示し、各サブディレクトリにそこにある全ノートの目次を表示しています。

image.png

PDF の場合

特定のディレクトリについては Markdown ファイルでなく PDF の一覧を表示したい場合もあると思います (例. LaTeX 文書を作成しているディレクトリなど)。が、PDF では先と同じ方法では表示できません。より柔軟な dataviewjs ブロックを使う必要があります。

例えば、保管庫直下の tex-factory/ ディレクトリ直下にある PDF ファイルであって、更新日時が新しい 5 件を表示するには、dataviewjs ブロックに以下を書けば OK です。

```dataviewjs
const pdfs = app.vault.getFiles()
  .filter(f => f.parent.path === 'tex-factory' && f.extension === 'pdf')
  .sort((a, b) => b.stat.mtime - a.stat.mtime)
  .slice(0, 5);

dv.table(
  ['更新日時', 'File'],
  pdfs.map(f => [
    moment(f.stat.mtime).format('MM/DD HH:mm'),
    dv.fileLink(f.path)
  ])
);
```

ただし、JavaScript クエリを許可していない場合は、この時点で「Javascript クエリを許可してください」といったメッセージが表示されるので、以下から許可します。

image.png

そうすると、以下のように最新 PDF が 5 件表示されます。

image.png

おまけ: PDF の説明も表示する方法例

目次にファイル名を表示するだけでは、何のファイルかわかりにくいかもしれません。そのような場合、Markdown ファイルでは、フロントマターにメタデータを書いておき、Dataview で取得・表示できました。が、PDF ファイルにフロントマターは書けません。

一つの方法として、各 PDF ファイルの説明を書く Markdown ファイルを以下のように用意します。全ての PDF ファイルの説明を書く必要はなく、必要なものだけで構いません。

tex-factory/descriptions.md
---
items:
  - filename: ABC.pdf
    description: ABCの説明
  - filename: DEF.pdf
    description: DEFの説明
---

そして dataviewjs ブロックを以下のようにすれば、ファイル名と説明の対応を読み込み、説明があれば表示するようにできます。

```dataviewjs
const descriptions = new Map(
  dv.page('tex-factory/descriptions').items.map(
    x => [x.filename, x.description]
  )
);
const pdfs = app.vault.getFiles()
  .filter(
    f => f.parent.path === 'tex-factory'
    && f.extension === 'pdf'
    && f.name.startsWith('Draft')
  )
  .sort((a, b) => b.stat.mtime - a.stat.mtime)
  .slice(0, 5);
dv.table(
  ['File', '更新日時', '説明'],
  pdfs.map(f => [
    dv.fileLink(f.path),
    moment(f.stat.mtime).format('MM/DD HH:mm'),
    descriptions.get(f.name) ?? ''
  ])
);
```
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?