コンテンツにスキップ

Cookiecutter と cruft と copier でプロジェクトテンプレートの更新を取り入れる

導入

テンプレートからプロジェクトを作った後も、テンプレートの更新を取り込みたい。そのためのツールとして、Cookiecutter と組み合わせて使う cruft と、テンプレート管理ツールの copier を調べ、プロジェクトの作成方法と更新コマンドを比べた。

プロジェクトを始める時のディレクトリ構成やライブラリ、ツール、CI 設定などをお決まりの形で使い回すために、プロジェクトテンプレートを用意しておくことがある。テンプレートが更新された際、コピペで更新を反映するプロジェクトもあれば、更新が面倒で放置されるプロジェクトもある。

cruft

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

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

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

プロジェクトを更新する際にはcruft updateを実行する。cruft checkコマンドでプロジェクトに更新があるか確認できるので、cruft checkを CI に仕込んであれば、テンプレートの更新に気付ける。Cookiecutter で作ったプロジェクトは、あとからlinkコマンドでリンクできる。

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

Wolt Engineering Blog: Project template for modern Python packages

copier

copierは、Cookiecutter と cruft の機能を 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と違ってファイル名を自由に命名できる。

まとめ

cruft と copier は、どちらもプロジェクトテンプレートの更新を、作成済みのプロジェクトへ継続的に反映できる。すでに Cookiecutter で作成したプロジェクトをそのまま活用したいなら cruft が向き、設定ファイルを yaml で書きたいなら copier を選ぶとよい。copier ではテンプレートと配置先のパスを引数で指定できるので、配置先を柔軟に変えたい場合にも役立つ。

参考