はじめに
Swift製コマンドラインツールのMintですが、複数のプロジェクトで使用されているビルドマシンにインストールせずにプロジェクトディレクトリ内にインストールし、プロジェクトごとに管理する様にしてみました。
Mintとは
https://github.com/yonaskolb/Mint
Swift製コマンドラインツールのインストールと実行を行うパッケージマネージャーです。
以下の様なパッケージを管理できます。
- XcodeGen
- SwiftLint
- SwiftGen
- Carthage
- LicensePlist
普通にインストールした場合は、
packageは/usr/local/lib/mint
にインストールされ、
packageをbuildしたcommandのリンクは/usr/local/bin
にインストールされます。
プロジェクトディレクトリにインストール
MintのREADME.mdによると、以下の環境変数でインストール先を指定できるという事なのでこれらを使用します。
-
MINT_PATH
: packageのインストール先ディレクトリ -
MINT_LINK_PATH
: packageをbuildしたcommandのリンクのインストール先ディレクトリ
1. Mintのディレクトリを作成しクローンする
プロジェクトディレクトリ内にMint用のディレクトリを作成しその中にクローンします。
$ mkdir mint
$ tree
.
├── Mintfile
└── mint
1 directory, 1 file
$ cd mint
$ git clone https://github.com/yonaskolb/Mint.git
Cloning into 'Mint'...
remote: Enumerating objects: 36, done.
remote: Counting objects: 100% (36/36), done.
remote: Compressing objects: 100% (28/28), done.
remote: Total 1952 (delta 10), reused 17 (delta 6), pack-reused 1916
Receiving objects: 100% (1952/1952), 357.89 KiB | 669.00 KiB/s, done.
Resolving deltas: 100% (1113/1113), done.
$ cd ..
$ tree
.
├── Mintfile
└── mint
└── Mint
├── CHANGELOG.md
├── LICENSE
├── Makefile
├── Package.resolved
├── Package.swift
├── README.md
├── Sources
│ ├── Mint
│ │ └── main.swift
(一部省略)
10 directories, 42 files
2. パスを指定してインストール
MINT_PATH
, MINT_LINK_PATH
を指定してインストールする
$ cd mint/Mint
$ export MINT_PATH="../lib" MINT_LINK_PATH="../bin"
$ swift run mint install yonaskolb/mint
Fetching https://github.com/jakeheis/SwiftCLI.git
(一部省略)
[70/70] Linking mint
🌱 Finding latest version of mint
🌱 Cloning mint 0.16.0
🌱 Resolving package
🌱 Building package
🌱 Installed mint 0.16.0
🌱 Linked mint 0.16.0 to /Users/User_Name/projects/mint_test/mint/bin
$ cd ../..
$ tree
.
├── Mintfile
└── mint
├── Mint
│ ├── CHANGELOG.md
(一部省略)
├── bin
│ └── mint -> /Users/User_Name/projects/mint_test/mint/lib/packages/github.com_yonaskolb_mint/build/0.16.0/mint
└── lib
├── metadata.json
└── packages
└── github.com_yonaskolb_mint
└── build
└── 0.16.0
└── mint
16 directories, 45 files
3. シンボリックリンクを変更
上のログを確認してもらうとmint/bin/mint
のリンクが絶対パスになっているのが分かると思います。
ビルドマシンなどで実行できなくなるので、これを相対パスに変更します。
$ cd mint/bin
$ export mint_bin_path=$(find ../lib/packages/github.com_yonaskolb_mint/build/*/mint)
$ ln -sf $mint_bin_path mint
$ tree
.
└── mint -> ../lib/packages/github.com_yonaskolb_mint/build/0.16.0/mint
4. Packagesをインストール
Mintfileに設定してあるpackageをインストールします。
$ export MINT_PATH="mint/lib" MINT_LINK_PATH="mint/bin"
$ mint/bin/mint bootstrap
🌱 Cloning SwiftLint 0.41.0
🌱 Resolving package
🌱 Building package
🌱 Installed SwiftLint 0.41.0
🌱 Cloning XcodeGen 2.18.0
🌱 Resolving package
🌱 Building package
🌱 Copying resources for XcodeGen: SettingPresets ...
🌱 Installed XcodeGen 2.18.0
🌱 Installed 2/2 packages
$ mint/bin/mint run xcodegen --version
Version: 2.18.0
シェルスクリプト
MINT_PATH
, MINT_LINK_PATH
を指定してインストールしたり実行するのが面倒なのでシェルスクリプトを作成しました。
https://github.com/yd2x/mint_sh
使用方法:
$ tree
.
├── Mintfile
├── mint
└── mint.sh
1 directory, 2 files
[インストール]
$ sh mint.sh --install
[packageインストール]
$ sh mint.sh bootstrap
[package実行]
$ sh mint.sh run xcodegen