カリー化関数でgulpfileのタスクを細分化する

タスクランナーGulpのプラクティスです。
設定ファイルであるgulpfileの記述において、関数のカリー化を用いて冗長さを排しつつ反復的にタスクを定義します。

カリー化(curring, schönfinkelisation)

第1級関数言語であるJavaScriptでは、関数のカリー化による部分適用(Partial Apply)が可能です。カリー化関数が実行されると、引数の一部または全てを保持させた状態で無名関数を得ることができます(部分適用)。

partialAdd = (a) -> (b) -> a + b # カリー化
add1To = partialAdd(1) # 引数に1を足す関数
add2To = partialAdd(2) # 引数に2を足す関数
add3To = partialAdd(3) # 引数に3を足す関数

add2To 4 # 6
add1To 2 # 3

上記のようにカリー化関数の実行を繰り返すことで、複数の関数を作成できます。

gulpfileをカリー化関数を使って記述する

gulpfile.coffeeを編集し、CoffeeScriptで記述されたファイルをコンパイルするタスクを作成します。

https://gist.github.com/KamataRyo/de3a3146caad031e7f11113d78c1d5d6

関数coffeePipelineというカリー化関数を用意し、それぞれのタスクのファイルの入出力src, destを部分適用します。この時、coffeePipelineは、gulp.taskメソッドの最終引数として有効な無名関数を返却します。

上記のgulpfile.coffeeの記述により、gulp環境下で有効な以下の4つのコマンドを得ることができました。

$ gulp coffee-app
$ gulp coffee-model
$ gulp coffee-route
$ gulp coffee-spec

複数のワークフローを作成したり、ビルド時間を短縮などに活用できます。