Slide 1

Slide 1 text

2024/09/30(Mon) Nobuhiro Ito GO Inc. App Store Connect APIで 作業時間を増やそう

Slide 2

Slide 2 text

© GO Inc. 2 自己紹介 GO株式会社 開発本部 ソフトウェア開発統括部 フルスタックエンジニア / 伊藤 伸裕 Webシステム、モバイルアプリの受託開発、環境系ベンチャーでのエンジニアリ ングマネージャー経験を経て、2023年9月にGO株式会社にフルスタックエンジニ アとして入社。 ベースはiOSアプリエンジニアですが、アプリ・バックエンドを問わずGOのシス テム全体を渡り歩きながら開発をしています。

Slide 3

Slide 3 text

© GO Inc. アプリエンジニアのお仕事ってどんなことがありますか? 3 アプリエンジニアのお仕事

Slide 4

Slide 4 text

© GO Inc. 4 アプリエンジニアのお仕事ってどんなことがありますか? ・コードを書く ・ドキュメントを書く ・ミーティングに出る ・技術的な問い合わせ対応 アプリエンジニアのお仕事

Slide 5

Slide 5 text

© GO Inc. 5 アプリエンジニアのお仕事ってどんなことがありますか? ・コードを書く ・ドキュメントを書く ・ミーティングに出る ・技術的な問い合わせ対応  ・バグ等の調査  ・申請・テスト配布の調整 アプリエンジニアのお仕事

Slide 6

Slide 6 text

© GO Inc. 6 アプリエンジニアのお仕事ってどんなことがありますか? ・コードを書く ・ドキュメントを書く ・ミーティングに出る ・技術的な問い合わせ対応  ・バグ等の調査  ・申請・テスト配布の調整 アプリエンジニアのお仕事 だいたい割り込み作業 できるだけ減らしたい…!

Slide 7

Slide 7 text

© GO Inc. 7 アプリエンジニアのお仕事ってどんなことがありますか? ・コードを書く ・ドキュメントを書く ・ミーティングに出る ・技術的な問い合わせ対応  ・バグ等の調査  ・申請・テスト配布の調整 アプリエンジニアのお仕事 App Store Connect APIで これを改善するお話しです

Slide 8

Slide 8 text

© GO Inc. App Store Connect・Apple Developer Portal のAPI これらのサイト上の作業のほぼすべての操作にアクセスできる。 (証明書発行、規約同意など、一部できないこともある) iOSアプリのCIを設定したことがあれば、 fastlaneなどを通して知らず知らず使っているかも。 8 App Store Connect API

Slide 9

Slide 9 text

© GO Inc. 9 App Store Connectの作業はだいたい自動化できます 割り込み作業・手作業を減らして作業時間を増やそう!

Slide 10

Slide 10 text

© GO Inc. GOでは検証用のアプリ配布に全面的にTestFlightを利用 検証アプリの利用者登録のため、パブリックリンクを使っていたが、 すべて「匿名」になってしまう 退職時にどのユーザーを削除するかわからなくなる課題があった。 メールアドレスを都度登録する運用だと、エンジニアの作業が増える… 10 TestFlightのメンバー管理 それ、App Store Connect APIでできるよ

Slide 11

Slide 11 text

© GO Inc. TestFlight参加できる画面をApp Store Connect APIで作成 権限のあるスタッフは 参加ページからボタンクリックだけで TestFlightに自分で 参加できるようになった 誰が登録しているかもわかるので、 退職処理も確実にできるように。 11 TestFlightセルフサービス参加 Google Cloud Identity-Aware Proxy App Engine Staffs App Store Connect API (TestFlight)

Slide 12

Slide 12 text

© GO Inc. ストアに申請後、審査通過したかの問い合わせが来る時がある (hotfix時とか、特に聞かれがち) そのたびに作業を中断して App Store Connect見に行かないといけない… 12 申請の進捗をよく聞かれる それ、App Store Connect APIでできるよ

Slide 13

Slide 13 text

© GO Inc. 申請状態をリアルタイムに確認できるページを作って、 「気になる時はこちらを見てください」と伝えた。 Slack通知botもあわせて開発した 聞く側・聞かれる側、双方のコミュニケーションコストを減らすことができた 13 申請状態を確認するページを作った

Slide 14

Slide 14 text

© GO Inc. ストア掲載用のスクリーンショットの数がとても増えてきた タクシーアプリ『GO』では ・1解像度あたり、7枚の画像 ・1言語あたり、iPhone向け・iPad向けで6解像度 ・ストア掲載言語は4言語 なんと168枚の画像登録が必要… この数を間違いなく登録するのは骨が折れる… (しかも最近差し替えの依頼が多い) 14 ストアスクリーンショットの管理 ※アプリ自体は日英2言語対応 それ、App Store Connect APIでできるよ

Slide 15

Slide 15 text

© GO Inc. ストア掲載用のスクリーンショットをGitHubで管理、 GitHub ActionsでCIできるようにした 大量のスクリーンショットを確実に登録できるようになった GitHubに過去掲載したスクリーンショットの履歴も残せるようになった 15 GitHub Actionsでストア画像更新ワークフロー 画像管理用リポジトリ スクリーンショット コミット GitHub Actionsから App Store Connect APIで 一括更新 App Store Connect

Slide 16

Slide 16 text

© GO Inc. App Store Connect APIを使いこなすには、 普段から使える環境を用意するのが大事 ドキュメントをブックマークに入れておく https://developer.apple.com/documentation/appstoreconnectapi/ 認証を通したcurlを使えるようにラッパーコマンドを作っておく 16 App Store Connect APIと普段から仲良く $ ./asccurl -s "https://api.appstoreconnect.apple.com/v1/apps/XXXXXXXXXX" | jq ".data.attributes" { "name": "GO / Taxi app for Japan", "bundleId": "com.dena.automotive.taxibell", (中略) }

Slide 17

Slide 17 text

© GO Inc. App Store Connect APIの活用でエンジニアの作業負担を減らした事例と 常日頃から効率化のアイデアを出すためのヒントをお伝えしました。 より本質の作業に時間を使えるように、 普段から自動化・効率化のチャンスを見計らいましょう! 17 まとめ

Slide 18

Slide 18 text

© GO Inc. 18 Appendix: asccurlの実装 source "https://rubygems.org" gem "jwt" #!/bin/bash export ISSUER_ID="00000000-0000-0000-0000-000000000000" export KEY_ID="0000000000" SERVICE_NAME="AppStoreConnect_AuthKey" export KEY=$(security find-generic-password -a $KEY_ID -s $SERVICE_NAME -w \ | xxd -p -r | rev | cut -c 1- | rev) token=$(bundle exec ruby <