Upgrade to Pro — share decks privately, control downloads, hide ads and more …

キッティングツールによる自動化でセットアップ時間を1時間から3分に短縮

 キッティングツールによる自動化でセットアップ時間を1時間から3分に短縮

GO TechTalk #27 タクシーアプリ『GO』AndroidでのreCAPTCHA導入・WebADBでの自動化 で発表した資料です。

■ YouTube
https://www.youtube.com/live/QN57jX1P-ik?si=e7nXI9IHJswlfksY&t=1245

■ connpass
https://jtx.connpass.com/event/320032/

GO Inc. dev

June 21, 2024
Tweet

More Decks by GO Inc. dev

Other Decks in Programming

Transcript

  1. © GO Inc. 2 自己紹介 GO株式会社 ユーザーシステム部2G / 國峯 久幹

    Androidエンジニアとして10年以上アプリ開発しています。 2023年2月にGO株式会社に入社し、タクシーアプリ『GO』 の開発を担当しています。 入社して軽音部に入部しギターを再開しました。
  2. © GO Inc. タクシー乗務員が使用する乗務員端末 5 • Android端末で、Androidアプリが動 作している • 特定の機能に特化した業務専用端末と

    なっている ◦ ホーム画面に戻れない ◦ アプリの更新を管理できる など ◦ スーパーのPOSレジや飲食店の オーダーシステムのタブレットな ども業務専用端末のひとつ
  3. © GO Inc. Index 1. 手動キッティングにおける課題 2. adbコマンドを活用したキッティングの自動化 3. 課題1:

    タップが必要な設定だが、タップする座標がわ からない 4. 課題2: キッティングツールを配布しなければいけない 5. 結果 6. まとめ 6
  4. © GO Inc. • 普段私達が使用しているスマホを、特定の機能に特化した業務専用端末 にすること ◦ アプリをインストール ▪ Google

    Playに公開されていないため手動でインストールする ▪ 機能ごとにアプリが分かれている場合もあり、複数のアプリを インストールすることもある ◦ 必要に応じて端末の様々な設定を行う ▪ 画面消灯無効 ▪ Wi-Fi接続 ▪ SIMセットアップ キッティングとは 8
  5. © GO Inc. 1. 電源管理をするなど業務アプリには不要な挙動をとるアプリを消す 手動キッティング実例(1/2) 9 $ adb shell

    pm uninstall -k --user 0 com.aaaaa.bbbbbbbbbb $ adb shell pm uninstall -k --user 0 com.ccccc.dddddddddd 2. GoogleドライブからアプリA、アプリBのAPKをダウンロードしてインス トール 3. Bアプリに通知へのアクセス権付与 $ adb shell am start -a android.settings.ACTION_NOTIFICATION_LISTENER_SETTINGS 4. GoogleドライブからアプリC、アプリDのAPKをダウンロードしてインス トール
  6. © GO Inc. 5. アプリAにデバイスマネージャー権限付与 手動キッティング実例(2/2) 10 $ adb shell

    dpm set-device-owner com.xxxxx.yyyyy.MyDeviceAdminReceiver 以下のエラーが発生する場合はすべてのアカウント (Gmail、Facebookな ど)を削除 java.lang.IllegalStateException: Not allowed to set the device owner because there are already some accounts on the device 6. ビルドもしくは、DeployGateからアプリEをインストール 7. 起動中の画面で止まってしまった場合 ・パーミッションが付与されていない可能性がある ・端末設定アプリから「電話」のパーミッションを付与する
  7. © GO Inc. 手動キッティングにおける課題 11 • 非エンジニアも同じ手順でやっている ◦ adbコマンドを使うため環境構築からしなければいけない •

    複数のAPKをインストールしなければならず、dev/staging/prodのよう な環境ごとにAPKが存在し、GoogleドライブやDeployGateからインス トールAPKを探すのが大変 • 手順が複雑になるとヒューマンエラーが発生し手戻りの可能性が増える
  8. © GO Inc. • 非エンジニアも同じ手順でやっている ◦ adbコマンドを使うため環境構築からしなければいけない • 複数のAPKをインストールしなければならず、dev/staging/prodのよう な環境ごとにAPKが存在し、GoogleドライブやDeployGateからインス

    トールAPKを探すのが大変 • 手順が複雑になるとヒューマンエラーが発生し手戻りの可能性が増える 手動キッティングにおける課題 12 • 1時間以上かかる • エンジニアのサポートが必要になる
  9. © GO Inc. • Engineer Challenge Week ◦ 半期に2週間、日々のプロダクト開発から離れ、普段できない技術 チャレンジや時間があればやってみたいこと、新たな知識の獲得な

    ど、スキルアップのための期間を与えられるという施策 • この施策を使い誰でも簡単にキッティングが出来るように全自動化する ことにした ※詳細は https://go-on.goinc.jp/n/n03e1ca85aacd 「Engineer Challenge Week」でキッティングの自動化に挑戦 14
  10. © GO Inc. Must have • 非エンジニアでも迷いなく完了できること • 環境構築しないでツールのみで完結すること Nice

    to have • ユーザーの操作を出来るだけ減らし全自動化にすること キッティングの自動化の目標 15
  11. © GO Inc. • Android Debug Bridge(adb)を使用する • adbを使用してシェルスクリプトを書く ◦

    シェルスクリプトにキッティングしたいことを記述していくと簡易 的なキッティングツールになる 自動化の方法 16
  12. © GO Inc. 簡易的なキッティングツール(adbコマンドによる自動化)(2/6) ## キッティングのための設定 # ディスプレイスリープ無効 adb shell

    settings put system screen_off_timeout 0 # ディスプレイ回転無効 adb shell settings put system accelerometer_rotation 0 # 提供元不明のアプリを許可 adb shell settings put secure install_non_market_apps 1 18 setup.sh
  13. © GO Inc. 簡易的なキッティングツール(adbコマンドによる自動化)(4/6) ## キッティング # 設定 ユーザー補助を開く adb

    shell am start -a android.settings.ACCESSIBILITY_SETTINGS # 少し待つ sleep 3 # 座標x:500, y:700をタップする adb shell input touchscreen tap 500 700 # 他にもあれば続けて設定 ... 20 setup.sh
  14. © GO Inc. 簡易的なキッティングツール(adbコマンドによる自動化)(5/6) ## キッティングのための設定を戻す # 提供元不明のアプリを許可しない adb shell

    settings put secure install_non_market_apps 0 # ディスプレイ回転有効 adb shell settings put system accelerometer_rotation 1 # ディスプレイスリープ1分 adb shell settings put system screen_off_timeout 60000 21 setup.sh
  15. © GO Inc. adb shell input touchscreen tap x y

    タップが必要な設定だが、タップする座標がわからない 端末の状態で選択する位置が変わる 27 • 赤枠をタップしてONにしたい
  16. © GO Inc. • 赤枠をタップしてONにしたい adb shell input touchscreen tap

    x y タップが必要な設定だが、タップする座標がわからない 端末の状態で選択する位置が変わる 座標での指定が難しい 28
  17. © GO Inc. • ボタンなど表示されている文字からUIを検索しクリックすることができ る • AccessibilityService APIで設定を変更するアプリをキッティング用ア プリとして作る

    • キッティング時にインストール&実行し、キッティング完了時にアンイ ンストールする 解決策としてAccessibilityService APIを使用 29
  18. © GO Inc. • WebADBとはウェブブラウザからadbプロトコルを使ってデバイスをコ ントロールできる • TypeScriptで書かれたライブラリ(ya-webadb)の関数の      await adb.subprocess.shell(command)

    を使用することでシェルで実行 していたadb shell xxxxxと同等の実行ができる 解決策としてWebADBを使う 33 • Webページを開いて実行すると最新のバージョンでキッティングできる
  19. © GO Inc. • 1時間かかっていたものが3分(最初操作して待つだけ)で出来るように なり目標を達成できた • 新入社員の方が躓くことなくキッティング完了しているのを見て挑戦し て良かったと思った •

    機種やメーカーやOSバージョンで設定画面の内容が違っていることが あり、個別の処理を実装しなければいけなかったりするので、不特定多 数の機種をキッティングする場合のエラーハンドリングは大変になると 感じた(※今回は特定の端末のみ) キッティングの自動化に挑戦してみて 36
  20. © GO Inc. まとめ 38 • 手動キッティングにおける課題 ◦ キッティング作業が1時間以上かかる ◦

    エンジニアのサポートが必要 • adbコマンドを活用したキッティングの自動化 • 自動化における2つの課題の解消 ◦ AccessibilityService APIを利用し端末状態に依存しないタップ制御 ◦ WebADBを活用しWebアプリとしてキッティングツールを配布 • 自動キッティングの実現 ◦ キッティング作業が3分に短縮