LoginSignup
3

More than 3 years have passed since last update.

チームで fastlane と Ruby のバージョンを揃えるための環境構築(rbenv, rbenv-gemset, bundler)

Last updated at Posted at 2018-12-14

お世話になります。@sutchanです。
何を書こうかなと今年を振り返っていると、そういえばこの夏、fastlaneを導入したのでした。
何にって、サービスローンチから4年が経過したCafeSnap(Android版)に。

せっかくなので、導入時に書いたREADME.mdをベースに、導入手順を公開しちゃいたいと思います!
それでは、早速見ていきましょう。

はじめに

導入手順までを書いていますので、fastlaneの具体的なlane(Fastfile)は登場しません。

前提

ここから読み進めるにあたり、技術的前提は以下の通りでございます :bow_tone1:

  • Mac
  • Homebrewがインストールされていること
  • ビルド対象となるAndroidプロジェクトがあること

そういえば、App Bundleはまだ対応していない。

導入の背景

  • もともと Deploygate を使った配信をしていた(ShellScriptでgradlewを呼んでビルドし、apkをcurlでpost)
  • Fabric(Crashlytics) も使っているから、Fabric Betaにまとめたほうが効率良いし
  • 配信対象の端末も設定しやすい

もともとは、こんな感じのスクリプトで、Deploygateに配信していました。
これで全く問題ありませんでした。

#!/bin/sh

# 出力先
OUT_DIR="./app/build/outputs"
# apkディレクトリ
APK_DIR="apk"
# apk名称
APP="app-dev-debug.apk"
# DEPLOYGATEのAPIトークン
DEPLOYGATE_API_TOKEN="xxxxxxxxxx"

# リリースノート作成
vi "${OUT_DIR}/release.txt"

# 存在しない場合はとりあえず空ファイル用意しておく
if [ ! -f "${OUT_DIR}/release.txt" ]; then
    touch "${OUT_DIR}/release.txt"
fi

# リリースノートメッセージ
release_msg=`cat ${OUT_DIR}/release.txt` 

# ビルドする
./gradlew assembleDevDebug

# DeployGateに送信
curl "https://deploygate.com/api/users/my-user-name/apps" -F "file=@${OUT_DIR}/${APK_DIR}/${APP}" -F "token=${DEPLOYGATE_API_TOKEN}" -F "message=${release_msg}"

しかしながら、状況は変わってくるわけですね。
Fabric Betaにまとめてしまいたくなったわけです。
そこで、fastlaneの出番がやってまいりました。

要件

  • チーム内でRubyとfastlaneのバージョンを揃えられる
  • 別のPCに移行するときも、比較的簡単にセットアップしたい
  • fastlaneのバージョンアップをするときに、既存の環境を汚さず動作確認したい

そう、これができるのが、rbenvrbenv-gemsetbundler、3種の神器です。

環境構築

rbenv, rbenv-gemsetのインストール

rbenvとrbenv-gemsetをインストールします。
この2つを導入することで、以下の2つを実現します。

  • rbenv: Rubyをシステムに依存せず、開発ディレクトリでは指定したRubyバージョンを使用する
  • rbenv-gemset: 依存するgemをセットとして管理することで、開発用セットやSandboxセットなどバージョンアップの検証等で効果を発揮する
$ brew install rbenv
$ brew install rbenv-gemset

ZSH を使用している場合、.zshrc に以下の文言を追加します。
追加後、シェルにログインし直すなどして、パスを有効化します。

export PATH="$HOME/.rbenv/bin:$PATH"
eval "$(rbenv init - zsh)"

rbenvのセットアップ

Rubyのバージョンを指定して、rbenvでインストールします。
ここでは、2.5.1を指定しました(当時最新)。

$ rbenv install 2.5.1

Androidアプリのプロジェクトのディレクトリに移動し、ディレクトリのRubyバージョンを2.5.1に設定します。

# 既に.ruby-version のファイルが存在する場合、実行しなくても良い
$ rbenv local 2.5.1

この、rbenv local 2.5.1を実行すると、.ruby-versionファイルにたった1行2.5.1と書かれたファイルが生成されます。

.ruby-versionは、git管理に入れてください(チーム内でRubyのバージョンを揃えるためです)

上のコマンドを実行したら、プロジェクトのディレクトリで、Rubyのバージョンが2.5.1になることを確認します。

$ cd ~
$ ruby -v
ruby 2.3.7p456 (2018-03-28 revision 63024) [universal.x86_64-darwin17]

$ cd cafesnap-android
$ ruby -v
ruby 2.5.1p57 (2018-03-29 revision 63029) [x86_64-darwin17]

↑ ちゃんと、プロジェクトのディレクトリでは、2.5.1になっていることを確認できました!

gemsetのセットアップ

gemsetを使用することで、Gemのアップデートをテストしやすくします。
ここでは、デフォルトのgemset “cafesnap-android” を作成するプロセスを見てみます。

$ rbenv gemset create 2.5.1 cafesnap-android

コマンドのパラメータは、rbenv gemset create <version> <setname>です。
そのため、プロジェクトで使用するRubyのバージョンが上がったら、gemsetも作り直すことになります……。

上のコマンドで作成したgemsetを、有効化します。

$ echo cafesnap-android > .rbenv-gemsets
$ rbenv gemset active
cafeapp-android global

ここで、.rbenv-gemsetsというファイルに、たった1行cafesnap-androidというセット名を保存しました。
こうすることで、次回からrbenv gemset activeのコマンドを打つだけで、gemsetがcafesnap-androidのセットになります。
.rbenv-gemsetsは、git管理に入れてください。
いや、チーム内でセット名を共通にするなら入れる必要があります。なので、入れなくても問題はありません。

bundlerのインストール

チーム内でfastlaneのバージョンを揃えるため、パッケージマネージャをインストールします。
あとからジョインしたメンバーも、同じバージョンですぐ環境構築できるようになります。

gem install bundler

動作確認。
rbenvが有効なので、rbenvを経由しないとbundlerは実行できません。

$ cd ~
$ bundle -v
zsh: command not found: bundle
$ rbenv exec bundle -v
rbenv: bundle: command not found

$ cd cafesnap-android
$ rbenv exec bundle -v
Bundler version 1.16.3
$ bundle -v
zsh: command not found: bundle

上の通り確かに、rbenvを経由していないと、bundlerは実行できませんね。

依存パッケージのインストール

それでは、rbenv経由でbundlerを実行し、Gemfileに記述してあるパッケージをインストールします。これでほぼ終了です!

まず、fastlaneに依存していることをGemfileに記述します。

Gemfile
# frozen_string_literal: true

source "https://rubygems.org"

git_source(:github) {|repo_name| "https://github.com/#{repo_name}" }

gem "fastlane", "~> 2.101"

保存したら、以下のコマンドを実行します。これでインストール完了 :thumbsup:

$ rbenv exec bundle install

実行すると、fastlaneがインストールされ、さらに、インストールしたバージョンを管理するGemfile.lockというファイルが生成されます。
GemfileGemfile.lockは、git管理に入れてください(チームメンバーのfastlaneのバージョンを揃えるためです)

fastlaneがインストールされていることを確認

Fastlaneはbundle経由で実行する必要があるので、以下のコマンドで確認する。(遠回りな気もしますが……)

$ rbenv exec bundle exec fastlane --help

これでfastlaneのインストールが完了!お疲れ様でした!

最後に、CafeSnapとは……

個性光るカフェを探せる、投稿型のカフェアプリ。
こだわりの検索機能で、電源のあるカフェ、Wi-Fiのあるカフェなど、好みのカフェを見つけられます。
Facebook、Twitter、LINEのアカウントがあればすぐ利用できます。
お気に入りのカフェを見つけたら、ぜひ投稿してくださいね!

IMG_0130.PNG IMG_0131.PNG

iOS版 → https://itunes.apple.com/us/app/cafesnap/id910848942
Android版 → https://play.google.com/store/apps/details?id=jp.co.allabout.cafesnap

まとめ

ここでは、プロジェクトで使用するRubyのバージョン、fastlaneのバージョンを揃えるための手法として、
rbenvrbenv-gemsetbundlerを用いた環境構築を紹介しました。
皆さんの開発環境がより良くなることを願っております。
そして、自分のプロジェクトももっと改善していきたいので、こんな方法もあるよなどアドバイスありましたら、教えていただけますと幸いです :bow:
それでは皆さん、良いお年を。

あ、アドベントカレンダーだった。それでは、メリークリスマス!:christmas_tree::tada:

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
3