swift-style について
swift-styleは、読みやすく一貫したコードを目指すSwift開発者向けのコーディングスタイルスキルです。命名、制御フロー、コード構成、アクセス制御、メモリ管理の規約を扱います。
主な機能
- 01命名と呼び出し側の明確さ
- 02guardによる浅い制御フロー
- 03extensionとMARKによる構成
- 04空白とクロージャの規約
- 05アクセス制御とメモリ管理の指針
活用シーン
- 01Swiftコードのスタイル統一の確認
- 02新しいコードベースでの命名規約の適用
- 03型とプロトコル実装の整理
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ johnrogers/ claude-swift-engineering --skill swift-styleインストール後、Claude Code で/swift-styleを入力して読み込まれたか確認します。
詳細
Swift スタイルガイド
クリーンで読みやすい Swift コードのスタイル規約です。
基本原則
明確さ > 簡潔さ > 一貫性
警告なしでコンパイルできるコードにします。
命名規則
UpperCamelCase— 型、プロトコルlowerCamelCase— その他すべて- 呼び出し元から見て明確にします
- 一般に定着したもの(URL、ID)を除き、省略形は使いません
// Preferred
let maximumWidgetCount = 100
func fetchUser(byID id: String) -> User
王道の書き方
左側の余白をハッピーパスにします。if 文をネストしないでください。
// Preferred
func process(value: Int?) throws -> Result {
guard let value = value else {
throw ProcessError.nilValue
}
guard value > 0 else {
throw ProcessError.invalidValue
}
return compute(value)
}
コードの整理
extension と MARK コメントを使います。
class MyViewController: UIViewController {
// Core implementation
}
// MARK: - UITableViewDataSource
extension MyViewController: UITableViewDataSource { }
空白
- 波括弧は同じ行で開き、次の行で閉じます
- メソッドの間には空行を1行入れます
- コロンの前に空白は入れず、後ろには1つ入れます
Self
コンパイラーで必要とされない限り、self は避けます。
// Preferred
func configure() {
backgroundColor = .systemBackground
}
計算プロパティ
読み取り専用の場合は get を省略します。
var diameter: Double {
radius * 2
}
クロージャ
末尾クロージャを使うのは、クロージャパラメーターが1つの場合に限ります。
型推論
型が明らかな場合はコンパイラーに推論させます。空のコレクションには型注釈を使います。
var names: [String] = []
構文糖
// Preferred
var items: [String]
var cache: [String: Int]
var name: String?
アクセス制御
fileprivateよりprivateを優先しますinternalは追加しません(デフォルトです)- アクセス制御は先頭の指定子として記述します
メモリー管理
resource.request().onComplete { [weak self] response in
guard let self else { return }
self.updateModel(response)
}
コメント
- 内容ではなく、理由を説明します
//または///を使い、/* */は避けます- 最新の状態を保つか、削除します
定数
名前空間にはケースのない enum を使います。
enum Math {
static let pi = 3.14159
}
よくある間違い
-
URL、ID、UUID 以外の省略形 —
cfg、mgr、ctx、descのような省略形は読みやすさを損ないます。configuration、manager、context、descriptionのように完全な名前を使います。例外は URL、ID、UUID の3つです。 -
guard/if文のネスト — 深いネストはコードを追いにくくします。早期リターンと guard を使い、ハッピーパスを左揃えに保ちます。 -
selfの一貫性のない使用 —selfを常に省略する(推奨)か、常に使用するかのどちらかにします。混在するとコードを読み取るのが難しくなり、キャプチャの意味もわかりにくくなります。 -
汎用的すぎる型名 —
Manager、Handler、Helper、Coordinatorは曖昧すぎます。PaymentProcessor、EventDispatcher、ImageCache、NavigationCoordinatorのように、責務がわかる名前にします。 -
アクセス制御の省略 — アクセス制御を省略しないでください。
private、publicを明示すると、後から保守する人がモジュールの境界を理解しやすくなります。internalはデフォルトなので省略します。