[Quarto] 共通処理を_setup.qmdに入れる
色々とカスタマイズ出来てきました。
素のQuartoだと物足りなくなってきました
このサイトはQuartoを使って作成していますが、素のQuartoでは不十分な機能やスタイルがあり、徐々にカスタマイズをしています。R言語を使えるので、HTMLを作成して取り込むといったことが出来るのは便利で良いですね。もちろん、Python他の言語を使用しても良いですが、R言語を使っているのは単なる趣味です。
今回は、共通処理をまとめておいて、それを取り込む話とその周辺の雑多な話です。
アンダースコア(_)ではじまるファイルは自動でレンダリングされない。
これはQuartoのマニュアルにも書かれていますが、ファイル名の先頭に_を付けておくことでquarto render
などの一括レンダリング処理で対象外となり、HTMLファイルが作成されなくなります。
この特徴を使い、Rの処理を書いたqmdファイルは先頭に_を付けておくことで通常のレンダリング処理に含まれなくなります。qmdの場合もrmdと同様、チャンクのchild
指定でそのファイルを取り込むことが出来ます。ブログなどはファイルの階層が深くなるなどして、相対パスで記述するのが面倒なことになりますが、ここにRの関数を入れられるので、here
パッケージをつかって、プロジェクトのルートの位置からの相対パスで書くのが良いです。
=here::here("_setup.qmd")} {r, child
現在、共通の処理はまだリンクをカード状にして表示するための処理だけなので、次のようになっています。いずれ自前の関数が増えてきたときにこれが効果を発揮していくでしょう(カルーセルの処理も早めにこちらに移植せねば)
=FALSE, warning=F}
{r echosource(here::here("R/create_link_card.R"))
このRファイル中で定義されている関数を使用する際は次のようになっていて、create_link_card
が表示するHTMLをそのまま asis
で取り込むようにしています。
='asis', echo=FALSE}
{r, resultscreate_link_card("https://tea-3.jp/blog/b_20240708_kurogin_furikaeri.html")
このリンクのカードを作成する処理はまた別の記事に書く予定です。
draft=trueでもレンダリングはされる
QuartoのListingのオプションでdraft
があり、これをtrue
にすれば一覧には表示されなくなります。しかし、レンダリング自体はされてしまうので、そのままファイルをアップロードすれば、当然サーバ上にファイルが存在することになるので、検索サイトなどに載ってしまいます(検索除外等すれば出ませんが・・・)
そのため、下書きで留めているもので、外部にまだ出したくないファイルは先頭にアンダースコアを付けておきましょう。
手動でレンダリングする際も _quarto.yml
を参照しない
RStudio IDEのSource Paneの上部にあるRenderボタンで各ファイル毎にレンダリングが可能なのですが、ファイル名の先頭にアンダースコアがついている場合は quarto.yml
を読んでくれないようです。そのため、cssなどを共通処理としてそこに含めている場合、これが反映されないので注意です。お試しレンダリングの時だけファイル名の先頭のアンダースコアを削除してレンダリング、その後も公開しないのであれば再度付け直すという運用が良いでしょう。
最初、この挙動に気づかずに時間を溶かしてしまいました。まぁサイト上部のメニューなども表示されないのでそこで気付という話ですが・・・
階層やファイル構造も意識しよう
ということで、小ネタですがQuartoを実際に使っていると細々と注意点などが出てくるので今後も書きためていきます。あまり振れていませんが、RのスクリプトはRのフォルダに入れてまとめる、なども将来的なことを考えると大事です。このあたりもちゃんと整理して書いておきたいのでいずれ、また。
書籍
Quartoの解説書籍はまだ無かったはず・・・。基本的にはRMarkdownと同じなので、初心者はこの本からやると良いかなと思います。