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の使い方について紹介してきました。次回「カスタマイズ」編では、いよいよ具体的なカスタマイズ方法について説明します。

連載一覧

blog comments powered by Disqus