2020年8月22日土曜日

middleman 入門

概要

middleman は jekyll, nanoc の静的サイトが作成できるツールです
今回はインストールから簡単な使い方を紹介します

環境

  • macOS 10.15.6
  • Ruby 2.6.5p114
    • middleman 4.3.8

最初に注意

Ruby 2.7 だと動作しません
undefined method new for BigDecimal:Class (NoMethodError) が発生し middleman コマンドが使えません

なので Ruby2.6 系で試しましょう
以下では rbenv でインストールした ruby を使っています

  • rbenv install 2.6.5
  • $(rbenv which ruby) -v
  • $(rbenv which gem) -v
  • rbenv init - >> ~/.zshrc
  • source ~/.zshrc

インストール

グローバルインストールしましょう
bundle install でもできると思うんですが面倒なのでグローバルインストールにしました

  • gem install middleman

Mac の rbenv 場合は /Users/username/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0 に gem はインストールされます
適当に PATH 配下において実行できるようにしましょう

  • ln -s /Users/username/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/gems/middleman-cli-4.3.8/bin/middleman /usr/local/bin

プロジェクト作成

まずはプロジェクトを作成しましょう

  • middleman init test

init のあとにプロジェクト名を指定することもできます
指定しないとカレントがプロジェクトのルートになります

とりあえず動かしてみる

サンプルプロジェクトの内容でとりあえず動かしてみましょう

  • cd test
  • bundle exec middleman server

で起動できます
localhost:4567 でサンプルサイトにアクセスできます

トラブルシューティング

bundle exec middleman server するとなぜか「undefined method show_deprecation_message! for AutoprefixerRails:Module」というエラーが出てしまいうまく表示されませんでした
ちゃんとメソッドが定義されているのに動作しない状態だったのでもしかすると LOAD_PATH あたりがおかしいのかなと思います

  • vim /Users/username/Documents/work/try_middleman/test/vendor/gems/autoprefixer-rails-9.8.6.2/lib/autoprefixer-rails/processor.rb

で process メソッドでコメントアウトすれば OK です

# AutoprefixerRails.show_deprecation_message!

ページを追加する

新しいページを追加してみましょう
erb ファイルを追加すれば OK です

  • touch source/about.html.erb
  • vim source/about.html.erb
---
title: About page
---

<h1>
  About me
</h1>

<p>name・・・hawksnowlog</p>
<p>age・・・10</p>

これで localhost:4567/about.html にアクセスすると新しく追加したページを確認できます

スタイルを変更する

仕組みから説明するとページのレイアウトを管理している erb ファイルがまずあります

  • vim soruce/layouts/layout.erb

ここで <%= stylesheet_link_tag "site" %> というメソッドがコールされています
これは middleman の機能で source/stylesheets/site.css.scss を自動で読み込んで適用してくれます
なのでスタイルを変更する場合は source/stylesheets/site.css.scss を変更すれば OK です
例えば背景の色を変更する場合は

  • vim source/stylesheets/site.css.scss
background-color: #CCFFFF;

とかに変更すると以下のように背景の色が変わるのが確認できると思います

YAML Frontmatter

例のごとく YAML Frontmatter があります
ページのタイトルの設定や固定値の設定もできます

  • vim source/about.html.erb
---
layout: layout
title: About page
favorites:
  - ruby
  - swift
  - python
---

<h1>
  About me
</h1>

<p>name・・・hawksnowlog</p>
<p>age・・・10</p>
<% current_page.data.favorites.each do |f| %>
<p>I like <%= f %></p>
<% end %>

layout は source/layouts/ 配下で作成したレイアウトのテンプレートファイル名を指定します
デフォルトは layout ですが上記では明記しています
宣言した変数の値は current_page.data で参照できます
ちなみにコロンで区切れば JSON Frontmatter も使えるようです

;;;
"layout": "layout",
"title": "About page",
"favorites": [
  "ruby",
  "swift",
  "python"
]
;;;

<h1>
  About me
</h1>

<p>name・・・hawksnowlog</p>
<p>age・・・10</p>
<% current_page.data.favorites.each do |f| %>
<p>I like <%= f %></p>
<% end %>

ヘルパーメソッドの定義

link_tostylesheet_link_tag は middleman がデフォルトで用意してくれているヘルパーメソッドです
自分でヘルパーメソッドを定義することもできます
その場合は lib/custom_helpers.rb という感じでモジュールを追加してあげます

  • mkdir lib
  • vim lib/custom_helpers.rb
module CustomHelpers
  def hello
    "hello"
  end
end

そして作成したヘルパーメソッドは config.rb で読み込みます

  • vim config.rb
require "lib/custom_helpers"
helpers CustomHelpers

あとは about.html.erb で参照するだけです

<p><%= hello %></p>

ブログ化する

今までは erb ファイルを追加することで新しいページを作成しました
middleman-blog を追加することで markdown を追加するだけでページを追加できます

  • vim Gemfile
gem "middleman-blog", "~> 4.0"
  • bundle install

そして config.rb でブログモードを有効にします
ブロック内でいろいろと設定できますが今回はデフォルトのまま使います

activate :blog do |blog|
end

追加する記事のファイル名には命名規則があり {year}-{month}-{day}-{title}.html という形式で追加します
例えば以下のように追加できます
source ディレクトリ配下に追加します

  • touch source/2020-08-21-test.html.md

あとは markdown と Frontmatter を使って普通に記事をかけば OK です

---
title: Test article
tags:
  - test
  - diary
---
# This is test article
Hello

アクセスする際は localhsot:4567/2020/08/21/test.html という感じで year, month, day をスラッシュで区切ったパスにアクセスします

最後に

middleman を使って静的ページの作成を行ってみました
セットアップに躓きましたが使い方としては jekyll, nanoc と同じように使えると思います
erb がデフォルトで使えるので ruby を使ってゴリゴリ書きたい人には向いているかもしれません

今回は試していませんが動的ページの作成やローカライズの機能もあるのでっ興味があれば調べてみてください

参考サイト

0 件のコメント:

コメントを投稿