RStudio Serverでblogdownを快適に使えるようにする

by
カテゴリ:
タグ:

RStudioではうまくプレビューできたblogdown製のウェブページが、 RStudio Serverではうまくプレビューできないことがあります。例えば以下のようなことが起きます。

どれもURLにまつわる問題です。

この問題については以下のIssueで議論されていました。

Not working in RStudio Server https://github.com/rstudio/blogdown/issues/124

原因はRStudio ServerがトップページのURLを変換するからです(Proxy)。たとえば、https://localhost:1313みたいなのが、http://localhost:8787/p/1313/みたいになります。

対策は相対パスの徹底です。

blogdownパッケージはRStudio Server上でプレビューしている場合に、自動的にconfig.tomlの内容を最適化してくれますが、明示的に設定しておくといいでしょう。これにより、記事内でのリンクが自動的に相対パスに変更されます。

ただしconfig.tomlファイルの内容は、サイトのテーマ側で生成されるリンクについては関与しません。

そこで、上述の通りテーマ自体の修正が必要になります。

ちなみに、relrefは第一引数に指定したURLから第二引数に指定したURLへの相対パスを返す関数です。第一引数に.を指定すると現在のページのURLという意味になります。第二引数に.Site.baseURLを指定すると、config.tomlbaseurlに指定した値が代入されます。

似た関数にrelURLがありますが、こちらは引数を一つだけとり、サイトのトップページからの相対パスを返します。

たとえば、サイトのURLがhttps://example.com/hugoで、現在ページがhttps://example.com/hugo/post/1.htmlの場合にそれぞれの関数の返り値を比較してみましょう。

返り値
relURL .Site.baseURL /hugo
relref . .Site.baseURL ../
relURL "https://example.com/hugo/mystyle.css" /hugo/mystyle.css
relref . "https://example.com/hugo/mystle.css" ../mystyle.css

先に述べた通りRStudio ServerがトップページのURLを変換する都合上、ドットを使った相対パスの方が都合がいいわけですね。

ENJOY!!