obsdconvの動作が期待していたものと違うのでなんとかしたい話。

基本的にはobsdconvの動作に感謝しているのだか [[wikilink]]の修正部分の動作が思ってたんとちがう。

記事の中で既存のノートへのリンクをwikilinkで記述している部分がある Obsidianで書いているのだから当然のことだ

obsdconvはHugoでの公開を想定してのプログラムだから、そのあたりも考慮しているからそのままHugoに渡せるものと思っていた

しかし、実際に出力されたノートを見てみるとその部分は[Filename](Filename.md)になっていた。

またHugoではhttps://hishitu.net/posts/postname/Filename.mdとなっていた。

直接内部リンクで該当ノートのHugo記事へのリンクになってくれるものと期待していたのでこの挙動は想定外だ。

ちゃんとobsdconvのsampleを確認さればその挙動は想定通りなのだけれどね。

このままでは404エラーになってしまうので何か対策を講じる必要がある。

とはいえ、今思い浮かぶのは既存のHugo記事へのURLリンクであるが、それではObsidianで公開記事を書くメリットが一つなくなってしまう。

うーむ😫

解決法

obsdconvの作成者であるqawatakeさんのサイトに答えを見つけた Obsidian → Hugo の運用方法 – 公開ノート

またリンク周りについても設定変更が必要です. 例えば, 変換後のリンクが [sample](public/notes/abc.md) だった場合, これを URL では qawatake.com/notes/abc のような形式にしたいです. そのためには, 3つの場所をいじらなければいけません.

まさしくコレだ😆
あとで設定する!

やってみた

config/_default/config.toml しかなかったのでとりあえずそちらだけ追記し、ないものは作成しておく。

[permalinks]
	'/' = '/notes/:filename/'
{{- $url := urls.Parse .Destination -}}
{{- $scheme := $url.Scheme -}}
 
<a href="
  {{- if eq $scheme "" -}}
    {{- if strings.HasSuffix $url.Path ".md" -}}
      {{- $destination := strings.TrimPrefix "public/notes" .Destination -}}
      {{- relref .Page $destination | safeURL -}}
    {{- else -}}
      {{- .Destination | safeURL -}}
    {{- end -}}
  {{- else -}}
    {{- .Destination | safeURL -}}
  {{- end -}}"
  {{- with .Title }} title="{{ . | safeHTML }}"{{- end -}}>
  {{- .Text | safeHTML -}}
</a>
{{- $url := urls.Parse .Destination -}}
{{- $scheme := $url.Scheme -}}
 
<img src="
{{- if eq $scheme "" -}}
{{- strings.TrimPrefix "public/static" .Destination | safeURL -}}
{{- else -}}
{{- .Destination | safeURL -}}
{{- end -}}"
  {{- with .Title }} title="{{ . | safeHTML }}"{{- end -}}
  {{- with .Text }} alt="{{ . | safeHTML }}"
  {{- end -}}
/>

これでObsidian記法の内部リンクのままでもobsdconvとHugoがそのまま使用できるようにしてくれる。