Jekyllでビルドするファイルを別ディレクトリに入れて不要なファイルの公開を防ぐ

Qiitaで読む: Jekyllでビルドするファイルを別ディレクトリに入れて不要なファイルの公開を防ぐ

デフォルトでは、Jekyllはプロジェクトルートにあるファイルなら(特殊な意味を持つファイルでない限り)なんでもビルドしようとする。

my_jekyll_site
|- GemFile  // safe
|- GemFile.lock  // safe
|- _config.yml  // safe
|- .gitignore  // safe
|- index.md  // BUILT
|- _posts  // BUILT (日時等が解釈されてから)
 |- ...

このやり方には1つ問題がある。例えばここにスクリプトファイルを置くと、そのファイルはビルド時にサイトに含まれてしまう。

my_jekyll_site
|- Gemfile
|- ...
|- script.sh  // OOPS?!!?!?!?!?!?

スクリプトを置きたい理由は複数考えられる。例えば:

  • ビルドの自動化スクリプトや
  • Yarnでwebpackするときなどの設定ファイル

などである。

もちろん_config.ymlファイルのexcludeキーで取り除くこともできるのだが、denylist型のこの設定はメンテが面倒で、知らない間に公開したくないファイルを公開してしまうことになりかねない。

exclude: ["webpack.js"]

実は、もっといいやり方がある。

sourceキー

このキーを設定しておくと、Jekyllはプロジェクトルートの代わりに指定されたディレクトリの中身をビルドするようになる。(なぜ公式のスケルトンにこの設定が書かれていないか疑問)

source: "_src"

この例では、全ての関連ファイルを_srcディレクトリに入れると問題なく動く。こうすれば、ビルド時にだけ必要で公開する必要のないファイルをプロジェクトルートにおいても問題ない。もう exclude キーをメンテしなくて良くなる。

一点注意が必要なのがwebpackなどだ。webpackの出力先も_srcに向けないとおかしな結果を招くので注意だ。