ObsidianとQuartzを使ってサイトを統合したに書いたが、いままでHugoで運用していたサイトのコンテンツをObsidianのblogディレクトリ配下へ移管したが、以下の理由から新規ファイルの作成を自動化したい。

  • blog配下のファイルはnotes配下のファイルとFront matterが異なるため別個のテンプレートが必要
  • ファイル命名規則があり(blog/YYYY/YYYYMMDD-タイトル.md)ファイル名を手で作成するのが面倒
blog
├── 2010
│   ├── 20100312_PomeraEvernotedbaf7362a844.md
│   ├── 20100314_exeUSBPomeraEvernote990627102c2a.md
│   ├── 20100415_pomera2evernotec1bcbb7bbc63.md
│   ├── 20100717_37953a1dd2d90e.md
│   └── 20100801_pomera2evernoteEvernote75b1701762d0.md
├── 2011
│   ├── 20110110_8a9080a1ac21.md
│   └── 20110410_48d4876df861.md
├── 2012
│   ├── 20120108_3c6de199c47a.md
│   ├── 20120130_herokuSSLSNISSLb513efc54b04.md
│   ├── 20120202_herokuSNISSLe36291db1dc0.md
│   ├── 20120819_6c8c07cbd46a.md

このため、📗指定したディレクトリ配下にルールに従った名称・内容でファイルを作成したい - Minervaを参考に、blogディレクトリ配下に命名規則に沿ったファイルを自動的に作成できるようにした。

  1. TemplaterTemplate folder locationで指定したディレクトリ配下へcreate_blog_template.mdという名前のファイルを作成(内容は下記)
  2. TemplaterOpen Insert Template modelコマンドを実行
  3. create_blog_templateを選択

上記の手順でblogディレクトリ配下へ命名規則に沿ったファイルを自動的に作成できるようになった。

<%*
const title = await tp.system.prompt("Enter title")
if (!title) {
  return
}
 
const today = tp.date.now("YYYYMMDD");
const filePath = `blog/${tp.date.now("YYYY")}/${today}_${title}.md`
 
if (await tp.file.exists(title)) {
  new Notice(`⚠️Error: ${filePath} is already existed.`)
  return
}
 
const noteBody = `---
title: "${title}"
date: ${today}
updated: ${today}
draft: true
description: 
imagepath: 
tags:
- tag1
---
${tp.file.cursor()}
`
 
await app.vault.create(filePath, noteBody)
await app.workspace.openLinkText("", filePath, true)
%>