はじめに
久美子部長、お誕生日おめでとうございます!1 nikkieです2。
クッキーカッター(Cookiecutter)ってあるじゃないですか〜。
わたし〜、にっきー(nikkie)じゃないですか〜。
ぜったい相性いいと思うんですよね〜3
というわけで触ってみました!
目次
Cookiecutterとは
私(にっきー)の遠い親戚です!
テンプレートに沿って、ファイルやディレクトリ一式を作ってくれるツール(ライブラリ)です。
テンプレート1つ1つをcookiecutter(型にはまった、お決まりの ref:『ウィズダム英和辞典』)というようです。
Djangoを触ったことがある方向けに言うと、命名規則に沿ったプロジェクトやアプリケーションをコマンド4で作るあのイメージです。
インストール
https://cookiecutter.readthedocs.io/en/latest/installation.html
pip install cookiecutter
- macOSでは
brew install cookiecutter
もできるようです
(仮想環境に)pipでインストールしました
- Python 3.10.9
- Cookiecutter 2.3.0
使い方
インストールするとcookiecutter
コマンドが使えるようになります。
あとはテンプレート(これもまたcookiecutter)を指定し、ファイルやディレクトリ一式を生成するだけ。
cookiecutter <template指定>
とすると、対話的に設定しながらファイルやディレクトリ一式を生成できます
- cookiecutter-pypackage
- Pythonパッケージのテンプレート
cookiecutter https://github.com/audreyfeldroy/cookiecutter-pypackage
- 『Clean Architectures in Python』を写経しました(1st Edition, Part 2 - Chapter 2) - nikkie-ftnextの日記 にて使ったことがありました
- cookiecutter-django
- Djangoアプリケーションのテンプレート
cookiecutter https://github.com/cookiecutter/cookiecutter-django
- cookiecutter-vscode-extension
公開されているテンプレートの利用は、巨人の肩に乗る6ではないでしょうか7。
色々調べて最終的にテンプレートの構成に行き着くよりは、テンプレートを導入してそこを出発点にするほうが進みは早いと思います。
最初はテンプレートに則ります(守)が、徐々にテンプレートを工夫したくなり、自分でテンプレートを生み出すこともある(破)のかなと想像します。
Cookiecutterのテンプレートを私も作ってみたい!
使うだけじゃなくて「作ってみたい!」と思ったのです。
そこでチュートリアルの「Create a Cookiecutter From Scratch」を進めていきます。
簡単なテンプレート(HTML)を作ります。
作業ディレクトリはこんな感じになります。
. ├── venv # pip install cookiecutterした仮想環境 └── cookiecutter-website-simple/ # mkdirする ├── cookiecutter.json └── {{ cookiecutter.project_slug }}/ # 独特なディレクトリを作る └── index.html
cookiecutter.json
Step 2のところです。
Cookiecutterが使う変数名とデフォルト値を設定します。
{ "project_name": "Cookiecutter Website Simple", "project_slug": "{{ cookiecutter.project_name.lower().replace(' ', '_') }}", "author": "Anonymous" }
このJSONの指定が対話的な設定で参照されます
{{ cookiecutter.project_slug }}/index.html
Step 3と4です。
{{ cookiecutter.project_slug }}
はcookiecutterの変数project_slug
を参照する書き方。
この変数は先のcookiecutter.jsonで宣言されています。
project_slug
変数の値を参照してディレクトリを作るということですね。
そのディレクトリの中にはindex.html
を置きます。
こちらもcookiecutterの変数を使っています。
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>{{ cookiecutter.project_name }}</title> </head> <body> <h1>{{ cookiecutter.project_name }}</h1> <p>by {{ cookiecutter.author }}</p> </body> </html>
自作したテンプレートを指定してcookiecutter
コマンドを実行
作業ディレクトリのルート(venvがあるところ)に移動し、以下のコマンドを叩きます(対話的な設定例も示しました)。
cookiecutter
コマンドには、(URLを指定する代わりに)相対パスでテンプレートのディレクトリを指定しています
% cookiecutter cookiecutter-website-simple [1/3] project_name (Cookiecutter Website Simple): Awesome Example [2/3] project_slug (awesome_example): [3/3] author (Anonymous): nikkie
するとawesome_example
ディレクトリとその中にindex.html
ができました!🙌
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>Awesome Example</title> </head> <body> <h1>Awesome Example</h1> <p>by nikkie</p> </body> </html>
チュートリアルのStep 5と6にあたります。
Step 5ではZIPに固めていますが、ドキュメント中にZIPにまとめずにローカルファイルパスで指定する例8を見かけていたので、手順の少ないそちらを試しました。
終わりに
Cookiecutter、なかなか好感触です!
名前自体は前々から聞いてはいましたが、ようやく「こういうときに使えるかもな〜」と使い所が浮かぶようになってきた感じです。
一度にファイルをたくさん作ってくれるわけですが、たくさん作られても私がびっくりしなくなったので使っていこうという気持ちになったのもありますね。
みんなのオススメのCookiecutterテンプレートも教えてほしいなア!
- 久美子部長は私のTwitterアカウントアイコンの方です。「うまくなりたい」に心打たれたなあ...↩
- さらに田井中部長とちゆちぃもおめでとうございます!↩
-
韻は踏んでるんじゃないかな
↩わたし、にっきー。
— nikkie にっきー (@ftnext) 2023年8月20日
そろそろクッキーカッター(cookiecutter)と仲良くなれるんじゃないかと思うの。
にっきーとクッキー、響きめっちゃ似てるもんhttps://t.co/p31cBwdohP -
django-admin startproject
やpython manage.py startapp
↩ - Yeoman以外にもcookiecutterでもできるんだYO! VSCode拡張開発 素振りの記:ハンズオンテキストを元に「歩夢」を「歩夢🎀」に置き換える拡張を自作し、コマンドとコードレンズを完全に理解 - nikkie-ftnextの日記↩
- 知の高速道路とも言い換えられると思います↩
- 同様の意見はこちら。「Pythonプロジェクトに知見のある人が作ったテンプレートにより、誰でもスタートラインを前にして進めることができるようになります。」↩
- 「Use it at the command line with a local template」 ref: https://cookiecutter.readthedocs.io/en/latest/README.html#for-users-of-existing-templates↩