こんにちは! 名古屋スタジオサーバーエンジニアの鈴木です。
リモートワークとなってからずいぶんと期間が過ぎています。
メリット、デメリットは様々ですが、開発用端末を(物理的に)共有できないことは大きな問題でした。
Device Farmerを使って実機をリモート操作できるように
そこでDevice Farmerを社内のマシンで起動し、 そこにAndroid端末をぶら下げて リモートワークでもAndroid端末を共有できるようにしてみました。
これによってリモートワークでの開発中にも開発端末を共有でき、とても助かっています。
Macにdokcer-composeで楽々インストール
インストールと起動については、リポジトリにdocker-composeファイルが用意されていましたので、それを少し変更して使用しています。
環境構築なども行わなくてよく、とても簡単に起動できました。
Mac miniで起動しています
ホストマシンはMac miniを使用しています。Dockerで環境を作ってあるため、Mac miniでも起動できました。
前提として、Dockerとadbのインストールが必要
Dockerを使用するため、事前にDocker Desktop for Macをインストールしておきます。
またUSBデバイスが上手く認識されないようで、adbサービスもコンテナではなくMacで動作させて、そこに接続させています。
docker-composeの変更
ベースは先ほどのdocker-compose.yamlになりますが、いくつか社内の環境に合わせて変更しました。
変更内容は以下になります。
container_nameを未設定にする
container_nameを指定すると、複数のディレクトリで起動させるときに同じ名前が使えなくなるのでコメントアウトしました。
rethinkdbおよびstfのサービスにある項目をコメントアウトしました。
rethinkdb:
# container_name: rethinkdb
stf:
# container_name: stf
rethinkdbのデータをカレントディレクトリに保存する
上のcontainer_nameもですが、データなども含めてカレントディレクトリで完結させたいと思ったので、rethinkdbのデータをカレントディレクトリに保存しました。
rethinkdb:
image: rethinkdb:2.3
restart: unless-stopped
volumes:
# - "rethinkdb-data:/data"
- "./data:/data"
volumesの項目は不要になったためコメントアウトしました。
#volumes:
# rethinkdb-data: {}
adbコンテナを停止
adbはMacにインストールしたものを使用するため、コメントアウトしました。
# adb:
# container_name: adb
# image: devicefarmer/adb:latest
# restart: unless-stopped
# volumes:
# - "/dev/bus/usb:/dev/bus/usb"
# privileged: true
stfコマンドのオプションを変更
次の対応をさせるために、起動オプションを変更しました。
- ホストマシンのadbを使用する (--adb-host host.docker.internal )
- 端末を切断するたびにインストールされたアプリを消さない (--no-cleanup)
- 自動回転をオンにしない (--no-screen-reset)
command: stf local --adb-host host.docker.internal --public-ip xxx.xxx.xxx.xxx --provider-min-port 7400 --provider-max-port 7500 --no-cleanup --no-screen-reset
xxx.xxx.xxx.xxxは公開するIPアドレスを指定します。
起動する
docker-compose upすれば起動します。
アクセスしてみる
http://xxx.xxx.xxx.xxx:7100 にアクセスすると、Device Farmerにアクセスできます。
これでリモート環境からでも社内の端末が操作できるようになりました!
上の画像はブラウザでアクセスしたDevice Farmerの画面です。
ブラウザ上で端末の操作を行うことができます。
これだけでも非常に有用ですが、そのほかにも次のような機能をよく使っています。
adbのリモート接続
手元のPCから端末へ、adbのリモート接続が可能です。
「Dashborad > Remote debug」に、adb connectコマンドが記載されています。
adb connect xxx.xxx.xxx.xxx:xxxx
このコマンドをそのまま手元のPCで実行すると、リモート操作している端末がadb devices
で認識されるようになります。
スクリーンショットの取得
「Screenshots」では端末のスクリーンショットを取得できます。画面の状態などを共有したい時に便利です。
端末にあるファイルを表示、ダウンロード
「Fire Explorer」より端末内のファイルを表示できます。またそのファイルをダウンロードもできます。
端末の状態を確認
「info」より、AndroidのOSバージョンやバッテリーの状態、ディスプレイなどを確認できます。
実機を直接操作するより楽になる部分もあり、端末の共有だけでなく作業面でもとても役立っています。
先に記載したようにインストールと起動はとても簡単ですので、ご興味あれば実際に試してみると面白いと思います!