タグ: CoffeeScript

  • Gruntでbrowserify使ってCoffeescriptをコンパイルする。

    なんかCoffeescriptをGruntでコンパイルして、concatしたりとかだるいなーってずーっと思ってました。
    Classとかを他のファイルから参照しようとするとwindow.classNameとか@classNameとかにしないといけないですし、ファイル名順に結合するので、アルファベット順で後ろにくるクラスを読もうとするとエラー吐いたり、いまいち依存関係が見えなかったり。

    小規模な開発であれば問題ないのですが、Coffeescriptで大量にClassを作ったりすると、結構大きな問題になってきます。かといってrequire.jsとか面倒くさい。

    というわけで、最近流行のbrowserifyを使ってみました。

    npmとbrowserifyを使ったクライアントサイドのウェブアプリ開発
    Browserify: それはrequire()を使うための魔法の杖

    ざっくり言うと、ブラウザで、node.jsのようなrequireが使えるようになるツールです。

    たとえば、以下のようなHoge.coffeeがあるとすると

    class Hoge
        piyo: ->
    
    module.exports = Hoge
    

    以下のコードで、読み込んでくることができるという代物です。

    Hoge = require("./Hoge")
    hoge = new Hoge()
    

    debowerifyとかをtransformに指定しておくと、bowerでインストールしたモジュールなんかも取ってこれるので、大変素敵です。

    $ = require("jquery")

    それをgruntでファイル監視して自動化するようにしたのがこちらです。

    module.exports = function(grunt) {
      grunt.initConfig({
        dir: {
          coffee: 'coffee',
          javascripts: 'javascripts'
        },
        esteWatch: {
          options: {
            dirs: [ 'coffee/**' ],
            extensions: ['coffee'],
          }
          coffee: function(filepath) {
            return ["browserify"];
          }
        },
        browserify: {
          dist: {
            files: {
              'javascripts/all.js': ['coffee/all.coffee']
            },
            options: {
              transform: ['coffeeify', "debowerify"],
              browserifyOptions: {
                extensions: ['.coffee']
              }
            }
          }
        }
      });
      grunt.loadNpmTasks('grunt-browserify');
      grunt.registerTask('default', ['esteWatch']);
    };

    transformにcoffeeifyを設定しておくと、CoffeeScriptでもコンパイルできるようになります。
    browserifyOptionsのextensionsに.coffeeを指定しておくと、CoffeeScriptのファイルでも拡張子を省略してrequireできました。

    名前空間も汚染しないし、依存するClass等は明示的になるし、読み込み順に左右されないJSを書くことができるようになります。その代わり、$ = require(“jquery”)等は各ファイルで行う必要があります。実行時には一度しか読み込まれないようなので、パフォーマンス的にもよろしいです。

    GruntでBowerしたり、Coffeeしたり、ConcatしてJSを書いている人にはホントに便利です。

  • CoffeeScriptで、ライフゲームしてみた。

    50行で作る、HTML5+JavaScriptで『ラングトンのアリ』の簡単プログラミング! – あのねノート。を読んで、無性にライフゲームが書きたくなったので、やりました。

    さすがにJavaScriptで書くのは何番煎じどころの話じゃないので、CoffeeScriptのClassで書いてみました。

    [gist]https://gist.github.com/torounit/6613937[/gist]

    jQueryと、これをコンパイルしたjsを読み込んで、HTMLに適当にCanvasを書いてあげれば動くはずです。
    CoffeeScriptでjQueryプラグインを書く参考になったりするかもしれません。

    Canvas使うと、さくさくと動くものが作れて、楽しいですね。

    こんな感じで動きます。

    セル・オートマトン等はルールも難しくないので、案外さくっと作れるわりに、出来上がると案外楽しいので、遊びついでにやってみるってのもいいもんですね。