CoffeeScript練習がてらuserscriptを書き直し

さすがにそろそろCoffeeScriptがどんな感じなのか触ってみたい欲が高まってきたので、とりあえずまず小さいスクリプトを書いてみようということで丁度いい大きさのuserscriptをCoffeeScript化することにした。練習のためにHelloWorldやるとかはちょっとモチベーション上がらないから、自由に触れて且つコンパクトに収まってて更にピュアJSで書かれている自分のuserscriptは材料として適してた。

NicoSG-Preview / nicosgpreview.user.coffee
Nico-today-Watch / todaywatch.user.coffee

とりあえず2つ。ほんとにそのまま既存コードをCoffeeScriptで書き直しただけ。配列操作とかfor文の使い方だとかはもっといいやり方があるのかもしれない。そこ以外もきっともっと効率のいい書き方があるんだろうけど。

最初悩んだのがuserscriptを示すためのコメントをどう書けばいいのか。CoffeeScriptは少し見た感じだとシングルラインのコメントは出力ができない。

// ==UserScript==
// @name name
// @namespace namespace
// @description description
// @include include
// @version 0.1
// ==/UserScript==

これを吐こうと思った時シングルラインコメントが出せないからどうすればと悩んだ。
結論から言うとこの文字列をそのままブロックコメント中に入れて解決したんだけど、最初試した時に動かなかった(たぶん別の問題)からこの書き方はだめなのかと早合点してしまっていた…。

###
// ==UserScript==
// @name name
// @namespace namespace
// @description description
// @include include
// @version 0.1
// ==/UserScript==
###

これで普通に解釈されるuserscriptが出来上がる。ちなみに行頭にCoffeeScriptで出力したことを示すコメントが自動挿入されるけどこれもあっても問題なかった。

あとはやっぱfor文の使い方が全然違って戸惑った。

var num = 100;
for (var i = 0; i < num; i++) {
}

これ書くのですらドキュメントと睨めっこだった。

num = 100
for i in [0...num]

これで大丈夫みたいだけど、吐かれるJSもプラスなのかマイナスなのかの評価がfor文初期化部分に入ってて混乱。無駄な処理と無駄に式が長くなってしまってるのが気になったけど、まぁ容量にシビアになる類のもの書いてるわけでもないからとりあえず。もっと短く書ける方法が見つかればそれで書き直そう。

大きくはこの2つ。他は特に問題なくというか、CoffeeScriptならではの書き方をそこまで入れてないから悩まずパッパと置き換えた感じ。デバッグがしにくいっていうのは当然あるんだけど、まぁuserscriptくらいの大きさならあまり問題なく…。

これを会社で使うとなると今のところ生のJSで書いてる人がほとんどだからまた難しいところなのだけど、使っていくうちにメリット・デメリットはっきりさせて、メリットが大きいのであれば社内にも浸透させたいなーとかはやっぱり思うのでした。



しれっとだけどNico today WatchCoffeeScriptで書きなおしつつ懸念点だった原宿版とZero版の両対応をしときました。