proctaskというタスク実行ツールをGoで書いてみました

最近 Go を書きたくなったので挑戦してみました。お題は、stdin を受け取って stdout に結果を出すタスクを、全部ファイルベースで行いたい、というもの。stdin となるものをファイルに書き込んでおくと、それを読み込んで実行プロセスの stdin に渡してくれて、stdout を受け取ったらそれをまたファイルに書き込むようなイメージです。実行時には env var を設定したりできたり、stderr も別に書き出したりしたいですね。

というわけで作りました。README 参照。ついでだったので、bash -l的な感じで実行ユーザの profile も読み込んで実行してみたので、PATH とかがログインした時と同じ感じで使えると思います、多分。

なお、使い道はこれから考えます。たとえばこんがらがった cron の記述を簡単にできるかも。

あと副産物で、ユーザの login shell を知りたかったのでそれもライブラリにしました。こっちはテストも書いてみた!

まとめ

Go はとても書きやすかったです。型があってコンパイルエラーが出るのがこんなに安心感あるなんて!

Go の前なら、こういったツールは shell script で頑張るか、どこでも大抵入ってる python2.6 で stdlib のみ使って書くか、という感じだったんですが、Go ならビルドさえしてしまえば依存なしのバイナリが出来上がるので、必要な環境でビルドして配布するだけで超簡単に共通ツールが作れますね。これはお手軽。標準パッケージもだいぶ充実してるので、困ることもあまりなかったです。