Package Manager 邦訳
Package Manager
Swiftコードを配布するための管理ツールである。
関連ソースファイルのダウンロード、コンパイル、リンクを自動化するためのSwiftビルドシステムが統一化される。
swift3.0以上で使える。
Modules
Swiftはモジュールとしてコードを構成する。
それぞれのモジュールは名前空間を特定し、コードがモジュールの外側で使用される際は、アクセスコントロールを強制する。
プログラムは、最低限一つのモジュールに全てのコードを持つ。
またもしくは、dependencies
としてその他のモジュールをインポートしている。
システムが提供するモジュール(macOSのDarwin, LinuxのGlibc)を除いて、dependencies
を使用するためには、それらがダウンロードとビルドされる必要がある。
特定のプログラムを解決するコードをモジュールとして分離して使用すると、それらのコードは他でも再利用することが可能となる。
例として、ネットワークリクエストをする機能を提供するモジュールは、写真共有アプリやお天気アプリで共有できる。
モジュールを使用すると、自分自身で同様の機能を再実装するのではなく、他の開発者のコードをベースに構築することが出来る。
Package
パッケージは、ソースファイルとマニフェストからなる。
マニフェストは Package.swift
と呼ばれ、PackageDescription
モジュールを用いて、パッケージ名とでその中身を定義している。
パッケージは一つもしくはそれ以上の target
を持つ。
それぞれの target
は 成果物(product) を指定する。
また一つ以上の dependencies
を宣言ことが可能である。
Products
target
は その成果物(product)として、 library
もしくは executable
のどちらかをビルド出来る。
library
は他のSwiftコードにインポートする事が可能なモジュールを含む。
executable
はOSで実行することが出来るプログラムである。
Dependencies
targetの dependencies
はそのパッケージのコードによって必要とされるモジュールである。
一つの dependency
は、そのパッケージのソースへのURLと使用することができるパッケージのバージョンのセットからなる。
パッケージマネージャーの役割は、プロジェクトの全ての dependencies
のダウンロードとビルドプロセスを自動化することによって「coordination コスト」を減らすことである。
これらは再帰的な処理である。(一つの depencency
はそれ自身の dependencies
を持ち、またそれぞれ dependencies
を持つ事ができ、dependency graph
を構成する。)
Package Managerは全ての dependency graph
を満たすために、全てをダウンロードしてからビルドする。
パッケージ関連コマンド
パッケージの初期化
$ swift package init
- オプション
- --type
- library ライブラリーパッケージの作成、デフォルト
- executable 実行可能パッケージの作成
- --type
ex: 実行可能パッケージの作成例
$ mkdir battle_ship
$ cd battle_ship
$ swift package init --type executable
$ swift run # 実行
NOTE:
- main.swiftファイルが作られる
-
Sources
ディレクトリ配下に、その他の必要なソースファイルを追加していく -
swift run
で実行できる
パッケージのビルド
$ swift build
パッケージのテスト
$ swift test
実行可能パッケージの実行
$ swift run
モジュールの追加 (依存関係の追加)
以下マニフェストファイル(Package.swift)に追記する
- dependenciesへのパッケージの追加
- 使用するtargetのdependenciesに追加
ex: SwiftStreamの追加
dependenciesに追記
...
dependencies: [
// 依存するモジュールを追加
.package(url: "https://github.com/ysn551/SwiftStream.git", from: "1.0.0"),
],
targetのdependenciesに追記
...
targets: [
.target(
name: "PackageSample",
// targetが使用する場合は、追加する
dependencies: ["SwiftStream"]),
.testTarget(
name: "PackageSampleTests",
dependencies: ["PackageSample", "SwiftStream"]),
]
モジュールの更新
$ swift package update