「Swift PackagesによるCLIツールの作成方法」は5部構成です。
記事を順番に読み進めると、Swift PackagesでCLIツールを自作して公開できるようになります。
第1部: Swift PackagesでCLIツールを自作する ←イマココ
第2部: 自作パッケージをSwift Package Indexに追加する
第3部: 自作パッケージをMintに対応する
第4部: 自作パッケージをHomebrewに追加する(未投稿)
第5部: 自作パッケージをCocoaPodsに追加する(未投稿)
はじめに
Swift製のCLIツールを自作する実績を解除したかったので、かんたんなCLIツールを自作することにしました。
「Swift Packages」とは?
こちら をご参照ください。
環境
- OS: macOS Big Sur 11.6
- Xcode:12.5.1 (12E507)
- Swift:5.4.2
- swift-tools:5.4
パッケージの作成方法
例として「swift-output-uhooi」というリポジトリに「OutputUhooi」というパッケージを作成します。
GitHubにリポジトリを作成する
詳細は こちら をご参照ください。
$ git clone https://github.com/uhooi/swift-output-uhooi.git
$ cd swift-output-uhooi
$ git switch -c feature/create_package
パッケージの基盤を生成する
詳細は こちら をご参照ください。
$ swift package init --name OutputUhooi --type executable
Creating executable package: OutputUhooi
Creating Package.swift
Creating Sources/
Creating Sources/OutputUhooi/main.swift
Creating Tests/
Creating Tests/OutputUhooiTests/
Creating Tests/OutputUhooiTests/OutputUhooiTests.swift
.gitignoreを作成する
こちら をご参照ください。
CIを構築する(任意)
できる限り実装前にCIを構築します。
GitHub Actionsを使えば一瞬で構築できます。
name: CI
on:
push:
branches: [ main ]
pull_request:
branches: [ main ]
jobs:
run:
runs-on: macos-11
strategy:
matrix:
xcode: ["12.5.1", "13.0"]
subcommand: ["Build", "Test"]
steps:
- uses: actions/checkout@v2
- name: ${{ matrix.subcommand }}
run: |
xcodebuild -version
swift --version
swift package --version
subcommand=`echo ${{ matrix.subcommand }} | tr '[:upper:]' '[:lower:]'`
swift $subcommand -v
env:
DEVELOPER_DIR: /Applications/Xcode_${{ matrix.xcode }}.app
これで main
ブランチへPRを出すときとプッシュするとき(PRのマージを含む)に、自動でビルドとテストが実行されます。
CDを構築する(任意)
GitHub Actionsを使い、リリース時に自動でソースをビルドし、バイナリをリリースのアセットに追加するCDを構築します。
name: Release
on:
release:
types: [published]
env:
DEVELOPER_DIR: /Applications/Xcode_12.5.1.app
jobs:
build-release:
runs-on: macos-11
steps:
- uses: actions/checkout@v2
- name: Build for release
run: swift build -c release
- name: Archive the binary
run: zip -j uhooi.zip .build/release/uhooi
- name: Upload the binary
uses: actions/upload-artifact@v2
with:
name: uhooi
path: uhooi.zip
retention-days: 14
deploy-binary:
needs: build-release
runs-on: macos-11
steps:
- uses: actions/download-artifact@v2
with:
name: uhooi
- name: Deploy the binary
uses: softprops/action-gh-release@v1
with:
files: uhooi.zip
uhooi
の部分は自分のバイナリ名に置き換えてください。
これでGitHubからリリースするたびに自動でバイナリがアセットに追加されます。
以下の例だと uhooi.zip
がバイナリを圧縮したファイルです。
2つの Source code
はリリース時に自動で追加されるので、手動やワークフローで追加する必要がありません。
CLIツールを実装する
詳細な実装方法は別記事で紹介する予定なので、本記事では省略します。
基本的なパッケージ構成は こちら をご参照ください。
対応プラットフォームを明記する(任意)
詳細は こちら をご参照ください。
CLIツールなのでmacOSのみ記述すればOKです。
// ...
let package = Package(
// ...
platforms: [
.macOS(.v10_10),
],
// ...
)
READMEを編集する(任意)
最後にREADMEを編集します。
最低限「CLIツールのインストール方法」と「CLIツールの使い方」があると親切です。
詳細は こちら をご参照ください。
変更をコミットしてプッシュする
こちら をご参照ください。
リリースする
こちら をご参照ください。
パッケージの使い方
自作パッケージを使う方法を説明します。
ソースコードをビルドする
今回は最もわかりやすい、ソースコードをビルドしてバイナリを生成する方法を紹介します。
実務では Mint やSwiftPMなどのパッケージ管理ツールを使うのが望ましいです。
$ git clone https://github.com/uhooi/swift-output-uhooi.git
$ cd swift-output-uhooi
$ swift build -c release
-c release
オプションを付けることでリリースビルドになります。
バイナリを実行する
生成したバイナリを実行します。
リリースビルドしたら .build/release
フォルダにバイナリが生成されるので、 .build/release/{バイナリ名}
で実行できます。
$ .build/release/uhooi "I'm uhooi."
┌|▼▼|┘<I'm uhooi.
見事に uhooi
コマンドを使ってウホーイの喋るAAを出力できました。
ヘルプを見る
だいたいのCLIツールにはヘルプが用意されているので、 -h
オプションを付けて実行してみます。
$ .build/release/uhooi -h
OVERVIEW: Uhooi speak the phrase.
USAGE: uhooi [--include-counter] [--count <count>] <phrase>
ARGUMENTS:
<phrase> The phrase to repeat.
OPTIONS:
--include-counter Include a counter with each repetition.
-c, --count <count> The number of times to repeat 'phrase'.
--version Show the version.
-h, --help Show help information.
uhooi
コマンドのヘルプが出力されました。
初めて使うコマンドは、ヘルプを見ると使い方がわかるのでオススメです。
おわりに
Swift PackagesでCLIツールを自作する実績を解除できました!
ウホーイが喋るだけのCLIツールですが、よかったらスターを付けて、実際に使ってみてください
みなさんの素晴らしい自作CLIツールにも期待しています