MintはSwift Package Managerで作成したコマンドラインツールのインストール、実行、配布を簡単にすることを目的としたツールです。 Homebrewでのformula管理の煩わしさの無さ、同一コマンドをバージョン指定で実行可能というところが売りのようです。
ここでは簡単なコマンドラインツールをSwift Package Managerで作成し、Mintで実行する流れを確認します。 SPMでCLIツールを作る手順を既に知ってる場合は「Mintをインストール」から確認するとよいでしょう。
基本的には以下のリンクの内容と同じことをしています。
⋊> ~/s/g/koyachi mkdir HelloMint 08:28:11
⋊> ~/s/g/koyachi cd HelloMint 08:28:15
⋊> ~/s/g/k/HelloMint swift package init --type executable 08:28:18
Creating executable package: HelloMint
Creating Package.swift
Creating README.md
Creating .gitignore
Creating Sources/
Creating Sources/HelloMint/main.swift
Creating Tests/
⋊> ~/s/g/k/HelloMint
print("Hello, Mint!")
⋊> ~/s/g/k/HelloMint swift build 08:30:20
Compile Swift Module 'HelloMint' (1 sources)
Linking ./.build/x86_64-apple-macosx10.10/debug/HelloMint
⋊> ~/s/g/k/HelloMint .build/debug/HelloMint 08:30:29
Hello, Mint!
⋊> ~/s/g/k/HelloMint
⋊> ~/s/g/k/HelloMint git init 08:34:36
Initialized empty Git repository in /Users/koyachi/src/github.com/koyachi/HelloMint/.git/
⋊> ~/s/g/k/HelloMint on master ⨯ git status 08:34:40
On branch master
Initial commit
Untracked files:
(use "git add <file>..." to include in what will be committed)
.gitignore
Package.swift
README.md
Sources/
nothing added to commit but untracked files present (use "git add" to track)
⋊> ~/s/g/k/HelloMint on master ⨯ git add . 08:34:43
⋊> ~/s/g/k/HelloMint on master ⨯ git commit -m 'first commit' 08:35:01
[master (root-commit) 543d197] first commit
4 files changed, 27 insertions(+)
create mode 100644 .gitignore
create mode 100644 Package.swift
create mode 100644 README.md
create mode 100644 Sources/HelloMint/main.swift
あとでMintからコマンドバージョン指定して実行を確認したいので、ここで最初のバージョンのリリースタグを設定します。
⋊> ~/s/g/k/HelloMint on master git tag 0.0.1 08:36:12
⋊> ~/s/g/k/HelloMint on master git tag 08:36:32
0.0.1
⋊> ~/s/g/k/HelloMint on master
github上ではkoyachi/HelloMintというリポジトリを作成しました。 作成したリモートリポジトリを登録し、そこへpushします。
⋊> ~/s/g/k/HelloMint on master git remote add origin [email protected]:koyachi/HelloMint.git 08:37:50
⋊> ~/s/g/k/HelloMint on master git push -u origin master 08:37:56
Enter passphrase for key '/Users/koyachi/.ssh/id_rsa':
Counting objects: 8, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (3/3), done.
Writing objects: 100% (8/8), 863 bytes | 863.00 KiB/s, done.
Total 8 (delta 0), reused 0 (delta 0)
To github.com:koyachi/HelloMint.git
* [new branch] master -> master
Branch master set up to track remote branch master from origin.
⋊> ~/s/g/k/HelloMint on master ◦ git push origin --tags 08:38:39
Enter passphrase for key '/Users/koyachi/.ssh/id_rsa':
Total 0 (delta 0), reused 0 (delta 0)
To github.com:koyachi/HelloMint.git
* [new tag] 0.0.1 -> 0.0.1
ここではbrewを使ってインストールします。
⋊> ~ brew tap yonaskolb/Mint https://github.com/yonaskolb/Mint.git
⋊> ~ brew install mint
mint installを実行する前にmint runをしても最新版のコマンドをインストールして実行してくれるようです。
⋊> ~ mint run koyachi/HelloMint 08:43:28
🌱 Using HelloMint "0.0.1"
🌱 Cloning https://github.com/koyachi/HelloMint.git "0.0.1"...
🌱 Building HelloMint. This may take a few minutes...
🌱 Installing HelloMint...
🌱 Installed HelloMint "0.0.1"
🌱 Running HelloMint "0.0.1"...
Hello, Mint!
⋊> ~
コマンドの出力内容を修正し、
⋊> ~/s/g/k/HelloMint on master ⨯ git diff 09:14:36
diff --git a/Sources/HelloMint/main.swift b/Sources/HelloMint/main.swift
index b98d024..9fd557b 100644
--- a/Sources/HelloMint/main.swift
+++ b/Sources/HelloMint/main.swift
@@ -1 +1,9 @@
-print("Hello, Mint!")
+print(
+"""
+ __ __ ____ __ ____ __ __
+ / / / /__ / / /___ / |/ (_)___ / /_/ /
+ / /_/ / _ \\/ / / __ \\ / /|_/ / / __ \\/ __/ /
+ / __ / __/ / / /_/ / / / / / / / / / /_/_/
+/_/ /_/\\___/_/_/\\____( ) /_/ /_/_/_/ /_/\\__(_)
+ |/
+""")
⋊> ~/s/g/k/HelloMint on master ⨯ 09:15:09
修正した動作を確認し、
⋊> ~/s/g/k/HelloMint on master ⨯ swift build 09:14:29
Compile Swift Module 'HelloMint' (1 sources)
Linking ./.build/x86_64-apple-macosx10.10/debug/HelloMint
⋊> ~/s/g/k/HelloMint on master ⨯ .build/debug/HelloMint 09:14:31
__ __ ____ __ ____ __ __
/ / / /__ / / /___ / |/ (_)___ / /_/ /
/ /_/ / _ \/ / / __ \ / /|_/ / / __ \/ __/ /
/ __ / __/ / / /_/ / / / / / / / / / /_/_/
/_/ /_/\___/_/_/\____( ) /_/ /_/_/_/ /_/\__(_)
|/
動作を確認できたので0.0.2としてリリース(githubへpush)します。
⋊> ~/s/g/k/HelloMint on master ⨯ git add . 09:15:54
⋊> ~/s/g/k/HelloMint on master ⨯ git commit -m 'change message' 09:15:56
[master 109097c] change message
1 file changed, 9 insertions(+), 1 deletion(-)
⋊> ~/s/g/k/HelloMint on master ↑ git tag 0.0.2 09:16:02
⋊> ~/s/g/k/HelloMint on master ↑ git push origin master 09:16:20
Enter passphrase for key '/Users/koyachi/.ssh/id_rsa':
Counting objects: 5, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (3/3), done.
Writing objects: 100% (5/5), 467 bytes | 467.00 KiB/s, done.
Total 5 (delta 1), reused 0 (delta 0)
remote: Resolving deltas: 100% (1/1), completed with 1 local object.
To github.com:koyachi/HelloMint.git
543d197..109097c master -> master
⋊> ~/s/g/k/HelloMint on master ◦ git push origin --tags 09:17:11
Enter passphrase for key '/Users/koyachi/.ssh/id_rsa':
Total 0 (delta 0), reused 0 (delta 0)
To github.com:koyachi/HelloMint.git
* [new tag] 0.0.2 -> 0.0.2
⋊> ~/s/g/k/HelloMint on master ◦
バージョン指定なしで実行すると、最新版が実行されます。
⋊> ~ mint run koyachi/HelloMint 08:43:32
🌱 Using HelloMint "0.0.2"
🌱 Cloning https://github.com/koyachi/HelloMint.git "0.0.2"...
🌱 Building HelloMint. This may take a few minutes...
🌱 Installing HelloMint...
🌱 Installed HelloMint "0.0.2"
🌱 Running HelloMint "0.0.2"...
__ __ ____ __ ____ __ __
/ / / /__ / / /___ / |/ (_)___ / /_/ /
/ /_/ / _ \/ / / __ \ / /|_/ / / __ \/ __/ /
/ __ / __/ / / /_/ / / / / / / / / / /_/_/
/_/ /_/\___/_/_/\____( ) /_/ /_/_/_/ /_/\__(_)
|/
⋊> ~ mint run koyachi/[email protected] 09:18:27
🌱 HelloMint "0.0.1" already installed
🌱 Running HelloMint "0.0.1"...
Hello, Mint!
Mintを使うことでSwift Package Managerkから作成したコマンドラインツールの実行・配布が簡単にできることを確認しました。 Swift自身がSwift Package Manager機能を持ち、MintやMarathonのようなコマンドラインツール作成を補助するようなツールも出てきています。 iOS向けに書かれたライブラリも最初からmacos上で動くように書かれていたり、macos上で動くように修正しやすい作りになっているとコマンドラインツールが作りやすくなり、ちょっとしたツールを作るときに便利になりそうです。