nanoc導入メモ 2/5 「Basic Concepts」編
第一回の「Getting Started」編に続き、 今回はnanoc公式のBasic Conceptsから要点を紹介します。
完全な日本語訳ではなく、大幅に端折っているので詳しく知りたい方は原文の方も併せてご覧ください。
Basic Concepts
The Commandline Tool
nanocの標準ヘルプと、サブコマンド毎のヘルプをそれぞれ以下のコマンドで参照できます。
> nanoc help
> nanoc help コマンド名
create_siteした後で主に使用するコマンドは「compile(コンパイルする)」「view(ローカルサーバを立ち上げる)」「autocompile(オートコンパイル+ローカルサーバ)」の3つです。
autocompileコマンドはコンテンツの変更を検出して自動的に再コンパイルを行なってくれます。autocompileを使用するためには追加でmime-typesのgemが必要になります。
> gem install mime-types
> nanoc autocompile
Sites
「Getting Started」編にも載せましたが、サイトのファイル構成は以下のようになります。
content/ : コンパイル元となるコンテンツ
layouts/ : レイアウト
lib/ : コンパイル時に読み込まれるヘルパ等のカスタムコード
output/ : コンパイルされたデータ
tmp/ : コンパイル用に使用される一時領域
config.yaml : サイト設定
Rules : コンパイル、ルーティング、レイアウトのルール
「config.yaml」の主な設定内容は以下のとおりです。
# テキストファイルとして処理する拡張子(リストにないファイルはバイナリ扱いとなる)
text_extensions: [ 'css', 'erb', 'haml', 'htm', 'html', 'js', 'less', 'markdown', 'md', 'php', 'rb', 'sass', 'scss', 'txt', 'xhtml', 'xml', 'coffee' ]
# 出力先ディレクトリ(絶対パス・相対パス可)
output_dir: output
# サーバでインデックスファイルとして認識されるファイル名(プリティURLのために使用される)
index_filenames: [ 'index.html' ]
# コンパイル前後比較用のdiff出力有無
enable_output_diff: false
prune:
# output先で不要となったファイルの自動削除(安全のために既定でOFF)
auto_prune: false
# auto_pruneで除外するファイル(output先のバージョン管理をしている場合など)
exclude: [ '.git', '.hg', '.svn', 'CVS' ]
Items
各アイテムは標準で以下の属性を持っています。
:filename : ファイル名
:content_filename : コンテンツファイル名
:meta_filename : メタファイル名
:extension : ファイル拡張子
Layouts
レイアウトでは以下の変数が使用できます。
@item : コンパイルされるカレントコンテンツ
@items : コンパイルされる全コンテンツのリスト
@layout : コンパイルされるカレントレイアウト
@layouts : コンパイルされる全レイアウトのリスト
@config : サイト設定のハッシュ
@site : サイト
レイアウトは以下の方法で部分化することができます。
「lib/default.rb」に以下のコードを追加します。
include Nanoc::Helpers::Rendering
任意の内容で「layouts/head.html」を作成し、「layouts/default.html」に以下を記述します。
<%= render 'head' %>
Rules
「Rules」ファイルでは「compile」「route」「layout」のルールを指定します。各ルールは複数定義でき、最初にマッチしたルールが一度だけ適用されます。
Compilation Rules
コンパイルルールではコンテンツに対して適用するフィルタとレイアウトを指定します。複数のフィルタを順に適用することも可能です。
compile '/samples/three/' do
filter :erb
layout '/shiny/'
filter :rubypants
end
Routing Rules
ルーティングルールでは、各コンテンツをどのようにoutputに出力するかを指定します。標準では以下のルーティングルールにより「contents/stylesheet.css」が「output/style.css」にコンパイルされます。
route '/stylesheet/' do
'/style.css'
end
route '*' do
if item.binary?
# Write item with identifier /foo/ to /foo.ext
item.identifier.chop + '.' + item[:extension]
else
# Write item with identifier /foo/ to /foo/index.html
item.identifier + 'index.html'
end
end
この記述(上3行)をコメントアウトすると、「contents/stylesheet.css」は通常コンテツと同様に「output/stylesheet/index.index」としてコンパイルされてしまいます。
Layouting Rules
レイアウトルールでは、レイアウトに対して適用するフィルタを指定します。
layout '/default/', :haml, :format => :html5
layout '*', :erb
おわりに
ここまでnanocの公式ドキュメントからnanocの使い方について紹介してきました。次回「カスタマイズ」編では、いよいよ具体的なカスタマイズ方法について説明します。
連載一覧
- nanoc導入メモ 1/5 「Getting Started」編
- nanoc導入メモ 2/5 「Basic Concepts」編
- nanoc導入メモ 3/5 「カスタマイズ」編
- nanoc導入メモ 4/5 「Markdown独自拡張」編
- nanoc導入メモ 5/5 「運用効率化バッチ」編