まえがき
先日Nim 1.0.0がリリースされました。
Nimにはずっと期待していて、自分も多少公式コンパイラにコミットしたりしていたので、今回の発表はとても嬉しいです。
それはさておいて、Nimでファイル変更監視をして、変更があると任意のタスクを実行するタスクランナーを作りました。
同様のソフトウェアとしてはNode.jsのgulpとかがそれになるでしょうか。
gulpを使ったことないのですが、Node.jsでスクリプトを書かないといけなさそうなのが面倒そうだったのと、さっと設定ファイル(yaml)でタスクを定義できてすぐに導入できる単純なツールがほしかったので、今回Nimで作成してみました。
複雑なタスクは定義できないですが、最低限必要な機能はこさえたつもりです。
成果物
(モニタリングなのでmonitにしましたが、モニタリングだとサーバのリソース監視のほうを想像するような気がした)
使い方
-
monit init
で設定ファイルの雛形を生成 - エディタで .monit.yml を編集
-
monit run
でファイル変更監視を開始
デフォルトで nimble buildとnimble testがセットされるようにしています。
設定できること
%YAML 1.2
%TAG !n! tag:nimyaml.org,2016:
--- !n!custom:MonitorConfig
sleep: 1
targets:
-
name: Task name
paths: [src, tests]
commands:
- nimble build --hints:off
- nimble test
extensions: [.nim]
files: []
exclude_extensions: []
exclude_files: []
once: y
- ファイル変更監視の間隔を何秒にするか
- どのディレクトリ配下のファイルを監視するか
- どの拡張子のファイルを監視するか、あるいはしないか
- どのファイルを監視するか、あるいはしないか
- タスクランナー起動時に一度はタスクを実行する
くらいしか設定を用意していません。
僕がCLIツールをNimや他の言語で書く時に欲しいと思ったのがこれくらいでした。
停止方法
Ctrl-Cで停止するか、.monit.ymlと同じディレクトリに .monit.stop
というファイルを配置します。
使用しているライブラリ
-
NimYAML
- yamlファイルを操作できる
-
cligen
- CLIツールのインタフェースを簡単に実装できる
- NimのCLIツール作成用ライブラリcligenがとても便利
おわりに
ライブラリのおかげで思いの外簡単に実装できました。
自動テストもできるようになって、開発が少し楽になってハッピーです。
Nimの開発に役立てば幸いです。