テンプレート
確立されたアーキテクチャを持つプロジェクトでは、開発者がプロジェクトと整合性のある新しいコンポーネントや機能をブートストラップしたい場合があります。tuist scaffold を使用すると、テンプレートからファイルを生成できます。独自のテンプレートを定義することも、Tuist に同梱されているテンプレートを使用することもできます。スキャフォールディングが役立つシナリオの例をいくつか挙げます:
- 指定されたアーキテクチャに従う新しい機能を作成する:
tuist scaffold viper --name MyFeature。 - 新しいプロジェクトを作成する:
tuist scaffold feature-project --name Home
Tuist はテンプレートの内容や用途について特定の意見を押し付けません。テンプレートは特定のディレクトリに配置されていれば問題ありません。
テンプレートの定義#
テンプレートを定義するには、tuist edit を実行し、Tuist/Templates 配下にテンプレートを表す name_of_template という名前のディレクトリを作成します。テンプレートには、テンプレートを記述するマニフェストファイル name_of_template.swift が必要です。したがって、framework という名前のテンプレートを作成する場合、Tuist/Templates に framework という新しいディレクトリを作成し、framework.swift という名前のマニフェストファイルを用意します。このファイルは次のようになります:
import ProjectDescription
let nameAttribute: Template.Attribute = .required("name")
let template = Template(
description: "Custom template",
attributes: [
nameAttribute,
.optional("platform", default: "ios"),
],
items: [
.string(
path: "Project.swift",
contents: "My template contents of name \(nameAttribute)"
),
.file(
path: "generated/Up.swift",
templatePath: "generate.stencil"
),
.directory(
path: "destinationFolder",
sourcePath: "sourceFolder"
),
]
)
テンプレートの使用#
テンプレートを定義した後、scaffold コマンドから使用できます:
tuist scaffold name_of_template --name Name --platform macos
platform は省略可能な引数であるため、--platform macos 引数なしでコマンドを実行することもできます。
.string と .files で十分な柔軟性が得られない場合は、.file ケースを通じて Stencil テンプレート言語を活用できます。さらに、ここで定義されている追加のフィルターを使用することもできます。
文字列補間を使用すると、上記の \(nameAttribute) は {{ name }} に解決されます。テンプレート定義で Stencil フィルターを使用したい場合は、その補間を手動で使用し、任意のフィルターを追加できます。たとえば、name 属性の小文字値を取得するために、\(nameAttribute) の代わりに { { name | lowercase } } を使用できます。
また、.directory を使用して、フォルダー全体を指定されたパスにコピーすることもできます。
テンプレートでは、プロジェクト記述ヘルパー を使用して、テンプレート間でコードを再利用できます。