Go言語以外の言語で、`go` コマンドっぽい何かを実現するには、それぞれの言語のtoolchainで、`go` コマンドっぽい何かを実装すれば良い

読了まで:約1分


概要: 本日の​知見です。


いや、​何の​話かって​言うと、​僕は​もう​最近​ Golang 以外​ほぼ​書いていなくて、​ Golang 脳が​抜けきれず、

Golang に​おける​ go コマンドっぽい​モノが、​他の​言語でも​欲しい!

と​なって​たんですが、​今日たまたま​暇つぶしに​ gulp いじっていて、

あ、​そうだ、gulp​ の​ task を​ go コマンドっぽく​すれば​いいんじゃね?

と​思いついたので、​実際に​やってみたら​結構​よかった、と​いう​話です。


で、​実際どういう​コトかって​言うと、​簡単に​言えば、

  1. 各言語の​ toolchain (gulp とか​ rakeとか​)で
  2. go コマンドと​同質の​サブコマンド (例えば​ go fmt とか​ go build とか​)を
  3. その​ 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

アバターアイコン兼ロゴ

にゃるら(カラクリスタ)

『輝かしい青春』なんて失かった人。次に備えて待機中。

今は趣味でプログラミングをして生活しています。