lxyuma BLOG

開発関係のメモ

coffeescriptの使いどころ

最近、普通の現場で、coffeescriptの使いどころが分かってきた。

今日は、そのメモと、最後に設定(また、gulpとkarmaの話)を軽く書いておく。

railsとcoffee

自分は、ずっと、rails環境にいたので、coffeescriptで書いてた。

通常のコードも、テストコードも。勿論。

railsはjs周りもレールが敷かれていてcoffeeである事に特に何も違和感ないし、

メンバーも皆coffee使う前提で話進めれる。

他のrails以外の環境に入ると、

皆に、やっぱりcoffeescript使おうぜ、という空気に持っていきにくい。

宗教上の問題で。。。

coffee

coffeeとても、簡易な記述で素晴らしい。

が、classやthis(@)の扱いで、玉に分かり辛い所が出てきて、

多分、そういう所があまり好まれない。と勝手に思ってる。

でも、最近、どこでも使える良いシチュエーションを見つけた。

現場とcoffee

  • ビルド環境の設定ファイル
  • テスト

この2つで、coffee使うと明らかに幸せになれる。

ビルド環境の設定ファイルやテストの中の「function」にあまり意味は無く、

テストやビルド環境の内部での動きはあまり意識する事は無いので、

記号(->)で書いた方が楽。

また、いずれも、その内容(設定やテストを通して伝える仕様)を伝える事に価値があるので、

coffeeの簡潔な記述にすると、大分、すっきり内容を伝えられる。

coffeeの嫌な所

さっき書いた、classとか、this周りの動き等、coffeeでおそらく嫌がられる所は、

testやビルド環境の設定ファイルでは出てこないので、

(例えば、thisなら、テストで@val入れて、@val取る位しか使わないので、)

そこまで、coffeescript固有の面倒くさい所を意識する事はない。

学習コスト非常に低い。

テストとcoffee

昔、jasmine+coffeeで書いてたが、

それが、jasmine+生jsに変わると、

毎回、function書かなきゃ行けないのが、めっちゃ苦痛だった。

書くのもつらいけど、読むのもつらくなる。

階層が深くなると、括弧やインデントに、もう、イライラしてしまうが、

coffeeでテスト書くと、インデントも浅いし、functionも括弧もなく、

目に優しくなって、テスト内の仕様だけが浮き上がってくるので、

やっぱり、こっちの方が断然良い。

この時、他メンバーのためにも、jsでもテスト書けるようにしておくと、逃げ道があって良いかと。

この辺りの柔軟性もテストだから気軽に出来る。

実践

さて、ここから、実際にcoffee使う編の話。

最近使ってる、gulpとkarmaで書く。

とはいえ、coffeescriptも古いので、利用するやり方は整理されていて、非常に簡単。

設定と言う程の内容では無い。

gulpでcoffee

gulpは最近の3.7以降は、coffeeをデフォルトでサポートしてるらしい。

なので、coffeescriptのnpm入れるだけで書ける。

  • npm install
npm install --save-dev coffee-script
  • gulpfile.coffee
    • こんな感じ
gulp = require('gulp')
pl = require('gulp-load-plugins')()

gulp.task 'scripts', ->
  gulp.src(["app/scripts/main.js", "app/scripts/*.js"])
    .pipe(pl.concat(dist.js))
    .pipe(gulp.dest(dist.dirJs))
    .pipe(pl.connect.reload())

karmaでcoffee

  • npm
npm install karma-coffee-preprocessor --save-dev
  • karma.config.js
    files: [
      'tests/**/*_spec.coffee'
    ],

    preprocessors: {
        "tests/**/*.coffee": ['coffee']
    },

この時、filesの中に、jsのテストパスも入れてしまえば、生jsのテストと共存できる。

altjs

最近は、altjsいっぱい選択肢がある。

その中でも、coffeeであれば、

  • 昔からあるので、見てきた通り環境整理されていて、

  • ruby/pythonみたいに簡潔に書けるので、

    • ビルド環境なら設定内容、テストなら仕様をより分かり易く明示出来る

から、こういうシチュエーションで、coffee改めてオススメです。

テストや設定ファイルがごちゃごちゃしてきて大変になってきた方は、

coffee入れてみてはいかがでしょう?

以上。