白昼夢中遊行症

ObsidianでVaultまでの絶対Pathを取得する

Obsidianを多端末間で使用していると、VaultへのPathは端末によって異なります。1

PCだと、たとえば

C:/Users/user/Documents/Obsidian/Vault

みたいになります。
iOS端末だと、

capacitor://localhost/_capacitor_file_/var/mobile/Containers/Data/Application/端末ごとに異なる文字列/Documents/Vault

って感じに。

そのため、html形式でノートへの参照を取ろうとすると、端末によって参照先が異なるので、

forum.obsidian.md

のような問題が発生します。

htmlでVault内のフォルダを参照したいけど、Obsidianで直に書くhtmlでは相対パスをサポートしていないから、うまいこといかないとのこと。

そこで、Vaultまでの絶対Pathを取得できたら便利だと思っていたのですが、これ、 app.vault.adapter.getResourcePath("")で取得できました。

ただ、PC環境だとVault名の後に?1701395448388みたいな文字列がついていて邪魔なので、それも取り除きましょう。
取り除くところまで込みで、一つの関数にしておけば、あとで使いやすい。

function getAbsolutePathToVault(){
  const filePath = app.vault.adapter.getResourcePath("")
  const regex = new RegExp(`(.*${app.vault.getName()})`);
  const absolutePathToVault = filePath.match(regex)
  return absolutePathToVault[0]
}

これを使って、たとえば以下のようなコードをdataviewjsで実行すれば、Vaultまでの絶対Pathを表示できます。

```dataviewjs
function getAbsolutePathToVault(){
  const filePath = app.vault.adapter.getResourcePath("")
  const regex = new RegExp(`(.*${app.vault.getName()})`);
  const absolutePathToVault = filePath.match(regex)
  return absolutePathToVault[0]
}
const a = getAbsolutePathToVault()
dv.paragraph(a)
```

何に使えるのかは考えていませんが、何かには使えるでしょう。


  1. 2023-12-03 23:57 関数をちょっと直した。
    それに合わせて本文も少し変更した。