雑記です。
Qiitaにこんな記事を書きました。
この記事に至る前に似たような記事を2つ書いてたりします。
実はどれも基本的な目的は同じで
『gemを安易にグローバルインストールせずにちゃんとbundlerを使って欲しい』
という気持ちに基づいています。
何故そんなことを思ったかというと、初めてiOSアプリを開発するときに引き継いだ環境が結構特殊で
- CocoaPodsを利用して開発している。
- リリース用のビルドは古いMacにJenkinsが入っているのでそれでビルドを行いアップロードする。
- 上記のリリース用のMacのCocoaPodsはsystemのRubyに紐づく形でgemがインストールされている。
最初はそれを知らずに無邪気にCocoaPodsをローカルマシンに入れたんですが、CocoaPodのバージョンが違いすぎてうまく動かない自体に遭遇しました。
サーバーサイド開発はPHP、しかもアプリエンジニアは基本的はずっとアプリかもしくはPHPエンジニアが兼務という状態で特段Rubyを普段遣いしている状態でもなかったので、「この管理方法はよろしくない、bundlerを使って、CocoaPodsのバージョンをiOSのリポジトリと合わせて管理しよう」と思ったのです。
ところが
Gemfileを通して、bundlerを使うことにより手順が変更され、3・4回Jenkinsがうまく動かない自体に遭遇しました。単純にJenkinsの書き換えがうまく行ってなかったのですが、調整しながらPRを投げていたのですが、直属の上司に
『Gemfileってなんですか?必要ないと思うので削除してください』
とコメントされ、bundlerの説明をしたり、バージョン管理ができるものだと言ったのですが、それよりも「ビルドが通らないことが問題だし、他のエンジニアが使っていないものを入れるのはおかしい」と言われ、そのPRはクローズしました。
その後、その現場からは離れることになるのですが、その際の反省として
- CocoaPodsはgemであることを説明できなかった
- 当時はbundlerへの理解が乏しかったのでそれも正しく説明できなかった
- 入れることによるメリットが説明できなかった
ということがあったので、今後同じ場面に遭遇しても説明できる何かが欲しいと思い、Qiitaに記事を書いた感じです。
「CocoaPods インストール」 とググると
sudo gem install cocoapods
みたいな方法が紹介されていることが多く見受けられます。おおよそRubyをつかった開発の現場ではあまり見られないやり方です。
個人開発ならまだしも、チーム開発やバージョン管理で違うMacで持続的に行われていく開発においては、この形での利用は不便さを感じますし、私のようにバージョンの差異に悩まされてつらい思いをすることが多いと思います。
ただ、これはひとえにgemやそれらの使い方を知る機会がないがゆえの話だと思うので、普段Rubyを使わないiOSエンジニアにbundlerやgemの仕組みを知れば、使う使わないも選択できるようになると思います。
これらの記事が、その選択の一助になればいいなと願っています。