QuartoのサイトをGitHub Actionsでビルドする際、code linkingが正しく動作しない問題の対処法
症状
本サイトでは、Quartoを使ってサイトを構築しています。 Quartoでは、code linkingという機能を使って、関数にドキュメントへのリンクを自動的に追加することができます。 例えば、plot()関数をコードブロック内で使用すると、plot()関数のドキュメントへのリンクが自動的に追加されます。
Code linkingについては、以下の公式ドキュメントを参照してください。
筆者はこの機能を利用してサイトを構築していましたが、GitHub Actionsでビルドすると、code linkingが正しく動作しない問題が発生しました。 しかし、ローカル環境でのプレビューではcode linkingが正しく動作しており、GitHub Actionsでビルドしたときだけcode linkingが正しく動作しないことがわかりました。
また、GitHub Actionsのビルドログを確認すると、以下のような警告が表示されていました。
Warning message:
The downlit and xml2 packages are required for code linking 対処法
どうやら、GitHub Actionsの環境で、code linkingに必要なdownlitとxml2のパッケージがインストールされていないことが原因でした。
renvを利用してパッケージ管理をしていますが、renvがパッケージを管理するrenv.lockファイルの “Packages” の部分に、downlitとxml2のパッケージが含まれていませんでした。
以下のコードを実行します。
renv::install(c("downlit", "xml2"))
renv::snapshot(type = "all")これにより、downlitとxml2のパッケージがインストールされ、renv.lockファイルにも追加されます。
普段はrenv::snapshot()を実行して、renv.lockファイルを更新しますが、コード内でlibary()で呼び出されない場合、renv.lockにはパッケージが追加されません。 このため、renv::snapshot(type = "all")を実行して、インストールしたすべてのパッケージをrenv.lockファイルに追加する必要があります。
もしそうでない場合は、明示的にこれらのパッケージをどこかで呼び出す必要があります。
renv.lockファイルを更新した後、コミットしてGitHubにプッシュします。 GitHub Actionsでビルドしたときに、code linkingが正しく動作するようになりました。
感想
ローカルではcode linkingが動作するが、ビルドされたサイトでは動作していないことに気づくのに時間がかかりました。 また、この解決も結構な時間がかかりました。
解決の糸口は、GitHub Actionsのビルドログに表示されていた警告でした。 この警告をもとに、code linkingに必要なパッケージがインストールされていないことがわかりました。 このような問題が発生したときは、ビルドログを確認することが重要だと改めて感じました。
意図しない挙動が起きたら、丁寧にログを確認することが大切ですね。