Xcodeのファイルテンプレート機能をチームで使う 後編
はじめに
これは株式会社TimeTree Advent Calendar 2024の21日目の記事です。
昨日は @susiyaki の スクラムフェス沖縄レポート でした!
プロダクト価値を向上させるためのなチームビルディング…奥が深いですね…🔎
私も持ち帰ってくれた知識を一緒に消化して社内チームを進化させていきたいです🔥
こんにちは。TimeTreeのiOSエンジニアの @pengtaros です。正直度90%、ユーモア度75%で日々仕事をしています。
この記事では
- さまざまなオプションを持つXcodeのカスタムファイルテンプレートを自作する方法
- チームでカスタムファイルテンプレートを共有する方法
を紹介します!
Xcodeのカスタムファイルテンプレートにはじめて触る方は前編に目を通していただくことをお勧めします👀
対象読者
この記事は以下の読者を主な対象としています
- Xcodeを使ってコードを書いている
- 同一プロジェクト内で同じようなコードを書く場面が多く煩わしさを感じている
- (オプション)チームの開発生産性を上げたいと考えている
- (オプション)TimeTreeのiOSチームの開発実態を覗きたい
達成できること
記事を読んで以下のことが達成できるような内容になっています
-
前編
- Xcodeにカスタムファイルテンプレートを追加できる
- 後編(この記事)
- Xcodeのカスタムファイルテンプレートにオプションを追加できる
- カスタムファイルテンプレートをチーム内で共有できる
柔軟なカスタムファイルテンプレートを共有してチームの生産性を向上させましょう!
Xcodeのカスタムファイルテンプレート作成時にオプションを追加する
ファイルテンプレートで Cocoa Touch Classを選択するとファイル名だけでなく、さまざまのオプションを追加で入力することができます。


Cocoa Touch Classを選択すると、セレクトボックスやチェックボックスを使って生成するファイルを変更できる
カスタムファイルファイルテンプレートもこれらのオプションを以下の方法で追加することができます。
-
前編を参考に
Swift File.xctemplateを/Users/{ユーザー名}/Library/Developer/Xcode/Templates/My\ Templatesにコピーする - 1でコピーした.xctemplateディレクトリ内の
TemplateInfo.plistを開く -
TemplateInfo.plistを編集して、Optionsを追加する

TemplateInfo.plist

Options
Options に追加できる項目の一部を設定方法と一緒に紹介します。
テキスト
テキストフィールドに入力した文字列を生成するファイルに埋め込むことができます


Optionsの設定
Optionsの設定
- Options(Array)
- Item1
- Identifier(String): オプションの識別子(一意になるよう入力)
- Required(Bool): この項目が必須か
- Name(String): 入力フィールド横のラベルとして表示される
- Description(String): この項目の説明を入れる
-
Type(String): この値を
textにすることで文字列を入力できる - NotPersisted(Bool): 一つ前に入力した値を記憶するか
- Item1
Optionsで設定したIdentifeirの値を ___VARIABLE_identifier___ のキーワードを使ってテンプレート内の変数に使うことができます
import Foundation
// ___VARIABLE_note___
チェックボックス
チェックボックスの状態によって生成するファイルを変更することができます


Optionsの設定
Optionsの設定
- Options(Array)
- Item1
- Identifier(String): オプションの識別子(一意になるよう入力)
- Required(Bool): この項目が必須か
- Name(String): 入力フィールド横のラベルとして表示される
- Description(String): この項目の説明を入れる
-
Type(String): この値を
checkboxにすることでチェックボックスを入力できる - NotPersisted(Bool): 一つ前に入力した値を記憶するか
- Item1
Options設定後に
.xctemplateディレクトリに Default と Optionsで設定した Identifier の値(写真の例だとchecked) の2種類のディレクトリを用意することで、チェックボックスにチェックが入っている時と入っていないときに生成するファイルを分けることができます

セレクトボックス
選択肢によって生成するファイルを変更することができます


Optionsの設定
- Options(Array)
- Item1
- Identifier(String): オプションの識別子(一意になるよう入力)
- Required(Bool): この項目が必須か
- Name(String): 入力フィールド横のラベルとして表示される
- Description(String): この項目の説明を入れる
-
Type(String): この値を
popupにすることでセレクトボックスで入力できる - Default(String): デフォルトの値。Valuesの値のどれかにすること。
- Values(Array): 選択肢(Stringの配列)
- Item1
Options設定後に
.xctemplateディレクトリにOptionsで設定した Values の値(写真の例だとa, b, c) のディレクトリを用意することで、選択に合わせて生成するファイルを分けることができます

ファイル名
ファイル名を他のオプションと一緒に入力することができます


Optionsの設定
- Options(Array)
- Item1
-
Identifier(String):
productNameを入力 - Required(Bool): この項目が必須か
- Name(String): 入力フィールド横のラベルとして表示される
- Description(String): この項目の説明を入れる
-
Type(String):
textを入力 - NotPersisted(Bool): 一つ前に入力した値を記憶するか
-
Identifier(String):
- Item1
そのほか
今までに紹介したもの以外にもまだまだOptions設定はあります。
既存のテンプレートのTemplateInfo.plistと.xctemplateディレクトリの構成を参考にお試しください。
(冒頭で紹介したCocoa Touch Classを眺めるのお勧めです✨)
カスタムファイルテンプレートをチームで共有する
TimeTreeでは作成したカスタムファイルテンプレートをチームで共有するために以下の方法を採用しています
- カスタムファイルテンプレートをGitHubで管理する
-
/Users/{ユーザー名}/Library/Developer/Xcode/Templatesにカスタムファイルテンプレートを同期するスクリプトを実行する
1. カスタムファイルテンプレートをGitHubで管理する
作成したカスタムファイルテンプレートを置き場所をアプリのリポジトリ内に作成しコミットしています。もし、カスタムテンプレートの追加・修正・削除する場合は、コードの変更同様PRを使って議論し変更をマージしています。
2. /Users/{ユーザー名}/Library/Developer/Xcode/Templatesにカスタムファイルテンプレートを同期するスクリプトを実行する
以下のようなスクリプトを実行してカスタムファイルテンプレートをローカルの保存場所に同期しています。
#!/bin/sh
# コピー元とコピー先を変数に設定
SOURCE_DIR="./Scripts/xcode_code_templates"
DEST_DIR="${HOME}/Library/Developer/Xcode/Templates/TimeTree"
# コピー元が存在するか確認
if [ ! -d "$SOURCE_DIR" ]; then
echo "error: not found $SOURCE_DIR"
exit 1
fi
# コピー先が存在しない場合は作成
mkdir -p "$DEST_DIR"
# テンプレートが保存されているディレクトリを同期
rsync -a --delete "$SOURCE_DIR"/ "$DEST_DIR"/
# コピーが成功したか確認
if [ $? -eq 0 ]; then
echo "SUCCESS: finished syncing xcode templates"
else
echo "error: failed to sync"
exit 1
fi
まとめ
前編では「Xcodeのカスタムファイルテンプレートの仕組み」を紹介し、後編では「オプションを追加して自作の幅を広げる方法」と「作成したものをチームでの共有する方法」をご紹介しました。
この記事を読んでくれた方と所属する開発チームの生産性に少しでも貢献できたら幸いです✨
参考
TimeTreeの採用情報
TimeTreeでは "「誘おう」をつくる" というミッションに向かって一緒に挑戦してくれる仲間を探しています。TimeTreeで働くことに興味がある方はぜひ一度お話ししましょう✨
TimeTreeのiOS開発チームの雰囲気がわかる募集要項はこちら🍎
いきなり面接は…という方はコーヒーでも飲みながら気軽にお話ししましょう☕️
会社概要やiOSアプリエンジニア以外の募集要項はフッターにございます📝
こちらもお待ちしております🙌
TimeTreeのエンジニアによる記事です。メンバーのインタビューはこちらで発信中! note.com/timetree_inc/m/m4735531db852
Discussion