🐡
ObsidianでRibbonに設定したボタンで特定のテンプレートのファイルを生成する
概要
obsidianでzettelkastenを始めてみようと思う。
zettelkastenはアイディアのカードと書籍のカードを作るのがお作法。
この時アイディアや書籍のカードを簡単に作れるようにするため、ノートの名前は重複させないようにユニークノートクリエイター
を使うのが定石らしい。
ということで、設定をして使ってみた、
しかしユニークノートクリエイター
は単一の設定しかできないらしく、以下の点がで困った。
- アイディアと書籍でFrontMatterの内容を変えたいが、できない
- アイディア用のカードと書籍用のカードがファイル名で区別できない
アイディア用のカードを作ってからテンプレートの挿入で書籍拗音FrontMatterを上書きする方針でやってみたが、チョットめんどくさい。
ということで初めてのカスタムプラグインを作って対応してみた。
Ribbonアイコンクリックで特定のテンプレートのファイルを生成する。
最初はtemplaterをカスタムプラグインから呼び出して対応できるかと思い、方法を探してみたのですが、やり方がわかりませんでした。
ChatGPTにきいても存在しないAPIを呼びだすハルシネーション情報しか出してくれず困りました。
ということで、カッコ悪いですが、テンプレートはプラグイン内にconstで定義してファイルを作ることにしました。
必要なのは以下の2ファイル。これをvaultの.obsidian/pluginsにmy-add-book-plugin 等のディレクトリを作成して配置する。
.obsidian
├── plugins
│ ├── my-add-book-plugin
│ │ ├── main.js
│ │ └── manifest.json
main.js
const { Plugin } = require("obsidian");
const datetime = moment().format("YYYY-MM-DD HH:mm:ss");
// ファイルのテンプレート
const content = `---
alias:
date: ${datetime}
tags:
- 書籍/著者/unknown
- 書籍/出版社/unknown
- 書籍/発売日/unknown
- ISBN/unknown
---
# 概要
# ためになったところ
# 残った疑問
# どう活かすか
`
class MyAddBookPlugin extends Plugin {
async onload() {
console.log("[MyAddBookPlugin] onload() が実行されました。");
// リボンボタンを追加
this.addRibbonIcon("book", "書籍メモ作成", async () => {
console.log("[MyAddBookPlugin] ボタンがクリックされました!");
// ノート作成のための情報
const fileName = `book-${window.moment().format("YYYYMMDDHHmmss")}.md`; // ユニークなファイル名
const folderPath = "temp"; // メモを保存するフォルダ
const templatePath = "templater/book"; // 使用するテンプレートのパス
// 新規ノートを作成
const filePath = `${folderPath}/${fileName}`;
const file = await this.app.vault.create(filePath, content);
console.log(`[MyAddBookPlugin] 新規メモを作成: ${filePath}`);
// 作成したノートをエディタで開く
const leaf = this.app.workspace.getLeaf(true);
await leaf.openFile(file);
console.log("[MyAddBookPlugin] ノートをエディタで開きました");
});
console.log("[MyAddBookPlugin] リボンボタンの追加が完了しました。");
}
onunload() {
console.log("[MyAddBookPlugin] プラグインをアンロードしました。");
}
}
// Obsidian にプラグインとして登録
module.exports = MyAddBookPlugin;
manifest.json
{
"id": "my-add-book-plugin",
"name": "My add book plugin",
"version": "1.0.0",
"minAppVersion": "0.12.0",
"author": "hoge",
"description": "書籍ページ作成",
"isDesktopOnly": true
}
こんな感じ
templateファイルを使うようにしたい!
もっといい方法あったら教えて下さい 🙇
Discussion