よちよち向けに、iOS開発のCIとテスト配信をざっくりまとめてみました！

#はじめに
この記事は[iOS #2 Advent Calendar 2020](https://qiita.com/advent-calendar/2020/ios-2)の11日目の記事です！🙋‍♂️

先日JPHacksというハッカソンに参加していた際,テスト配信やCI/CDツールを初めて触る機会があり、そこでの学びやわかったことなど初歩的な内容をまとめてみたいと思い記事にしました！


#####この記事の対象者
・CIについて全く知らない人
・アプリのテスト配信に興味がある人

#####構成
・CIについて
・iOSアプリ開発におけるCI/CDサービスについて
・iOSアプリ開発におけるテスト配信ツールについて

また今回 [iOSアプリ開発　自動テストの教科書](http://qiita.com/) が非常に参考になったので今回の記事を見てCI/CDやテスト配信について興味を持った方がいれば購入してみることをお勧めします！

#CIとは??
>CI / CDは Continuous Integration / Continuous Delivery の略で日本語ではそれぞれ、継続的インテグレーション、継続的デリバリーと呼ばれています。 Kent Beck, Cynthia Andres による書籍 Extreme Programming Explained: Embrace Change にて発表された開発のプラクティスの一つに CI が含まれており、アジャイル開発の浸透とともに広まりました。

ネットの記事などでは、難しそうなワードがたくさんあったので今回は一旦
CI　＝　アプリのビルドを継続的に行ってフィードバックを素早く受け取れるようにすること
って認識を持ってもらえれば大丈夫です！

###CI導入すると何が嬉しい？？
#####①開発者の生産性の向上
CIの導入メリットの一つには開発者の生産性の向上があります

例えば、最新のコードをGithub上に上げたら普通それが別の環境でも動くのか、バグがないか、などを手動で確認していかなければなりませんが、CIを使えばこの一連の作業を全て自動化することができます🙆‍♂️

#####②リスクの軽減
またもう一つのメリットとして、リスクの軽減があります
CIツールを使い自分の環境以外でビルドチェックすることによって、アプリが自分の環境外でも正常に動くかどうか、問題が起きていないかなどをチェックでき、また問題が起きた際にすぐに気がつくことができ、開発におけるリスクを減らすことができます🙆‍♂️

#モバイルアプリ開発でのCIサービス例

iOSアプリ開発では利用できるCI/CDサービスが多く存在していmすが、今回はよく利用しているのをみるBitriseとCircleCIについて簡単に説明します！

##Bitrise

<img width="400" alt="mojikyo45_640-2.gif" src="https://assets-global.website-files.com/5db35de024bb983af1b4e151/5e6f9ccc3e129dfd8a205e4e_Bitrise%20Logo%20-%20Eggplant%20Bg.png">

Bitrise はモバイルアプリ向けのCI/CDサービスです。日本開催のモバイルアプリ向けのイベントもよく開催しており、Tiwtter等でもよく見かけます！（キャラクター可愛い）

特徴
・ワークフローなどをGUI上で操作して設定できる
・UIがかわいい（大事）
・無料プランだとビルド時間に制限がある
・キャッシュを用いてビルド時間を短縮できる

##CircleCI
<img width="400" alt="mojikyo45_640-2.gif" src="https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcSIQVao3wWbwkxifln0c7eXQLWJdcb_1moq2w&usqp=CAU">

CircleCIは一言でいえば、Saas型のCI/CDサービスです。Saas型であるという点が特徴です。
またモバイルだけでなくWebなど幅広いCI/CDに対応しています

特徴
・ワークフローをコードで管理できる
・大規模な場合CircleCIの方が金額が安くなる場合がある
・設定内容が複雑化するとCircleCIの方が管理がしやすい

などがありました、BitriseやCircleCIの導入例はいくつか参考になる記事があったので下記にまとめておきます


[モバイルアプリ開発のCI/CDにBitriseを採用した理由](https://tech.stmn.co.jp/entry/2020/03/31/110000)
[iOSで構築しているCIのWorkflow紹介](https://techblog.zozo.com/entry/ios-bitrise-workflow/)
[私がAndroid CI/CDを Bitrise・CircleCIに 移行して得られたもの](https://speakerdeck.com/tadashi0713/cdwo-bitrisecirclecini-yi-xing-sitede-raretamofalse?slide=27)

#テスト配信ツールについて
通常ビルドしたアプリを配布する場合、プロビジョニングファイルの設定などでiOS端末にアプリをインストールすることはかなり面倒です。

そういった際にテスト配信ツールはビルドしたアプリを簡単に各端末に配信することができるサービスです.

###テスト配信ツールを導入すると何が嬉しい？？
#####開発フィードバックの高速化
テスト配信ツールを導入することで、自分がGithub上に上げたコードを他のエンジニアやビジネスサイドの人達のスマホに素早く配信することができます。またそのことにより、開発のフィードバックなどを高速で回すことが可能になります！

#テスト配信ツール
|サービス|対応プラットフォーム|公式URL|
|:---|:---|:---|
|TestFlight|iOS|https://developer.apple.com/jp/testflight/|
|DepolyGate|iOS/Andoloid|https://deploygate.com/|
|Firebase App Distribution|iOS/Andoloid|https://firebase.google.com/docs/app-distribution|

##TestFlight
[公式URL](https://developer.apple.com/jp/testflight/)
<img width="400" alt="mojikyo45_640-2.gif" src="https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F453700%2Fd5f10407-e184-1ab4-21fb-85bf81b2f316.png?ixlib=rb-1.2.2&auto=format&gif-q=60&q=75&s=e58f3b8d7fca2f8ee36f34a178d07435">

TestFlghtは、Apple公式のアプリ配信サービスです。

特徴として
・テスターに外部テスター、内部テスターがある点
・外部テスターの場合審査に時間がかかる点
・端末登録不要な点

>|テスターの種類|アプリ審査|人数|ユーザー条件|
|:---|:---|:---|:---|
|内部テスター|なし|25人まで|AppStoreConnectユーザー|
|外部テスター|あり|10000人まで|誰でもOK！|
>iOSアプリ開発　自動テストの教科書参照

##DeployGate

[公式URL](https://deploygate.com/)
<img width="400" alt="mojikyo45_640-2.gif" src="https://deploygate.com/assets/features/features_devices-c72999971fe8feea052776501b372b47.png">


DeployGateはiOS/Andoroidの両プラットフォームに対応しているアプリ配信サービスです。

特徴
・開発チームが日本人の為ドキュメントが読みやすい
・個人開発者から企業向けまで複数プランがあり
・配信側とインストールする側両方でアカウント作成する必要あり
・複数バージョン配布できて、配布先指定できる(テスターと開発者用に分けれる)
・コマンド一つで端末のUDID登録〜再配布が可能（[とても便利でした](https://docs.deploygate.com/docs/cli-add-devices)）

##Firebase App Distribution

<img width="400" alt="mojikyo45_640-2.gif" src="https://i.ytimg.com/vi/SiPOaV-5j9o/maxresdefault.jpg">

Firebaseが提供する、テスター向けのアプリ配信ツールです

特徴
・ドキュメントが読みやすい（テスター用のドキュメントは英語のみ）
・端末のUDID登録〜再配布を手動で行う必要あり(Bitriseなどを組み合わせて自動化可能)
・他のツール含めFirebaseで完結させることができる(料金含め)

テスト配信に関してもいくつか参考になる記事があった為下記に記載しておきます。

[[iOS] TestFlight の特徴 と DeployGate との違い](https://dev.classmethod.jp/articles/testflight-deploygate/)
[DeployGateで開発中アプリの配布をスッキリさせたはなし。]
(https://buildersbox.corp-sansan.com/entry/2020/03/12/110000)
[テスト配信ツールの選定]
(https://www.hfoasi8fje3.work/entry/2018/05/08/201517)
[Firebase App Distributionを使用してiOSアプリを配布する]
(https://dev.classmethod.jp/articles/ios-firebase-distribution/)
[Firebase App Distribution で Android アプリを配布してみた]
(https://dev.classmethod.jp/articles/firebase-app-distribution-android-app/g)
[Bitrise, GitHub, DeployGateを連携させ、全自動でアプリをビルドして配信するCI/CDシステムを作る](https://qiita.com/kyoro353/items/200d5b34b9f5805dd43a)
#まとめ
最終的に自分は開発していく中で　Bitrise × DeployGateを選択しました。
理由としては
Bitrise
→GUI上で簡単に操作できてわかりやすかった。
DeployGate
→開発者が日本人の為ドキュメントがかなり丁寧　かつCI導入前から簡単なコマンドのみで全て操作が完結する
といった感じです

また実装時は[こちらの記事](https://qiita.com/kyoro353/items/200d5b34b9f5805dd43a)を参考にしました！

以上、 [iOS #2 Advent Calendar 2020](https://qiita.com/advent-calendar/2020/ios-2)の11日目の記事でした！

拙い内容ですが、この記事をきっかけにCIやテスト配信について興味を持ってくれるよちよちの方がいれば幸いです！😄

明日は @benzene  さんの記事です！