knap は何をしますか?
Knap CLI を使用して、変数、フィルタ、ロジックを備えた Markdown テンプレートをレンダリングします。
インストールされていない場合: npm install -g knap(Node.js 20 以降が必要)。または npx knap を使用します。
利用可能なコマンドとオプションは knap --help を実行してください。CLI のオフラインリファレンスを通じて言語を学べます:
knap help syntax
knap help filters
knap help filter date
knap help tags
knap help tag for
一覧から名前を見つけ、個別のヘルプで構文、パラメータ、期待される出力例を確認してください。
使用方法
JSON 変数でテンプレートをレンダリング:
knap render template.md --data article.json -o note.md
テンプレートとデータをインラインで指定:
knap render -t '# {{ title | trim }}' --data-json '{"title":"Hello"}'
変数を上書きするか、JSON データをパイプ:
knap render template.md --data article.json --set 'title=Custom title'
cat article.json | knap render template.md --data -
データは JSON オブジェクトである必要があります。そのプロパティがテンプレート変数になります。--set はリテラルなトップレベルのキーを文字列で上書きします。ネストされたオブジェクト、配列、数値、真偽値には JSON を使用してください。
テンプレートソース(ファイル、-t、または標準入力)とデータソース(--data または --data-json)はそれぞれ 1 つだけ選択してください。標準入力を読み取れる入力は 1 つだけです。テンプレートファイルまたは -t が指定されていない場合、Knap は標準入力からテンプレートを読み取ります。
出力はデフォルトで標準出力です。-o は親ディレクトリを作成し、レンダリングが成功した後に出力先を上書きします。エラーはステータス 1 で終了し、診断情報は標準エラー出力に出力されます。成功した出力に警告が伴う場合もあります。
テンプレート
値には {{ variable }}、フィルタには |、ロジックには {% ... %} を使用します。たとえば、これを template.md として保存します:
---
{{ title | yaml_property:"title" }}
{{ tags | yaml_property:"tags" }}
---
# {{ title | trim }}
{% if author %}
By {{ author }}
{% endif %}
{{ content }}
yaml_property を使用すると、frontmatter プロパティが正しく引用符とインデントで出力されます。CLI には標準フィルタが含まれていますが、Web Clipper のブラウザ変数、セレクタ、プロンプト、DOM 依存の HTML フィルタは提供されません。JSON を通じて変数を提供してください。
レンダリング前にテンプレートをチェック:
knap validate template.md
バリデーションは、構文、フィルタ名、静的なフィルタ引数をチェックしますが、データやファイル出力は行いません。変数の存在、実行時の値、動的な引数はチェックしません。実行時の動作を確認するには実際のデータでレンダリングしてください。診断情報は標準エラー出力に出力され、関連するヘルプコマンドも含まれます。
Defuddle パイプライン
Web ページを Markdown コンテンツ付きの JSON として抽出し、ノートにレンダリング:
defuddle parse https://example.com/article --md --json \
| knap render template.md --data - -o note.md
Defuddle の JSON プロパティ(title、content など)はそのままテンプレート変数になります。
一括レンダリング
CSV の各行、JSON 配列の各オブジェクト、またはフォルダ内の各 JSON ファイルごとに 1 つのファイルを作成:
knap batch template.md --data articles.csv --output-dir notes \
--filename '{{ title | safe_name }}.md'
配列の場合は --data articles.json、JSON オブジェクトのフォルダの場合は --data ./articles を使用します。CSV のヘッダーが変数名になり、値は文字列のまま保持されます。パイプで渡されたデータはデフォルトで JSON として扱われます。パイプで CSV を渡す場合は --format csv を追加してください。
--dry-run を使用すると、ファイルを書き込まずにバリデーションと出力パスの一覧表示を行えます。既存のファイルがある場合は --overwrite が必要です(ドライラン中も同様です)。バッチ内で重複する出力名は、--overwrite が指定されていてもエラーになります。
ファイル名テンプレートは、ディレクトリなしの単一のファイル名と拡張子を生成する必要があります。データ由来の名前には safe_name を使用してください。--filename が指定されていない場合、Knap は JSON のベース名を保持するか、CSV の行や配列の項目を 1.md、2.md のように番号付けします。