概要: 本日の知見です。
いや、何の話かって言うと、僕はもう最近 Golang 以外ほぼ書いていなくて、 Golang 脳が抜けきれず、
Golang における
go
コマンドっぽいモノが、他の言語でも欲しい!
となってたんですが、今日たまたま暇つぶしに gulp
いじっていて、
あ、そうだ、
gulp
の task をgo
コマンドっぽくすればいいんじゃね?
と思いついたので、実際にやってみたら結構よかった、という話です。
で、実際どういうコトかって言うと、簡単に言えば、
- 各言語の toolchain (
gulp
とかrake
とか)で go
コマンドと同質のサブコマンド (例えばgo fmt
とかgo build
とか)を- その toolchain の流儀に合わせた形で実装する
という感じです。
で、さっきいじってた gulp
であれば、大体こんな感じ:
var gulp = require('gulp'); var fmt = require('gulp-esformatter'); var flatten = require('gulp-flatten'); var concat = require('gulp-concat'); var uglify = require('gulp-uglify'); var bower = require('gulp-bower'); // like as `go fmt` gulp.task('fmt', function () { return gulp.src('src/*.js') .pipe(fmt({indent: { value: ' ' }})) .pipe(gulp.dest('src')) }); gulp.task('bower', function () { return bower() .pipe(flatten()) .pipe(gulp.dest('deps')) }); // like as `go build` gulp.task('build', [['bower']] , function () { return gulp.src( [['deps/**.js','src/**.js']] ) .pipe(concat('browser.min.js')) .pipe(uglify({ preserveComments: 'some' })) .pipe(gulp.dest('.')) });
で、使う方としては、
go fmt
を行うようにgulp fmt
go build
を行うようにgulp build
という感じで、
- コマンド一発で
go
コマンドと同質のコトができるようなる
という感じですかね。
また、例えばこれが rake
だったら Rakefile
とかにそんな感じのヤツを実装する、という様にすれば、まあ似たような使用感になるんじゃないかなぁと。
ま、話としてはそれだけの、でもたったそれだけのコトでも、実際やってみると結構便利って話でした。以上で終わります。
※ っていうか自分、カナーリ Golang に冒されている気がする。