Makeを消極的にタスクランナーとして使う

タイトルについて誤解のないよう初めに書きますが、makeは良いビルドツールです。

私は最近、開発環境をLXCに移行してAnsibleを使ってプロビジョニングをしています(カタカナでプロビジョニングと書いたのは初めてです。違和感がすごいです)。そのため、頻繁に長い複数のコマンドを入力しています。

$ sudo lxc-create -t ubuntu container_name
$ sudo lxc-start container_name
$ ansible-playbook -v -i provision/hosts/development/inventory provision/dev.yaml

これを楽にするためにタスクランナーが欲しかったのです。

初めはInvokeを使っていた

InvokeはPython製のタスクランナーです。私はPythonが大好きです。InvokeはPythonで作られている上に、メリットデメリットありますがPythonでタスクを記述するので、私に合っていると思いました。

しかしながら、発行したコマンドが標準入力を求めて、それに対して入力すると入力内容が二度出力されてしまうのです。何を言っているのか分からないと思いますので例を上げます。

lxc-consoleはLXCのコンテナにログオンするコマンドです。ログオンするためにユーザ名とパスワードの入力を求められます。

$ sudo lxc-console container_name

Connected to tty 1
Type <Ctrl+a q> to exit the console, <Ctrl+a Ctrl+a> to enter Ctrl+a itself

Ubuntu 18.04 LTS container_name pts/0

container_name login:

Invokeを使わずにシェルで直接実行した場合、ユーザ名としてubuntuを入力すると正常に入力できます。

container_name login: ubuntu

Invokeを経由の場合uubbuunnttuuになってしまします。

container_name login: uubbuunnttuu

実際に入力されているのはubuntuなので操作できますが、二文字ずつ出力されてしまうのがストレスです。なのでInvokeの代わりが欲しかったのです。

ツールの要件

  • aptかpipでインストールしたい
  • aptの場合、Ubuntu公式以外のリポジトリは使いたくない
  • 記述形式はyamlでも専用フォーマットでも気にしない
  • 現在もメンテナンスされている

するとMakeはいかにも要件に合っているではありませんか。

ならばなぜMakeに消極的なのか

Makeがビルドツールだからです。私はUbuntuを使っているので、マニュアルはGNU Makeのものです。

The make utility will determine automatically which pieces of a large program need to be recompiled, and issue the commands to recompile them.

makeユーティリティは巨大なプログラムのどの部分を再コンパイルしなければならないか自動的に判断し、それらを再コンパイルするためのコマンドを発行します。

守備範囲が広いのでできてしまっているだけで、私がやりたいこととマッチしていないように思えるのです。なので私のやりたいことに注力した要件を満たすツールが見つかった時に再考しようと思います。

ちなみにこのブログはmakeでビルドされています。

コメント

2015 - 2017 (c) 成瀬基樹