これからの一連の記事は、2016年2月27日に行われた福井技術者の集い その5での僕の発表した内容を、加筆ならびに修正し、よりわかりやすくまとめ直したものとなります。
これから作成する静的Webサイトとは、twitterやfacebookなどのような、アクセスに応じて配信するファイルが変化するようなものではなく、このブログのように、決まったhtml、css、JavaScriptのファイルを返す単純なWebサイトのことを指します。
さて、静的Webサイトをつくるのに必要な道具は、極論を言ってしまえばテキストエディタ以外に必要ありません。
しかし、htmlの手書きは、閉じタグを忘れたりすることもあります。cssの手書きは、デザインによってはベンダープレフィックス(webブラウザによって異なるスタイルの書き分け)などを全て書き並べる必要が出てくることもあるでしょう。 デザインのうえでの共通部分(ヘッダーやフッターなど)も、全てコピーアンドペーストするのでしょうか?
そこで、静的Webサイトを作ってくれるツールを使って、作っていきます。
静的Webサイトを作ってくれるツールのことを、「静的Webサイトジェネレーター」と呼びます。 Top Open-Source Static Site Generators - StaticGenに主要な静的Webサイトジェネレーターが載っていますが、とにかく量が多いです。 一体どれを選べばよいのでしょう。
今回は、このブログでも使っているmiddlemanを使用します。 採用の理由としては、
などです。 同じくRubyで書かれている静的Webサイトジェネレーターにjekyllがあります。こちらはGitHub pagesという簡単に静的Webサイトを作成できるGitHub上のサービスで採用されているツールです。
middlemanはRubyで書かれているので、PCにRubyの実行環境がない場合は、環境を整えてやる必要があります。 Rubyの開発環境構築は、OSごとに書くとそれだけで記事が一つ出来上がるので、ここでは解説サイトへのリンクを掲載するのみに留めます。
middlemanのインストールには、gem
というツールを使います。gem
は、Rubyに標準で組み込まれているライブラリをインストールするコマンドです。
以下のコマンドを実行することで、gem
を使用したmiddlemanのインストールが行われます。
$ gem install middleman
インストールはこれで終わりです。
さて、middlemanでは、各種ファイルの置き場所が決まっています。それらの準備をmiddlemanにしてもらうために、以下のコマンドを実行します。(例えば今回作るWebサイトの名前を、hogesiteとします。)
$ middleman init hogesite
このコマンドの実行により、今いるディレクトリにhogesite
というディレクトリができ、その中にsource
などの幾つかのディレクトリができているはずです。
さて、これからはこのhogesite
ディレクトリで作業をしていくので、ターミナル上でもcdしておきましょう。
$ cd hogesite
$ pwd
/home/user/src/hogesite #pathはどうでもよくて、大事なのはカレントディレクトリがhogesiteであるということです
gitなどのバージョン管理システムを使用している場合、この段階で一旦コミット等状態の保存をしておくと良いでしょう。
middlemanは標準ではhtmlテンプレートエンジン(htmlを生成するためのファイルの形式)にerbを使用します。しかし、erbはほとんどhtmlのようなものです。また、cssも素のcssを書く必要があります。
htmlテンプレートエンジンにはslimを、altCSSにはscssを使います。これも、僕の個人的な趣味による選択です。
さて、slimとscssを使いたいのですが、そのためにはmiddlemanをインストールした時のように、外部ライブラリのインストールが必要となります。いちいちgem install
しても良いのですが、それだとこのプロジェクトにはどの外部ライブラリが必要なのか?という情報がわからなくなってしまいます。
そこで、bundler
を使用します。Bundlerは、あるプロジェクトの依存関係の記述、またライブラリ間の依存関係の解決を行ってくれる、これもRubyのライブラリです。
以下のコマンドを実行して、bundlerに依存関係を指定するためのファイル、Gemfile
を生成します。
$ gem install bundler #すでに入っている場合もあります
$ bundle init #コマンドの名前がbundlerでないことに注意してください
すると、次のようなGemfileが出来上がっていると思います。
# A sample Gemfile
source "https://rubygems.org"
# gem "rails"
これをひとまず以下のように書き換えます。
source "https://rubygems.org"
gem "middleman"
gem "middleman-livereload"
gem "slim"
gem "sass"
(middleman-livereload
はあると便利、という理由で追加しました)
そして、以下のコマンドを実行します。
$ bundle install
これによって、bundlerがGemfile
から必要な外部ライブラリを読み取り、ライブラリの間で依存関係を解決してインストールを行い、実際にインストールされたライブラリの情報をGemfile.lock
に書き込みます。
そしたら、次のような設定をconfig.rb
に記述します。先頭でも末尾でも構いません。
set :slim, { format: :html, pretty: :false }
set :sass, { style: :expanded, syntax: :scss }
この設定の意味は、slimの場合はここ、sassの場合はここ(英語)を参照してください。
さて、実際にページを作っていきたいのですが、その前にmiddlemanが最初に生成したerbをslimに変換してしまいます。 以下のコマンドを実行して、erb2slimというgemをインストールします。(Gemfileに記述する必要はありません。なぜなら、erbをslimに変換するためだけに使うからです。)
$ gem install erb2slim
初期状態ではindex.html.erb
とlayouts/layout.erb
がerbファイルとして存在するはずなので、以下のコマンドで変換してしまいます。(-d
オプションでerbファイルを削除しています)
$ erb2slim index.html.erb index.html.slim -d
$ erb2slim layouts/layout.erb layouts/layout.slim -d
あとは、あなたが好きなようにslimを書き、scssを書き、ページを作っていくだけです。
slimの記法は、日本語による解説がここにあります。 scssの記法は、英語による解説がここにあります。(SassとSCSSを切り替えて表示することができます)
参考までに、僕がmiddlemanを使って作成した静的Webページのコードを以下に掲載します。
さて、素晴らしいwebページを書いている途中に、「これって、ブラウザではどんなふうに見えるのだろう?」と思うことはあるはずです。そんな時は、以下のコマンドを実行してみてください。
$ bundle exec middleman server
このコマンドを実行し、ブラウザでhttp://localhost:4567
にアクセスすると、実際にどのようなページになるのかをブラウザで確認することができます。(Ctrl+Cで終了します)
また、middleman-livereload
をインストールした場合は、config.rb
のどこかに次の設定を書いておけば、bundle exec middleman server
を実行中にファイルを編集すると、自動的にブラウザが再読込してくれて便利です。
configure :development do
activate :livereload
end
作業も終わり、公開できるものが出来上がったとします。そしたら、次のコマンドを実行します。
$ bundle exec middleman build
このコマンドにより、html、css、JavaScriptが生成されます。このフォルダ以下のファイル群をサーバーに置いて、アクセスできるようにすれば静的Webサイトの出来上がりです。それはまた以降の記事で解説していきます。
middlemanの公式ドキュメント(日本語)は以下のURLにあります。わからないことができたら都度見に行くと良いでしょう。
次回は、ドメインを取ることと、サーバーを借りてssh接続するところまでやりたいと思います。