create-import-module について
モジュール間で定義や実装・テスト要件を共有する `.plain` インポートモジュールの作成スキルです。`import` と `requires` の違いや検証手順も説明します。
主な機能
- 01`template/` で共有モジュールを作成
- 02定義や実装・テスト要件を共有
- 03必須概念と frontmatter を検証
- 04`import` と `requires` を区別
活用シーン
- 01複数モジュール間で概念定義を共有
- 02共通の実装要件やテスト要件を再利用
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ plainlang/ plain-forge --skill create-import-moduleインストール後、Claude Code で/create-import-moduleを入力して読み込まれたか確認します。
詳細
翻訳後に原文が更新されています。最新の内容は原文をご確認ください。
インポートモジュールの作成
まだ取得していない場合に限り、必ずスキル load-plain-reference を使用してプレーン構文ルールを取得してください。
インポートモジュールとは
インポートモジュールとは、template/ ディレクトリに置かれる .plain ファイルで、***定義***、***実装要件***、および/または ***テスト要件*** のみを含みます。***機能仕様*** を含めてはならず、フロントマターで requires を使用してはなりません。他のモジュールは、YAML フロントマターの import フィールドを通じてその内容を取り込み、定義と要件を利用できるようになります。
インポートモジュールは、次の用途に使用します。
- 複数のモジュールで概念の定義を共有する
- 共通の実装要件(技術スタック、コーディング規約など)を提供する
- 共通のテスト要件を提供する
- 再利用可能な基盤構造(テンプレート)を作成する
モジュールに機能仕様(つまり、ソフトウェアが何をすべきかを記述する内容)が必要な場合、それはインポートモジュールではありません。create-requires-module スキルを参照してください。
ワークフロー
- このモジュールが提供する共有コンテンツを決定します — 他のモジュールが必要とする定義、実装要件、テスト要件を確認します。
- YAML フロントマターを含む
.plainファイルをtemplate/ディレクトリに作成します。インポートするモジュールが定義しなければならない概念をrequired_conceptsで宣言します。レイヤー化した再利用のために他のテンプレートをimportすることもできますが、requiresは使用してはなりません。 - 共有コンテンツを追加します — 定義、実装要件、および/またはテスト要件を追加します。
***機能仕様***を追加しないでください — インポートモジュールに機能仕様を含めてはなりません。- 概念が利用可能であることを確認します — 参照されるすべての
:Concepts:が、このモジュール内で定義されているか、このモジュール自体のインポートから提供されるか、required_conceptsとして宣言されているか、事前定義された概念であることを確認します。
形式
import フィールドは、YAML フロントマター内でモジュールパスのリストとして指定します。
---
import:
- base_template
required_concepts: [":AppName:"]
description: Shared API definitions and reqs
---
***definitions***
- :ApiClient: is the HTTP client used to communicate with external services.
- :ApiResponse: is the response returned by :ApiClient:.
***implementation reqs***
- :Implementation: should handle HTTP errors by raising appropriate exceptions.
- :ApiClient: should support configurable timeouts.
***test reqs***
- :ConformanceTests: should mock all external HTTP calls made by :ApiClient:.
デフォルトのインポートディレクトリは template/ です。インポートパスに template/ プレフィックスを付ける必要はありません。.plain 拡張子は省略します。***機能仕様*** がないことに注意してください。インポートモジュールに機能仕様を含めてはなりません。
必須概念を満たす
インポートしたテンプレートで required_concepts が宣言されている場合、インポートするモジュールは自身の ***定義*** セクションでそれらの概念を定義する必要があります。
---
import:
- auth_template
---
> auth_template declares required_concepts: [":AuthSchema:", ":AuthApiSpec:"]
> So this module must define them:
***definitions***
- :AuthSchema: is the JSON schema describing the authentication data structure.
- :AuthApiSpec: is the OpenAPI specification for the external service's auth endpoint.
import と requires の違い
| 項目 | import | requires |
|---|---|---|
| 定義を取り込む | はい | いいえ(exported_concepts のみ) |
| 実装要件を取り込む | はい | いいえ |
| テスト要件を取り込む | はい | いいえ |
| 機能仕様を取り込む | いいえ | はい(前提要件として、推移的に取り込む) |
| 生成されたコードをコピーする | いいえ | はい(累積された祖先チェーン) |
| 一般的な用途 | テンプレート、共有定義 | モジュールをビルドチェーンに追加する |
検証チェックリスト
- モジュールファイルが
template/ディレクトリにある - モジュールに
***機能仕様***が含まれていない - モジュールのフロントマターで
requiresが使用されていない - 定義、実装要件、テスト要件のうち、少なくとも1つが含まれている
- このモジュールが使用するインポートに含まれるすべての
required_conceptsが満たされている - ここで定義されていない、参照対象の概念が
required_conceptsで宣言されている - このモジュールのインポートとローカル定義の間に概念名の衝突がない
- YAML フロントマターが
---マーカーで正しく囲まれている