はじめに
ObsidianでWebクリップやメモを管理していると、新しく追加したMarkdownファイルに毎回Frontmatter(YAMLヘッダー)を手動で付けるのが面倒だと感じたことはありませんか?
今回は、WebClipsフォルダに新しい.mdファイルが追加されたとき、自動でFrontmatterを付与する仕組みをシェルスクリプト+macOSのlaunchdで常駐化した手順をまとめます。
目標
- WebClipsフォルダに新しいMarkdownファイルが追加 or 移動されたとき
- 自動でFrontmatter(タイトル・日付など)を付与
- macOS起動時やObsidian起動時に自動で常駐
1. 監視スクリプト(add_frontmatter.sh)の作成
まずは、WebClipsフォルダを監視し、.mdファイルが追加・移動されたときにFrontmatterを自動付与するシェルスクリプトを作成しました。
ポイント
-
fswatchコマンドでフォルダをリアルタイム監視 - ファイル名に空白や記号が含まれていても正しく処理
- Frontmatterが既にある場合はスキップ
- ファイル名を日付+元ファイル名にリネーム
- ファイルが移動されてきたかはRenamedで判断
スクリプト例
#!/bin/bash
WATCH_DIR="WebClips"
fswatch -0 -x "$WATCH_DIR" | while read -d "" line
do
# .mdまでをファイル名として抽出
file=$(echo "$line" | sed -E 's/(.*\.md) .*/\1/')
# .md以降をイベント名として抽出
events=$(echo "$line" | sed -E 's/.*\.md //')
if [[ ( "$events" == *Created* || "$events" == *Renamed* ) && "$file" == *.md && -f "$file" ]]; then
if ! head -n 1 "$file" | grep -q "^---"; then
FRONTMATTER="---
title: \"$(basename \"$file\" .md)\"
date: \"$(date '+%Y-%m-%d')\"
category: []
tags: []
nextActions: []
publish: false
---"
formatted_time=$(date '+%Y-%m%d-%H%M%S')
base_name=$(basename "$file" .md)
created_id="${formatted_time}-${base_name}"
tmpfile=$(mktemp)
echo "$FRONTMATTER" > "$tmpfile"
cat "$file" >> "$tmpfile"
mv "$tmpfile" "$WATCH_DIR/$created_id.md"
rm "$file"
echo "Frontmatter added to $created_id.md"
sleep 1
fi
fi
done
2. launchdで自動常駐化
macOSのlaunchdを使い、スクリプトをログイン時や再起動時に自動で起動・常駐させる設定を行いました。
手順
-
スクリプトに実行権限を付与
chmod +x /Users/yshi112358/Documents/Obsidian-x-Cursor/add_frontmatter.sh -
plistファイルを作成
local.obsidian.addfrontmatter.plistという名前で以下の内容を作成:<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>Label</key> <string>local.obsidian.addfrontmatter</string> <key>ProgramArguments</key> <array> <string>/Users/yshi112358/Documents/Obsidian-x-Cursor/add_frontmatter.sh</string> </array> <key>RunAtLoad</key> <true/> <key>KeepAlive</key> <true/> <key>WorkingDirectory</key> <string>/Users/yshi112358/Documents/Obsidian-x-Cursor</string> <key>StandardOutPath</key> <string>/tmp/add_frontmatter.log</string> <key>StandardErrorPath</key> <string>/tmp/add_frontmatter.err</string> </dict> </plist> -
LaunchAgentsに配置し、読み込む
mkdir -p ~/Library/LaunchAgents cp local.obsidian.addfrontmatter.plist ~/Library/LaunchAgents/ launchctl load ~/Library/LaunchAgents/local.obsidian.addfrontmatter.plist
3. 動作確認
- WebClipsフォルダに新しい.mdファイルを追加・移動すると、自動でFrontmatterが付与され、ファイル名も日付付きにリネームされることを確認。
- ログは
/tmp/add_frontmatter.logや/tmp/add_frontmatter.errで確認可能。
まとめ・感想
手作業でFrontmatterを付ける手間がゼロになり、Obsidianでの情報整理がさらに快適になりました!
macOSのlaunchdとシェルスクリプトの組み合わせは、**「ちょっとした自動化」**にとても便利です。
おまけ:トラブルシューティング
- ファイル名に空白がある場合の正規表現や、fswatchの出力形式の違いに注意
- launchdのplistは
~/Library/LaunchAgents/に配置 - スクリプトの無限ループやエラー時の挙動も要チェック
Obsidianや自動化に興味がある方の参考になれば幸いです!