HTMLの正当性を検査するのにHTML::Tidyを使ってみた

@nqounetです.

PerlでHTMLの正当性(validかどうか)を確認するのにHTML::Tidyを使ってみたという話をします.

少なくとも今一番新しいバージョンでは,Alien::Tidypをいうモジュールを予めインストールしておくことで使えるようになります.

依存情報が書かれていないためHTML::Tidyをインストールしても自動的にはインストールされません.

試してみる方は以下の様な感じでインストールしてみてください.

1
2
cpanm Alien::Tidyp
cpanm HTML::Tidy

使い方は極々簡単.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
#!/usr/bin/env perl
use v5.12;
use HTML::Tidy;

my $tidy = HTML::Tidy->new;
$tidy->parse( 'hoge.html', 'hoge' );

foreach my $message ( $tidy->messages ) {
  print $message->as_string, "\n";
}

結果はこんな感じになります.

1
hoge.html (1:22) Warning: discarding unexpectedhoge.html (1:16) Warning: inserting missing 'title' element

HTMLの構造体を簡単にチェックできると良かったんですが….

実際にjQuery Mobileで作ったページを通してみると,

のまえにがありません的なWarningが沢山あって戦々恐々としています.

listviewを作る時に,a要素の中にp要素を含んでいるのですが,その部分のことを警告されているようです.

HTML5的にはa要素の中にp要素があっても問題ないのですが,以前はそうではなかったということで,その名残でしょうか.

…とは言っても,Changesを見る限り,大きな変更点はなかったように思います.

Webアプリを作る時に,それほどまじめにやらないのはHTMLのvalidationじゃないかなと思います.

私は今までほとんどやったことがありませんでした.

staticなものであれば,W3CのHTML Validatorが使えますが,ログインしたり色々するのはこいつでは検証できません.

便利なモジュールもあるんですけどね.

…いや,すぐに分からなくても,少し調べればわかるのでHTMLのテストは必要性を感じなかったのです.

というのも,昔はheaderファイルに開始タグを書いてfooterファイルに終了タグを書く,というような書き方もしていたのですが,いつの頃からかincludeするファイルごとにHTMLの構造を完結させるようになっていました.

そのため,HTMLの構造が壊れても簡単に発見できました.

しかし,過去の遺産というか負債というか,ちゃんとHTMLの構造を意識していないコードもあります.

この場合は,includeしているファイルを全部見ていく必要があるので面倒です.

しかも,if文で,classやonclickの指定が違う部分を開始タグごと書いてあったり,条件によって開始タグがなくなるように書いていることもありました.

我ながら酷いと思います.

閉じタグを書くためのif文を見て泣けてきました.

こういう部分は,後々を考えて書き直していきたいのですが,HTMLの構造体がどこでどう変わっているのかをソースレベルで追いかけるのは大変です.

そこで,HTMLの構造のテストを追加することにしました.

もう少しカジュアルにテストしたいですね….

comments powered by Disqus
Built with Hugo
Theme Stack designed by Jimmy