ローカルパッケージと機能モジュール
機能をローカル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 libraryXcodeプロジェクトへの追加
ローカルパッケージのディレクトリを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フィードバックを取得できます。ローカル設定は不要です。