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 · GitHubにIceweaselでアクセス、ダウンロードして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
ここでgem
にgem install rake -v '10.0.0'
しろとか怒られました。(まあ、bundle install
が回り道だったような気がする、今にして思えば。)
# gem install rake -v '10.0.0'
# 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
rubyのgem
で入れておくものは、
# 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
とか事前に入れてなかったせい?)。