BundlerでJekyllを使う

06 March 2018 mkasberg mkasberg

Bundlerは、必要なgemとバージョンを追跡しインストールすることで、Rubyプロジェクトに一貫した環境を提供します。

BundlerはJekyllで使用できる素晴らしいツールです。プロジェクト毎に依存関係を追跡するため、異なるプロジェクトで異なるバージョンのJekyllを使用する場合に便利です。

加えて、(オプションで)プロジェクトフォルダにインストールでき、実行時のパーミッションの問題を回避できます。
通常Jekyllを使用する場合、システムのデフォルトgemインストールディレクトリにJekyllをインストールし、jekyll newを実行します。このチュートリアルでは、プロジェクトディレクトリの外にgemをインストールせずにBundlerで新しいJekyllプロジェクトを作成する方法を示します。

Jekyllを使い始める最もシンプルな方法ではありません

このチュートリアルはシステムワイドのgemインストールをせずに、Bundlerを使用してJekyllをセットアップすることを助けます。デフォルトのgemインストールディレクトリにjekyllをインストールしたい場合は、クイックスタートがよいかもしれません。

始める前に

このチュートリアルでは、RubyBundlerのインストールが必要です。インストール手順は、それぞれのwebサイトをご確認ください。

Bunblerの初期化

まず始めに行うことは、プロジェクト用の新しいディレクトリを作り、bundle initを実行することです。これは、(空のGemfileを作ることで)新しいBundlerプロジェクトを作成します。

mkdir my-jekyll-website
cd my-jekyll-website
bundle init

Bundlerインストールパスの設定

このステップはオプションです。プロジェクトのサブディレクトリ./vendor/bundle/にgemをインストールするため、Bundlerの設定を行います。
これを行う利点は、gem installで使用される場所ではなく、依存関係をプロジェクトフォルダにgemをインストールすることです。これにより、Rubyのインストール方法に応じて、gemのインストール中に発生する可能性がある権限エラーを回避できます。
このステップを飛ばすと、Bundlerは依存関係をgem installで使用される場所にインストールします。

bundle install --local path vendor/bundle
Bundler設定は永続的です

この手順はプロジェクト毎に1回だけ必要です。Bundlerは設定を./.bundle/configに保存するので、将来のgemは同じ場所にインストールされます。

Jekyllを追加する

次は、新しいプロジェクトが依存するJekyllを追加するためにBundlerを使用します。このコマンドはJekyll gemをGemfileに追加し、./vendor/bundle/フォルダ(カスタムパスを設定していない場合はデフォルトのgemインストールディレクトリ)にインストールします。

bundle add jekyll

Jekyll骨格を作成する

Jekyllがインストールされました。サイトの骨格を作るためにjekyllを使うことができます。フォルダにはBundlerのファイルが既にあり空ではないので、--forceパラメータが必要です。Gemfileが既に存在しているとJekyllが混乱するので、bundle installを分割して実行します。

bundle exec jekyll new --force --skip-bundle .
bundle install

サイトをサーブする

webサイトの準備ができました! bundle exec jekyll serveでWebサイトをサーブして、http://127.0.0.1:4000を訪れましょう。これであなた自身がサイトの構築を続けていく準備ができました。Jekyllの通常のコマンドは全て利用できますが、プロジェクトフォルダにインストールしたJekyllのバージョンをBundlerで実行するためにbundle execをコマンドの前につけることを忘れないでください。

ソース管理へのコミット

新しいサイトをバージョン管理で保存している場合、./vendor/./.bundle/フォルダにはユーザーやプラットフォーム固有の情報が含まれているため無視したいでしょう。新しいユーザーは最新のGemfileGemfile.lockに基づいて正しい依存関係をインストールできます。GemfileGemfile.lockはどちらもチェックインが必要です。必要に応じて、次の.gitignoreを使用してください。

.gitignore

# Ignore metadata generated by Jekyll
_site/
.sass-cache/
.jekyll-cache/
.jekyll-metadata

# Ignore folders generated by Bundler
.bundle/
vendor/