Obsidian 1.15のCLIで見出しを指定して追記する

Obsidian 1.15のCLIで見出しを指定して追記する

Obsidian 1.15で、CLIとURIの追記に見出しを指定するheadingが加わりました。追記される位置、見出し名の一致条件、URIのspacing、見出しが見つからないときの挙動をテスト用のVaultで確かめ、1.14.5とも比べています。
2026.11.03

どうも!オペ部の西村祐二です!

作業スクリプトの終了時に、Obsidianの今日のデイリーノートへ結果を1行残す。そんな用途で、追記先を「Log」などの見出しで指定できるようになりました。ターミナルから操作するObsidian CLIの daily:append に heading=Log を付けると、その節の末尾に追記できます。

従来の daily:append や、obsidian://... の専用リンクで操作するObsidian URIの append は、ファイルの末尾に追記する操作でした。これらの操作で見出しを指定するには、Advanced URIなどのコミュニティプラグインを使う方法がありました。

2026年11月2日に一般公開されたObsidian 1.15で、URIとCLIの追記に見出しを指定する heading が加わりました。この記事では、追記される位置、見出しの指定方法、URIで空行を制御する spacing、見出しが見つからないときの挙動を、テスト用のVaultで確かめます。1.14.5との違いも比べます。

1.15で増えたパラメータ

  • 対象バージョン / 日付: Obsidian 1.15.0 デスクトップ(2026-10-22に早期アクセス版(Catalyst)として先行公開、2026-11-02に一般公開)
  • 変更の要点: 変更履歴に、URIとCLIで見出しへのappend / prependができるようになったことと、追記する内容の前後の改行を制御できるようになったことが書かれています
  • 公式ドキュメント: 公式ヘルプのリポジトリのPR #1137で、Obsidian URIとObsidian CLIのページにパラメータが追記されました
経路 対象 1.15で使えるパラメータ
URI new / daily アクション heading(append か prepend と一緒に指定)、spacing=auto(デフォルト) / newline / inline
CLI append / prepend / daily:append / daily:prepend heading=<name>。改行の有無は従来からある inline フラグで切り替える

見出しの下に追記するCLIとURIの書き方

CLIでデイリーノートの見出しに追記する場合は、次のように書きます。CLIを有効にし、今日のデイリーノートに ## Log と ## Tasks を用意してから実行します。今日のノートがまだない場合は、後述のテンプレートに見出しを設定しておきます。通常のノートを指定する3つ目の例では、Sample.md に ## Log が必要です。

# Log 見出しの節の末尾に追記
obsidian daily:append heading=Log content="- 10:30 レビュー依頼に返信"

# Tasks 見出しの先頭に追記
obsidian daily:prepend heading=Tasks content="- [ ] 見積もりを送る"

# デイリーノート以外のノートを指定する場合
obsidian append path=Sample.md heading=Log content="- 10:30 追記"

obsidian コマンドを使うには、Obsidianの設定(公式ヘルプの表記では Settings → General → Command line interface)でCLIを有効にし、案内に従ってPATHに登録します。macOSでは /usr/local/bin/obsidian が、アプリ内の obsidian-cli へのシンボリックリンクとして作られます。公式ヘルプによると、CLIにはインストーラーのバージョン1.12.7以上が必要で、Obsidianのアプリが起動している必要があります(起動していなければ、最初のコマンドで起動します)。Vaultが複数ある場合は、obsidian vault=<名前> daily:append ... のように vault= を最初のパラメータに付けます。

URIの場合は append=true(または prepend=true)と heading を組み合わせます。既存のノートへの追記も、URIでは new アクションに append=true を付けます。デイリーノートには daily アクションを使います。箇条書きを1行ずつ足すなら、spacing=newline を付けておくと空行が入りません。

open "obsidian://daily?vault=HeadingTest&append=true&heading=Log&spacing=newline&silent=true&content=-%2011%3A00%20%E9%9B%BB%E8%A9%B1"

vault は自分のVault名に置き換えます(この例はテスト用のVault名です)。content などの値はURLエンコードが必要で、上の例は - 11:00 電話 を追記します。silent=true を付けると、追記したノートを開きません。

試した環境

  • macOS 26.7.2(Apple silicon)
  • Obsidian 1.15.0(インストーラーのバージョンは1.12.7)、比較用に1.14.5
  • テスト用のVault「HeadingTest」
  • コアプラグインのデイリーノート: フォルダー Daily、形式 YYYY-MM-DD、テンプレート Templates/Daily

PATHへの登録はせず、アプリ内の obsidian-cli(/Applications/Obsidian.app/Contents/MacOS/obsidian-cli)を直接実行しました。通常のCLI登録では、このファイルへのシンボリックリンクが作られるため、コマンド例は obsidian で書いています。URIの多くは obsidian-cli "obsidian://new?..." のように obsidian-cli に渡して開きました。new と daily の例を1つずつ open コマンドでも開き、同じ位置に追記されることを確かめています。

テンプレートから作ったデイリーノートに追記する

今日のデイリーノートがまだない日に daily:append を実行すると、デイリーノートが作られてから追記されます。テンプレートを設定していないと、空のノートが作られて「見出しが見つからない」エラーになります(後述)。そこで、テンプレートに追記先の見出しを入れておきます。

Templates/Daily.md
# {{date}}

## Tasks

## Log

## Memo

今日のデイリーノートがない状態で、CLIを3回実行しました。

obsidian daily:append heading=Log content="- 10:00 定例ミーティング"
obsidian daily:append heading=Log content="- 10:30 レビュー依頼に返信"
obsidian daily:prepend heading=Tasks content="- [ ] 見積もりを送る"
Added to: Daily/2026-11-03.md
Added to: Daily/2026-11-03.md
Added to: Daily/2026-11-03.md

1回目の実行でテンプレートからデイリーノートが作られ、内容はそのまま ## Log の下に入りました。2回目の内容は1回目の次の行に続きました。

Daily/2026-11-03.md
# 2026-11-03

## Tasks

- [ ] 見積もりを送る
## Log

- 10:00 定例ミーティング
- 10:30 レビュー依頼に返信
## Memo

テンプレートのように見出しの下が空行だけの節では、内容はその空行の後に入りました。ソースでは、追記した行のすぐ次の行が ## Memo になります。

次の画像は、追記後のノートをObsidianで開いたところです。Tasksにチェックボックス、Logに2行の箇条書きが入っています。

Obsidian 1.15.0でテスト用VaultのデイリーノートDaily/2026-11-03を開いた画面。Tasks見出しの下に「見積もりを送る」のチェックボックス、Log見出しの下に「10:00 定例ミーティング」「10:30 レビュー依頼に返信」の2行の箇条書きがあり、その下にMemo見出しがある

節のどこに入るか

見出しから、次に現れる同じレベルまたは上位レベルの見出しの手前までが1つの節として扱われます。append で足した内容は節の末尾に、prepend では見出しのすぐ下(見出しの直後が空行なら、その空行の後)に入ります。

次の図は自作した概念図で、公式の構成図ではありません。CLIとURIのどちらから指定しても、追記先の範囲は同じです。## Log の節は ## Notes の手前までで、子見出しの ### 午後 も含まれます。

自作した、headingを指定したときの追記位置の概念図。CLIのappend heading=LogとURIのnewアクションのappend=true&heading=Logが、Obsidian 1.15で見出しLogを探す処理に入る。Sample.mdの中では## Logから## Notesの手前までがLogの節で、子見出しの### 午後も含まれる。prependは## Logのすぐ下、appendは### 午後の最後の行の後に入る

子見出しや既存の行がある場合を見るため、別のノート Sample.md を用意しました。

Sample.md
---
tags: daily
---
# 2026-11-03

## Tasks
- [ ] 既存タスク

## Log
- 09:00 朝会

### 午後
- 13:00 レビュー

## Notes
メモ

次のコマンドを実行しました。

obsidian append path=Sample.md heading=Log content="- 10:30 追記"

## Log の直後ではなく、子見出し ### 午後 の最後の行の後に入りました。

Sample.md
 ### 午後
 - 13:00 レビュー
+- 10:30 追記
 
 ## Notes

prepend heading=Tasks では見出しのすぐ下に入り、既存のタスクは1行後ろにずれました。

Sample.md
 ## Tasks
+- [ ] 先頭に入るタスク
 - [ ] 既存タスク

ほかに確かめた条件と結果は次のとおりです。

条件 結果
見出しの下に何もない(すぐ次の見出しが来る) append も prepend も見出しのすぐ下に入る
ファイル末尾の節(末尾に改行なし) 最後の行の次に入り、末尾の改行は追加されない
CLIで content に \n を含める 改行として扱われ、複数行が入る
CLIで inline を付ける 改行せず、節の最後の行に続けて書かれる(メモ → メモ(inline で追記))

headingに書いた名前が一致する条件

heading に何を書けば一致するかも確かめました。

指定 結果
heading=Log ## Log の節に入る
heading=log 大文字小文字を区別せず、## Log の節に入る
heading="## Log" # を付けても ## Log の節に入る
heading=午後 子見出しの ### 午後 の節に入り、## Notes の手前で止まる
heading="Log#午後" Error: Heading “Log#午後” not found in file. になり、ファイルは変わらない
同じ名前の ## Log が2つあるノートで heading=Log 1つ目の ## Log の節に入る

子見出しは名前だけで指定でき、Log#午後 のように親の見出しからたどる書き方は、1.15.0では一致しませんでした。同じ名前の ## Log が2つある場合は、1つ目の節に入りました。

URIではspacingで空行の入れ方を選ぶ

URIは spacing を省略すると auto になり、既存の内容との間に空行を1つ挟みます。CLIのデフォルト(改行だけ)とは結果が違います。

open "obsidian://new?vault=HeadingTest&file=Sample&append=true&heading=Log&content=-%2010%3A30%20%E8%BF%BD%E8%A8%98"
Sample.md
 ### 午後
 - 13:00 レビュー
 
+- 10:30 追記
+
 ## Notes

- 13:00 レビュー と - 10:30 追記 の間に空行が入ります。Obsidianの閲覧モードで確かめると、2つの項目は同じリストのままでしたが、各項目が段落(<p>)で囲まれた「ゆるいリスト」として表示されました。spacing=newline を付けると、CLIと同じく直前の行の次に入り、項目は段落になりませんでした。

Sample.md
 ### 午後
 - 13:00 レビュー
+- 10:30 追記
 
 ## Notes

spacing=inline では改行が入らず、CLIの inline と同じく節の最後の行に続けて書かれました。

prepend=true で spacing を省略した場合は、見出しのすぐ下に入り、既存の内容との間に空行が1つ挟まりました。

Sample.md
 ## Tasks
+- [ ] 先頭
+
 - [ ] 既存タスク

auto は空行を挟むので、段落を足す用途に合います。箇条書きやログを1行ずつ足すなら newline を使います。

見出しが見つからないとき

見出しが見つからない場合、CLIもURIも追記せず、ファイルを変えませんでした。ただし、エラーの伝わり方が違います。

CLIはエラーを標準出力に表示します。1.15.0では、このときも終了コードは0でした。

obsidian append path=Sample.md heading=Nothing content="- 存在しない見出し"
echo "exit=$?"
Error: Heading “Nothing” not found in file.
exit=0

シェルスクリプトから呼ぶ場合、1.15.0では終了コードで失敗を判定できないため、標準出力が Error: で始まるかを見て判定します。今後のアップデートで終了コードの扱いが変わる可能性はあります。

URIでは、Obsidianの画面に通知が出ます。次の画像は、存在しない見出し Logs を指定してURIを開いたときの画面です。右上に Error: Heading “Logs” not found in file. と表示され、ノートは変わっていません。

Obsidian 1.15.0の画面右上に「Error: Heading “Logs” not found in file.」という通知が表示され、開いているデイリーノートのTasks、Log、Memoの内容は変わっていない

URIで heading を append / prepend なしで指定した場合も、ノートは変わらず、The “heading” URI parameter requires “append” or “prepend.” という通知が出ました。

追記先のノートがまだないと、空のノートが作られたうえでエラーになります。

デイリーノートなら、最初の例のようにテンプレートに見出しを入れておけば、その日の1回目の追記から見出しの下に書き込まれます。URIの daily アクションで、今日のノートがない状態から追記する場合は試していません。

1.14.5ではheadingが無視される

比較のため、1.14.5で同じCLIコマンドを実行し、同じURIを開きました。CLIはエラーを出さずに Appended to: Sample.md と表示し、どちらも heading が無視されてファイルの末尾に追記されました。CLIとURIのどちらも、次の差分になりました。

Sample.md
 ## Notes
 メモ
+
+- 10:30 追記
\ No newline at end of file

1.14.5の obsidian help append には heading の行がありません。複数の端末でObsidianを使う場合は、スクリプトに組み込む前に各端末で obsidian version を実行し、1.15以上か確かめます。

obsidian version
1.15.0 (installer 1.12.7)

まとめ

  • Obsidian 1.15で、見出しの節を指定して追記できる heading が加わりました。対象はCLIの append / prepend / daily:append / daily:prepend と、URIの new / daily アクションです
  • append で足した内容は子見出しを含む節の末尾に、prepend では見出しのすぐ下に入ります。見出し名は大文字小文字を区別せず、子見出しは名前だけで指定します。同じ名前の見出しが複数あると、1つ目に入ります
  • URIは spacing を省略すると空行を挟みます。箇条書きを1行ずつ足すなら spacing=newline を付けると、CLIと同じ結果になります
  • 見出しが見つからないと追記されません。1.15.0のCLIは終了コード0のまま標準出力にエラーを表示し、URIは通知を出します
  • 未作成のデイリーノートに追記するなら、テンプレートに見出しを用意します
  • 1.14.5では heading が無視されてファイル末尾に入ります。使う前に obsidian version で1.15以上か確かめます

誰かの参考になれば幸いです。

参考リンク

この記事をシェアする

関連記事