Cookiecutter と cruft と copier でプロジェクトテンプレートの更新を取り入れる¶
導入¶
テンプレートからプロジェクトを作った後も、テンプレートの更新を取り込みたい。そのためのツールとして、Cookiecutter と組み合わせて使う cruft と、テンプレート管理ツールの copier を調べ、プロジェクトの作成方法と更新コマンドを比べた。
プロジェクトを始める時のディレクトリ構成やライブラリ、ツール、CI 設定などをお決まりの形で使い回すために、プロジェクトテンプレートを用意しておくことがある。テンプレートが更新された際、コピペで更新を反映するプロジェクトもあれば、更新が面倒で放置されるプロジェクトもある。
cruft¶
cruftは Cookiecutter で作ったプロジェクトを継続的に更新する。
上記のコマンドを使ってプロジェクトを始める。.cruft.jsonというファイルが、使用したテンプレートの git ハッシュやパラメーターを管理する。
プロジェクトを更新する際にはcruft updateを実行する。cruft checkコマンドでプロジェクトに更新があるか確認できるので、cruft checkを CI に仕込んであれば、テンプレートの更新に気付ける。Cookiecutter で作ったプロジェクトは、あとからlinkコマンドでリンクできる。
Wolt Engineering Blog: Project template for modern Python packages
copier¶
copierは、Cookiecutter と cruft の機能を 1 つにまとめている。Cookiecutter が json で設定ファイルを書くのに対して、copier では yaml で記述する。
プロジェクトの作成は次のようにする。
プロジェクトの更新はcopier updateのコマンドで行う。cruft の.cruft.jsonに相当するファイルは.copier-answers.ymlで、.cruft.jsonと違ってファイル名を自由に命名できる。
まとめ¶
cruft と copier は、どちらもプロジェクトテンプレートの更新を、作成済みのプロジェクトへ継続的に反映できる。すでに Cookiecutter で作成したプロジェクトをそのまま活用したいなら cruft が向き、設定ファイルを yaml で書きたいなら copier を選ぶとよい。copier ではテンプレートと配置先のパスを引数で指定できるので、配置先を柔軟に変えたい場合にも役立つ。