Templater
Obsidian 向けの高機能テンプレートプラグイン。日付・ファイル操作・JavaScript 実行・カーソル移動など、静的テキスト置換を超えた動的テンプレートを作成できる。
- 公式ドキュメント: https://silentvoid13.github.io/Templater/introduction.html
- GitHub: https://github.com/SilentVoid13/Templater
- インストール: https://obsidian.md/plugins?id=templater-obsidian
できること
- 日付・時刻の動的挿入(Moment.js フォーマット対応)
- ファイルの移動・リネーム
- JavaScript による条件分岐・計算処理
- テンプレート適用後のカーソル位置自動移動
- プロンプトダイアログによるインタラクティブ入力
- frontmatter の動的生成・後から書き換え
設定方法
- Obsidian の Community Plugins から “Templater” をインストール・有効化
- 設定画面の
Template folder locationにテンプレートファイルを置くフォルダを指定(例:Templates/)
使い方の流れ
- テンプレートフォルダにテンプレートファイルを作成
- コマンドパレットからコマンドを実行:
Create new note from template— テンプレートから新規ノート作成Open Insert Template Modal— 現在のノートにテンプレートを挿入
- 使用するテンプレートを選択
- (必要に応じて)カーソル移動ホットキーで入力箇所に移動
構文リファレンス
基本タグ
| 構文 | 説明 |
|---|---|
<% 式 %> | 式の評価結果を挿入 |
<%* コード %> | JavaScript を実行(tR で出力制御) |
-%> | 末尾の改行・空白を除去 |
tR 変数
<%* ... %> ブロック内で JavaScript を書く場合、出力したい文字列を tR += で追加する。
tR =(代入)にするとそれ以前の出力が消えてしまうため注意。
<%*
let result = "";
if (tp.frontmatter.type === "ほのお") {
result = "ほのおタイプの";
}
tR += result;
%>内蔵モジュール(よく使うもの)
tp.date — 日付操作
// 現在の日付(デフォルト: YYYY-MM-DD)
<% tp.date.now() %>
// フォーマット指定
<% tp.date.now("YYYY年MM月DD日(ddd)") %>
// N日後(負の値で過去)
<% tp.date.now("YYYY-MM-DD", 7) %>
<% tp.date.now("YYYY-MM-DD", -7) %>フォーマット記法は Moment.js に準拠。
tp.file — ファイル操作
// ファイルタイトル
<% tp.file.title %>
// 作成日時
<% tp.file.creation_date("YYYY-MM-DD HH:mm:ss") %>
// カーソル位置(テンプレート適用後にジャンプ先になる)
<% tp.file.cursor() %>
// マルチカーソル(同番号で同期)
<% tp.file.cursor(1) %>
// ファイルの移動とリネーム
<%* await tp.file.move("inbox/20240501120000"); -%>
<%* await tp.file.rename("新しいタイトル"); -%>tp.system — UI操作
// プロンプトダイアログで入力を受け取る
<% tp.system.prompt("名前は?") %>tp.frontmatter — frontmatter 参照
// frontmatter の値を条件に使う
<%* if (tp.frontmatter.status === "draft") { tR += "下書き"; } %>tp.hooks — タイミング制御
// 全テンプレート適用後に frontmatter を書き換える
<%*
tp.hooks.on_all_templates_executed(async () => {
const file = tp.file.find_tfile(tp.file.path(true));
await app.fileManager.processFrontMatter(file, (frontmatter) => {
frontmatter["title"] = "計算した値";
});
});
-%>実践パターン
日時を含む frontmatter テンプレート
---
aliases:
tags:
created: <% tp.file.creation_date("YYYY-MM-DD HH:mm:ss") %>
---ファイルを自動的に整理する
<%*
const folder = "inbox";
const filename = tp.file.creation_date("YYYYMMDDHHmmss");
await tp.file.move(`${folder}/${filename}`);
-%>同じ文字列を複数箇所に同時入力(マルチカーソル)
僕の名前は<% tp.file.cursor(1) %>です。はじめまして、<% tp.file.cursor(1) %>です。
同じ番号を振った箇所で入力が同期される。入力完了後はエスケープキーでマルチカーソルモードを抜ける。
日付の言語を変える
<%* moment.locale('ja') -%>
現在の日付: <% tp.date.now("YYYY年MM月DD日(ddd)") %>moment.locales() で対応言語の一覧を確認できる(2024年5月時点で136言語対応)。
ボタンからワンクリック起動
Meta Bind プラグインと組み合わせることで、特定テンプレートからノートを作るボタンを Vault 内に設置できる。コマンドパレットを開く手間を省ける。
ホワイトスペース制御
-%> を使うと末尾の改行・空白が除去される。JavaScriptのみ実行して何も出力しない行の空行を消したい場合に便利。
// 空行が残る
<%* await tp.file.move("inbox/file"); %>
// 空行が消える
<%* await tp.file.move("inbox/file"); -%>詳細: Whitespace Control - Templater
カーソル移動のホットキー設定
コマンド Jump to next cursor location にホットキーを割り当てると tp.file.cursor() で定義した次の位置に素早くジャンプできる。スペルは “cursor”(“cursor”)なので注意。
実践例: ノートメタデータの自動付与(Reo)
俺的Obsidianのつかいかた で紹介されている Templater 活用パターン。新規ノート作成時にファイルの stat.ctime(作成日時)を取得し、createdDate / updatedDate / private / aliases / url を含む frontmatter を自動挿入する。日付フォーマットは ja-JP ロケール・JST で YYYY-MM-DD HH:mm 形式。
ポイント: ファイルを workspace:save-file で保存後に 200ms 遅延して addMetadata() を実行することで、作成直後の stat.ctime を正確に取得している。
---
createdDate: <自動取得>
updatedDate: <実行時刻>
private: true
aliases: []
url: ""
---実践例: 前日の日記への自動リンク(nasubi_dev)
Obsidianが大学生活を変える! 学生必見の活用術 で紹介されている学生向けシンプル活用。デイリーノート作成時に前日の日記ノートへ自動リンクするテンプレート。
[[<% tp.date.now("YYYY-MM-DD",-1) %>の日記]]テンプレートに保存して使用するだけで、前日エントリへのナビゲーションが自動化される。
関連
- Obsidian Bases — Obsidian のデータベース機能(Templater とセットで活用されることが多い)
- ObsidianのTemplaterの使い方と設定 — 本ページの元ソース(eiji.page)
- Obsidianおすすめプラグイン(佐藤あゆみ・necco) — 「使っていない Obsidian ユーザーはいない」と評される定番プラグインとして言及(佐藤あゆみ)
- 俺的Obsidianのつかいかた — メタデータ自動付与テンプレートの実装例(Reo)
- Obsidian Vault設計(フラットノート構造) — Templater で frontmatter を自動付与する文脈
- Obsidian学生活用術 — Templater を日記前日リンク自動化に活用する大学生向け実践