0Pricing
Swift Academy · レッスン

値セマンティクスに対応したAPI設計

公開インターフェースやフレームワークの設計で、structとclassを使い分けます。

「値セマンティクスに対応したAPI設計」はCoddyKit上の無料Swift Academyレッスンです。 これはレッスン4/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはSwift Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Swift Academyコースには全4レッスンが含まれています。

ようこそ

値セマンティクスを中心に API を設計すると、予測しやすく、スレッドセーフで、テストしやすいコードになります。この選択を行うための原則とパターンを確認しましょう。

値セマンティクスの契約

型が値セマンティクスを持つのは、次の条件を満たす場合です: • 独立した 2 つのコピーが、その後も常に独立している • 一方のコピーを変更しても、もう一方に影響しない • 型が `Int` のように振る舞う。`a = b; a += 1` を実行しても `b` は変更されません

公開 API: 値を返す型を優先する

```swift // Reference semantics — caller shares state: func getUser() -> UserClass { ... } // Value semantics — caller gets independent copy: func getUser() -> UserStruct { ... } ``` 値を返す型を使うと、外部からの変更から内部状態を保護できます。

不変な参照型

クラスが常に不変であれば、値型に近い振る舞いをします: ```swift final class Token { let value: String init(_ v: String) { value = v } // No mutable state — safe to share freely } ```

struct と class の選択チェックリスト

次の場合は struct を優先してください: ✓ 型がアイデンティティではなくデータを表す ✓ 継承が必要ない ✓ インスタンスを共有またはエイリアスする必要がない ✓ フィールド値を比較して Equatable にできる ✓ Swift Concurrency(Sendable)と相性がよい

Sendable と値セマンティクス

Swift 6 Concurrency では、アクター境界を越える型に `Sendable` が必要です: ```swift struct Message: Sendable { var text: String; var timestamp: Date } // Safe to pass between actors ``` すべてのプロパティが Sendable である値型は、自動的に `Sendable` になります。

クラス API を値安全にする

```swift struct Config { // Expose value snapshot instead of the class: func snapshot() -> Config { self } // copy by value semantics } // Or use a value-type DTO: struct UserDTO: Sendable { var id: UUID; var name: String } ```

値型を使った Builder パターン

```swift struct Request { var url: URL var method: String = "GET" var headers: [String:String] = [:] func adding(header: String, value: String) -> Request { var copy = self copy.headers[header] = value return copy } } let r = Request(url: url).adding(header: "Auth", value: "Bearer x") ```

API ドキュメントで伝わるメッセージ

class ではなく struct を選ぶと、API 利用者に明確なメッセージを伝えられます: • 「これはデータなので、自由にコピーできます」 • 「自分のコピーを変更しても、元の値には影響しません」 • 「これは安全に受け渡せるスレッドセーフな型です」 これにより、利用側のコードで防御的コピーを行う必要が減ります。

参照セマンティクスを受け入れる場合

次の場合は、クラスまたは参照セマンティクスを受け入れてください: • アイデンティティが重要である(`===`)。2 つの `User` オブジェクトが同じ人物を表すことがあります • 共有された可変状態自体が機能である(`Database`、`Cache`、`AudioEngine`) • ObjC との相互運用が必要である。UIKit や AppKit の型はクラスです • ライフサイクルコールバックが必要である。`deinit` をリソースの解放に使います

クイックチェック

Swift Concurrency で、アクター境界を越えて安全に渡せる型であることを示す Swift キーワードはどれですか。

まとめ

重要なポイント: • 値セマンティクスでは、変更はローカルにとどまり、エイリアシングは発生しません • データモデルには struct を、アイデンティティやライフサイクルには class を優先してください • 不変なクラスは値型のように振る舞います • `Sendable` と値型を組み合わせると、安全な並行処理を実現できます • struct のコピーを使う Builder パターンにより、すっきりした不変 API を作成できます コース完了です。次は ARC とメモリ管理のパターンです。

よくある質問

「値セマンティクスに対応したAPI設計」レッスンは無料ですか?

はい。「値セマンティクスに対応したAPI設計」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Swift Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Swift Academyコースには全4レッスンが含まれています。

「値セマンティクスに対応したAPI設計」で何を学びますか?

公開インターフェースやフレームワークの設計で、structとclassを使い分けます。 ブラウザで直接実行するハンズオンコードでSwift Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

Swift Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのSwift Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン4/4です。

「値セマンティクスに対応したAPI設計」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このSwift Academyレッスンでコードを書いて実行できますか?

はい。すべてのSwift Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. スタックとヒープ:値が存在する場所
  2. 変更、共有、予期しないエイリアシング
  3. 値と参照が混在するグラフ
  4. 値セマンティクスに対応したAPI設計
← Swift Academyに戻る