Skip to content
Go back

HugoのためのObsidian環境作り

· Updated:
  • Markdownを書くならObsidianが良い
  • ただし、HugoとObsidianは食い合わせの悪い部分がある

課題と対策#

  • /をObsidianのvaultにすると、補完候補に変なものが紛れ込む
    • themes/にあるmdファイルも候補に含んでしまっていた
    • とりあえず、content/をvaultにした
  • content/をvaultにすると、Obsidianのテンプレートの置き場に困る
    • テンプレートもMarkdownファイルなので、Hugoが記事にしてしまう
    • とりあえず、templates/にまとめておいて、これらを対象外とするよう、hugo.tomlignorefiles = ['content/templates/']を加えた
  • HugoがWikilink形式のリンクに対応していない
    • Hugo側でなんとかするのは大変そう
      • ビルド時に該当箇所を書き換えれば良いらしいが、自前でスクリプトを書いたりする必要がある
    • Obsidian側はMarkdown形式を使うように設定できる
      • オプションの”ファイルとリンク”にある”ウィキリンクを使用”をオフにする
    • あとは、Hugo側がRender hooksを使ってパスをURLに変換するようにすれば良い
      • layouts/_default/_markup/render-link.htmlに以下の内容のファイルを作れば、とりあえず大丈夫だった
{{- $url := urls.Parse .Destination -}}
<a {{- if eq $url.Scheme "" }} href="{{- relref .Page .Destination | safeURL -}}" {{- else}} href="{{- .Destination -}}" target="_blank" rel="external noopener noreferrer" {{- end -}} {{- with .Title}}
  title="{{ . }}" {{- end -}}>
  {{- with .Text }}{{ . }}{{ end -}}
</a>{{- /* trim whitspace */ -}}
  • これで、Markdownのリンクが「リンク先がファイルパス(スキームなし)ならサイト内部に遷移し、そうでなければ外部サイトとして別タブで開く」ようなaタグに変換される
    • -はその前または後にある空白を取り除くことを示す
    • 空白や改行もそのままHTMLに現れるので、-があったりなかったり、末尾の行がなかったりするのも大事
    • target="_blank"は別タブで開くことを示す
    • noopenernoreferrerはセキュリティやプライバシーの面で外部サイトに遷移するときには必要らしい

参考文献#