🖥️
続: グローバル環境を汚染しないXcodeの開発環境構築
追記
- さらに改善し、
git submodule
をSwiftPM
に変更 → 続々: グローバル環境を汚染しないXcodeの開発環境構築
解決したい課題
- 前回書いたグローバル環境を可能な限り汚染しないXcodeの開発環境構築だと、まだHomebrew、bundler、Mintの3つはグローバルなところにインストールする構成だったのを改善したい。
結果
- 環境構築に必要なツールはDockerのみになった。
- MintはHomebrewからgit submoduleに変更。
- CococPodsはbundlerからDockerに変更。
Mint (in project directory)
├─ Carthage
├─ xcodegen
├─ swiftgen
└─ swiftlint
Docker
└─ CocoaPods
- サンプルはyusuga/xcode-setup
- まだ細かい最適化はできそうだけど、グローバル環境を汚染しないという意味ではこれで要件は満たせたと思う。これで、XcodeとDockerさえインストール済みならどの環境でもmakeコマンドのみで環境構築できるようになったはず。
改善方法の詳細
MintのインストールにHomebrewを使いたくない
- HomebrewはMintをインストールするためだけに使っていたので、逆にいうとMintのインストールをHomebrew以外にすれば良いということになるので、
git submodule
で追加する方法に変更。
git submodule add git@github.com:yonaskolb/Mint.git App/Mint
- MintはMakeコマンドでのビルドをサポートしているので以下でビルドしてmintを生成。
-
App/Mint/.build/apple/Products/Release/mint
に生成される。
-
make -C ./App/Mint build
Mint経由でインストールするツールの保存先をプロジェクト配下のディレクトリにする
- mintはツールのインストール先を
MINT_PATH
で指定可能なので、App/.mint/lib
に変更する。
MINT_PATH=App/.mint/lib App/Mint/.build/apple/Products/Release/mint bootstrap -m App/Mintfile
CocoaPodsのインストールにbunlderを使いたくない
- bundler経由でインストールしていたCocoaPodsをDockerに変更。
- Imageはrenovate/cocoapodsを使用。
-
-u
と--allow-root
でrootでの実行を指定しているのは、CircleCIでの処理を考慮しているため。
docker run \
--rm \
-v App:/local \
-w /local \
-u $(id -u root):$(id -g root) \
renovate/cocoapods:1.10.1 \
pod --allow-root install
- bundlerを除外できたのはとても嬉しくて、rbenvを使ってたとしてもローカルのRubyのバージョン管理がとてもめんどくさくて、チームメンバーからもRuby起因での環境構築ができないという問い合わせが一番多かった…。
Makefileを改善
- 上記すべてをMakefileに反映。
Discussion