本セッションの登壇者
セッション動画(YouTubeチャンネル登録もお願いします。)
「GitHub ActionsでEASを使って複数環境へのCDを実現する」というタイトルでLTさせていただきます。よろしくお願いいたします。
まずは簡単に自己紹介いたします。suzuと申します。株式会社FUNEEで取締役兼CTOを務めています。猫を3匹飼っていて、ブリティッシュファッションがとても好きです。もしファッションが好きな方がいましたら、ぜひTwitterで繋がりましょう!
弊社ではCONCRUというサービスを開発/運営していたり、計56万人フォロワーがいるファッションメディアを運営していたり、アパレル企業のSNSの運用コンサルも行っていたりします。


自己紹介はこの辺にして、本題に入る前にExpoとEASについて軽く説明します。
Expo & EASについて
まずExpoですが、React Nativeアプリケーションを開発するためのプラットフォームとして提供されているものになります。iOSの証明書周りなどを自動管理してくれたり、OTAアップデートができたり、QRコードを読むだけで実機動作チェックができたりします。ただ、制約として、ネイティブ系のライブラリを使う場合は、Expoが対応しているものしか原則使えません。たとえば画像表示でよく使われるreact-native-fast-imageが使えなかったりします。

次はEASについてです。EASは2020年末にExpoからリリースされました。ExpoとReact Nativeのためのクラウドデプロイサービスです。1コマンドでビルドからストア配信(Apple / Google)までできたりしますし、クラウド上でビルドされるので環境構築が不要です。また、Expoで原則使えなかったライブラリが使えます。先ほど使えないと説明したreact-native-fast-imageは、EASを使えば使えます!

GitHub ActionsでEASを使って複数環境へのCDを実現する
本題に戻りますが「GitHub ActionsでEASを使って複数環境へのCDを実現する」について話していきます。
リリースフローの全体図です。順を追って説明します。

GitHub Actionsを手動発火
まず、GitHub Actionsを手動で発火させます。このとき、bumpさせるtypeを選ぶのですが、bump typeはpatchかminorかmajorを選択できるようにしており、それに合わせてバージョンをbumpします。

「Run workflow」を押下するとActionsが発火します。まずセマンティックバージョニングでbumpされて、次にbuildNumberがbumpされ、最後にリリースのプルリクエストが生成されます。

ただ、buildNumberのbumpっていうところでハマりまして。この辺に関して詳しく説明します。
そもそもEASにはbuildNumberをbumpさせるという機能がなく(2022年5月時点)、Expoのコミュニティでもけっこう議論されていて、みんな困っていました。
現時点で解決策としては、bumpするコードを自分で書いて、Actionsで発火させる方法しかありませんでした。ただ、できればEAS側でbumpするような機能が欲しいので、feature requestを投げておきました。

話を戻しますが、このbuildNumberのbumpに関しては解決できたので、Actionsは次にリリースのプルリクエストを生成します。
リリースPRを手動マージ
プルリクエストは2つ作られるんですけども、ひとつがDevelop向けのプルリクエストで、もうひとつがmainブランチへのプルリクエストになっています。内容を確認してマージします。

マージするとActions側からEASのビルドとStoreへの配信が行われます。だいたい30分から40分ぐらいかかるので、Actionsのタイムアウトには注意してください。
このビルドとStoreへの配信を実現しているコマンドはたった1種類です。
$ eas build —profile {環境名}
でビルドフレーバーを切り替えて各環境への配信が実現できています。

最後にActions側からreleaseとtagが自動で切られて、リリースフローはこれで終了となります。

自動化の振り返りと今後のEASへの期待
今回、自動化できた点とできなかった点がありまして、App Store Connectへのビルド/デリバリはできたんですけど、App Store Connectへのメタデータのアップロードと、レビューの提出は自動化ができませんでした。
今後、EASに期待したい点として、fastlaneのdeliverのようにメタデータをAppStoreに送信できるようになってほしいなと思っています。また、審査の提出が自動化ができるようになるといいなと考えています。
ちなみにエンジニア、PdM、UIデザイナーを積極的に探していますので、もし興味がありましたら、カジュアル面談いたしましょう!

以上でLTは終了になります。ご清聴ありがとうございました。