Skipt to main content

jekyllでhaml

permalink

Octopressからjekyllに移行したときにhamlサポートがうんぬんと書いたのだが、その後、hamlサポートを自作した。この実装のポイントは以下の通り。

  • hamlコードを記述できる{% haml %} ... {% endhaml %}を追加する
  • 拡張子が.hamlのファイルを処理する際、自動的に本文全体を上のブロックで包む

結果として.hamlファイルはhaml処理されることとなる。

おかしなやり方だけれども一応は理由がある。

Railsのerbの文法チェックなど

permalink

Railsのhtml.erbの中のRuby部分の文法チェックをするスクリプトを書いてみた。

最初はチェックだけだったのだが、すでにあるhtml.erbに手を入れるときのことを考えるとRubyコード的な差分がとれるといいな、とか、html.erbから抜き出したママのコードで差分をとってもうまくないな、とか、いくつかのことをやっているうちにけっこうなサイズになってしまった。

Railsのhtml.erbに対してできそうなこと:

  • Ruby的な文法チェック(-c [-v])
  • Ruby部分の抜き出し(-s)
  • Ruby部分についてのgit HEADとの比較(-d [-{w|b}] [-U num])

コード

Rubyコードの整形にはruby-beautifyを使ったのだが、整形のやり方にちょっとクセがあるみたい。あと、ちょっと古いのかも。

今ならRipperでなんとか〜かなと少し探してみたけども見付けられなかった。誰か書いてそうに思えるのだけど。かといって自分で書くというのもなかったので、とりあえず必要だったちょっとした点をどうにかするためにRipperを組み合わせて使うという妙なことになっている。ま、いいか。

Jekyllで記事を書き始めるためのRakeタスク

permalink

OctopressからJekyllにしてちょっとだけ困ったのが記事の書き始め。

Octopressには雛型っぽいものを作ってくれるRakeタスクがあった。Rakeの[〜]記法を使わなければならないのはいまいちだったが、なくなってみると困るものだ。そういうわけで、Octopressで不満だったところを自分なりの解消しつつ、なんとなくそれらしい感じに動くJekyll向けのタスクを書いてみた。(たぶんOctopressでも使えると思う。)

コード

まず新しく記事を書き始める手順。

% rake new

環境変数EDITORに従ってエディタが起動する。frontmatterのdateには現在の日時が入っている。layoutcommentsなど、基本的に決め打ちなので変更したければタスクをいじること。カテゴリやタグをいくつかに絞っているなら最込から列挙しておくとよいかも。

_filename_という見慣れないフィールドがあるが、これは_postsにファイルを保存する際、ファイル名として使う文字列を記述するために独自に使用しているもの。これとdateの内容からファイル名を構成する。

_filename_がなかったり、空だったり、初期状態のままだったりしたら無視される。そういうときにはdatetitleからファイル名を構成する。

なお、_filename_はこのためだけに勝手に使っている。ファイル名を構成したあとは用なしになるので、記事ファイルを_postsに保存すタイミングで削除される。

記事を書き終えたら公開するが、公開して、その直後に直しが入るなんてことはよくある。最後に編集した記事ファイルをもう一度開くタスクを用意した。

% rake last

mtimeが最も新しいものを選んでエディタを起動する。更新日時ではなく、ファイル名に含まれる日付が最も新しい記事ファイルを開くには次のタスクを使う。

% rake latest

frontmatterのdateまでは見ていなくて、あくまでファイル名から判断している。

重要なこと

rake newしてエディタを終了させたとき、何らかの理由でファイルの移動ができない状況になることがあるかもしれない。できる限り記事の中身を残すようにしたつもりだが、抜けがあるかもしれないので注意すること。

あと、変なバグでコケるとかあるかも。

様子をみながら使ってください。

Rubyのエンコーディングとファイル名

permalink

昨日のまとめ。

  • ファイルを操作するスクリプトを書いたら身に覚えのないinvalid byte sequenceをくらった
  • てっきりファイル名がへんなファイルのせいだと思っていたらコマンドライン引数で変なバイト列をくわせていたからだった
  • ARGVをいじくってうまく避けるしかないのかな

そう、ファイル名の問題ではなかった。だが、そうだとしてもファイルを扱う以上はファイル名にも同じように気を付けなければならい。そんなことを書いた後でこう思った。でもコマンドライン引数と違って、ファイル名ならEncoding.default_externalに従って扱えるよね? あれ?

Rubyのエンコーディングとコマンドライン引数

permalink

Ruby 1.9.3以降、ファイル名の扱いでひっかかりポイントがあったんだよな。なんだったっけ?

と、ここしばらく、頭の片すみにモヤモヤが居座っていた。ついさっき、どういうことだったかを思い出せた。

最初にひっかかったのはファイルを操作するスクリプトだった。ファイル名にまつわるところに何かある、と勘違いしてしまっていたのはそのせいだろう。しかしきちんと思い出してみると、ファイル名ではなくコマンドライン引数のエンコーディングにより生じる問題だった。ファイル名のほうを適当に直すという場当たり対処をついついしてしまったのも勘違いを深める要因だったかもしれない。