Slide 1

Slide 1 text

© GO Inc. キッティングツールによる自動 化でセットアップ時間を1時間か ら3分に短縮 國峯 久幹

Slide 2

Slide 2 text

© GO Inc. 2 自己紹介 GO株式会社 ユーザーシステム部2G / 國峯 久幹 Androidエンジニアとして10年以上アプリ開発しています。 2023年2月にGO株式会社に入社し、タクシーアプリ『GO』 の開発を担当しています。 入社して軽音部に入部しギターを再開しました。

Slide 3

Slide 3 text

© GO Inc. タクシーアプリ『GO』といえば 3

Slide 4

Slide 4 text

© GO Inc. タクシー乗務員が使用する乗務員端末 4

Slide 5

Slide 5 text

© GO Inc. タクシー乗務員が使用する乗務員端末 5 ● Android端末で、Androidアプリが動 作している ● 特定の機能に特化した業務専用端末と なっている ○ ホーム画面に戻れない ○ アプリの更新を管理できる など ○ スーパーのPOSレジや飲食店の オーダーシステムのタブレットな ども業務専用端末のひとつ

Slide 6

Slide 6 text

© GO Inc. Index 1. 手動キッティングにおける課題 2. adbコマンドを活用したキッティングの自動化 3. 課題1: タップが必要な設定だが、タップする座標がわ からない 4. 課題2: キッティングツールを配布しなければいけない 5. 結果 6. まとめ 6

Slide 7

Slide 7 text

© GO Inc. 1. 手動キッティングにおける 課題 7

Slide 8

Slide 8 text

© GO Inc. ● 普段私達が使用しているスマホを、特定の機能に特化した業務専用端末 にすること ○ アプリをインストール ■ Google Playに公開されていないため手動でインストールする ■ 機能ごとにアプリが分かれている場合もあり、複数のアプリを インストールすることもある ○ 必要に応じて端末の様々な設定を行う ■ 画面消灯無効 ■ Wi-Fi接続 ■ SIMセットアップ キッティングとは 8

Slide 9

Slide 9 text

© 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をダウンロードしてインス トール

Slide 10

Slide 10 text

© 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. 起動中の画面で止まってしまった場合 ・パーミッションが付与されていない可能性がある ・端末設定アプリから「電話」のパーミッションを付与する

Slide 11

Slide 11 text

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

Slide 12

Slide 12 text

© GO Inc. ● 非エンジニアも同じ手順でやっている ○ adbコマンドを使うため環境構築からしなければいけない ● 複数のAPKをインストールしなければならず、dev/staging/prodのよう な環境ごとにAPKが存在し、GoogleドライブやDeployGateからインス トールAPKを探すのが大変 ● 手順が複雑になるとヒューマンエラーが発生し手戻りの可能性が増える 手動キッティングにおける課題 12 ● 1時間以上かかる ● エンジニアのサポートが必要になる

Slide 13

Slide 13 text

© GO Inc. 2. adbコマンドを活用した キッティングの自動化 13

Slide 14

Slide 14 text

© GO Inc. ● Engineer Challenge Week ○ 半期に2週間、日々のプロダクト開発から離れ、普段できない技術 チャレンジや時間があればやってみたいこと、新たな知識の獲得な ど、スキルアップのための期間を与えられるという施策 ● この施策を使い誰でも簡単にキッティングが出来るように全自動化する ことにした ※詳細は https://go-on.goinc.jp/n/n03e1ca85aacd 「Engineer Challenge Week」でキッティングの自動化に挑戦 14

Slide 15

Slide 15 text

© GO Inc. Must have ● 非エンジニアでも迷いなく完了できること ● 環境構築しないでツールのみで完結すること Nice to have ● ユーザーの操作を出来るだけ減らし全自動化にすること キッティングの自動化の目標 15

Slide 16

Slide 16 text

© GO Inc. ● Android Debug Bridge(adb)を使用する ● adbを使用してシェルスクリプトを書く ○ シェルスクリプトにキッティングしたいことを記述していくと簡易 的なキッティングツールになる 自動化の方法 16

Slide 17

Slide 17 text

© GO Inc. 簡易的なキッティングツール(adbコマンドによる自動化)(1/6) ## 接続 # 再起動する adb kill-server adb start-server # 端末が接続されるのを待つ adb wait-for-device 17 setup.sh

Slide 18

Slide 18 text

© 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

Slide 19

Slide 19 text

© GO Inc. 簡易的なキッティングツール(adbコマンドによる自動化)(3/6) ## キッティング # アプリのインストール adb install xxxxxx.apk # 少し待つ sleep 3 # 他にもあれば続けてインストール ... 19 setup.sh

Slide 20

Slide 20 text

© 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

Slide 21

Slide 21 text

© 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

Slide 22

Slide 22 text

© GO Inc. 簡易的なキッティングツール(adbコマンドによる自動化)(6/6) ## 接続終了 # USBデバッグを無効 adb shell settings put global adb_enabled 0 # 終了 adb kill-server 22 setup.sh

Slide 23

Slide 23 text

© GO Inc. 簡易的なキッティングツールが完成したが、課題がまだある 23 ● 課題1:タップが必要な設定だが、タップする座標がわからない ● 課題2:キッティングツールを配布しなければいけない

Slide 24

Slide 24 text

© GO Inc. 3. 課題1: タップが必要な設定だが、 タップする座標がわからない 24

Slide 25

Slide 25 text

© GO Inc. ● 赤枠をタップしてONにしたい タップが必要な設定だが、タップする座標がわからない 25

Slide 26

Slide 26 text

© GO Inc. ● 赤枠をタップしてONにしたい タップが必要な設定だが、タップする座標がわからない adb shell input touchscreen tap x y 26

Slide 27

Slide 27 text

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

Slide 28

Slide 28 text

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

Slide 29

Slide 29 text

© GO Inc. ● ボタンなど表示されている文字からUIを検索しクリックすることができ る ● AccessibilityService APIで設定を変更するアプリをキッティング用ア プリとして作る ● キッティング時にインストール&実行し、キッティング完了時にアンイ ンストールする 解決策としてAccessibilityService APIを使用 29

Slide 30

Slide 30 text

© GO Inc. 4. 課題2: キッティングツールを配布し なければいけない 30

Slide 31

Slide 31 text

© GO Inc. キッティングツールを配布しなければいけない 31 ● キッティングツールを配布してダウンロードしてもらわないといけない ● adbが使える環境のPCで実行しなければいけない(要環境構築) ● apkの更新の度にキッティングツールを更新しなければいけない

Slide 32

Slide 32 text

© GO Inc. ● WebADBとはウェブブラウザからadbプロトコルを使ってデバイスをコ ントロールできる ● TypeScriptで書かれたライブラリ(ya-webadb)の関数の      await adb.subprocess.shell(command) を使用することでシェルで実行 していたadb shell xxxxxと同等の実行ができる 解決策としてWebADBを使う 32

Slide 33

Slide 33 text

© GO Inc. ● WebADBとはウェブブラウザからadbプロトコルを使ってデバイスをコ ントロールできる ● TypeScriptで書かれたライブラリ(ya-webadb)の関数の      await adb.subprocess.shell(command) を使用することでシェルで実行 していたadb shell xxxxxと同等の実行ができる 解決策としてWebADBを使う 33 ● Webページを開いて実行すると最新のバージョンでキッティングできる

Slide 34

Slide 34 text

© GO Inc. 5. 結果 34

Slide 35

Slide 35 text

© GO Inc. 結果 35 ● 1時間から3分に短縮することができた

Slide 36

Slide 36 text

© GO Inc. ● 1時間かかっていたものが3分(最初操作して待つだけ)で出来るように なり目標を達成できた ● 新入社員の方が躓くことなくキッティング完了しているのを見て挑戦し て良かったと思った ● 機種やメーカーやOSバージョンで設定画面の内容が違っていることが あり、個別の処理を実装しなければいけなかったりするので、不特定多 数の機種をキッティングする場合のエラーハンドリングは大変になると 感じた(※今回は特定の端末のみ) キッティングの自動化に挑戦してみて 36

Slide 37

Slide 37 text

© GO Inc. 6. まとめ 37

Slide 38

Slide 38 text

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

Slide 39

Slide 39 text

文章・画像等の内容の無断転載及び複製等の行為はご遠慮ください。 © GO Inc. 39