add-template について
Liquid の include とパラメーターを使い、再利用可能な `.plain` 仕様テンプレートを作成するスキルです。テンプレートの確認や作成、展開後の検証を案内します。
主な機能
- 01パラメーター付き include による仕様の再利用
- 02`template/` ディレクトリでのテンプレート作成
- 03パラメーターと展開後の内容の検証
活用シーン
- 01複数の `.plain` ファイルで仕様パターンを再利用
- 02共有内容の名前、パス、設定値をパラメーター化
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ plainlang/ plain-forge --skill add-templateインストール後、Claude Code で/add-templateを入力して読み込まれたか確認します。
詳細
テンプレートの追加
まずルールを読み込んでください。 .plain ファイルを読み取り、編集、または書き込む前に、load-plain-reference スキルを呼び出し、そのスキルから案内されたルールファイルを読んでください。この会話ですでに load-plain-reference が実行されている場合に限り、これを省略できます。
テンプレートでは Liquid 構文({% include %})を使って、複数の .plain ファイル間で同じ仕様の内容を再利用します。各インクルードには異なるパラメーターを渡せるため、1 つのソースから用途に合わせた出力を生成できます。これは import や requires とは異なります。テンプレートはパラメーターを使ったテキストの再利用であり、モジュール依存関係ではありません。
テンプレートを使う場合
- まったく同じ仕様の構造が複数の
.plainファイルで必要な場合。 - 再利用する内容が、名前、パス、設定など、パラメーター化できる特定の値だけ異なる場合。
- 複数のモジュールで使われるパターンの信頼できる唯一の情報源を用意したい場合。
書式
テンプレートをインクルードする
テンプレートのパスとパラメーターを指定して、{% include %} を使います。
{% include "console_app_template.plain", main_file_name: "app.py", app_name: "MyApp" %}
パラメーターは、テンプレートのパスの後にキーと値のペアで渡します。テンプレート内では、Liquid の変数構文({{ main_file_name }})を使ってパラメーターにアクセスします。
テンプレートを書く
テンプレートは template/ ディレクトリに配置します。サポートされているのは変数({{ variable_name }})のみです。条件分岐、ループ、その他の Liquid 機能は使用できません。
***definitions***
- :{{ app_name }}MainFile: is the entry point file for :{{ app_name }}:.
***implementation reqs***
- :{{ app_name }}MainFile: should be called "{{ main_file_name }}".
ワークフロー:既存のテンプレートをインクルードする
template/ディレクトリを確認して、利用できるテンプレートを調べます。- テンプレートを読み込み、 必要なパラメーターと生成される内容を把握します。
- 対象の
.plainファイルに{% include %}文を追加し、 正しいパラメーターを指定します。 - 展開された内容を確認し、 概念名の衝突やセクションの重複が生じないことを確かめます。
ワークフロー:新しいテンプレートを作成する
- 繰り返されているパターンを特定します。 複数の
.plainファイル間で重複している(または重複する予定の)仕様の内容を探します。 - 共通の内容を抽出し、
template/ディレクトリに新しい.plainファイルとして保存します。 - 異なる部分をパラメーター化します。 変化する箇所を Liquid 変数に置き換えます。
- 元のファイルを更新し、重複した内容の代わりに
{% include %}を使うようにします。
検証チェックリスト
- テンプレートファイルが
template/ディレクトリにある - 変化する部分がすべて Liquid 変数でパラメーター化されている
- 各
{% include %}の呼び出し箇所で必要なパラメーターがすべて渡されている - 展開された内容で概念名の衝突が生じない
- テンプレートが複数の
.plainファイルで使われている(そうでない場合は、内容をインライン化する)