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 とはとても古いソフトウェアで、
- HTML の cleaning
- HTML の構文エラーの警告
の2つの機能を持っています。先の HTML Validator も中で tidy を実行するモードを備えています。
tidy gem ( 1.8 )
メンテされていないので fork バージョンが多数存在しますが、今でもこれを参照しているプロジェクトが多いです。以下の 1.8 用の gem は基本的にこれを参照しています。
rack-tidy ( 1.8 )
チェックではなく HTML の書き換えを目的にしているので、自分の意図とは合いません。また文字コードの扱いもあるので自動書き換えものはけっこう危険。
rack-htmltidy ( 1.8 )
こちらも 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 を使うとよいようです。
tack-tidy-ffi ( 1.9 )
その tidy_ffi を利用するバージョンがこれ。
makevoid/rack-tidy-ffi - GitHub
ただしやはり HTML の書き換えを目的にしており、また 1.9 の encoding の絡みもあって日本語の HTML を通すととても残念な結果になることもあり、ちょっとさすがに使えない感じです。
tidy_rack
これは libtidy を使わずに実行バイナリを使うバージョン。
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
にアクセスしに行ってしまいます。なんてこった。