どうもみなさんこんにちはiOS青二才です。
未経験でiOS開発現場に入ると、思いの外今まで頑張って技術をあげてきたSwift以外にも様々なものに出会い自分の知見・技術レンジが狭いことに気付きます。
現場に入る前も幅広く開発をしてる人は出会うことがあったり使用したりの経験があると思いますが、私はそんなことはなかったので、「あれ、rubyさん介入してるやんなんやこれ」ってなった物のメモをおきます。
Ruby
- 日本産のスクリプト言語
- Webサイト制作に使用
- Webアプリ制作に使用
- スマホアプリ開発に使用
- サーバーサイド開発に使用
まずiOSアプリ開発とRubyとの関係性と知る
色々と掘り下げる前に、iOSアプリ開発に置いてのRubyとの関係性を知るべきだと思いました。
Rubyという言語の一部の特徴は上にあげたものたちですが、サーバーサイド側の処理を担うことが多々あります。
ここでまず一つ、「開発に置いてサーバー連携はrubyで、、、」という繋がり1が生まれます。
そしてMacにはデフォルトでRubyが導入されているのですが、サーバー側処理とか個人開発で使わなきゃ出会いないよね、と思っていたのですがところがどっこい。実は触れてました。
以下で説明するgemですが、実はCocoapodsをインストールする際に使用していたんですね。最近は既存のプロジェクトを改修したりすることばかりで、新規でインストールする機会を逃していたので完全に忘れていました。
よくよく調べてみるとCocoapodsはRubyで実装されているらしく、インストールはRuby経由ということになります。
ライブラリ / パッケージ
プロジェクトのreadmeをみるとgem installとかbundle install とかそういうのを見かけることがあります。
調べてみると、gemとはRubyGemsが公開しているRubyのパッケージ管理ツール。とかいろんなところで説明されています。正直、意味がすんなり入ってこなかったので調べました。
まずここで一つはっきりさせておきたいのが
ライブラリ = パッケージ
ということです。
初歩的なことかとは思いますが、新しいものを理解するときに事前に脳内にある知識と説明を照らし合わせたときに少しでも差異があると混乱を招きますので、この際にはっきりさせました。
iOS開発で使用するCocoapods Carthageはライブラリ管理ツールと認識していたので、パッケージ管理?また違うもの?っとなってしまったのでここで認識を共通化させたかった次第です。
以下の説明では、同等のものと認識してください。
なおここではライブラリという言葉で統一化します。
Gem
-
RubyGemsが提供するRuby用のライブラリ管理ツール
-
Rubyにおいてgemとはライブラリのこと(太郎さん、花子さんを人間と呼ぶ感じ) - ターミナルにて
gemコマンドで使用 -
gemコマンドにてビルド、アップロード、ダウンロード、インストールを行う -
gemfilegemfile.lockというのが作成されるので、gemfile内にライブラリを記載して使用
まずRubyGemsですが、これはそもそものgemを使用できる環境、または管理するシステムです。これを
gemを使用するにはまずそれ自体のインストールから始めます。丁寧なreadmeの場合はだいたいプロジェクトをビルドするまでのフローが書いてあると思いますので、それに従ってください。
こいつがSwiftでいうCocoapodsなどの管理ツールに該当するのではと思います。
参考
https://ja.wikipedia.org/wiki/RubyGems
https://qiita.com/sumyapp/items/5ec58bf3567e557c24d7
bundler
gemの依存関係とバージョンを管理するためのツール。との説明が多いですがこの表現も紐解くと
-
bundlerもgemの一つ
- 複数の
gemの使用の間で生まれるgemA version1 と gemB version1が上手く動作しない、というのを管理して解消してくれる。 -
gemfilegemfile.lockに準拠して管理 -
gemの管理をするgem、それがbundler
ということになります。bundlerを入れましたら、基本的にはbundle installなどbundlerを介してgem達のインストールを行うのが良いとされているようです。
参考
https://qiita.com/oshou/items/6283c2315dc7dd244aef
https://techacademy.jp/magazine/19840
rbenv
rbenvは、複数のRubyのバージョンを管理してくれて、かつプロジェクトごとのRubyのバージョンを指定して使うことができるツールです。Rubygemsがライブラリ管理ツールだとしたら、こちらはRuby管理ツールとでもいうんですかね。Homebrewなどでインストールして使います。
rbenvでRubyのバージョン操作等を行うことがあるかどうかわわかりませんが、だいたいgem bundlerとセットで使用されていることが多いはずです。
ちなみアールベンブとかアールビーエンブという呼び方をするそうです。
まとめ
登場したのは以下のもの達
-
rbenv-Rubyのバージョンを管理 -
gem(RubyGems)-Rubyのライブラリ管理ツール -
bundler-gem(ライブラリ)の一つで、gemの相互性などの管理をする
iOSアプリ開発でRubyを扱っていた場合ほぼほぼこれらを導入しているケースが多いのかなと思います。
Rubyも完璧にする!というのもまた先が長い話になるので、チーム開発規模のプロジェクトに介入する際は最低限入れておくべき部分かなと感じました。
という訳で、知見を広げるいい経験でした。ビルドの際、何かライブラリ系のエラーにエンカウントした場合はこの辺にも何か原因があるのでは、という発想をもてるようにもなったかと思うのでとてもいい機会だったと思います。