rackアプリのサーバサイドでHTMLをチェック

まとめ

  • tidy を文法チェッカとして使う rack middleware は rack-htmltidy だが、1.8 専用
  • しかも HTML 5 には対応していないのでスマホ版などイマドキの HTML に対応できない

ということで、HTML 5 対応を考えなければ rack-htmltidy を使えばなんとかなるのですが、ちょっと寂しい状況ですね、これは。

背景

しばらく前からWebのフロントエンドの作業をする際にはこのFirefox add-onを使っていました。

しかし Firefox が 5.0 になり、release サイクルが変わって以降、Windows 版以外は source が配布されるのみになってしまいました。さすがに Firefox add-on のために自前 build とかやりたくないし、そこまでの死活問題でもないし、まぁいいかと見送っていたのですが、先日 HTML の構造を壊して手痛い時間の浪費をしてしまったので、一度真面目に考えないとなーと思っていたところでふと気づきました。

サーバサイドでチェックできればいんじゃね?

Bingo でした。rack tidy で検索するといくつか見つかります。というわけで現状を整理してみたいと思います。

Html Tidy

まず今回の話で出てくるいちばん大切なソフトはこれです。

HTML Tidy Project Page

HTML Tidy とはとても古いソフトウェアで、

  • HTML の cleaning
  • HTML の構文エラーの警告

の2つの機能を持っています。先の HTML Validator も中で tidy を実行するモードを備えています。

tidy gem ( 1.8 )

http://tidy.rubyforge.org/

メンテされていないので fork バージョンが多数存在しますが、今でもこれを参照しているプロジェクトが多いです。以下の 1.8 用の gem は基本的にこれを参照しています。

rack-tidy ( 1.8 )

rbialek/rack-tidy - GitHub

チェックではなく HTML の書き換えを目的にしているので、自分の意図とは合いません。また文字コードの扱いもあるので自動書き換えものはけっこう危険。

rack-htmltidy ( 1.8 )

wbzyl/rack-htmltidy - GitHub

こちらも tidy gem を使ったものでチェックだけで使えます。エラーは Log に落ちるので、それを見ながら作業していけばよいようです。

html5-rack-tidy ( 1.8 )

customink/html5-rack-tidy - GitHub

rack-tidy から fork して HTML 5 対応したもの。ということでこれも書き換え目的になっています。

tidy_ffi ( 1.9 )

1.8 用の tidy gem は libtidy を利用するライブラリで、要するに native extension です。これはそのままでは 1.9 では動きません。1.9 では ffi を通す tidy_ffi を使うとよいようです。

libc/tidy_ffi - GitHub

tack-tidy-ffi ( 1.9 )

その tidy_ffi を利用するバージョンがこれ。

makevoid/rack-tidy-ffi - GitHub

ただしやはり HTML の書き換えを目的にしており、また 1.9 の encoding の絡みもあって日本語の HTML を通すととても残念な結果になることもあり、ちょっとさすがに使えない感じです。

tidy_rack

これは libtidy を使わずに実行バイナリを使うバージョン。

phorsfall/tidy_rack - GitHub

HTML の書き換えもするけど HTML 上に error や warning を出力してくれるらしい。

まとめ

  • tidy を文法チェッカとして使う rack middleware は rack-htmltidy だが、1.8 専用
  • しかも HTML 5 には対応していないのでスマホ版などイマドキの HTML に対応できない

ということで、HTML 5 対応を考えなければ rack-htmltidy を使えばなんとかなるのですが、ちょっと寂しい状況ですね、これは。

※ HTML 5 対応を考えると Validator.nu が今のところイチオシみたいですね。試してないですけど。

蛇足

middleman で動かす

middleman で動かすには config.ru ではなく config.rb の方を書き換えないとダメなようです。config.ru で説明してある部分を読み替える必要があります。

w3c validator

もしかしたら HTML のチェッカとしては w3c validator の方が有名かもしれません。w3c validator はチェッカサービスであり、そのエンジンの名前です。手元の環境に自由にインストールして動かすことができます。

この w3c validator を利用する rack middleware がないか探してみたところ、やはりありました。

ただし、せっかくこのツールを利用しているのに rack-validate は w3c_validators にまったく option を渡せず、ローカルの環境に閉じることができずに

The W3C Markup Validation Service

にアクセスしに行ってしまいます。なんてこった。

More