ObsidianのCEO⁠⁠、Markdown生成向けの「Knap」を紹介
—⁠—Web Clipperから独立したテンプレート言語

ObsidianのCEOを務めるSteph Ango氏(kepano)は9月10日、データからMarkdownを生成するテンプレート言語「Knap」をXで紹介した。Obsidian Web Clipper向けに開発したテンプレートエンジンを独立したパッケージにしたもので、他のアプリへの組み込みやCLIでの利用に対応する。

Webページの内容をObsidianへ保存するWeb Clipperでは、テンプレートで保存する内容や形式を指定できる。Ango氏によると、Knapはこの用途から生まれており、直接・間接の利用を含めると、すでに100万人以上が使っているという。

データとテンプレートを組み合わせてMarkdownを生成

Knapには、元になるデータと、出力形式を記述したテンプレートを渡す。テンプレート内の変数へデータを埋め込み、フィルターで文字列や日付などを整形するほか、条件分岐や繰り返しで出力内容を制御する。

たとえば、タイトルを表すJSONデータとして{"title": "Knap"}を用意する。このデータとテンプレートをKnapに渡すと、Markdownの見出し# Knapが出力される。ここでは、変数titleの値を、フィルターh1で見出しに整形している。フィルターは|で連結でき、空白の除去、大文字への変換、Markdownの書式付けといった処理を順に適用できる。

Ango氏は、Twig、Liquid、Jinja、Teraなどのテンプレート言語の利用経験がある人になじみやすい構文にしたと説明している。これらの言語との違いとして、フロントマター付きのMarkdown生成に向けた豊富な組み込みフィルターと、空白の扱いに関する既定値を挙げている。

文書の先頭に日付やタグなどのメタデータを記述するフロントマターを生成する際には、値をYAML形式に整えるyamlフィルターを使える。たとえば、日付とタグをmetadataにまとめたJSONデータ{"metadata": {"date": "2026-09-10", "tags": ["news", "tools"]}}を用意する。

テンプレートでは、metadataにyamlフィルターを適用し、その前後にフロントマターの区切りを表す---を記述する。

---
{{ metadata | yaml }}
---

日付とタグがYAML形式に整形され、次のフロントマターが出力される。

---
date: "2026-09-10"
tags:
  - "news"
  - "tools"
---

このほか、見出しやリンク、リスト、表などを作るフィルターも備える。

JSON/CSVからの一括作成やWebページの取り込みに利用

CLIの利用にはNode.js 20以降が必要になる。GitHubリポジトリでは、JSONファイルのデータをテンプレートへ渡し、結果をMarkdownファイルへ保存する例を案内している。

npx knap render template.md --data article.json --output note.md

この例では、template.mdに記述したテンプレートへarticle.jsonのデータを渡し、生成結果をnote.mdに書き出す。複数の文書を作る場合はbatchコマンドを使い、CSVの各行やJSON配列の各オブジェクトから、それぞれファイルを作成できる。

Webページからの取り込みには、HTMLから本文やメタデータを抽出するDefuddleと組み合わせる方法もある。Defuddleの抽出結果をJSONとしてパイプでKnapへ渡すと、タイトルや本文などをテンプレートに沿ってMarkdownへ整形できる。

KnapはMITライセンスのオープンソースとして公開されている。構文や出力を試すためのPlaygroundも用意され、データ、テンプレート、出力を見比べられる。

おすすめ記事

記事・ニュース一覧