vagrant-php-boxを使ってphp,mysql,phpMyAdminを使えるようにするまで

会社でVagrantを使っているので、自宅のMacでも、自分のWordPressのカスタマイズはVagrant上で動かすようにしようと思ってVagrantで環境を作ろうとしていたのですが、ひょっとしたらもうすでにそういうのはありそうだなと思ってぐぐったところ、公開されていました。

Link: https://github.com/sapienza/vagrant-php-box

このvagrant-php-boxを使えば、すぐにLAMP環境が手に入ります。便利。
しかし、phpMyAdminにログインしたところ、エラーメッセージがでていたので、これを消すのに手間取りました…。備忘録も兼ねて残しておきます。

vagrant-php-boxの導入

まずはvagrant-php-boxの導入です。
私の環境はMacOS 10.10.3なので、ほかの環境の方は適宜置き換えてください。
まず、ターミナルを起動後、vmディレクトリを作り、そこにvagrant-php-boxを置き、起動します。

mkdir ~/vm
cd vm
git clone git@github.com:sapienza/vagrant-php-box.git
cd vagrant-php-box
vagrant up

エラーなく起動できたら、次に進みます。

phpMyAdminにログインする

さっきまでの処理が終わったら、ブラウザでhttp://localhost:8080にアクセスすることができるようになっています。
そして、phpMyAdminも使えるようになっているのでアクセスしてみましょう。

http://localhost:8080/phpmyadmin/

ログインはデフォルトでユーザー名、パスワードともにrootです。
使い捨てられる開発環境なので、別にこのままでもいいと思います。

ログインしたら、警告文が下のほうに出ていると思います。これらを消していきます。

「環境保管領域が完全に設定されていないため、いくつかの拡張機能が無効になっています。理由についてはこちらをご覧ください。」を消す

これは、phpMyAdminの設定を保存するデータベースがないためです。これを作りましょう。
まず、vagrantで作ったサーバにログインします。

vagrant ssh

次にサーバ上で以下のコードを実行します。

cd $(sudo find / -type d -name "examples" | grep phpmyadmin)
gunzip -c create_tables.sql.gz | mysql -uroot -proot

説明しますと、これは、phpMyAdminの設定を保存するテーブルを作るファイルが保存されているところを探し出し、そこに移動後、mysqlにrootでログインして環境保管領域であるデータベースphpmyadminを作っています。

「設定ファイルに定義されている管理ユーザ(controluser)での接続に失敗しました」を消す

次に、phpMyAdminの設定ファイルである、config.ini.phpを修正していきます。実は、これにハマりました。

phpMyAdminのプログラムは/usr/share/phpmyadmin以下に保存されており、config.sample.inc.phpもここにあったため、config.inc.phpをここに設定すればいいと考えていたのですが、これが間違っていました。
phpMyAdminのconfig.inc.phpの保存場所は/etc/phpmyadmin以下です。気をつけましょう!!

vagrant-php-boxが作っているconfig.inc.phpは別名で保存しておいて、config.sample.inc.phpを元に作りましょう。

cd /etc/phpmyadmin
sudo mv config.inc.php config.inc.old.php
cd /usr/share/phpmyadmin
sudo cp config.sample.inc.php /etc/phpmyadmin/config.inc.php

ここから、/etc/phpmyadmin/config.inc.phpを編集します。
基本的には、

  1. controluserとcontrolpassを設定する
  2. pmadb以下のコメントアウトを外す

だけです。今回はvagrant上の使い捨てなので、rootのままにしています。
本番環境や、外部から見られる環境の場合は止めましょう。

/*
 * phpMyAdmin configuration storage settings.
 */

/* User used to manipulate with storage */
$cfg['Servers'][$i]['controlhost'] = '';
$cfg['Servers'][$i]['controluser'] = 'root';
$cfg['Servers'][$i]['controlpass'] = 'root';

/* Storage database and tables */
$cfg['Servers'][$i]['pmadb'] = 'phpmyadmin';
$cfg['Servers'][$i]['bookmarktable'] = 'pma__bookmark';
$cfg['Servers'][$i]['relation'] = 'pma__relation';
$cfg['Servers'][$i]['table_info'] = 'pma__table_info';
$cfg['Servers'][$i]['table_coords'] = 'pma__table_coords';
$cfg['Servers'][$i]['pdf_pages'] = 'pma__pdf_pages';
$cfg['Servers'][$i]['column_info'] = 'pma__column_info';
$cfg['Servers'][$i]['history'] = 'pma__history';
$cfg['Servers'][$i]['table_uiprefs'] = 'pma__table_uiprefs';
$cfg['Servers'][$i]['tracking'] = 'pma__tracking';
$cfg['Servers'][$i]['designer_coords'] = 'pma__designer_coords';
$cfg['Servers'][$i]['userconfig'] = 'pma__userconfig';
$cfg['Servers'][$i]['recent'] = 'pma__recent';

これらはphpMyAdminの設定を保存する場所(アクセスできる人、データベース、テーブル名)を示しています。

「mcrypt 拡張がありません。PHP の設定をチェックしてみてください。」を消す

最後に、mcrypt拡張のエラーメッセージです。
実はこれも、apt-getでphp5-mcryptがインストールされているのに出ていたエラーだったのでハマりました。

sudo apt-get install php5-mcrypt

を実行すると、すでにインストールされていると言われました。

ひとしきり悩んだのですが、有効になっていないだけかもしれないと思い、有効の仕方を調べて実行したら、うまくいきました。

sudo php5enmod mcrypt

mcryptを有効にしたら、apache2を再起動しておきましょう。

sudo service apache2 restart

その後、一旦phpMyAdminをログアウトして、再度ログインしてみてください。
エラーメッセージが消えているはずです!

さて、これで気兼ねなくPHPとMySQLで開発できるぞー!!


VagrantでNFSの接続時にパスワードを求められない設定

Vagrantで共有フォルダ設定をNFSにしている場合、vagrant upをする度にパスワードを聞かれて面倒くさい!と思うようになりました。パスワードを求められない方法を探していたら見つかりましたのでメモとして残しておきます。

ちなみに環境はMacで、Vagrantのバージョンは1.7.2です。

参考URL:

ちなみに、最初の参考URLのgistをまるまるコピーしたら動きませんでした。
そこで、参照もとのgist(2番目の参考URLのやつ)を見に行ったら、やはり動かないと言っている人がいて、最後のほうでこう書き換えろというのがあったので、それにしてみたところ、パスワードなしで起動するようになりました。よかった!

#!/bin/bash
# Add Vagrant's NFS setup commands to sudoers, for `vagrant up` without a password
# Updated to work with Vagrant 1.3.x

# Stage updated sudoers in a temporary file for syntax checking
TMP=$(mktemp -t vagrant_sudoers)
cat /etc/sudoers > $TMP
cat >> $TMP <<EOF

# Allow passwordless startup of Vagrant when using NFS.
# https://gist.github.com/joemaller/6764700

Cmnd_Alias VAGRANT_EXPORTS_ADD = /usr/bin/tee -a /etc/exports
Cmnd_Alias VAGRANT_NFSD = /sbin/nfsd restart
Cmnd_Alias VAGRANT_EXPORTS_REMOVE = /usr/bin/sed -E -e /*/ d -ibak /etc/exports
%admin ALL=(root) NOPASSWD: VAGRANT_EXPORTS_ADD, VAGRANT_NFSD, VAGRANT_EXPORTS_REMOVE
EOF

# Check syntax and overwrite sudoers if clean
visudo -c -f $TMP
if [ $? -eq 0 ]; then
  echo "Adding vagrant commands to sudoers"
  cat $TMP > /etc/sudoers
else
  echo "sudoers syntax wasn't valid. Aborting!"
fi

rm -f $TMP

middlemanによる静的サイト作成術 その4

前回はbowerの設定を行いました。

次はbootstrap-sassを使ったテンプレートが動くところまでやりましょう。

前回までを読んでない方は、こちらをどうぞ。

JavaScriptの設定

middlemanでは、JavaScriptを普通に書くこともできますが、CoffeeScriptも書く事ができます。
私はRailsでずっとCoffeeScriptをずッと書いているので、今回はCoffeeScriptを使います。

#= require jquery
#= require bootstrap-sass/assets/javascripts/bootstrap.min
#= require_self
#= require_tree .

これで、テンプレートではこのファイルだけ読み込めばよくなりました。

テンプレート側で読み込もうと思ったら、こう書きます。

= javascript_include_tag :application

erbの場合は、こう書きます。

<%= javascript_include_tag :application %>

CSSの設定

middlemanでは、SASSが最初から使えます。
今回はSCSSを使います。bootstrap-compassも使うかもしれないので読み込んでおきます。

@import "bootstrap-sass/assets/stylesheets/bootstrap";
@import "bootstrap-sass/assets/stylesheets/bootstrap-compass";

bootstrap-sassを使っているので@importで読み込むようにしています。
このファイルをテンプレート側で読み込みます。

= stylesheet_link_tag :application, media: "all"

erbの場合は、こう書きます。

<%= = stylesheet_link_tag :application, media: "all" %>

slimでテンプレートを作ってみる

最後に、slimでテンプレートを作ってみましょう。
slimは、html用のテンプレートエンジンです。

Slim – A Fast, Lightweight Template Engine for Ruby

slimやhamlは閉じタグを書かなくていいので、タグの閉じ忘れを気にしないで済みますし、タブ構造でhtmlの階層を記述するため、構造がわかりやすくてerbに比べるとかなり快適です。
私はhamlを書いたことがないので、hamlのことはよくわかりません。hamlを使っている人のほうが多いかもしれませんが、もうslimに慣れきっているので、slimで話を進めていきます。

doctype html
html lang="ja"
  head
    meta charset="utf-8"
    meta name="description" content=""
    meta name="keywords" content=""
    meta name="author" content=""
    meta content="IE=Edge,chrome=1" http-equiv="X-UA-Compatible"
    meta content="width=device-width, initial-scale=1.0, user-scalable=yes" name="viewport"
    /! Le HTML5 shim, for IE6-8 support of HTML elements
    /![if lt IE 9]
      <script src="http://css3-mediaqueries-js.googlecode.com/svn/trunk/css3-mediaqueries.js"></script>
      <script src="http://html5shim.googlecode.com/svn/trunk/html5.js" type="text/javascript"></script>
      <script type="text/javascript">
        document.createElement('main');
      </script>
    = stylesheet_link_tag :application, media: "all"
    /= favicon_link_tag 'favicon.ico'
    title = current_page.data.title || "middleman"
  body class=page_classes
    = javascript_include_tag(:ga) if build?
    noscript
      | 当サイトはJavaScriptを使用しています。JavaScriptを有効にしてください。
    .container
      .row
        .col-xs-12.col-sm-12.col-md-9
          header.hidden-xs.hidden-sm
            h1 初めてのmiddleman
          main role="main"
            = yield
      ruby:
        table_of_contents = [
                {path: 'foo.html', title: 'Foo'},
                {path: 'bar.html', title: 'Bar'},
                {path: 'buzz.html', title: 'Buzz'},
        ]
      aside.col-md-3.hidden-xs.hidden-sm
        div#nav-sidebar
          h3 目次
          ul.nav.sidebar
            - table_of_contents.each do |table_of_content|
              li class=('active' if current_path == table_of_content[:path])
                = link_to table_of_content[:title], table_of_content[:path]
    footer
      .container
        p
          small.copy
            | Copyright &copy; 2015 初めてのmiddleman All Rights Reserved.
    = javascript_include_tag :application

このテンプレートは、一応、PC用とスマートフォン用を考えて作られています。
slimに慣れていない方のために詳しく説明していきます。

yieldについて

yieldは、簡単に言うと、個別のページで記述したhtmlが入ります。
今回のテンプレートでいえば、mainタグ内にyieldがありますね。

main role="main"
  = yield

例えば、index.html.slimを作ったとします。

---
title: '初めてのmiddleman'
---

h2 Hello Middleman!!
p
  | middlemanは開発しやすいです。
  br
  | CoffeeScriptもSassも楽勝!!

この状態で、middlemanのサーバーを起動します。
以下のコマンドを入力して実行しましょう。

middleman

すると、http://localhost:4567でサーバが起動します。アクセスしてみましょう。index.html.slimの内容が表示されたかと思います。

最初の3行のところで定義している内容は、テンプレート内のcurrent_page.dataに入ります。今回はtitleを定義しているので、current_page.data.titleに反映されます。

title = current_page.data.title || "middleman"

これは、current_page.data.titleが空だった場合、middlemanというタイトルタグになります。

Rubyも書ける

slimはもちろんRubyも書くことができます。上記のテンプレートでは、サイドバーのメニューをRubyのHashの配列を使って楽をしています。

ruby:
  table_of_contents = [
          {path: 'foo.html', title: 'Foo'},
          {path: 'bar.html', title: 'Bar'},
          {path: 'buzz.html', title: 'Buzz'},
  ]
aside.col-md-3.hidden-xs.hidden-sm
  div#nav-sidebar
    h3 目次
    ul.nav.sidebar
      - table_of_contents.each do |table_of_content|
        li class=('active' if current_path == table_of_content[:path])
          = link_to table_of_content[:title], table_of_content[:path]

ruby: を使うとその中はRubyを書くことができます。table_of_contentsという変数に、Hashの配列を定義しています。そして、eachループを使ってliタグを書き出しています。現在のパスが特定のパスと一緒だったらactiveというクラスをつけるという処理も付いています。link_toメソッドは、Railsでもおなじみのリンクを作るヘルパーメソッドです。

それにしても、このままだとテンプレートが長くて見辛いですね。パーツ化していきましょう!上記のサイドバーを別ファイルに出してみます。

部分テンプレートを定義する

部分テンプレートは簡単に定義できます。が、Railsの場合とはちょっとだけ違います。見ていきましょう。まず、source/layouts/_sidebar.slimを作ります。そこに、さきほどのサイドバーの内容をコピペします。

ruby:
  table_of_contents = [
          {path: 'foo.html', title: 'Foo'},
          {path: 'bar.html', title: 'Bar'},
          {path: 'buzz.html', title: 'Buzz'},
  ]
aside.col-md-3.hidden-xs.hidden-sm
  div#nav-sidebar
    h3 目次
    ul.nav.sidebar
      - table_of_contents.each do |table_of_content|
        li class=('active' if current_path == table_of_content[:path])
          = link_to table_of_content[:title], table_of_content[:path]

そして、layout.slimの内容を修正します。

= partial 'layouts/sidebar'

Railsでは、renderメソッドを使いますが、middlemanではpartialメソッドを使います。

同じように、フッターも部分テンプレートにしてみましょう。

footer
  .container
    p
      small.copy
        | Copyright &copy; 2015 初めてのmiddleman All Rights Reserved.

ビルド時だけ動く処理を追加する

Google Analyticsのような、アクセス解析のタグなどは開発中の環境では読み込んでほしくありません。本番環境用のコードにだけ記述したい場合は、build?メソッドを使って条件設定をすることができます。Google Anatytics用のコードは、source/javascirpts/ga.jsに保存したというします。

= javascript_include_tag(:ga) if build?

これで、middleman buildを実行したときだけ、Google Analyticsのコードが反映されます。

今回のまとめ

今回作ったテンプレートを載せておきます。

doctype html
html lang="ja"
  head
    meta charset="utf-8"
    meta name="description" content=""
    meta name="keywords" content=""
    meta name="author" content=""
    meta content="IE=Edge,chrome=1" http-equiv="X-UA-Compatible"
    meta content="width=device-width, initial-scale=1.0, user-scalable=yes" name="viewport"
    /! Le HTML5 shim, for IE6-8 support of HTML elements
    /![if lt IE 9]
      <script src="http://css3-mediaqueries-js.googlecode.com/svn/trunk/css3-mediaqueries.js"></script>
      <script src="http://html5shim.googlecode.com/svn/trunk/html5.js" type="text/javascript"></script>
      <script type="text/javascript">
        document.createElement('main');
      </script>
    = stylesheet_link_tag :application, media: "all"
    /= favicon_link_tag 'favicon.ico'
    title = current_page.data.title || "middleman"
  body class=page_classes
    = javascript_include_tag(:ga) if build?
    noscript
      | 当サイトはJavaScriptを使用しています。JavaScriptを有効にしてください。
    .container
      .row
        .col-xs-12.col-sm-12.col-md-9
          header.hidden-xs.hidden-sm
            h1 初めてのmiddleman
          main role="main"
            = yield
        = partial 'layouts/sidebar'
    = partial 'layouts/footer'
    = javascript_include_tag :application

だいぶ短くなりました。部分テンプレート化することができたので、わかりやすくなったと思います。

あとは、それぞれ適当にslimファイルやerbファイルを作って、動作検証をしましょう。

サイトが完成したら、以下のコマンドでビルドします。

middleman build

buildディレクトリ以下にファイルが生成されるので、それをアップロードすれば終わりです。

とりあえずmiddlemanの連載としてはこれで終わろうと思います。
twitterでもコメントでも、感想などいただけたら嬉しいです。


middlemanによる静的サイト作成術 その3

前回までで、middlemanの設定を終えました。今回は、bowerの話です。
前回までの内容をチェックしていない人は以下のリンクからどうぞ。

  1. middlemanによる静的サイト作成術 その1
  2. middlemanによる静的サイト作成術 その2

bowerを使う

bowerは、JSのライブラリを管理するためのツールです。node.jsをインストールして、npmからインストールしましょう。
node.jsのインストールはnvmを使うといいんではないかと思います。
まだの人はnvmのインストール後、node.jsをインストールしましょう。

ここでは、node.jsはインストール済みとします。

インストール

以下のコマンドを実行しましょう。

npm install bower -g

プロジェクトでbowerを使えるようにする

プロジェクトのディレクトリで、以下のコマンドを実行します。

bower init

bower経由でライブラリをインストールする

あとは、bower経由でライブラリをインストールするだけです。
今回は、jquery, bootstrap-sassをインストールします。

bower install jquery
bower install bootstrap-sass

これで、JavaScriptのライブラリもさっくりとインストールすることができました。便利ですね。
なお、デフォルトではbower_componentsディレクトリ以下にインストールされます。

次回は、bootstrap-sassを適用した画面を表示するところまでやります。


middlemanによる静的サイト作成術 その2

前回は、middlemanによる静的サイト作成術 その1で、middlemanをインストールして、サーバーを動かすところと、ビルドをするとこまで説明しました。

今回はmiddlemanをさらに便利にするための設定を行います。

Gemfileの修正やmiddlemanの設定

Gemfileというのは、そのプロジェクト上で使うRubyのライブラリを定義するファイルのことです。同じライブラリでもプロジェクトごとにバージョンが異なっている場合などあるので、バージョンの固定化をしたい場合や、最新版をgithubなどから直接取得したい場合などに使います。Gemfile.lockは、ライブラリをインストールする際に参照されるファイルなので、削除しないように。

Gemfileの修正

私はテンプレートエンジンはslim派なので、slimをインストールします。

あと、bootstrapを使うので、middleman-bootstrap-navbarをインストールしました。これは、bootstrapの長ったらしいnavbarの記述をシンプルにするためのライブラリです。rails-bootstrap-navbarもあるので、bootstrap派の人にはオススメです。

そういえば、qiitaの記事を書いたことがあります。

qiita: rails_bootstrap_navbarで楽にnavbarを書こう!

以下、Gemfileです。

# If you have OpenSSL installed, we recommend updating
# the following line to use 'https'
source 'http://rubygems.org'

# For faster file watcher updates on Windows:
gem 'wdm', '~> 0.1.0', platforms: [:mswin, :mingw]

# Windows does not come with time zone data
gem 'tzinfo-data', platforms: [:mswin, :mingw]

# Middleman Gems
gem 'middleman'
gem 'middleman-livereload'

gem 'slim'
gem 'middleman-bootstrap-navbar'

今回はGemでbootstrap-sassをインストールしていません。bowerを使ったからです。gemで済ませたい人は、gemのbootstrap-sassを使ってもよいとは思います。

Gemfileを修正し終えたら、ターミナルで以下のコマンドを入力します。

bundle install

これで、gemがインストールされました。

config.rbの設定

config.rbにはmiddlemanの設定を書いていきます。
middlemanのプラグインを有効化したり、プラグインの設定を変更したり、開発中の際にだけ動く動作を定義したり、ビルドのときだけ動く動作を定義できます。

長いですが、私が使っているconfig.rbをそのまんま貼っておきます。

require 'rake/file_list'
require 'pathname'

config[:file_watcher_ignore] += [ /.idea\// ]

Slim::Engine.disable_option_validator!
set :slim, { tabsize: 2, format: :html, pretty: false }

###
# Page options, layouts, aliases and proxies
###

# Per-page layout changes:
#
# With no layout
page '/*.xml', layout: false
page '/*.json', layout: false
page '/*.txt', layout: false

# With alternative layout
# page "/path/to/file.html", layout: :otherlayout

# Proxy pages (http://middlemanapp.com/basics/dynamic-pages/)
# proxy "/this-page-has-no-template.html", "/template-file.html", locals: {
#  which_fake_page: "Rendering a fake page with a local variable" }

###
# Helpers
###
bower_directory = 'bower_components'

sprockets.append_path File.join root, bower_directory
# sprockets.import_asset 'jquery'


# Build search patterns
patterns = [
    '.png',  '.gif', '.jpg', '.jpeg', '.svg', # Images
    '.eot',  '.otf', '.svc', '.woff', '.ttf', # Fonts
    '.js',                                    # Javascript
].map { |e| File.join(bower_directory, "**", "*#{e}" ) }

# Create file list and exclude unwanted files
Rake::FileList.new(*patterns) do |l|
  l.exclude(/src/)
  l.exclude(/test/)
  l.exclude(/demo/)
  l.exclude { |f| !File.file? f }
end.each do |f|
  # Import relative paths
  sprockets.import_asset(Pathname.new(f).relative_path_from(Pathname.new(bower_directory)))
end


# Reload the browser automatically whenever files change

configure :development do
  set :debug_assets, true
  activate :livereload
end

# Methods defined in the helpers block are available in templates
# helpers do
#   def some_helper
#     "Helping"
#   end
# end


activate :bootstrap_navbar do |bootstrap_navbar|
  bootstrap_navbar.bootstrap_version = '3.3.4'
end

# Build-specific configuration
configure :build do
  # Minify CSS on build
  activate :minify_css

  # Minify Javascript on build
  activate :minify_javascript
end

個別に説明していきます。

.ideaを監視しない

config[:file_watcher_ignore] += [ /.idea\// ]

私はIntelliJ IDEA14.1 Ultimateで開発しています。IntelliJ IDEAはとても強力なIDEであり、Ultimateはその中でもいろんなプログラミング言語をサポートしている素晴らしいIDEです。まぁ有料ですが、お金を払う価値はあります。いろんなプログラミング言語を使う人はIntelliJ IDEA Ultimateがオススメです。IntelliJ IDEAは株式会社サムライズムが代理店を行っているので、そこから購入するとよいでしょう。middlemanだけ使う人は、安価なWebStormでいいかもしれません。私は職場ではRubyMineを使っています。

話が逸れました…。何が言いたかったかというと、.ideaというディレクトリはIntelliJが自動で作るのですが、内容がコロコロと変わるせいで、middlemanのLiveReload機能がその変更を検知してリロードしまくるため、.ideaは無視してね!っていう設定が必要なのです。

他にも無視してほしいファイルがあったら、追記で書いたらいいでしょう。

slimの設定

Slim::Engine.disable_option_validator!
set :slim, { tabsize: 2, format: :html, pretty: false }

最初の記述は、Slimが出す警告を出力しないものです。設定をしているつもりでも警告が出続けたので、無視するようにしました。大勢に影響はありません(たぶん)。
次に、slimの設定を書きます。タブ2つでhtmlを出力し、出力時には整形しないようにしています(余計なスペースなどを削除した状態)。見やすい階層構造を維持して出力したい場合はpretty: trueにしましょう。

bower用の設定

次に、bower用の設定です。bowerはJavaScriptのライブラリを管理するためのツールです。bower自体については次回に書きます。

middlemanはデフォルトでは自身の設定されているimages,javascripts,stylesheets,fontsディレクトリしか自動コンパイルの対象としていません。そのため、bowerでインストールされるライブラリのパスを参照できるようにする必要があります。

###
# Helpers
###
bower_directory = 'bower_components'

sprockets.append_path File.join root, bower_directory
# sprockets.import_asset 'jquery'


# Build search patterns
patterns = [
    '.png',  '.gif', '.jpg', '.jpeg', '.svg', # Images
    '.eot',  '.otf', '.svc', '.woff', '.ttf', # Fonts
    '.js',                                    # Javascript
].map { |e| File.join(bower_directory, "**", "*#{e}" ) }

# Create file list and exclude unwanted files
Rake::FileList.new(*patterns) do |l|
  l.exclude(/src/)
  l.exclude(/test/)
  l.exclude(/demo/)
  l.exclude { |f| !File.file? f }
end.each do |f|
  # Import relative paths
  sprockets.import_asset(Pathname.new(f).relative_path_from(Pathname.new(bower_directory)))
end

bower_componentsディレクトリ以下に含まれるファイルを参照対象に設定しました。ただ、これだとフォントの指定などがうまくいかなくなったので、bower_components以下にあるフォントファイルをfontsディレクトリ内に手動でコピーしたりなどの作業はしました。私の定義の仕方が悪かったのかもしれませんが…。

開発時の設定

configure :development do
  set :debug_assets, true
  activate :livereload
end

次に、開発時の設定です。debug_assetsですが、これを設定しておくと、application.jsで読み込んだファイルを1つ1つバラバラにして読み込んでくれます。なので、JSのデバッグの際に非常にコードが読みやすくなるので、開発中はこちらのほうがいいです。

そして、livereloadを有効化しておきます。修正して保存したらブラウザがリロードしてくれるので反映結果をすぐに確認できます。CSSで見た目を微調整しているときなどは、便利です。シングルページアプリケーションや、複雑なJSを動かしている場合などはオフにしているほうがいいかもしれません。

bootstrap_navbarの設定

activate :bootstrap_navbar do |bootstrap_navbar|
  bootstrap_navbar.bootstrap_version = '3.3.4'
end

これはbootstrap_navbarで使うbootstrapのバージョンの指定です。
ないと怒られるのです…。自分が使うbootstrapのバージョンを入力しましょう。

ビルド時の設定

# Build-specific configuration
configure :build do
  # Minify CSS on build
  activate :minify_css

  # Minify Javascript on build
  activate :minify_javascript
end

最後に、ビルド時の設定です。cssとJavaScriptをminify(最小化)しています。

長々と書きましたが、slimとbowerとbootstrap_navbarとdebug_assetsのところ以外は最初から定義されています。

次回は、bowerについて書きます。