Xcodeのファイルテンプレート機能をチームで使う 前編
はじめに
これは株式会社TimeTree Advent Calendar 2024の10日目の記事です。
昨日は @gonsee の iOSアプリのApple Vision Pro互換モード対応 でした。
visionOS、チャレンジングでかっこいいですね!(Apple Vision Proもうちょっと安くなってくれ!頼む!)
こんにちは。TimeTreeのiOSエンジニアの @pengtaros です。正直度90%、ユーモア度75%で日々仕事をしています。
突然ですが、皆さんXcodeのファイルテンプレート機能は使っていますか?
Xcode起動中に⌘ + N
を押すと選択できるものです。
UIやユニットテストのコードを書くときに使う人が多いのでは?
最近だとWWDC2024で発表された Swift Testing 用のファイルテンプレートが追加されましたね。
TestセクションにSwift Testing Unit Testが追加されている
これらのファイルテンプレートの存在はいくつかのメリットを私たちに与えてくれます。
- ボイラープレートコードの入力の手間を省く(例: SwiftUI View や Swift Testing Unit Test)
- いちから作成するのが困難なファイルの雛形を作成できる(例: Storyboard)
チームでソフトウェアを開発しているときに、既存のファイルテンプレート以外でこれらのメリットを必要とする場合があります(特に1の理由)
例えば以下のような場合です。
- 特定のアーキテクチャを採用しており、新しい画面を作るたびにボイラープレートコードを書いている場合
- 例: MVVMのViewやViewModel、VIPERのViewやPresenterなど
- コードベースの中でチーム内の作法通りに繰り返し書くコードがある場合
- 例: CoreDataの操作、Backendのエンドポイントへのリクエスト用のクラス
この記事ではXcodeのカスタムファイルテンプレートを使ってこれらのニーズに応える方法を紹介します。
対象読者
この記事は以下の読者を主な対象としています
- Xcodeを使ってコードを書いている
- 同一プロジェクト内で同じようなコードを書く場面が多く煩わしさを感じている
- (オプション)チームの開発生産性を上げたいと考えている
- (オプション)TimeTreeのiOSチームの開発実態を覗きたい
達成できること
記事を読んで以下のことが達成できるような内容になっています
- 前編(この記事)
- Xcodeにカスタムファイルテンプレートを追加できる
- 後編(株式会社TimeTree Advent Calendar 2024の12/21の記事で公開予定)
- Xcodeのカスタムファイルテンプレートに変数を追加できる
- カスタムファイルテンプレートをチーム内で共有できる
カスタムファイルテンプレートを使ってボイラープレートコード作成の手間を削減しましょう。
ファイルテンプレートのディレクトリ構造と管理方法
カスタムファイルテンプレートを作成する前に、ファイルテンプレートのディレクトリ構造と管理方法を紹介します。
ディレクトリ構造
カスタムファイルテンプレートの最小のディレクトリ構造は以下のとおりです
-
{ファイルテンプレート名}.xctemplate
ディレクトリ- TemplateInfo.plist
- 雛形ファイル(例: ___FILEBASENAME___.swift)
例としてSwift Testing Unit Testのディレクトリ構造を見てみます
Swift Testing Unit Testのディレクトリ構造
カスタムファイルテンプレートもこの構造に則って作成します。
管理方法
既存のファイルテンプレートはXcodeアプリに保存されています。
ファイルテンプレートは用途により保存場所が異なります。
具体的には以下の3つです。
個別のプラットフォーム用
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/Library/Xcode/Templates/File Templates
iOSアプリ開発で使うStoryboardのテンプレートの例
共通用
/Applications/Xcode.app/Contents/Developer/Library/Xcode/Templates/File Templates
マルチプラットフォームで利用可能なSwift Testing Unit Testのテンプレートの例
カスタムファイルテンプレート用
/Users/{ユーザー名}/Library/Developer/Xcode/Templates
最初カスタムファイルテンプレートの保存用のディレクトリの中は空のはず
Xcodeはそれぞれの保存場所を参照してファイルテンプレート選択画面に内容を表示します。
カスタムファイルテンプレートをXcodeアプリ外の参照先に保存することで、新バージョンのXcodeをインストールした場合でもテンプレートを引き継いで利用することができます。
カスタムファイルテンプレートの作成手順
ファイルテンプレートのディレクトリ構造と管理方法がわかったので、実際にカスタムファイルテンプレートを作成してみましょう。
手順は次のとおりです
- 手本となる既存のファイルテンプレートを
.xctemplate
ディレクトリごとコピーする - カスタムファイルテンプレートの置き場を用意し、1のコピーを置く
- 2のテンプレート用のファイルを編集する
決まった内容を出力する最もシンプルな例
まずは既存のファイルテンプレート Swift File
で試しにSample1.swift
というファイルを作ってみましょう。
Swift Fileのテンプレート選択画面
ファイル名として"Sample1"を入力
//
// Sample1.swift
// XcodeCustomTemplateSample
//
// Created by pengtaros on 2024/12/10.
//
import Foundation
ヘッダーのコメントと import Foundation
だけが書かれた Sample1.swift
というファイルが作成されます。
この内容を少し変えたものを作りながら、カスタムファイルテンプレートの作成手順を説明します。
.xctemplate
ディレクトリごとコピーする
1. 手本となる既存のファイルテンプレートをSwift File
はプラットフォーム共通のテンプレートです。
/Applications/Xcode.app/Contents/Developer/Library/Xcode/Templates/File Templates/MultiPlatform
を探すと、Source
ディレクトリ配下にSwift File.xctemplate
ディレクトリを確認することができます。
Swift File.xctemplate
.xctemplate
ごとコピーしましょう。
2. カスタムファイルテンプレートの置き場を用意し、1のコピーを置く
カスタムファイルテンプレートの保存場所にファイルテンプレート選択画面でセクションの役割を果たすディレクトリを作成します。
mkdir /Users/{ユーザー名}/Library/Developer/Xcode/Templates/My\ Templates
セクション用のディレクトリ "My Templates" を作成
1でコピーしたSwift File.xctemplate
を /Users/{ユーザー名}/Library/Developer/Xcode/Templates/My\ Templates
にコピーしましょう。
この時点でXcodeを開いて⌘ + N
を実行するとテンプレート選択画面に My Templates
セクションが追加され、コピーしてきた Swift File
を選択することができます。
3. 2のテンプレート用のファイルを編集する
My Templates/Swift File.xctemplate/___FILEBASENAME___.swift
を編集して作成されるファイルの内容を変更しましょう。
___FILEBASENAME___.swiftを編集する
保存後、Xcodeでカスタムファイルテンプレートを選択してファイルを作成すると編集した内容が反映されています。
//
// Sample1.swift
// XcodeCustomTemplateSample
//
// Created by pengtaros on 2024/12/10.
//
import Foundation
// コメントにはWhat(何が行われているか)ではなく
// Why(なぜそのような処理をしているか)を書きましょう
以上でカスタムファイルテンプレートを作成することができました。
次回予告:変数を使ったテンプレートとチーム共有
この記事では既存のファイルテンプレートからコピーしたものを編集してカスタムファイルテンプレートを作成する方法を紹介しました。
しかし、このままでは自チームのコードベースに含まれるボイラープレートコードを書く手間を削減するには少しもの足りません。
後半では、既存のファイルテンプレートをもう少し掘り下げながら変数を使ってさまざまな形のカスタムファイルテンプレートを作成する手順と、作成したカスタムファイルテンプレートをチーム内で共有する方法について紹介します。
TimeTreeの採用情報
TimeTreeでは "「誘おう」をつくる" というミッションに向かって一緒に挑戦してくれる仲間を探しています。TimeTreeで働くことに興味がある方はぜひ一度お話ししましょう✨
TimeTreeのiOS開発チームの雰囲気がわかる募集要項はこちら🍎
いきなり面接は…という方はコーヒーでも飲みながら気軽にお話ししましょう☕️
会社概要やiOSアプリエンジニア以外の募集要項はフッターにございます📝
こちらもお待ちしております🙌
TimeTreeのエンジニアによる記事です。メンバーのインタビューはこちらで発信中! note.com/timetree_inc/m/m4735531db852
Discussion