Upgrade to Pro — share decks privately, control downloads, hide ads and more …

SwiftPMのPlugin入門 / introduction_to_swiftpm_plugin

uhooi
January 17, 2023

SwiftPMのPlugin入門 / introduction_to_swiftpm_plugin

【オフライン開催】Voicy Tech Bar #1
https://voicy.connpass.com/event/269791/

## 参考リンク

### Build Tool Plugin

#### Build Tool Plugin を提供している主な CLI ツール

- SwiftGen
https://github.com/SwiftGen/SwiftGenPlugin

- R.swift
https://github.com/mac-cain13/R.swift#packageswift-based-spm-project

- swift-protobuf
https://github.com/apple/swift-protobuf/blob/main/Sources/protoc-gen-swift/Docs.docc/spm-plugin.md

#### Build Tool Plugin の公式ドキュメント

- SE-0303: Package Manager Extensible Build Tools
https://github.com/apple/swift-evolution/blob/main/proposals/0303-swiftpm-extensible-build-tools.md

- SE-0325: Additional Package Plugin APIs
https://github.com/apple/swift-evolution/blob/main/proposals/0325-swiftpm-additional-plugin-apis.md

#### その他

- Build Tool Plugin の導入記事
https://qiita.com/uhooi/items/c051d2f503f77d7f4193

### Command Plugin

#### Command Plugin を提供している主な CLI ツール

- swift-docc-plugin
https://github.com/apple/swift-docc-plugin

- swift-format (ドキュメントはまだない)
https://github.com/apple/swift-format

- SwiftFormat
https://github.com/nicklockwood/SwiftFormat/blob/master/README.md#swift-package-manager-plugin

#### Command Plugin の公式ドキュメント

- SE-0332: Package Manager Command Plugins
https://github.com/apple/swift-evolution/blob/main/proposals/0332-swiftpm-command-plugins.md

#### その他

- Command Plugin をラップした Makefile
https://github.com/uhooi/Loki/blob/3061f10556696c50d8c3545b2be0175a1e63b311/LokiPackage/Makefile

uhooi

January 17, 2023
Tweet

More Decks by uhooi

Other Decks in Programming

Transcript

  1. Build Tool Plugin の導入 // Package.swift // ... dependencies: [

    .package(url: "https://github.com/SwiftGen/SwiftGenPlugin", from: "6.6.2"), ], プラグインのリポジトリを 依存関係に追加する
  2. Build Tool Plugin の導入 // Package.swift // ... targets: [

    .target( // ... plugins: [ .plugin(name: "SwiftGenPlugin", package: "SwiftGenPlugin"), ]), ] 適用するターゲットごとに プラグインを指定する
  3. ・SE-0303: Package Manager Extensible Build Tools  https:/ /github.com/apple/swift-evolution/blob/main/proposals/0303-swiftpm- extensible-build-tools.md ・SE-0325:

    Additional Package Plugin APIs  https:/ /github.com/apple/swift-evolution/blob/main/proposals/0325-swiftpm- additional-plugin-apis.md Build Tool Plugin の公式ドキュメント プロポーザルしか公式ドキュメントがない (ほかにあったら教えてほしいです)
  4. Command Plugin の導入 // Package.swift // ... dependencies: [ .package(url:

    "https://github.com/SwiftGen/SwiftGenPlugin", from: "6.6.2"), ], プラグインのリポジトリを 依存関係に追加するのみ
  5. ・swift package plugin --list で導入されている  Command Plugin の一覧を出力する Command Plugin

    の確認 $ swift package plugin --list ‘generate-manual’ (plugin ‘Generate Manual’ in package ‘swift-argument-parser’) ‘generate-code-for-resources’ (plugin ‘SwiftGen-Generate’ in package ‘SwiftGenPlugin’) verb の確認に便利
  6. Tips: Makefile でラップすると使いやすい // Makefile .PHONY: lint lint: swift package

    plugin lint-source-code .PHONY: format format: swift package plugin --allow-writing-to-package-directory format-source-code
  7. Tips: Makefile でラップすると使いやすい // Makefile .PHONY: lint lint: swift package

    plugin lint-source-code .PHONY: format format: swift package plugin --allow-writing-to-package-directory format-source-code plugin は省略できる っぽい
  8. Tips: Makefile でラップすると使いやすい // Makefile .PHONY: lint lint: swift package

    plugin lint-source-code .PHONY: format format: swift package plugin --allow-writing-to-package-directory format-source-code パッケージ内のファイルを 更新する際に付ける