yoneapp@iPhoneアプリ開発

スタートアップの支援を行うiOS&Railsエンジニアのブログ

【第1回】モバイルCIダベリNightに参加しました! #CIダベリNight

モバイルCIダベリNightに記録を取ってくれる人枠で参加したので記事を作成します。
開催場所はTECK LAAB PAAKでした。RECRUITさん、ありがとうございます!

ci-daberi.connpass.com

今回は、発表してから全員でダベル(ディスカッションする)方式です。そのため、この記事では発表者と参加者の発言が混ざっています。

iOS のツイッタークライアント feather の CI の歴史

feather for twitterを開発している合同会社コベリンの@mironalさんによる発表です。

qiita.com

テストの量や方針

  • テストは今は1200個ぐらい
  • featherはUIテストは一切しない方針

毎晩ビルドをiTunes Connectにアップしている件

  • 使用不可のメソッドなどにより申請できない問題を早く検知できるメリットがある
  • fastlaneのdeliverを使って実現している
  • fastlane内でALTOOLSが使われている

※ Android用のfastlaneに当たるsupplyはβで出てきているが、一部バグありだそうです。

費用面でTravis/CircleCIを使わずMac miniを使っている

  • 費用面を考えるとマシンを1個買ったほうが安く上がる
  • 会場からも費用面に関しては同様の意見が上がった
  • Android 版 featherのテストではCircleCIだと40分、Mac miniで10分程度で終わることがあった
  • 今回使用したMac miniは10万程度でスペックはこちら

CirclCI 価格表


TravisCI 価格表

f:id:yoneapp:20151128154637p:plain
Travis CI - Test and Deploy with Confidence

※ Travisは中の人に連絡すると、費用がかかるがオンプレなど色々なメニューがあるらしい

開発ツールを使ってリモート開発

@rhoboroさんによる発表です。発表資料はこちらです。

GoogleAnalytics試験用のバイナリをDeploygate配信が難しい

  • 配布バージョン数が300個ぐらいあるので、いつのバージョンが試験用かわからない
  • アプリがアップデートされていない人の端末からGAを飛ばしてしまうリスクが有る
  • 別アプリとして配信すればよいのではという意見が上がった
  • アプリアイコンに文字入れなどして変更すれば分かりやすくなる

本番リリース直後に毎回違うURLを設定したバイナリが必要

  • デバッグメニューで差し替えさせられるようにすればいい
  • デバッグメニューは絶対につけたほうが良いという意見も
  • DNSで接続先を分けて専用アクセスポイントで対応する手もある ※ 事故注意

Slackを自動化して、ともかく情報を流すのはバットパターン

  • slackの通知に自動化してすべの情報を流しても追えなくなる
  • 自動化するなら、人間用チャンネルと分ける
  • 自動で流れる情報の重要度は低く感じてしまい見逃してしまう
  • 人がまごころを込めて送ったメッセージは重要だと思われやすい
  • プルリク通知に意味は薄い、プルリク放置通知に意味がある
  • botを導入するならキャラ設定をつけて愛着を持たせるですです

Android/iOS CI事情

今回もよく話題に出てきたDeployGate@bilyakudanさんによる発表
 
speakerdeck.com

  • AndroidのCIはrelease keyなどをどうCIに渡すかsetupが大変
  • AndroidのCIはGradleを使うとビルドはかなり楽
  • iOSのCIも詳しくはないけどsetup大変そう

AndroidのCIでrelese keyをどうやって渡すのか

  • relese keyをgitなどの管理内に含みたくない
  • relese keyはバイナリなのでbase64で変換して流しこむ
  • 他の方法として、専用のrelese keyを別に用意して流しこむ

AndroidのCI重い問題

  • シミュレータを立ち上げてのテストは重い
  • JVMでAndroidっぽく動くやつでやると早くなる
  • Realmを使っていたりするとJVMでのテストは出来ない
  • テストはモックしてRealmに依存したテストを書くのをやめるべきか

iOSのCI

  • CircleCIかTravisかJenkins
  • CircleCIはiOSはβこれから課金が入る

おまけ


IOS開発での特殊納品携帯によるリリースの自動化が出来なかった話

www.slideshare.net

  • 請負側は納品コードが提供できない
  • 依頼側はリリース用の証明書が提供できない
  • .aライブリを納品して先方でリリースビルドすることにより解決

Androidみたいに後からipa署名できませんか?

  • fastlane sighを使えば解決できる(解決されちゃった!)
  • [app] => [署名] => [ipa]なので、appを納品して先方に署名ビルドしてもらう
  • 詳しくは発表者の方の後日記事のモバイルCIダベリNightに行ってきたをご参照ください

Androidのテスト重い問題

  • Genymotionなどを使うと改善するなどの意見
  • お金があれば実機をいっぱい繋いだサーバーみたいなので解決する
  • シミュレータで実行しても実機では特にカメラ周りなどで端末固有バグがあるので注意
  • Androidのユニットテストを高速化する Robolectric編 - Qiita
  • Androidのテストは、工夫しないとともかく遅い
  • CIをしていて偶に落ちるので、其の時はCIしててよかったと思う

我が人生に於けるCI遍歴から考えるCI導入の分水嶺

シーサー株式会社@psideさんによる発表

docs.google.com

  • 納品チームからのビルド要請が激しかったのでビルドをCI化した
  • 開発メンバと関係者が多いオフショアの案件ではCI導入が喜ばれた
  • 要件次第であるが一人〜少人数開発の場合CI化のメリットは少ないかも

一人開発におけるCIのメリット

  • 一人開発者だと導入のメリットを感じないかもね
  • デプロイまで自動化するなら、一人開発者でもメリットがあるかも

参加者でXcode Botを運用している所は無かった

  • githubでstatus表示できないなど連携が弱い
  • ビルド状態の表示画面が綺麗だが、実用性としては弱い
  • アプリの社内配布などのシステムが付いているが他社ソリューションで代用可能

今後UIのスクリーンショット差分によるCIを行いたい

  • UIのテストは難しいので代替ソリューション
  • 会場からは、クックパッドが実際にやっているといった意見が出た
  • コスト的には5〜10年ライフサイクルのアプリでないとコスパが悪いのではという意見
  • 差分アラートが出るだけで確認がかなり楽になるのではという意見がありました
  • jenkinsのプラグインで出来るようです

その他トピック

  • TravisCIはリポジトリ公開が多く、トラブルも類似travis.ymlを見つけることで解決しやすい
  • テスト会社に出す方法もあるけど、ともかく費用が高い
  • AWS Mobile Fram(現金の力)VS ベータテスター(ユーザの力)
  • jenkins2.0はどう思うのか?みんな様子見中

まとめ

今回、テーマとしては費用的な問題、導入のコストパフォーマンス、また特に実行にかかる時間などの話題が、重要だからこそ繰り返し出てきたように思います。また周辺テーマとしてSlackの話も繰り返し出てきました。

CIダベリNightは、発表からのダベリ(ディスカッション形式)により、より多くのナレッジを会場から引き出せる面白い勉強会だったと思います。また、悩んでいる部分を共有することで、実際に問題が解決され発表者にバリューが還元される良い循環も見れました。

今回、私はCIナレッジがなかったので記録係で参加させていた来ました。これから半年間?私もナレッジをためて次回は何らかを還元できるように頑張りたいと思っています。最後に、主催者・発表者、そして参加者の皆さん、ありがとうございました!!