# Swift 5.9からの `swift package init` の変更点

先日、 `swift package init` コマンドを使った際にswift 5.9に合わせた変更点に気づきました。

情報があまりなく、私自身が戸惑ったこともあり、コマンドを実行する時の`--type`を基準にどういった変更があったのか概要をまとめたいと思います。

## [Init template cleanup #6144](https://github.com/apple/swift-package-manager/pull/6144)

[Swift Froms](https://forums.swift.org/t/update-to-swift-package-init-templates/63145/19)での議論によると、狙いとしてはシンプルなユースケースへの最適化にあるようです。

### `system-module`、`manifest`と、`empty`

これまであった、 `system-module`と`manifest`がなくなりました。

ただ、これまで`manifest`が担っていた役割を`empty`が担うようになったので、 これまでの`empty`がなくなり、`manifest`の名称が`empty`に変更されたとも言えます。

### `executable` でテストが生成されなくなった

これまで、`executable`を指定していた際にテスト周りのファイルが生成されていたのが、生成されなくなりました。

既存の `swift package init`の使い方の説明に反して、手元で実行してもテストファイルが生成されなかったのが、私が変更に気づいたきっかけでした。

これまであった`library`と後述する追加された`macro`を利用する際には、テストファイルも生成されます。

### `tool`が追加

基本的には`executable`に近いのですが、[Swift Argument Parser](https://github.com/apple/swift-argument-parser)も同時に用意されるようになりました。CLIツール向けですね。

## [Add support for creating a macro package #6250](https://github.com/apple/swift-package-manager/pull/6250)

Swift 5.9で追加されたmacroも作成できるようになりました。

## [Add templates for build tool plugins and command plugins #6111](https://github.com/apple/swift-package-manager/pull/6111)

Swift 5.6から使えるSwift Package Manager自身のプラグイン、build tool pluginとcommand pluginも作成できるようになりました。
