エンジニア

Device Farmerを使用してリモートでもAndroid端末を共有する

投稿日:2021年3月11日 更新日:

こんにちは! 名古屋スタジオサーバーエンジニアの鈴木です。

リモートワークとなってからずいぶんと期間が過ぎています。

メリット、デメリットは様々ですが、開発用端末を(物理的に)共有できないことは大きな問題でした。

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バージョンやバッテリーの状態、ディスプレイなどを確認できます。

実機を直接操作するより楽になる部分もあり、端末の共有だけでなく作業面でもとても役立っています。
先に記載したようにインストールと起動はとても簡単ですので、ご興味あれば実際に試してみると面白いと思います!

採用情報

ワンダープラネットでは、一緒に働く仲間を幅広い職種で募集しております。

-エンジニア
-,

© WonderPlanet Inc.