CoffeeScriptを試してみた
デメリットの方が大きいかなと思って今までは気にしてなかったのですが、githubは新しいものは全てCoffeeScriptで書くというのを見て「へぇ」と思い、試しに使ってみたのでその感想などを。
文法などはたくさん情報があるので省略。
学習
- 文法だけだと1時間くらいあれば理解出来るのかなと思います。
- 公式サイトの例を眺めつつ、
- 「The Little Book on CoffeeScript」という書籍の日本語訳を公開してくださっているのを読みました。短いのですぐに読めます。
- あとはjs2coffeeで変換結果を確認しながら、JSで書いたものを移植してみました。
書いてみて
楽で楽しい
- まず思ったのは楽だということです。
- クラス的な実装をするためにextendみたいな関数を自前で書いてprototype周りをゴニョゴニョするかライブラリを使用していたのが、classで定義出来てextendで継承出来るのは何も考えなくていい
- {}や;の省略などrubyぽくシンプルに書ける
- 後置のifが使える
- for inでループを回せたり、mapやfilter的なことが簡単に出来る
- #{}で文字列の中で変数が展開できる
- [1..10]で配列が定義出来たり、可変長引数を (foo, otherArgs...) -> という形式で本物の配列で取得出来る
とこんな感じで気持よくプログラミング出来るようになっているなぁという印象を受けました。
JavaScriptは理解している必要はある
- ==と書いても===とコンパイルしてくれたりと、いわゆるJavaScriptのBadPartsと言われるところを補ってくれる部分もあるのですが、関数スコープは関数スコープのままですし、->と=>の使い分けなどはJavaScript自体を理解して必要があるなと思いました。なのでコーディングの敷居が下がるというよりも、わかっている人が気持ちよく書けるという印象を受けました。
- こんな書き方も出来たりするのも面白いなと思いました。
# coffee members = song.artist()?.members?() // compiled var members, _ref; members = (_ref = song.artist()) != null ? typeof _ref.members === "function" ? _ref.members() : void 0 : void 0;
コンパイルは気にならない
- 最近はJavaScriptを書く時もgruntでwatchして結合したりminifyしていたので、coffee script書くときもwatchさせてgrunt-contrib-coffeeで自動的にコンパイルするようにしていたので、コンパイルが必要なことに対しては全く気になりませんでした。
出力されるJavaScriptは読みやすい
- 上の例はアレですが、綺麗なJavaScriptを出力するというのはよく聞いていたのですが、実際出力されるJavaScriptを見てみると普通に読みやすくて、変な言い方をすると人が書いたみたいなコードです。
- 変換例(何年も前に書いたものをcoffee化したのでそもそもイマイチなのは置いておいて...)
- JavaScriptとCoffeeScriptの対応もわかりやすいのでデバッグなどもそこまで苦労は感じませんでした。
使いどころ
- 個人のアプリなどで使うのは全く問題ないかなと思いますが、ライブラリや長期間メンテするプロジェクトで使う場合は慎重になる必要があるかなと思っています。
- ライブラリで使うとcoffeeで書かれているからという理由で使ってもらえないこともあると思います。自分もSpineはcoffeeで書かれているからと理由で使うのを避けていました。
- 今ではSpineのコード読んだりしていますが...
- プロジェクトで使う場合は、他の人にJavaScriptだけでなくcoffeeの文法を学ぶ負担を強いることになるのでみんなの合意を得る必要があるだろうし、将来のことを考えると気軽には導入しにくいなと思っています。
- 自分も飽きて使わなくなる恐れもあるし、JavaScriptを理解しなくていいというわけでもないので...
というわけで、個人で書くものについては、しばらくcoffeeを試してみようかなと思っています。何年後かに...となるかもしれないですが、技術的負債を背負うのは自分だけなのでまぁ問題かなと。