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

アバターアイコン兼ロゴ

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

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

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