コンテンツへスキップ

テンプレート

確立されたアーキテクチャを持つプロジェクトでは、開発者がプロジェクトと整合性のある新しいコンポーネントや機能をブートストラップしたい場合があります。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 という名前のマニフェストファイルを用意します。このファイルは次のようになります:

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 コマンドから使用できます:

bash
tuist scaffold name_of_template --name Name --platform macos
Note

platform は省略可能な引数であるため、--platform macos 引数なしでコマンドを実行することもできます。

.string と .files で十分な柔軟性が得られない場合は、.file ケースを通じて Stencil テンプレート言語を活用できます。さらに、ここで定義されている追加のフィルターを使用することもできます。

文字列補間を使用すると、上記の \(nameAttribute) は {{ name }} に解決されます。テンプレート定義で Stencil フィルターを使用したい場合は、その補間を手動で使用し、任意のフィルターを追加できます。たとえば、name 属性の小文字値を取得するために、\(nameAttribute) の代わりに { { name | lowercase } } を使用できます。

また、.directory を使用して、フォルダー全体を指定されたパスにコピーすることもできます。

Project Description Helpers

テンプレートでは、プロジェクト記述ヘルパー を使用して、テンプレート間でコードを再利用できます。