前回はMiddlemanのインストールから、Blogサイトのスケルトン(雛形)を作成するところまでを記載しました。 今回はBowerを使ってFoundation等のフロントエンドライブラリをインストールする手順を記載します。
Bowerとは
- Twitter社製のフロントエンドライブラリ用パッケージマネージャ
- RubyでいうところのBundlerのようなもの
- コマンドラインからフロントエンドライブラリのインストール、アンインストール、アップデートなどが実行できる
- ライブラリ間の依存関係を管理できる
今回のBlogサイトでは使用するフロントエンドライブラリも少数なので個々にインストールしても良かったのですが、 勉強がてら試しにBowerを使ってみることにしました。
node.jsインストール
Bowerはnode.jsベースのツールなので、まずはnode.jsをインストールします。
公式サイトでインストーラが配布されているのでそれを使うのが手順としては一番簡単かと思います。
私はnode.jsのversion管理ができるnodebrewを使ってインストールしました。以下を実行すると、~/.nodebrew
にnodebrewがインストールされます。
$ curl -L git.io/nodebrew | perl - setup
nodebrewのbinディレクトリをpathに追加しておきます。私はzshを使っているので~/.zshrc
に追加しました。
bashの場合は~/.bashrc
などに追加すればよいかと思います。
$ export PATH=$HOME/.nodebrew/current/bin:$PATH >> .zshrc
$ source ~/.zshrc
node.jsをインストールします。nodebrew ls-remote
でインストール可能なnode.jsのバージョンが確認できます。v0.10.xxがStableなリリースなので、その最新版をインストールしました。
$ nodebrew install-binary v0.10.24
nodebrew use
で使用するバージョンを選択します。その後node -v
でバージョンが表示されればインストール完了です。
$ nodebrew use v0.10.24
$ node -v
v0.10.24
Bowerインストール
Bowerをインストールします。node.jsにはnode.js用のパッケージマネージャのnpmがバンドルされているので、これを使います。
$ npm install bower -g
-g
オプションを指定したので、.nodebrew/node/v0.10.24/lib/node_modules
にbowerがインストールされました。ライブラリをシステムワイドに使用しない(特定プロジェクトのみで使用する)場合は-g
なしでコマンドを実行します。(この場合はカレントディレクトリのnode_modulesにライブラリがインストールされます。)
Bowerのバージョンを確認してみます。
$ bower -v
1.2.8
Bowerの初期化
Bowerでライブラリを管理する準備をします。middlemanのプロジェクトフォルダ(下記の例ではmy_blog)に移動して、bower init
を実行します。色々と質問されますが、全てデフォルトで問題ないと思います。
$ cd my_blog
$ bower init
[?] name: my_blog
[?] version: 0.0.0
[?] description:
[?] main file:
[?] keywords:
[?] authors: Yutaka Yawata <xxxxx@xxx.xxx>
[?] license: MIT
[?] homepage:
[?] set currently installed components as dependencies? Yes
[?] add commonly ignored files to ignore list? Yes
[?] would you like to mark this package as private which prevents it from being accidentally published to the registry? No
{
name: 'my_blog',
version: '0.0.0',
authors: [
'Yutaka Yawata <xxxxx@xxx.xxx>'
],
license: 'MIT',
ignore: [
'**/.*',
'node_modules',
'bower_components',
'test',
'tests'
]
}
[?] Looks good? Yes
質問への回答が反映された形で、middlemanのプロジェクトフォルダ直下に以下のようなbowerの設定ファイルbower.json
が生成されます。
{
"name": "my_blog",
"version": "0.0.0",
"authors": [
"Yutaka Yawata <xxxxx@xxx.xxx>"
],
"license": "MIT",
"ignore": [
"**/.*",
"node_modules",
"bower_components",
"vendor/bower_components",
"test",
"tests"
]
}
bowerを使うと自作のライブラリをBowerのリポジトリに公開することもできます。version
以下はそのための設定です。今回はローカル環境でのパッケージマネージャとしてのみの利用なので、最低限name
の設定があればOKです。それ以外は削除してしまっても問題ありません。
もう一つ、.bowerrc
というファイルを手動で作成し、これを使ってライブラリのインストール先ディレクトリを変更しておきます。デフォルトはbower.jsonと同じ階層のbower_componenets
にライブラリがインストールされますが、今回はvendor/bower_components
に変更しました。設定はjsonで書きます。
{
"directory" : "vendor/bower_components"
}
これは必須設定ではありませんので、ディレクトリパスはお好みで構いません。注意点としては、middlemanのsourceディレクトリ内にライブラリを配置するとライブラリのreadmeファイルなどもbuild時のコンパイル対象となってしまうので、sourceディレクトリの外に配置するのがよいと思います。
フロントエンドライブラリのインストール
Bowerのセットアップが完了したので、早速Foundationをインストールしてみます。パッケージ名を指定してbower install
を実行します。
$ bower install foundation
Foundationと、その依存ライブラリが.bowerrc
で指定したとおりvendor/bower_components
にインストールされます。
└── vendor
└── bower_components
├── fastclick
├── foundation
├── jquery
├── jquery-placeholder
├── jquery.cookie
├── lodash
└── modernizr
デフォルトでは最新バージョンがインストールされますが、以下のようにライブラリのバージョンを指定してインストールすることもできます。
$ bower install foundation#5.0.3
Bowerのリポジトリに公開されていないものでも、ライブラリの公開URLを直接指定してインストールすることもできます。以下はgithubからFoundationをインストールする例です。
$ bower install git://github.com/zurb/foundation.git
bower install
だけだと単にライブラリを所定のディレクトリにダウンロードしてくるだけですが、--save
オプションを指定するとbower.json
に自動的に依存関係を書き込んでくれます。
$ bower install foundation --save
bower.json
を見てます。
{
"name": "my_blog",
"version": "0.0.0",
"authors": [
"Yutaka Yawata <xxxxx@xxx.xxx>"
],
"license": "MIT",
"ignore": [
"**/.*",
"node_modules",
"bower_components",
"vendor/bower_components",
"test",
"tests"
],
"dependencies": {
"foundation": "~5.0.3"
}
}
"dependencies"
の部分がそれです。"foundation": "~5.0.3"
という具合に、パッケージ名と値を記述します。(ここで言う依存関係とは、プロジェクトで必要なライブラリ、という意味です。)
bower.jsonに依存関係を記述しておくと、次回以降はbower install
だけでお目当てのライブラリがインストールできます。
今回は--save
オプションでbower.jsonに依存関係を書き込みましたが、手動で依存関係を記述した上でbower install
というやり方もできます。
~5.0.3
というバージョン指定は、5.0.3~5.0.9
までのバージョンを指しています。
こうしておくと、5.0.3~5.0.9
までのバージョンで最新のものがインストールされます。バージョンを固定したい場合は単に5.0.3
と書きます。
ちなみにBowerのリポジトリに公開されているライブラリはSemantic Versioningに準拠しているようなので、 3桁目はバグフィックスが含まれるパッチ番号、ということになります。
ライブラリをアップデートする場合はbower update
を実行します。アップデートするものがない場合はライブラリの再インストールが実行されます。
$ bower update
ところで上記のbower.json
にはjQueryなどのFoundationの依存ライブラリの記述が見当たりません。これはvendor/bower_components/foundation/bower.json
に記述されています。
{
"name": "foundation",
"version": "5.0.3",
"main": [
"css/foundation.css",
"js/foundation.js"
],
"dependencies": {
"jquery": ">= 2.0.0",
"modernizr": ">= 2.6.2",
"fastclick": "~0.6.11",
"jquery.cookie": "~1.4.0",
"jquery-placeholder": "~2.0.7",
"lodash": "~2.4.1"
},
"devDependencies": {
"jquery.autocomplete": "devbridge/jQuery-Autocomplete#1.2.7"
},
"private": true
}
Bowerでライブラリをインストールすると、インストールしたライブラリに含まれるbower.json
もチェックされて
芋づる式に依存ライブラリをインストールしてくれる、というわけです。
最後にFont AwesomeとNormalize.cssもBowerでインストールしておきます。Normalize.cssはSass版をインストールしました。
2つのパッケージ名を指定して、一気にインストールします。
$ bower install font-awesome normalize-scss --save
最終的にbower.json
は以下のようになりました。
{
"name": "my_blog",
"version": "0.0.0",
"authors": [
"Yutaka Yawata <yuyawata@gmail.com>"
],
"license": "MIT",
"ignore": [
"**/.*",
"node_modules",
"bower_components",
"vendor/bower_components",
"test",
"tests"
],
"dependencies": {
"foundation": "~5.0.3",
"font-awesome": "~4.0.3",
"normalize-scss": "~2.1.3"
}
}
vendor/bower_components
は以下です。
└── vendor
└── bower_components
├── fastclick
├── font-awesome
├── foundation
├── jquery
├── jquery-placeholder
├── jquery.cookie
├── lodash
├── modernizr
└── normalize-scss
まとめ
Blogサイトで使用するフロントエンドライブラリのインストールまでできました。Bowerを使うとライブラリのアップデートが簡単にできるのが良いなと。 今回はBowerを使いましたが、フロントエンドライブラリはgem化されているものもあるのでそれを使ってもよいと思います。
次回はBlogの基本設定について記載します。