jekyllでビルドしたwebサイトを公開するパスを変更したいとき、設定すべき_config.ymlのオプションはbaseurlurlの2つである。 baseurlオプションは公開するwebサイトのパス、urlオプションはwebサイトのホスト名とプロトコルの組みを意味する。 たとえばhttps://example.com/blogとして公開する場合、baseurlオプションは/blogurlオプションはhttps://example.comに設定する必要がある。

以下、GitHub Actionsを用いてGitHub Pagesを公開するケースを考える。 actions/starter-workflowリポジトリにあるサンプルコードpages/jekyll.ymlでは、 以下のようなコマンドでjekyllを走らせてビルドを行っている。

bundle exec jekyll build --baseurl "${{ steps.pages.outputs.base_path }}"

ここで、--baseurl_config.ymlで設定されたbaseurlオプションを上書きするコマンドラインオプションであり、 steps.pages.outputs.base_pathは設定すべきbaseurlオプションの値を取得できる変数である。 つまり、_config.ymlbaseurlオプションを指定しなくても正しい値で上書きされるため、 独自ドメインを設定するなどしてGitHub Pagesのパスが変わったときでも_config.ymlを書き換える必要はない。

それではurlオプションを自動で設定することはできないのだろうか。 もしできるのであれば、GitHub Pagesのパスが変わったときに_config.ymlを一切書き換える必要がなくなり、 リビルドだけをすれば良いということになる。

urlオプションに設定すべき値は、 actions/configure-pagesのサンプルコードaction.ymlに記載がある通り、 steps.pages.outputs.origin変数で取得できる。 しかし、urlオプションをこの値で上書きすることはできない。 なぜなら、urlオプションを上書きするコマンドラインオプションが存在しないからだ。

$ bundle exec jekyll build --url "${{ steps.pages.outputs.origin }}"
Deprecation: The 'url' setting can only be set in your config files.

警告の文面から判断すると、コマンドラインでurlを設定できないのは意図的な仕様のようだが、その理由は不明である。