Go言語以外の言語で、`go` コマンドっぽい何かを実現するには、それぞれの言語のtoolchainで、`go` コマンドっぽい何かを実装すれば良い
読了まで:約1分
概要: 本日の知見です。
いや、何の話かって言うと、僕はもう最近 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 に冒されている気がする。
#FIXME