血統の森+はてな

旧はてなダイアリーの自動インポートによるアーカイブです。

developers.whatwg.orgを生成するスクリプトと大乱闘した

晦日だというのに何やってるんですかね(しろめ
さて、WHATWGのHTML仕様であるHTML Living Standard(HTMLLS)については今更説明不要だと思いますが、このHTMLLSにはWeb developer edition用意されています(HTML: The Living Standard - Edition for Web Developers

で、このWeb developer editionですが、困ったことに日付が無い。つまり、いつ作ったものなのかいまいちわからない、と。この記事を書いている時点では2013年11月11日に更新されているので、HTMLLSから1ヶ月ほどズレてると。で、ページの下の方を見るとGitHubでこのページを生成されているスクリプトが公開されているわけですね(benschwarz/developers.whatwg.org · GitHub)。試しに動かしてみようと思ったら、ものすごいハマったのでメモ(あまりにいろいろと格闘したので、本当に再現できるのか怪しいけど。そして、思いつくままに入れたので、本当はもっとスマートに動かせるはず)。

ちなみに環境は、VirtualBox上のDebian Stable(Debian 7.3 / wheezy)。

0. 最初に「Download ZIP」からダウンロードしておく

gitとかわかんないんです、すみませんすみませんorz
benschwarz/developers.whatwg.org · GitHubIceweaselでアクセス、ダウンロードしてNautilusで解凍するという非常にぬるい方法ですが石を投げないでください…

1. まずruby、subverionを入れる

# aptitude install ruby subversion

ちなみにpython2.7は最初から入ってた。なお、python3系列はまるで別物という噂を聞いたがそれはまあ置いておく。

2. pip install -r requirements.txtへの道

はじめてPythonを触ったんでさっぱりわかりませんでしたがまあGoogle先生にお伺いを立てると、Pythonで一番最初に入れるべきパッケージ setuptools と pip - Life with Pythonとか、setuptools - 清水川Webとか言うことらしい。

distributeをこれまたブラウザで落としておいて、解凍した後、

# python setup.py install

をしておく。それから、

# easy_install pip
# pip install -r requirements.txt

と。(まあ、後で振り返るとこれが本当に意味があったのかは謎だという)。

3. gem、gemをする。

まあ、rubyとかもはじめて触ったんでパッケージシステムとかさっぱりわかってないわけですよええ。
もうエラーログを流してしまったので正確なエラーメッセージを失念しましたがこの時点でmakeすると、bundlerがないって怒られるんですよね。まあ、readmeにbundle installって書いてあるのを見落としてたわけですが、gemとはどこにも書いてないわけでして…。てきとーにぐぐってRuby - ツールを使いたいだけの人のための bundler 入門 (例: vagrant + veewee) - Qiita [キータ]で、gemの存在を知りました。

# gem install bundler

これで必要なものすみましたね、さあこんどこそmake通るかなと思ったらこれがなかなか…。

# bundle install yui-compressor

ここでgemgem install rake -v '10.0.0'しろとか怒られました。(まあ、bundle installが回り道だったような気がする、今にして思えば。)

# gem install rake -v '10.0.0'

さらにrubyスクリプトjsonを要求してきます。

# gem install json

が、これが通らない…どうやらはしくれ: Ruby Gem scrubyt "cannot load such file -- mkmf (LoadError)"こういうことらしくて、aptのほうでruby-devを入れる必要があると。

# aptitude install ruby-dev

これでjsonを入れられるのですが、なんとスクリプトの方でバージョンを決め打ちしているようです…つまり、

# gem install json -v '1.4.6'

としないと、rubyスクリプトが動いてくれないという…。makeしながら要求されるものを随時入れていきます。

# gem install nokogiri -v '1.5.5'

gemが通らない…あ、libxml2を入れ忘れ。

# aptitude install libxml2-dev

さらにlibxsltも要求されます。

# aptitude install libxslt-dev

これでnokogiriがインストールできます。

# gem install nokogiri -v '1.5.5'

さらにgemでいれていく。(実際にはもっと試行錯誤してる。)

# gem install peach -v '0.4'
# gem install rack -v '1.2.1'
# gem install sass -v '3.1.0.alpha.214'
# gem install yui-compressor -v '0.9.1'

これでrubyは一応通りますっ。

4. さらにmakeに必要なものを入れておく

まあ、makeファイルを先に確認しておけよって話なんですがね、、。

# aptitude install curl

hgが無いって言われてaptitude searchしても引っかかりません(涙目
これはmercurialのことだそうで…(無知丸出し

# aptitude install mercurial

5. python方面でこける

lxmlがねーぞゴルァと怒られる…。

# easy_install lxml

というのは嘘でーすorz

# aptitude install python-lxml

です、こっちが正解(わかるかボケ
html5libも要求されます。

# aptitude install python-html5lib

いやもうね、アホかと。requirements.txtの中身って

html5lib
cssselect
lxml
mercurial

とか書いてあるんですが、本当に意味あるのか?とね(まあ私がわかってない可能性大ですが。もしかしたら途中から別ディレクトリで作業したせいかも
これでpythonも通って\無事に動きます/

6. publicの中身

/publicに中身ができあがりますが、生成されたHTMLになぜかスタイルシートが当たらないという盛大な罠が。

頭抱えていたところ

tree

@ERRORJPさん、あなたが神か。(この場を借りてお礼申し上げます)
生成されたHTMLを見ると、

<link href="/css/all.css" rel="stylesheet">
<link href="/css/desktop.css" rel="stylesheet" media="screen and (min-width: 960px)">
<link href="/css/handheld.css" rel="stylesheet" media="screen and (max-width: 959px)">

絶対パス指定されているので、そりゃデスヨネー、と。

<link href="css/all.css" rel="stylesheet">
<link href="css/desktop.css" rel="stylesheet" media="screen and (min-width: 960px)">
<link href="css/handheld.css" rel="stylesheet" media="screen and (max-width: 959px)">

相対パスにしてめでたしめでたし。

まとめ(暫定版)

まあ、追試していないのでこれで動くのかどうかわかりませんが、aptで入れておくものは

# aptitude install ruby subversion curl mercurial ruby-dev python-lxml python-html5lib libxml2-dev libxslt-dev

rubygemで入れておくものは、

# gem install bundler
# gem install rake -v '10.0.0'
# gem install json -v '1.4.6'
# gem install nokogiri -v '1.5.5'
# gem install peach -v '0.4'
# gem install rack -v '1.2.1'
# gem install sass -v '3.1.0.alpha.214'
# gem install yui-compressor -v '0.9.1'

いやしかしなぜかバージョン固定させられたあたりは、何かしら間違っているのかもしれない。ここはruby使いに聞いてみないとわからない…。
あとpython側は2.の作業をしておけばいいのでは無いかと(これもpython使いに聞いてみたいよなぁ…libxml2-devとか事前に入れてなかったせい?)。

で、何がしたかったの?

そりゃあWHATWG HTMLLS(ウェブ開発者版)の翻訳に取りかかるってことでしょう?(ぉ?

ヾ(〃l _ l)ノ゙よいお年を