ホーム > WWWページ作成について > Another HTML-lintをWindows XPで動かす

Another HTML-lintをWindows XPで動かす


2008.8.9 高橋 誠

 HTML文法チェックにはAnother HTML-lintにお世話になっています。このダウンロードの指示に従い、MS-DOSプロンプトでローカルにチェックしていましたが、オンラインでチェックするのに比べて、エラーになった行の対応が取りにくくて分かりにくいです。中田 昭雄さんのAN HTTP ServerでローカルにWWWサーバを作り、組み合わせて動かしてみましたのでご報告します。
 なお、動かすに当たって、NIFTY SERVEのFHPEXPの第11会議室でえいさあさんから貴重なご指摘をいただきました。また、特にPerlの組込について、えいさあさんのAnother HTML-lintを使おうの方が手順が細かく分かりやすいのでご覧ください。

目次

Another HTML-lintのダウンロードと組込

 Another HTML-lintダウンロードからhtmllint.lzhをダウンロードして、どこかのディレクトリたとえばC:\htmllintに纏めて解凍します。解凍ツールのない方はLHMelt for windows32がお勧め。htmllint.lzh( 712k )Feb 25, 2003 22:43で確認しています。
 htmllintenvをhtmllint.envに名前変更して、この例では次のようにします。htmllintの下のlogsとかtmpやtagsはエクスプローラで作っておいてください。
 tagsは必須ではありませんが、タグ一覧の表示が2回目以降早くなります。
# CGI 用ディレクトリ (絶対パスかCGI相対パスで指定、なるべく絶対パスにしてください)
$RULEDIR = 'C:/htmllint/';           # 規則ファイルの場所
$LOGSDIR = 'C:/htmllint/logs/';      # ログファイルの場所
$TMPDIR  = 'C:/htmllint/tmp/';       # テンポラリファイルの場所
$IMGDIR  = 'C:/htmllint/';           # イメージファイルの場所
$TAGSLIST = 'C:/htmllint/tags/';      # タグ一覧キャッシュ用の場所 (空ならキャッシュしない)
                                     # 設定するときはアクセス権を適当に与えておくこと

# HTML 用ディレクトリ (CGI が出力する HTML 中で使う)
$HTMLDIR    = './';                     # HTMLファイルの場所
$GATEWAYURL = $HTMLDIR.'htmllint.html'; # ゲイトウェイサーヴィス HTML
$EXPLAIN    = $HTMLDIR.'explain.html';  # 解説用 HTML (HTML用)
$CGIROOT    = $HTMLDIR;                 # CGIの場所
$IMGROOT    = './';                     # イメージファイルの場所
 LWPにすると「HTML中のリンク先が存在していなかったら警告する(http:のみ)」を指定したときに、インターネットを繋いでいなくても外部リンクがエラー表示されません。自分のサイト内のリンクについてはチェックされています。
# LWP や Jcode.pm の使用を制限する (制限したいときコメントを外す)
#$NOUSELWP = 1;
#$NOUSEJCODE = 1;
 ちなみに、Lynxは、Lynx for Win32 (by patakuti): Project Home Pageで落してインストールできますが、ローカルに使えるのならばAnother HTML-lintと連動する必要はあまりなさそうです。
# Lynx (不要あるいは未実装ならコメントアウト)
#$LYNX = '/usr/local/bin/lynx';
 w3mもローカルに使えるなら連動する必要はあまりないでしょう。
# w3m (不要あるいは未実装ならコメントアウト)
#   カラー機能のない場合 -M の指定は不可
#   -e は EUC、Shift JIS なら -s
#$W3M = '/usr/local/bin/w3m -dump -T text/html -M -e';
 htmllint.envの指定を次のようにすると、URLのボックスに「file://c|..」とか「C:\...」といったNetscape NavigatorやInternet Explorerのurl指定ボックスに書き込むのと同じ書式でローカルファイルを書いてやってもチェックできるようになります。
# htmllint.cgi でローカルファイルも取得できるようにする (不要ならコメントアウト)
# 取得できるファイルは、クライアント上のファイルではなくてサーバ上のファイルを
# 指すことに注意してください (つまり、ローカルファイルというのは不正確です)
# したがって、この指定は、***ローカルなサーバ以外ではセキュリティ上危険です***
# この指定により、file:// で始まるプロトコルを URL に指定できるようになります
# ブラウザは、これをクライアント上のファイルとして取得しますが、ここではサーバ上
# のファイルとして取得するので注意してください
# Windows上のサーバでは、C: のようなドライブ名から始まるファイル名も記述できます
$GETLOCALFILE = 1;

Perl for Win32のダウンロードと組込

 Another HTML-lintのダウンロードに紹介されているCPAN (Comprehensive Perl Archives Network)にもありますが、 ということで、ActivePerlを落とす方がおすすめです。自己解凍型になっていて実行するとインストール先を聞いてきます。デフォルトではc:\perlにインストールすることになります。
 ActivePerlも頻繁にバージョンアップされます。この目的だけに使うのであればそうこまめにフォローする必要はないと思われますが、バージョンアップしたActivePerlをインストールするときは、前のバージョンを削除しておいた方がいいようです。削除しないでインストールしていたら、(コントロールパネル)-(アプリケーションの追加と削除)で見ると前のバージョンも消えていなくてずらりとActivePerlが並んでいました。

Jcode.pmのダウンロードと組込

 以上でMS-DOSプロンプトからのhtmllintが使えるはずです。

CGI.pmのダウンロード

 ActivePerl build 5.10.0 Build 1003の3.29で動作したのでダウンロードしていません。

AN HTTP Serverのダウンロードと組込

 中田 昭雄さんのAN HTTP Serverからダウンロードして、インストールします。
サービスの登録
AN HTTP Serverのサービスの登録の画面 Windows 2000では、Administratorでログオンして、(オプション/option)-(一般/general)で、サービスタグの下の「サービス」のところをチェックすると、サービスとして登録されます。こうしておくと他のユーザでログオンしても使用できます。サービスに登録すると以下の指定が無効になりますので最初に指定しましょう。
Perlモジュールの指定
AN HTTP ServerのPerlモジュールの指定の画面 (オプション/option)-(一般/general)で(.pl, .cgiの実行プログラム/exec prog for .pl, .cgi)の所にperlの実行モジュールを指定します。この例ではActivePerlがautoexec.bat等に登録しているのでperlis.dll。もちろん、c:\perl\bin\perlis.dllと書いても大丈夫です。(Activeperl Build 502までのとんでもなく長いディレクトリは止めたようです。)
 「HTML中のリンク先が存在していなかったら警告する(http:のみ)。」がタイムアウトするので、ISAPIタイムアウト値を300秒に伸ばしました。
 その他は左の通りデフォルトで動作しています。
仮想ディレクトリの指定
AN HTTP Serverの仮想ディレクトリの指定の画面 (エイリアス/aliases)の所にhtmllintのありかを適当な名前で登録します。たとえば/htmllintをc:\htmllintに結びつけます。
 チェックすべきhtmlのありかも指定しておくと、「HTML中のリンク先が存在していなかったら警告する(http:のみ)。」で自ページ間のリンクのチェックもできます。(左の例では/hobbitと/hobbit@)ただし、LWP指定でなくhttpreqの使用を指定して、インターネットを接続していなければ、それらへの参照はエラーになります。LWP指定の場合は、ローカルのリンク先だけエラーチェックされます。もちろん、インターネット接続していればそれ以外のリンクチェックもできます。
確認バージョン
 AN HTTP Server v1.42pで動作確認しました。v1.16から「HTML中のリンク先が存在していなかったら警告する(http:のみ)」の一部の機能が使えない問題点がなくなり機能制限はありません。Windows 2000でもサービスとして動かすとうまくいきました。
バージョンアップの注意
AN HTTP Server v1.32cからパラメタが変わったので、Windows 2000でサービスとして動作させている場合、
  1. サービスの停止
  2. ファイルの上書き解凍
  3. サービスの解除
ではうまくいきません。
  1. サービスの解除(サービスの登録の画面でチェックを外します。)
  2. ファイルの上書き解凍
  3. サービスの登録
とする必要があります。
 以上でAnother HTML-lintが動きます。

Apacheのダウンロードと設定

 Apacheでも動作しました。
ダウンロード
 http://httpd.apache.org/download.cgiから、apache_2.2.4-win32-x86-no_ssl.msiをダウンロードして、実行します。
  1. ライセンスの確認の後、Network Domain、Server Name、Administrator's Email Addressを聞いてきます。ローカルに使う場合には適当でいいです。
  2. さらにPort 80にするか8080にするか聞いてきます。An HTTP Serverと共存させるのでしたら、8080にします。
  3. Windowsの再起動で組み込み完了です。
パラメタテストの修正
 (スタート)-(プログラム)-(Apache HTTP Server 2.2.4)-(Configure Apache Server)-(Test Configuration)でパラメタのテストをしてくれるのですが、窓がすぐ閉じてしまい、テスト結果が見えません。上記選択を右クリックしてリンク先をコピーしpauseを加え下記ファイルをC:\Program Files\Apache Software Foundation\Apache2.2\test.batとして保存します。このファイルをリンク先に置き換えるとテスト結果をゆっくり見ることができます。
"C:\Program Files\Apache Software Foundation\Apache2.2\bin\httpd.exe"  -t -f "C:\Program Files\Apache Software Foundation\Apache2.2\conf\httpd.conf" -d "C:\Program Files\Apache Software Foundation\Apache2.2\."
pause
設定ファイルの修正
 (スタート)-(プログラム)-(Apache HTTP Server 2.2.4)-(Configure Apache Server)-(Edit the Apache httpd.conf Configuration File)で、httpd.confファイルをあけようとしますが、.confファイルのフアィルタイプ設定画面になってしまいます。これをお好みのエディタにしてしまうと簡単なんですが、いやな人はリンク先をお好みのエディタに変更すると良いでしょう。Aliasなんたらとかがあるところを探して、下記コーディングを追加しました。
Alias /htmllint/ "C:/htmllint/"
<Directory "C:/htmllint/">
    Options Indexes +ExecCGI
    AllowOverride All
    Order allow,deny
    Allow from all
    AddDefaultCharset ISO-2022-JP
</Directory>
 後、#AddHandler cgi-script .cgiがあるところを探して、コメントを外し、.plを追加して、
AddHandler cgi-script .cgi .pl
としました。
Windows 2000サービスとして組込
 次のコマンドでサービスとして実行されるようになります。
httpd.exe -k install
 サービスの起動停止は(スタート)-(プログラム)-(Apache HTTP Server 2.2.4)-(Monitor Apache Servers)をでMonitorを起動して、タスクバーに出てくるアイコンを右クリックして(Apache)-(start)で起動できます。Monitorは自動起動します。
htmllint.cgiの設定
Apacheはcgiプログラムが何かを.cgiファイルの先頭行から読みますから、htmllint.cgiの先頭を
#!C:/perl/bin/perl
と修正します。

Windows 2000 Professional Internet Information Service (IIS)

 Windows 2000 Professionalには標準でInternet Information Service (IIS)がついていて、AN HTTP Serverの代わりにこちらでも動作しました。
組込み
 Windows 2000 CD-ROMの\setup.exeを実行します。ここで追加コンポーネントのインストールを選ぶと、Windowsコンポーネントウィザードが出ます。ここで、インターネット インフォメーション サービス (IIS)を選びます。(詳細)では、「WWW(World Wide Web)サーバー」だけをえらべば必須の前提コンポーネントを追加して動作します。Windows98と同様に、Personal Web Managerが使いたいとか、何かわからないときにヘルプを見たいとかの場合はそれぞれ「パーソナルWebマネージャ」とか「オンラインヘルプ」も選ぶとよいでしょう。
Perl処理の指定
 ようやく、レジストリエディタを使う必要がなくなりました。
 コントロールパネルから、(管理ツール)-(インターネット サービス マネージャ)を開くと、(インターネット インフォメーション サービス)-([コンピュータ名])-(既定のWebサイト(起動/停止))というのが出てきます。  ここを右クリックすると、メニューが出まして、起動/停止も指示できます。このメニューから、(プロパティ)を選び、この中で(ホーム ディレクトリ)タブを選びます。下の方の(アプリケーション設定)の箱の中の(構成)の中で(アプリケーションのマッピング)を選ぶと拡張子ごとに処理モジュールの一覧が出てきます。
 (追加)ボタンで「アプリケーションの拡張子マッピングの追加/編集」を出して、実行ファイルとして、c:\perl\bin\perlis.dllを拡張子としてcgiを指定します。
 「.pl」についても同様に指定します。
仮想ディレクトリの指定
 パーソナルWebマネージャというプログラムが(プログラム)-(Internet Explorer)-(Personal Web Server)の下にできているはずなのでこれを起動します。「詳細」をクリックすると、<ホーム>以下仮想ディレクトリが表示されています。「追加」を指定して、htmllintのありかに適当な名称を割り当てます。この例では、c:\htmllintを/htmllintとします。
 (インターネット インフォメーション サービス)-([コンピュータ名])-(既定のWebサイト(起動/停止))を選択して、(操作)-(新規作成)-(仮想ディレクトリ)を選んでも同様にできます。
 チェックすべきhtmlのありかも指定しておくと、「HTML中のリンク先が存在していなかったら警告する(http:のみ)。」で自ページ間のリンクのチェックもできます。
確認バージョン
Internet Information Service (IIS) 5.0で動作確認しました。
注意事項
 特にポートを指定しないと、AN HTTP Serverとは背反になりますから、IISの「一時停止」でなく「停止」してから、AN HTTP Serverを起動して下さい。逆にIISを使うときはAN HTTP Serverを止めて下さい。

Internet Explorerとの連携

 Internet Explorerでローカルに見栄えを確認してから、文法チェックを起動する方法がいくつか紹介されています。
「編集」からの起動
 すずなりくるみさんの「お好みエディター」でバッチファイルを登録して、結果をテキストで表示する方法を紹介されています。Windows 2000ではpifができないので、batファイルを直接指定して動作しました。
 緋さんのAnother HTML-lint の導入及び UserAgent との連携では、もう一つのInternet Explorerを起動して、htmllint.htmlを呼びだす方法が紹介されています。
右クリックからの起動
 うりゅそふとさんのIE MenuExtで登録すると、Internet Explorerで表示している画面上の右クリックのときのメニューを追加できます。これによって、もう一つのInternet Explorerを起動して、htmllint.htmlを呼びだす方法をやはり、himuraさんが紹介されています。これはローカルファイルのチェック機能を使っています。チェックされる頁についても、ローカルサーバを使い、リンクチェックできるようにしてみました。
  1. AN HTTPDで、チェックしたいhtmlファイルの入っているディレクトリ、たとえばc:\hobbitを/hobbitという仮想ディレクトリに対応させます。
  2. lint.zipを解凍して、その中のhtmluri.htmlのドライブレターC:をソースファイルのある場所に修正して、c:\htmllintの下に保存します。また、Another HTML Lintのチェックオプションもお好みに合わせ修正してください。Windows 2000で、SP2を適用していないと、不良のためvar uri = uri.replace(/html#.+/,"html");が動作しないので、SP2を適用するかこの行を削除してください。
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html lang=en>
    <head>
    <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
    <META HTTP-EQUIV="Content-Script-Type" content="text/javascript">
    <title>Another HTML Lint</title>
    <LINK REL="contents" HREF="./index.html">
    </head>
    <body>
    <script type="text/JavaScript" defer><!--
            var uri = external.menuArguments.location.href;
            var uri = uri.toLowerCase();
            var uri = uri.replace("file:///c:","http://localhost");
            var uri = uri.replace(/html#.+/,"html");
            var uri = "http://localhost/htmllint/htmllint.cgi?URL=" +  uri + ";V;T=15;E=cant-get-url";
            window.open (uri, "HTMLLint");
    --></script>
    </body>
    </html>
    
  3. IE MenuExtを起動して、
    • 名前(N):Another HTML Lint(&H)
    • ファイル(F):C:\htmllint\htmluri.html
    と指定します。「アイテムの表示方法」は「通常時」をチェックします。
 これで、参照中のローカルファイルの上で右クリックするとメニューにAnother HTML Lint(H)が追加されているはずです。これを選ぶと参照中の頁がリンクを含めてチェックできます。対応する仮想ディレクトリのないローカルファイルを見ているときに起動するとエラーになります。
お気に入りからの起動
 やはりhimuraさんが紹介されていますお気に入りからの起動手順を少し変えて、リンクのチェックができるようにしてみました。
  1. 適当な頁をAnother HTML Lintという名前で「お気に入り」に追加します。
  2. 「お気に入りの整理」で上で作ったAnother HTML Lintを右クリックして「プロパティ」を選びます。
  3. URLに
    javascript: var uri = location.href; var uri = uri.toLowerCase(); var uri = uri.replace("file:///c:", "http://localhost"); var uri = "http://localhost/htmllint/htmllint.cgi?URL=" + uri + ";V;T=15;E=cant-get-url"; window.open (uri, "htmllint"); eval();
    を指定します。OKを押すと「プロトコル"javascript"には登録されたプログラムはありません。この対象を維持しますか?」と聞いてきますが、「はい」といいます。
 これで、お気に入りでAnother HTML Lintを選ぶと参照中のローカルファイルに対応するローカルサーバの内容をチェックしてくれます。もちろんローカルサーバと対応の取れていないローカルファイルを見ているときに起動するとエラーになります。Windows 2000のSP2以降では、次の「Netscape 6.0との連携」で紹介したスクリプトでも動作しました。

Firefox 1.5, Netscape 6.0との連携

Bookmarkからの起動
 himuraさんが紹介されていますお気に入りからの起動手順で、Netscape 6.0でもチェックができました。上記のIE対応のスクリプトでも動きますが、ページ内のタグに飛んだとき等#の後に名称を指定してるとオプション指定が無効になるのでこれを削除するコーディングを追加してみました。Windows 2000 SP1以前のIEでは、正規表現では使えませんでしたが、SP2ではこれも使えました。
  1. (Bookmark)-(Manage Bookmaks)でManage Bookmarksを呼び出します。
  2. Manage Bookmarksで(File)-(New Bookmark)を呼び出し、URLに
    javascript: var uri = location.href; var uri = uri.toLowerCase(); var uri = uri.replace("file:///c:","http://localhost"); var uri = uri.replace(/html#.+/,"html"); var uri = "http://localhost/htmllint/htmllint.cgi?URL=" + uri + ";V;T=15;E=cant-get-url;CheckGET=on"; window.open (uri, "htmllint"); eval();
    を指定します。
  3. name:にAnother HTML Lintなど分かりやすい名前を付けます。
 これで、BookmarkでAnother HTML Lintを選ぶと参照中のローカルファイルに対応するローカルサーバの内容をチェックしてくれます。もちろんローカルファイルを見ていないときに起動するとそのページをチェックします。

Opera 6.0との連携

Bookmarkからの起動
 himuraさんが紹介されていますお気に入りからの起動手順で、Opera 6.0でもチェックができました。ローカルファイルの参照の場合のuriがちょっと違います。
  1. (Bookmark)-(Add page here)でBookmark propertiesを呼び出します。Addressに
    javascript: var uri = location.href; var uri = uri.toLowerCase(); var uri = uri.replace("file://localhost/c:","http://localhost"); var uri = uri.replace(/html#.+/,"html"); var uri = "http://localhost/htmllint/htmllint.cgi?URL=" + uri + ";V;T=15;E=cant-get-url;CheckGET=on"; window.open (uri, "htmllint"); eval();
    を指定します。
  2. Title:にAnother HTML Lintなど分かりやすい名前を付けます。
 これで、BookmarkでAnother HTML Lintを選ぶと参照中のローカルファイルに対応するローカルサーバの内容をチェックしてくれます。もちろんローカルファイルを見ていないときに起動するとそのページをチェックします。

秀丸エディタとの連携

 やはりhimuraさんが紹介されています秀丸エディタからのマクロによる起動手順を少し変えて、リンクのチェックができるようにしてみました。
  1. 次の内容のlint.zipを解凍しその中のhtmllint.macを取り出し、秀丸エディタと同一のフォルダに置きます。$baseの値はhtmlの格納されている場所に従い修正します。また、HTML Lintの起動オプションもお好みに合わせ修正します。
    $msie = "C:\\Program Files\\Internet Explorer\\IEXPLORE.EXE";
    $lint = " http://localhost/htmllint/htmllint.cgi?URL=";
    $file = filename2;
    $base = "C:\\";
    
    #off = strstr($file, $base);
    
    if (#off != -1) {
      #rlen = strlen($file) - strlen($base);
      $file = rightstr($file, #rlen);
      #off = strstr($file, "\\");
      while (#off != -1) {
        $file = leftstr($file, #off) + "/" + rightstr($file, #rlen - #off - 1);
        #off = strstr($file, "\\");
      }
      $file = "http://localhost/" + $file;
    }
    run $msie + $lint + $file + ";V;T=15;E=cant-get-url;CheckGET=on;";
    endmacro;
    
  2. 秀丸の(マクロ)-(マクロの登録)でHTML Lint等の分かりやすい名前を付けます。
  3. 秀丸の(マクロ)のプルダウンメニューにHTML Lintが追加されているのでこれを指定することで、Internet Explorerを呼び出しチェック結果が表示できます。

参考文献

紹介いただいているページ


ホーム(x)