先日から CI づいているので今度は JavaScript のユニットテストの分を調べました。
現在のwtnabeの普段の開発手法
- Jasmine gem と guard-livereload を使って
- ブラウザで自動reloadさせながら Jasmine でユニットテストを書く
ということをしています。これはやっぱりブラウザで動かせる Firebug などの開発者ツールがとても強力なので、何かあったときに探っていくのに便利であることが理由として大きいです。あとブラウザで見ることができる方がなんか安心というのもあります。
しかしこのままでは CI と相性がよくありません。だから今まで CI は無視してたのです。
rake jasmine:ciはGUIブラウザ前提
一応 Jasmine gem には
rake jasmine:ci
というタスクが定義されているのですが、これは基本的に Selenium でブラウザを起動してテストを動かして結果を受け取るというもので、
基本的には GUI のブラウザが動くことが前提
になっています。ということは CI サーバで使うには X を起こすか Xvfb とか使って Firefox などのブラウザをサーバ上で動かす必要があります。これは面倒くさいうえにとても重たい。できれば避けたいです。
PhantomJSはなんでもできるけどテスト準備が面倒
ということで headless ブラウザとして有名な PhantomJS を使うのかなぁ、なんかでも PhantomJS で CI みたいな記事はやたら面倒くさい構成っぽいよなぁと思っていたら神降臨。
Twitter / @os0x: @wtnabe jasmineをheadlessで動 …
おぉ、そう言えば jasmine-headless-webkit はすでにチェック済みでした。
ただ正直 headless ブラウザはよく分からないんですよね。結局みんな WebKit 使ってるんでしょ? なんでいくつもあるの? という感じ。で、有名な PhantomJS にしてみようか、本家のページにも Jasmine や QUnit とか使ってテスト動かせるよって書いてあるし、と思っていたのですが、結局のところ HTML を読み込んだうえで何か操作するというのが基本なので、JavaScript の読み込みやテストの実行はこっちでお膳立てする必要があります。要するに
PhantomJSはいろいろできるけどテストの実行には特化していないので準備が面倒
なんですね。
jasmine-headless-webkitですべて解決
jasmine-headless-webkit – The fastest way to run your Jasmine specs!
そこで jasmine-headless-webkit. 何をしてくれるかと言うと
- Jasmine gem と同じように設定ファイルを読んでくれて
- test runner に当たる HTML を自動的に生成してくれて
- headless WebKit ブラウザをさっと立ち上げてテストを実行して
- 結果を CLI にそのまま表示してくれる(reporterは選べる)
というもので、使い方は単に
$ jasmine-headless-webkit
と叩くだけ。するとカレントディレクトリから Jasmine gem 標準の
spec/javascripts/support/jasmine.yml
を探しにいって1、これを読み込んで Jasmine gem と同じように設定を解釈して動作します(たぶん)。
つまり普段 Jasmine gem でテスト書いてる人の CI 向けのツールとしてはカンペキです。何も変える必要がなく、単に叩くコマンドが違うだけ。
しかも
CoffeeScriptからの変換も全部自動で面倒みてくれます
あなたが神か。
開発者ツールで中を覗いてみたくならなければ、
普段使いもこれでいいじゃん
て感じです。いやーいいもの教えてもらいました。周回遅れは楽でいいです。はい。
あ、ちなみにこれも Ruby で書かれているので Ruby のインストールが必要ですし、qt4 やらなんやらも必要です2。WebKit 系のこうしたツールはソースからビルドするタイプのパッケージシステムを使っている方が楽かもしれません。
PhantomJSの今後の可能性
PhantomJS のサイトからもリンクされていますが、
というものがあるそうです。今のところ technical-demo と書かれていますけど、Selenium から PhantomJS が使えるようになるかもしれません。これが安定して使えるようになれば Jasmine に限らずいろいろ可能性が広がりますね。
いい加減 del.icio.us と diigo の手動同期をなんとかしたいと思ってはいるんだけど、具体的に作業に取り掛かれるメドは立っていない。
んだけども、一応見るだけ見てみた。
あれ?
diigo って API なくね?
ええぇぇええぇぇ。じゃあ自動で同期しようと思ったらブラウザの操作を自動化するという方向に行かざるを得ないの? 例えば普通の post 画面の操作を自動化するとか、diigolet の操作を自動化するとか? えー。やだー。サーバ上で自動化できないじゃん。Firefox と mozrepl 入れろってか。やだなぁ。
いっそキャッシュ検索を持ってる Yahoo! ブックマークとか Google ノートブックに移行すべきなのかとか思ったけれども、Yahoo の ID はなんとなく取りたくないし、Google ノートブックは Firefox extension に依存しているので Camino では使えない。待てこら。もうちょっと他のサービスも真面目に調べた方がいいかなぁ。
とりあえず条件は
- 通常の post はブックマークレットでできること
- Camino で使いたいので Firefox extension はあったら便利っていう程度に抑えておいてもらわないとダメ
- API があってブラウザ使わなくてもデータの出し入れが自由に行えること
- キャッシュ検索できること
くらいなのかな?
あれ? なんか Diigo でタグの編集ができなくなった。user css で消しちゃった要素の中に入ったのかな?
引っ越し続きでまったく荷物を紐解かずにあっちからこっちへ運んでいただけの時期があったので、うちには中身を何年も見ていない段ボール箱がいくつもある。
久しぶりにスピッツを聞こうと思ってこれをひっくり返したら中島みゆきのアルバムが10枚も出てきた。
いやーおれほんとに中島みゆき好きだったんだな。
……。ThinkPad 530 が出てきた。
中山大臣。
http://headlines.yahoo.co.jp/hl?a=20050421-00000230-kyodo-soci
より(すぐ消えると思うけど)、
自分の頭で考える主体性のある子どもを育てたい
仮にそういうものがあったとして、「ゆとり教育」の目標ってそれですよね? もしかしてそこをご理解いただけていないのでしょうか。
「事実」が作られていく過程を目の当たりにできて面白いですがね。遠い将来、「教育において重視するのはスキルを与えることか否かという”揺れ”が21世紀初頭にも起きていた」という「歴史」の一つになるんでしょうけど。
ちっさい話してると思いますよ、正直な話。たかが数年の間の学力比較の話でしかないし、勉強なんか学校行っていようが行っていまいが、卒業してからでもなんぼでもできる1んだからさ。少なくとも今回問題になっている力の大半は(情操系とかの)早期教育が命とりになるようなものではないでしょ。リカバリの効くものなんか慌てる必要ないって。それより勉強したいわけでもないくせに、自分たちは他の世代より勉強していることが少ないなんてことを思っちゃう「なんか損した」的な思い込みの方がけしからん。退屈な思いをしなくて済んだんだからむしろラッキーでしょうが。デキるやつは授業時間が減ったって自分で勉強してるか、そもそもそんなに机にかじりつかなくてもデキるやつだから、損したって思うような連中は授業時間増えたって結果として習得したことは今と大差ないと思うぜ。どうせ一時的に点数を上げたい(例えば受験とか)場合は塾とかあれこれ手を打つんだし。
むしろ授業で学べないことに使える時間が増えたって喜ばないと。人間関係(恋愛とか友情とか)に悩むとかさ。そういうの大事にしていこうよ。大人になってからの人間関係の悩みと思春期の人間関係の悩みはまったく別モノだぞ。大人になってからの人間関係の悩みはたいがい救いようがないが、思春期のそれは自分の糧になる。どんなに優れた教科書と教師を用いてどんなに授業時間を割いても習得できないことがある。こんなこと、言われなくたってみんな分かってるでしょーが。
しなきゃいかんとも言う ↩
はてー。どうすべか。
/usr/libexec/elf/ld: warning: libexpat.so.4, needed by /usr/local/lib/libneon.so, \
not found (try using -rpath or -rpath-link)
/usr/local/lib/libneon.so: undefined reference to `XML_SetElementHandler'
/usr/local/lib/libneon.so: undefined reference to `XML_Parse'
/usr/local/lib/libneon.so: undefined reference to `XML_ParserFree'
/usr/local/lib/libneon.so: undefined reference to `XML_SetCharacterDataHandler'
/usr/local/lib/libneon.so: undefined reference to `XML_ErrorString'
/usr/local/lib/libneon.so: undefined reference to `XML_ParserCreate'
/usr/local/lib/libneon.so: undefined reference to `XML_SetUserData'
/usr/local/lib/libneon.so: undefined reference to `XML_GetErrorCode'
/usr/local/lib/libneon.so: undefined reference to `XML_GetCurrentLineNumber'
/usr/local/lib/libneon.so: undefined reference to `XML_SetXmlDeclHandler'
gmake: *** [sitecopy] エラー 1
*** Error code 2
Stop in /usr/ports/www/sitecopy.
** Command failed [exit code 1]: /usr/bin/script -qa /tmp/portinstall35953.0 make
** Fix the problem and try again.
** Listing the failed packages (*:skipped / !:failed)
! www/sitecopy (linker error)
---> Packages processed: 0 done, 0 ignored, 0 skipped and 1 failed
変更があった場合にどうするかの候補。
<---- deleted modules/.project [f] ?
Commands:
<ret> or f or <spc> follow unison's recommendation (if any)
I ignore this path permanently
E permanently ignore files with this extension
N permanently ignore paths ending with this name
d show differences
m apply merge program
x show details
l list all suggested changes
p or b go back to previous item
g proceed immediately to propagating changes
q exit unison without propagating any changes
/ skip
> or . propagate from from local to wt-srv.watanabe
< or , propagate from from wt-srv.watanabe to local
ここで permanently は profile に保存される。何もしなければ default に。profile の書き方を最初に知らないとこれをいちいち応えるのが面倒かもしれないけど、逆に書き方を知らなくてもなんとかなると思うと楽は楽かもなぁ。
パスの中に @ があっても . で指定できる場合は大丈夫だった。profile に書いてあるのも大丈夫なのかな?
http://www.rubyist.net/~matz/20040417.html#p01
大容量のメールの扱いは検索がキーとな。そうだなぁ、確かに今使ってる Datula は検索がいちばんの泣きどころ。非常に使いづらい。なんだかんで grep 使ってたりする。でも grep じゃーやっぱ精度出ないんだよな。行指向じゃメール単位の検索にはつらい。
おまけに grep は遅い。
そういう意味では mail を全部 html にしてしまって namazu でってアプローチは面白いな。(これは Matz 氏のアイディアじゃなくて既存の道具を組み合わせるという話。)でもインデックス起こすとか考えるとローカルのマシンでサクっとやるのはけっこうつらい感じ。かと言ってサーバにやらすのはなんか不安だし、Not Wired なときに一切メールが見れない。
痛しかゆし。
Datula の操作性は好きだけど、そろそろメールデータが整理できないレベルになってきてるし、どうにかせんとなぁ。
説教講座関連の整理がついたら久しぶりに自分のクライアント環境に手を入れるか。。。
なので複雑な条件は入れない方がよい。オプションは当てにならない。二段階、三段階のクッションを設けて「完全な状態をただ転送するだけ」にするのがよい。
-exclude=* は先に書いちゃダメ。
-include=ほにゃらら
のあとに書け。
- 「auの強さ」は本物か (1/2) (ITmedia)
- auはトレンドか、ブランドか? (ITmeaid)
ユーザーの側の変化が指摘されていないが、
すでに携帯はモノ珍しいもんじゃないんだし、いい加減飽きた
ってのはあるんじゃないかなぁ。それにこの不景気の中、携帯代だけは別枠のように扱うのが当然みたいなフシがあったけど、今はそうでもないし。
すると
- 機能は別にどうでもいいけど、みんながほんとに同じような端末ばっかってのはもうヤダ
と思う人が増えて当然で、その結果どこが選ばれるかって言ったら au でしょ。
- 携帯なんか最低限繋がりゃいいんだよ
という人は安さでボーダフォンじゃないかな。写メールでとりあえず乗り換えて、あとはもう換えるの面倒って場合もここに落ち着くでしょ。
携帯でムービーメール? TV電話? つーか TV が見れる? そんなの要るかぁ? ラジオが聞けるのはちょっと嬉しいけどさ。
ただまぁ、ブランドの力は大きいから、端末のラインアップが充実した後の DoCoMo に対して、au は今のままだと優位性ないかもな、というのはうなずける。(個人的には DoCoMo 端末は高いだけで全然変わり映えしないって印象しかないけど。)
(download) というリンクのほかに
(as text)
がある。
これで謎のバイナリダウンロードってことはなくなる。
いやー最初は w3m が新しくなっておかしなバグが入ったかーと思ったよ。
http://www.zdnet.co.jp/enterprise/0304/21/epn12.html
てことで、Netscape と IE についてのお話なわけですが、こうして見ると実は Netscape の天下はかなり短かったのだなということが分かります。正味 2, 3年てとこでしょ。もっとも、この時期がいちばん WWW が爆発的に拡大した時期なんだろうけど。
これで納得したのは、Microsoft はなりふりかまわずやりすぎてずいぶんと印象が悪くなってしまったけれど、それでも IE の優位性がまったく揺らぐことがなかったのは、印象がどうこうとか言われる前に敵がいなくなってしまったからですな。特に Netscape はフリー化だ買収だ Mozilla だ言うてるだけで新しいモノは何も出てこなかったし(いや、個人的には 4.0x よりは 4.5 以降は評価してますよ)、極めつけは Netscape 6。これは最悪でしたな。Mozilla 1.0 の前のバージョンで、ものすごく重く、プラグインや Netscape 4 や IE との互換性に問題アリアリで、ユーザーからも Web 制作者からもきらわれるだけで何もいいことがなかった。Netscape 7 は 6 とは本当に違うんだけど、もう Netscape じゃないでしょ、という評価の方が完全に定着しちゃってる。
でも今はたいがいのブラウザは標準準拠という方向にシフトしてきてる。シフトというか、まぁ要するにようやくまとまりそうだ、ちゅーところですな。HTML 4 が W3C 勧告になったのが 1997年の終わりですから、いい加減準拠して当たり前、とも思うわけですが、最近のブラウザはこの辺をまともに抑えたうえで使い勝手の方に注力されてて実に面白いです。ブラウザを乗り換えても、両方とも標準に準拠していればまともなサイトを見る分には何も困らないから安心だしね。
でも WWW というメディアの特性をほんとに活かすには、標準に準拠したエディタの登場こそ望まれるんですが。なんつーか、実はまだ WWW を使いこなすスタートラインに立ってすらいねーんじゃないか、とも思ったりするのでした。