複数環境向けのアプリを カジュアルにビルドする

>100 Views

May 21, 24

スライド概要

2024年5月21日に開催された「Android/iOSエンジニア アウトプット MeetUp」で使用した資料です。

profile-image

ウェルスナビ株式会社 技術広報チームの公式アカウントです。

シェア

またはPlayer版

埋め込む »CMSなどでJSが使えない場合

ダウンロード

関連スライド

各ページのテキスト
1.

複数環境向けのアプリを カジュアルにビルドする Takuhiro Muta 2024/05/21 Android/iOSエンジニア アウトプット MeetUp

2.

⾃⼰紹介 牟田 拓広(Takuhiro MUTA) ウェルスナビ株式会社 モバイルアプリ開発チーム / iOS エンジニア ウェルスナビでは ● SIer -> iRidge -> WealthNavi ● iOSに関わること全般 ひとこと ● 蓮ノ空のこと好き好きクラブに入部しました 2 @2024 WealthNavi Inc.

3.

2023/12~2024/1: おまかせNISAが新NISA対応 3 @2024 WealthNavi Inc.

4.

新NISA対応の開発スケジュール 2週間サイクルの定常開発と並⾏して開発‧テストを実施 7月 9月 12月 テスト 新NISA対応アプリ開発 アプリ リリース 1月 本番環境 データ移行 定常開発 リリース ※アプリのみに焦点を当てており、実際には更に細かくスケジュールが切られていました 4 @2024 WealthNavi Inc.

5.

新NISA対応の開発スケジュール 課題 新NISA対応開発でバックエンドが⼤きく変わるため、定常開発と別で環境を⽴てる必要 があった その他にも別環境が必要な中型‧⼤型案件が複数並⾏して動いていた アプリ側の対応 各開発⽤ブランチ内でAPIの向き先を変えることで解決 5 @2024 WealthNavi Inc.

6.

新NISA対応の開発スケジュール 課題2 アプリのリリースがバックエンド及び新NISAのリリースに先駆けて実施されるため、 アプリの向き先を適宜変えてテストする必要があった ● 定常開発アプリ x 旧NISA環境 ● 定常開発アプリ x 新NISA環境 ● ● 新NISA対応アプリ x 旧NISA環境 新NISA対応アプリ x 新NISA環境 アプリ側の対応 6 @2024 WealthNavi Inc.

7.

新NISA対応の開発スケジュール 課題2 アプリのリリースがバックエンド及び新NISAのリリースに先駆けて実施されるため、 アプリの向き先を適宜変えてテストする必要があった ● 定常開発アプリ x 旧NISA環境 ● 定常開発アプリ x 新NISA環境 ● ● 新NISA対応アプリ x 旧NISA環境 新NISA対応アプリ x 新NISA環境 アプリ側の対応 🤔 7 @2024 WealthNavi Inc.

8.

解決策 ● WealthNaviではCI/CDにBitriseを使⽤ ○ 環境変数を渡せる + 実⾏時に上書きできる ● 環境変数でAPIの向き先を上書きする仕組みを⽤意 ○ リリースビルドに影響しないこと 8 @2024 WealthNavi Inc.

9.

環境変数でAPIの向き先を上書きする仕組み 1. コードベースの修正 a. Build Phasesで環境変数を読み込む b. 読み込んだ環境変数をコード内で読み込む 2. CI/CDワークフローの効率化 a. Slash CommandsでSlackからBitriseのワークフローを実⾏できるように b. 向き先をFirebase App Distributionのリリースノートに記載 9 @2024 WealthNavi Inc.

10.
[beta]
1. コードベースの修正
a.

Build Phasesで環境変数を読み込む
読み込んだ環境変数をInfo.plistに追加する
※本番環境での事故を防ぐためリリースビルドでは実⾏しないようにする

if [ $CONFIGURATION = "Release" ]; then
exit 0
fi
if [ "$API_HOST_NAME" != '' ]; then
echo "Inject API host to \"${API_HOST_NAME}\""
/usr/libexec/PlistBuddy -x -c "add INJECTED_API_HOST_NAME string \"${API_HOST_NAME}\""
"${BUILT_PRODUCTS_DIR}/${WRAPPER_NAME}/Info.plist" || \
/usr/libexec/PlistBuddy -x -c "set INJECTED_API_HOST_NAME \"${API_HOST_NAME}\""
"${BUILT_PRODUCTS_DIR}/${WRAPPER_NAME}/Info.plist"
fi

10

@2024 WealthNavi Inc.

11.

1. コードベースの修正 b. Info.plistから追加された環境変数を読み込む 環境変数が無い場合は元々の向き先を使う private let injectedApiHostName = Bundle.main.object(forInfoDictionaryKey: "INJECTED_API_HOST_NAME") as? String private var defaultApiHostName: String { if let injectedApiHostName { injectedApiHostName } else { noninjectedApiHostName } } 11 @2024 WealthNavi Inc.

12.

1. コードベースの修正 ※ ローカルで向き先を変える時はデバッグ⽤xcconfigファイル上で上書きする // APIの向き先を変える時はコメントアウトを外して値を書き換える // ※ Revert before merging into develop! // API_HOST_NAME = api.injected.example.com 12 @2024 WealthNavi Inc.

13.

2. CI/CDワークフローの効率化 a. Slash CommandsでSlackからBitriseのワークフローを実⾏できるようにすること でエンジニア以外でもテスト⽤ビルドの配信をできるようにした Bitriseでwebhook URLを取得 App Settings → Integrations → Webhooks 13 @2024 WealthNavi Inc.

14.

2. CI/CDワークフローの効率化 a. Slash CommandsでSlackからBitriseのワークフローを実⾏できるようにすること でエンジニア以外でもテスト⽤ビルドの配信をできるようにした iOSで使用している Slack AppにSlash Commandsを追加 14 @2024 WealthNavi Inc.

15.

2. CI/CDワークフローの効率化 a. Slash CommandsでSlackからBitriseのワークフローを実⾏できるようにすること でエンジニア以外でもテスト⽤ビルドの配信をできるようにした env[API_HOST_NAME]で向き先を変えられる slash-command stg_qa_build host.to.inject.example.com stg_qa_build 15 @2024 WealthNavi Inc.

16.

2. CI/CDワークフローの効率化 b. 向き先をFirebase App Distributionのリリースノートに記載する fastlane内で設定している APIの向き先を取得して firebase_app_distributionのrelease_notesにセットする def fetch_api_host(env: :stg) # 環境変数から取得 # xcconfigから取得 # ServerConfiguration.swiftから取得 end 16 @2024 WealthNavi Inc.

17.

CI/CDワークフローの効率化 b. 向き先をFirebase App Distributionのリリースノートに記載する リリースノートに向き先が書かれているので テスターもどのビルドを使用すればいいのか把握しやすくなった v3.9.4 branch API host 17 @2024 WealthNavi Inc.

18.

まとめと今後の課題 まとめ ● 複数の開発が並⾏していて、それぞれ別環境に向けなければいけない時に コードベースに⼿をいれることなく向き先を変えられるようにした ● Slackからワークフローを実⾏できるようにし、その際にも向き先を変えられるように した ● iOSエンジニアでなくてもテスト⽤ビルドを配信できる⼟台が作れた 今後の課題 ● Slash Commandsだとまだ⾮エンジニアにはとっつきにくい ○ GUIベースでワークフローを実⾏できるようにしたい ● Androidでも同じようなことができるか検証 ○ 環境変数を使った値の上書き 18 @2024 WealthNavi Inc.

19.

ご清聴ありがとうございました 19 @2024 WealthNavi Inc.

20.

【重要な注意事項】 ● 本資料は、断定的判断を提供するものではなく、情報を提供することのみを⽬的としており、いか なる種類の商品も勧誘するものではありません。最終的な決定は、お客様⾃⾝で判断するものと し、当社はこれに⼀切関与せず、また、⼀切の責任を負いません。 ● 本資料には将来の出来事に関する予想が含まれている場合がありますが、それらは予想であり、ま た、本資料の内容の正確性、信頼性、完全性、適時性等を⼀切保証するものではありません。本資 料に基づいて被ったいかなる損害についても、当社は⼀切の責任を負いません。また、当社は、新 しい情報や将来の出来事その他の情報について、更新⼜は訂正する義務を負いません。 ● 本資料を利⽤することによりお客様に⽣じた直接的損害、間接的損害、派⽣的損害その他いかなる 損害についても、当社は⼀切の責任を負いません。 商号等:ウェルスナビ株式会社 金融商品取引業者 関東財務局長(金商) 第2884号 加入協会:日本証券業協会 一般社団法人日本投資顧問業協会 20 @2024 WealthNavi Inc.