hitode909の日記

以前はプログラミング日記でしたが、今は子育て日記です

【はてなスタッフ非公式ブログバトン】CoffeeScriptについて

http://www.flickr.com/photos/41496273@N00/328345794

12月なので,今日から,ブログバトンを始めることにしました.

CoffeeScriptについて

最近ちょっとCoffeeScriptを書いたりしていて,チーム内にシェアしたところ,うーんみたいな感じで,あんまり使ったこない人もいそうだったので,まとめておきたいと思います.

経緯

僕はCoffeeScript2011年くらいから使ってて,遊びで書くのは全部CoffeeScriptで書いてる.
仕事では,アプリケーション本体じゃなくて,業務上使う便利ツールなどは,CoffeeScriptで書いてる.

CoffeeScript導入のメリットについて.

些細なミスが減る

CoffeeScriptでは,JSの構文上の微妙に気をつけるべきところがだいたい解消されている.
たとえば,Objectを適当に書いておくと,コンパイル後には最後のカンマだけ自動的に除かれるので,書くときに,ここにカンマがあるとIEでは動かないので,とか考える必要がなくなる.
ずっとJS書いてると,週に30分くらいはLintを通してObjectの末尾のカンマつけ外し作業をしているので,これから解放されるだけで良くなると思う.

クラスベースで書ける

prototypeベースで書くと,書き方いろいろある.prototype.なんとか に関数を順番に代入していくとか,prototypeにObjectを代入するとか,ベストパーツで紹介されてる方法とか.
また,プロトタイプベースで継承しようとすると,難易度高い感じになる.僕は何か本見ないと継承書けない.
CoffeeScriptだと,最初からclassとかextendsとか用意されてるので,簡単にオブジェクト作っていける.
クラス作るのが簡単だと気軽に作れるけど,作れないと,jQueryでクロージャを使ってクリックされたらこのコールバックを実行るみたいに書いてしまいがちで,意識を高く保って構造化してカバーするみたいになってるので,classが用意されるのは良いと思う.

->と=>が用意されてる

JSで,コールバックを挟んだりして,関数の途中でthisが変わるときは,var self = this;とかして,thisの参照を持っておくとか,_.bindとか使って,気をつけて書いてる.
CoffeeScriptでは,JSのfunctionと同じ意味の->と,thisが保持される=>が用意されていて,selfとか出る幕もなく自然に書ける.

JSとパラダイムがそんなに変わらない

CoffeeScriptの文法については,CoffeeScriptのサイトにドキュメントがあり,これだけなので,すぐ学べる.
基本的にはシンタックスシュガー集みたいな雰囲気であって,パラダイムはそんなに変わらない.いきなりsleep関数が使えるみたいな,パラダイムの変化がないので,考えるかたはそんなに変わらないので,自然に移行できると思う.

SourceMap対応

以前は対応してなかったけど,最近は公式でサポートされてるので,普通にSourceMapを使ってデバッグできる.コンパイル後も普通のJSで,変数名とか論理的な構造は同じなので,慣れてくるとコンパイル後のJSを見て普通にデバッグできる.

逆に,CoffeeScript導入のデメリットについて.

学習コストが増える

JavaScriptを学んだ上でCoffeeScriptも学ぶことになる.けど,書きやすいJSという位で,学習は容易なので,一生JSでカンマ付け外し作業するくらいなら,最初に一度学んでしまったほうが効率良い気がする.
新たな学習が必要という点では,この問題はAltJS全体について言えると思う.

CoffeeScriptが廃れるとメンテナンスできなくなる

prototype.jsとか,昔はみんな使ってたけど,もう廃れた.CoffeeScriptも廃れて,10年後とかには,もう誰も読めなくなってる可能性がある.
一方で,パラダイムは変わらないので,コンパイル後のJSを読もうと思えば読める.そんなに悪くないと思う.1行のコメントとかは消えるので,そのへんは困る.
この問題はAltJS全体について言えると思う.
node.jsとかみんなCoffeeScript使ってるので,そんなに気にしなくていいと思う.node.js廃れる前にPerl廃れる気がする.

もっといいAltJSがあるかもしれない

チーム内で話していたところ,せっかく変えるなら,コンパイル時に型が付くくらいまで変えたいという話もあった.たしかにという感じもするけど,使ったことないので,もうちょっと調べたい.TypeScriptとかHAXEとか気になる.TypedCoffeeScriptというのもあるけど使ったことない.

まとめ

以下の理由で,業務でも全面的にCoffeeScript使うべきだと思う.だけど,CoffeeScriptだけ見るとよさそうだけど,もっといいのがあるとしたら知りたいという感じです.

  • 開発が早くなる
  • JSとパラダイムは同じで,そんなに離れないので,バランスが良い
  • GitHubも使ってる ( JavaScript · Styleguide · GitHub )

次回予告

明日は,id:hatz48 さんの,TypeScriptのメリット,デメリット,業務に導入すべきか,についての記事です.


photo by takfoto