どうもみなさんこんにちは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
コマンドにてビルド、アップロード、ダウンロード、インストールを行う -
gemfile
gemfile.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が上手く動作しない、というのを管理して解消してくれる。 -
gemfile
gemfile.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
も完璧にする!というのもまた先が長い話になるので、チーム開発規模のプロジェクトに介入する際は最低限入れておくべき部分かなと感じました。
という訳で、知見を広げるいい経験でした。ビルドの際、何かライブラリ系のエラーにエンカウントした場合はこの辺にも何か原因があるのでは、という発想をもてるようにもなったかと思うのでとてもいい機会だったと思います。