はじめまして。ひやまです。インフラエンジニアをやっています。
社内でスマートフォンの実機検証やデザインチェックのたびに端末のところまで移動したくない!とか、地理的に離れた拠点からも端末のチェックしたい!との声があったのでOpenSTFを導入してみました。

OpenSTFってなに? どう便利になるの??

OpenSTF(Smartphone Test Farm 以下STF)とは、サイバーエージェント社のオープンソースで、Android端末をリモート操作できるアプリケーションです。
STFを導入すれば自席に居ながらにして、ブラウザから端末の操作が可能です。
ブラウザチェックもアプリのアップロードも、もちろん機器のデバッグもできちゃいます。
これで、わざわざデバッグ機を取りに行く必要もありません!
端末がなくて作業が滞ってしまうなんてことも解消される・・・はず!

ただし、iOSには対応していません。(iOSでの利用はいろいろ難しいところがあるのだろう・・・)

実際に操作してみた動画がこちら

準備

STFをインストールするサーバーのOSはMacOS Xがおすすめのようですが、今回はリソースの都合もあり、
普段触り慣れているCentOSにインストールしてみました。
サーバーもとりあえずのお試しインストールということで性能が良さげなPCを使用しています。
サーバー(PC)のスペックとOSのバージョンは以下のとおり。

【マシンスペック】
CPU:Intel(R) Core(TM) i7-2600 CPU @ 3.40GHz
Memory:8GB
【OS】
CentOS7.2.1511(Core)
(CentOS6だとSTF1.1がうまく起動しなかった・・・)

STFは7100番ポートを使うので、あらかじめポートを開放します。
ここではデフォルトで有効になっている『firewalld』を止めちゃいます。

# systemctl stop firewalld
# systemctl disable firewalld

また、STFのインストールに必要なパッケージをyumで入れておきます。

# yum install wget git gcc gcc-c++

インストール

Node.js

Node.jsをインストールします。ただし、yumでインストールするとバージョンが古く、
STFのインストール要件(0.12以上)を満たさないのでGitHubからnvmをcloneしてインストールします。

# git clone https://github.com/creationix/nvm.git ~/.nvm

# source ~/.nvm/nvm.sh
# nvm install 0.12.7
# node -v
v0.12.7

RethinkDB

RethinkDBをインストールします。現時点での最新版は2.2.4になります。
インストールはRethinkDBのwebサイトの記載に従って行います。

# wget http://download.rethinkdb.com/centos/7/`uname -m`/rethinkdb.repo -O /etc/yum.repos.d/rethinkdb.repo

# yum install rethinkdb
# rethinkdb -v
rethinkdb 2.2.4 (GCC 4.8.3)

その他必要なパッケージ

パッケージのインストールの前にEPELリポジトリをインストールします。

# wget https://dl.fedoraproject.org/pub/epel/7/x86_64/e/epel-release-7-5.noarch.rpm

# rpm -ivh epel-release-7-5.noarch.rpm

リポジトリを追加したら、STFのインストールに必要なパッケージをyumでインストールしていきます。
インストールパッケージとバージョンは以下のとおり。

・ADB(Android Debug Bridge) ⇒ 1.0.31
・GraphicsMagick ⇒ 1.3.20
・ZeroMQ ⇒ 4.0.5
・Protocol Buffers ⇒ 2.5.0
・yasm ⇒ 1.2.0
・pkg-config ⇒ 0.27

ZeroMQはzeromq-develも入れておかないと、STFのインストールに失敗しました。
pkg-configはデフォルトで入っているので入れてません。

# yum install android-tools
# yum install GraphicsMagick
# yum install zeromq
# yum install zeromq-devel
# yum install protobuf
# yum install yasm

STF

npmを使ってSTFをインストールします。バージョンは最新のVer1.1.1です。

# npm install -g stf

※旧バージョンを入れたい場合は# npm install -g stf@バージョンNoでインストールできる。

つかってみよう

STFの起動

RethinkDBとSTFを起動していきます。
サーバーにはAndroid端末をUSBハブ経由で事前に接続しておきます。
※Android端末の開発者向けオプションからUSBデバッグを有効にすることを忘れずに。
ただし、どちらも普通に起動するとプログラムがフォアグラウンドで実行されるので、nohup &
バックグラウンド実行するようにします。

# nohup rethinkdb &
# nohup stf local --public-ip IPアドレス &

RethinkDBとSTFの起動後に、ブラウザからhttp://IPアドレス:7100/に接続
ログイン画面が表示されたらIDとメールアドレスを入力

ログインすると、接続端末の一覧画面が表示される

利用したい端末をクリックすると端末の画面が表示されて、操作ができるようになった

おまけ

USBハブの選定

STFで利用する端末が多くなることを見越して、別途USBハブを購入しました。
端末の充電を含めた消費電力を考慮して電源供給が安定したセルフパワー型の製品の中から、
ANKER USB3.0 7ポートハブを選定しています。

nvmとNode.jsをターミナル起動時に有効化

.bashrcか.bash_profileに下記を追記して、ログイン時にnvmとNode.jsを有効化させるようにします。

source ~/.nvm/nvm.sh
nvm use 0.12.7

STFの起動オプションにドメイン名指定

DNSが引ける状態で、stfコマンドの--public-ipオプションにドメイン名を指定してもSTFは起動しました。
ブラウザの表示も問題なくできます。

# stf local --public-ip ドメイン名

あとがき

当初はCentOS6とSTF Ver.1.0.9の構成で動かしていたのだが、USBハブから端末を抜き差しすると
認識しなくなるという現象がたまに発生してた。
STFの再起動で解消されるけど、インストール手順のどこかに問題があったのかも・・・
CentOS7とSTF Ver1.1.1の構成ではそういった事象は発生しなくなり、今のところ安定稼働中です。