トップ «前の日記(2011-09-04) 最新 次の日記(2011-09-10)» 編集

2011-09-05 [長年日記]

_ jshint4rというものを作りました

wtnabe/jshint4r - GitHub

なんてことはない、単に jshint を Ruby を通して実行するだけのツール。

なんで作ったか

  • npm の jshint ではファイルの除外ができない(たぶん)
  • npm の jshint の出力がイマイチ
  • jshint_on_rails gem は同梱の Rhino に依存しててスクリプト内の日本語を問答無用で unsafe character 言いまくってうざい
    • 外から文字コードを教える方法が分からない

そのうえで、JavaScript の lint 系ツールは手軽に実行できるやつがいい。

jshint の情報をそのまま Ruby で扱えるようにして自分でいろいろカスタマイズできたら便利じゃね?と思い立つ。

特徴

  • execjs を通しているので幅広い JS 環境で動く
  • custom reporter を書けば様々な出力形式に対応できる(標準で npm の jshint っぽい出力の他に emacs の compilation-mode 対応形式を用意)
    • custom reporter 自体は npm の jshint にもあるんだけど Ruby の方が慣れてるし
  • 実行バイナリも用意してあるのですぐ試せる

動作環境

  • Ruby 1.8.7 と 1.9.2 で確認
  • たぶん Windows でも動く

Unicode 以外でできたスクリプトがどうなるかは知らない。

使い方

gem install jshint4r

しておいて、

jshint4r [options] path1 path2 ...

か、あるいは自前のアプリやライブラリの中から

require 'jshint4r'

していい具合にオプションを与えて自由に利用することができる。はず。

ツール

以下のようなものが使えるはず。

苦労したところ

  • jshint そのものの使い方がよく分かってなかった
  • execjs のドキュメントが全然足りてない
  • jshint の返す情報が valid な JSON でなく、どう解釈したらいいのか迷った
  • file の exclude が面倒で、結局 Rake::FileList を使った

まとめ

意外にというか予想通りというか、とにかく便利。compilation-mode からジャンプできるし、何回実行してもダルいとか言わない。

でもなんか node 力も Ruby 力も足りてない気がした。