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ならビルドさえしてしまえば依存なしのバイナリが出来上がるので、必要な環境でビルドして配布するだけで超簡単に共通ツールが作れますね。これはお手軽。標準パッケージもだいぶ充実してるので、困ることもあまりなかったです。