cookiecutterとcruftとcopier

2022/09/25に公開

cookiecutterとcruftとcopier

cruftとcopierについて調べてみた。理解するのに公式のドキュメントを読むのが一番良さそうだが備忘録として書いておく。

導入

プロジェクトを始める時にお決まりのディレクトリ構成、ライブラリ、ツール、CI設定、その他を使いまわすためにプロジェクトテンプレートを用意することがある。テンプレートが更新された際、既に作成済みのプロジェクトにコピペで更新を反映したり、更新が面倒で放置されるプロジェクトもある。そこで継続的にテンプレートの更新をプロジェクトに反映するツールを調べてみた。

cruft

cruftはcookiecutterで作ったプロジェクトを継続的に更新するツール。

cruft create https://github.com/timothycrosley/cookiecutter-python/

上記のコマンドを使ってプロジェクトを始める。.cruft.jsonというファイルで使用されたテンプレートのgitハッシュやパラメーターが管理されている。

プロジェクトを更新する際にはcruft updateを実行する。cruft checkコマンドでプロジェクトに更新があるか確認できる。これをCIに仕込んであればテンプレートの更新に気付くことができる。過去にcookiecutterを使って作成したプロジェクトをリンクするにはlinkコマンドを使う。

cruft link https://github.com/timothycrosley/cookiecutter-python/

参考

copier

copierはcookiecutter + crutfを1つにしたようなツール。cookiecutterがjsonで設定ファイルを書くのに対してcopierではyamlで記述する。

プロジェクトの作成は次のようにする。

copier path/to/project/template path/to/destination
# copier https://github.com/copier-org/copier.git path/to/destination

プロジェクトの更新はcopier updateのコマンドで行う。cruftの.cruft.jsonに値するのが.copier-answers.ymlになる。.cruft.jsonと違ってファイル名は自由に命名できる。

Discussion