0Pricing
Swift Academy · レッスン

ローカルパッケージと機能モジュール

機能をローカルSwiftパッケージに切り出し、ビルドを高速化して分離します。

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

機能モジュールの理由

アプリをローカルパッケージに分割すると、カプセル化を強制でき、差分ビルドが高速になり、チームでの並行開発が可能になります。

// Without modules: one giant target recompiles everything
// With modules: changes to FeatureA only recompile FeatureA

ローカルパッケージの作成

Xcodeプロジェクトの隣にディレクトリを作成し、その中で swift package init を実行します。

mkdir Features/UserProfile
cd Features/UserProfile
swift package init --name UserProfile --type library

Xcodeプロジェクトへの追加

ローカルパッケージのディレクトリをXcodeのプロジェクトナビゲーターにドラッグします。Xcodeが自動的にSPMパッケージとして認識します。

// In Xcode:
// File → Add Package Dependencies → Add Local...
// Select the package directory

ローカルパッケージの参照

アプリのPackage.swiftで、またはXcodeを使って、.package(path:) でローカルパッケージを参照します。

.package(path: "../Features/UserProfile"),
// In the target:
.product(name: "UserProfile", package: "UserProfile")

公開APIの範囲

ローカルパッケージ内の public と open の宣言だけがアプリからアクセスできます。アクセス制御を使ってモジュールの境界を定義します。

// UserProfile/Sources/UserProfile/ProfileView.swift
public struct ProfileView: View {
  public init() {}
  public var body: some View { Text("Profile") }
}

内部実装

すべての internal 型はモジュールの外部から見えないため、カプセル化が自動的に保たれます。

// Only visible within UserProfile module:
final class ProfileCache { ... }
struct ProfileMapper { ... }

機能モジュールの構成

各機能モジュールは、内部に独自のドメイン、データ、プレゼンテーションの各層を持ちます。

// UserProfile/
// ├── Sources/UserProfile/
// │   ├── Domain/         (entities, use cases, protocols)
// │   ├── Data/           (repositories)
// │   └── Presentation/   (views, view models)
// └── Tests/UserProfileTests/

共有Coreモジュール

ネットワーク、分析、デザインシステムなど、複数の機能にまたがる関心事を共有モジュールに切り出し、機能モジュールからインポートします。

// CoreNetwork package
// CoreDesign package
// Both imported by FeatureA and FeatureB

依存関係グラフ

機能モジュール同士を直接依存させてはいけません。結合を避けるため、共有依存関係はCoreモジュールを通じて流します。

// GOOD:
// FeatureA → CoreNetwork
// FeatureB → CoreNetwork
// BAD:
// FeatureA → FeatureB  (tight coupling)

ビルド時間のメリット

モジュールの境界を適切に分けると、ソースファイルの変更時にXcodeは影響を受けたモジュールだけを再ビルドします。

// Change in UserProfile → only UserProfile recompiles
// App target links the new binary → fast incremental build

機能モジュールのテスト

各機能モジュールには独自のテストターゲットがあるため、テストを並列実行でき、CIを高速化できます。

// Run all tests:
swift test --package-path Features/UserProfile
// Or let Xcode run them as part of the main test plan

確認問題

ローカルSwiftパッケージの宣言をアプリのターゲットから使用するには、どのアクセスレベルが必要ですか。

学習内容のまとめ

swift package init でローカルの機能パッケージを作成し、.package(path:) で参照して、public 型だけを公開します。共有ユーティリティはCoreモジュールに切り出します。機能モジュール同士は相互に依存させないでください。モジュールの境界を明確にすると、差分ビルドの時間を大幅に短縮できます。

よくある質問

「ローカルパッケージと機能モジュール」レッスンは無料ですか?

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

「ローカルパッケージと機能モジュール」で何を学びますか?

機能をローカルSwiftパッケージに切り出し、ビルドを高速化して分離します。 ブラウザで直接実行するハンズオンコードでSwift Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

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

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

「ローカルパッケージと機能モジュール」レッスンにはどのくらい時間がかかりますか?

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

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

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

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

  1. Package.swift:ターゲット、プロダクト、依存関係
  2. ローカルパッケージと機能モジュール
  3. バイナリターゲットとXCFramework
  4. バージョニング、競合解決、Swiftプラグイン
← Swift Academyに戻る