ここ数ヶ月、MonkeyRunnerを仕事で使ってみて思ったこと

本エントリーはAndroid Advent Calendar8日目「裏」です。担当は私@rukiadiaが担当させて頂きます。

8日目の表を担当されているのは@tomorrowkeyさん、エントリーはこちらから御覧ください。

本日のお題は「MonkeyRunnerを仕事を使ってみた感想」です。

急ぎ足で書いたので、「読みづらい」とかコメントがあれば遠慮無く言ってください。それでは始めます。



■『MonkeyRunner』ってどんなもの?

思い出語りを始める前に、まずは『MonkeyRunner』について簡単に説明しておきます。

『MonkeyRunner』とはAndroid端末やエミュレータAndroidのコードの外から操作するためのAPIのことです。

これを使うことによって、ロボット操作でPCに繋いだAndroid端末を操作出来ます。
可能な動作は「画面上のボタンを押す」「指定したアプリを起動し、動かす」等、多岐に渡ります。



■それで、その『MonkeyRunner』で何をやってたの?

簡単にいうと、アプリの動作テストをやっていました。

基本的な流れは

  • 「〜の端末で〜のアプリの動作試験をやりたい」という依頼を受ける。
  • テストスクリプトを書く。
  • テストを繰り返し実行し、不具合・バグを見つけ出す。
といったところです。



■なんで『MonkeyRunner』を使うことになったの?

『MonkeyRunner』がアプリのストレステストに向いていたからです。

アプリの基本動作のテストを10回、20回ではなく、100回、200回と繰り返し、潜在的なバグを見つけ出すことも目的の1つでした。

ストレステストを人の手でやろうとすると、それなりの人数が必要になり、人数に応じた人件費がかかります。
また、テスターを集める時間も必要になります。

それで「『MonkeyRunner』で機械的にテストを繰り返せば、その辺りの手間を省けるのでは?」
→「じゃあ使ってみよう」という話になった訳です。



■『MonkeyRunner』を使ってみて良かったところは?


  • Pythonでテストコードが書ける。
  • Javaで拡張プラグインが作れる。
  • 割と簡単にテストが書ける(気がする)。

MonkeyRunnerのテストスクリプトは基本Pythonで書きます。Pythonに慣れ親しんだ人なら、サクサクコードが書けると思います。
自分で欲しいと思った機能はJavaプラグインを作成して追加することも出来たりします(今回は面倒なのでそこまでやりませんでしたけど)。

しかし、率直な感想を言うと、『MonkeyRunner』には結構不満を感じてる部分はあったりします。



■『MonkeyRunner』のどこが不満だったの?


  • そもそも『MonkeyRunner』を使った端末動作が不安定。
  • テストの成否判定方法が画像キャプチャーの比較。
  • 画面上のボタンを押す時、座標を逐一指定しないといけない。

主に不満だったのがこの辺りです。細かい不満を並べ始めたらキリが無くなるので、特に不満に思っている部分のみ列挙しています。

・1つ目:「操作が不安定」


今回、この『MonkeyRunner』を使ってアプリの動作テストを行ったわけですが、まず悩み所となるのが「操作の不安定さ」です。

人の手で端末を触る時のように間髪入れずにタッチ操作をさせる」や「間隔を空けず、連続で文字入力をさせる」といった事を行うと、結構な高確率で操作に失敗します。

こういった連続的な動作を安定させるためには、1つ1つの動作の間に待ち時間を入れると良い感じになります。
例えば、「文字列を入力させたい時は、1文字打つ毎に2秒ほどの待ち時間を取ってから、次の文字を打つ」といった具合です。

・2つ目:「キャプチャー比較」

『MonkeyRunner』のテストの成否判定は単純に「画像比較」で行われています。正常動作時の画面表示の画面キャプチャーを予め用意しておき、実際のテスト結果の画面キャプチャーと比較することで、テストの成否を判断します。

この判断方法の面倒なところは、「違う端末毎に、別々のキャプチャーを用意しないといけない」というところです。
検証端末が増えると、端末ごとに新規のキャプチャーを用意しないといけない手間があるのが、個人的に不満なところだったりします。

・3つ目の「ボタンの座標指定について」

『MonkeyRunner』ではもちろん端末画面上にあるボタンも押せます。どうやって押すのかというと、一々ボタンの座標を指定してあげないといけないのです。

※ちなみに、MenuボタンやBackキーはID指定をするだけで押せます。詳しくはリファレンス参照!!


最初はそれほど手間だと思わなかったんですが、テスト対象の端末が増えてくると、同じアプリを起動していても当然端末ごとにボタンの座標が違うので、スクリプトも端末毎に作り直さないといけない訳です。

これがもう面倒で面倒で・・(´・ω・`)

自分で新たな成否判定方法を開拓するしかないのかと小一時間。



■まとめ

ここまで『MonkeyRunner』について語ってきましたが、自分の中での『MonkeyRunner』について思うことは1つです。



色々と惜しい



この一言に付きます。例えるとするなら、「背中が痒くてかきたいんだけど、微妙に手が届かない」時の感覚・・!!

最近はテストに対する情熱も湧いてきてるし、もう少し研究してみるのもアリかなと思う僕なのでした。

もし、MonkeyRunnerについて詳しい方や、MonkeyRunner以外のイカしたor使えるテストツールをご存知の方がいらっしゃいましたら、情報を寄せていただけると嬉しいです!

以上です。ここまで読んでいただき、ありがとうございました!
明日、9日目の表を担当されるのは@sekitobaさん、裏を担当されるのは@sugimotoakさんです。
応援してます(`・ω・´)ゞ!

Androidのテストツール「Robotium」を使ってみた。

AndroidアプリをRobotiumでテストしてみてみようと思い、公式のチュートリアルの動画を見ながらやってみました。
情報共有も兼ねて、ここに書いておきます。

では、始めます。

★そもそもRobotiumって何?

Androidアプリの操作を実機、またはエミュレータ上でPCから行い、自動テストしてくれるツールです。
テスト自体はJUnitで行います。

★どんな画面操作を行えるの?

・画面のタップ、ロングタップ
・Button、ImageButtonの押下
・Menuキーの選択
・CheckBox、RadioButtonのチェック
・EditTextへの文章入力

などなど・・。全部書いているとキリがないので、詳しく知りたいという方はRobotiumのWikiを参照してみてください。

★で、どうやるの?

Androidテストプロジェクトでテストする時と流れは似てますが、異なる点もあるので
順を追って説明していきます。

・ステップ1

テストしたいアプリのプロジェクトを用意する。

今回は適当なサンプルアプリを作成してテストをやってみます。

アプリの内容としては

PUSH」と書かれたButtonを押すと、「Success」と書かれたTextViewが出てくる」というだけの簡単なものです。

プロジェクト名は「RobotiumSample」とし、画面はデフォルト名のMainActivityのままです。

レイアウト画面はこんな感じ。

・ステップ2

Androidテストプロジェクトを作成する。

1.Eclipseで「File」→「New」→「Android Test Project」の順に選んで、テストプロジェクトを作成します。
2.テストプロジェクト名は「RobotiumSampleTest」としておき、Nextを選択。
3.An Existing Projectにチェックを入れ、先程作ったサンプルプロジェクトを選び、finishで作成完了です。

・ステップ3

テストケースを作成する。

ステップ2で作成したプロジェクト内のsrcフォルダ内に空っぽのパッケージが出来ていると思うので
そこに今回使うテストケースを作成します。

1.パッケージを右クリックし、「New」→「JUnit Test Case」を選ぶ。
2.Nameを「RobotiumSampleTests」と入力。
3.SuperClassに「android.test.ActivityInstrumentationTestCase2」と入力。
※<>内のMainActivityはステップ1で作成したプロジェクトのテスト対象画面です。

4.「setUp()」にチェックを入れ、finishで完了。

画面はこんな感じ。

・ステップ4

テストコードを書く前の下準備。

1.まず、Robotiumを使うためのjarファイルをDLしておきます。

ここから、『robotium-solo-3.5.1.jar』と『robotium-solo-3.5.1-javadoc.jar』の2つをDLしてください。

DLが完了したら、テストプロジェクト内にlibsというフォルダを作成し、DLした2つのjarファイルをそこに入れます。
※libsフォルダにjarファイルを入れておけば、Android Dependencies」フォルダにも自動でjarファイルが追加されます

2.テストプロジェクトのjavaBuildPath設定を行う。

・テストプロジェクトを右クリックし、「Properties」→「JavaBuildPath」の順に選択します。
・「Libraries」→「Add JARs」を選択し、先程libsファイルに入れた『robotium-solo-3.5.1.jar』を選択しましょう。
・『robotium-solo-3.5.1.jar』のjavadoc locationを『robotium-solo-3.5.1-javadoc.jar』に設定します。

下準備は以上で完了です。そろそろコードを書こうと思ったのですが、疲れたので続きは明日にします。
それでは。

デザインについて思うこと

例によって数ヶ月放置してしまいましたが、いつもの事なので華麗にスルー。
久々ですが、たまにはブログを書きます。今回のテーマはAndroidアプリのデザインについての覚え書き。

ここ最近の3,4ヶ月の事なんですが、デザイン寄りの勉強会によく参加することが多くなりました。
この業界に入った当時、「中身(コード)を書くのが自分の仕事だし
デザインのセンスも無いから勉強はしなくていいだろ(ホジホジ」とか思ってた僕がどういう風の吹き回しなんでしょう(苦笑)。

参加するようになった理由は幾つかありますが、主な理由としては

  • デザインの本とか読んで勉強するのが単純に楽しい
  • Android系のデザイン勉強会が増えてきた(気がする)。
  • UIデザイン」や「UX」の勉強はこの先、役に立ってくれる気がする。

といったところです。2番目の理由はあくまで自分の体感ですので、あしからず。
単純に「不勉強な僕が知らなかっただけ」というオチかもしれないです。

3番目の理由が勉強するようになった動機としては一番大きいですかね。
Androidアプリだろうが、IPhoneアプリだろうが、一般的なWebアプリケーションだろうが
それを使うユーザーさんありきのモノです。
例えプログラマー側であっても、「UIデザインやUXの事は全然勉強してません
というスタンスはよろしくないと僕は思います。

※ここで展開している持論はあくまで、社会人2年目の若僧である僕個人の考えです。

ということで、僕が最近よく眺めているサイトをいくつか載せておきますので
奇特な方は見てみてくだしあ。

Android Design(Google公式)
Android Patterns
デザインを学びたい全ての方へ/海外のデザイン学習リソース200選

Androidアプリケーション デザイナーとプログラマーのハッカソンvol.3に行って来ました!

イベント当日から2日経ってしまい、今更な感じがしますが
先週の土曜日にハッカソンに行ってきたので1日の流れを書いて見ることにしました。

ちなみに今回出席したイベント↓

ATND : http://atnd.org/events/28017

開催元である、ブリリアントサービス様のブログ : http://d.hatena.ne.jp/bs-android/20120514/1336998078

今回のハッカソンの趣旨は「デザイナーとプログラマーでチームを組み、半日でAndroidのアプリケーションを作る
というものでした。
そして、Blogタイトルやイベント名にも記載されているように今回で3回目の開催となります。

実は自分は今のところ皆勤賞なのですが、1回目、2回目とアプリを完成させられなかったという苦い経験をしているので
「今回こそはアプリを形にする・・(`・ω・´)!」という目標を胸に秘めての参加となりました。

というわけで、自分の1日の流れを書いていきたいと思います。

注意:長い文章なので、時間に余裕が無い方はブラウザのBackキーを!


★5/12 AM7:40起床

毎回寝坊して時間ギリギリに着いている自分としては珍しく早起きに成功。
時間にも余裕があるし、我が家の愛犬の散歩をしてから渋谷の会場に向かうことにしました。

★AM9:45 渋谷に到着

思ったより家事を済ませるのに手間取り、開始15分前に渋谷に着くという事態に/(^o^)\。
「ま、まあ・・駅から近そうだし間に合うだろう」とこの時はまだ余裕をかましていましたのです。

★AM10:20 道に迷う

完全に道に迷ってしまい、まだ会場に着けていないという非常事態が発生。
※ちなみにハッカソンはAM10:00から

★AM10:35 なんとか会場に到着

冷や汗をかきながら、会場のHPに記載されていたマップを見直しなんとか会場に到着・・!
もう他の参加者の方々は到着されていて、自己紹介も済んでいるという状況でした。

そんな中、僕は空いている椅子に着き、まずは周りの方々にご挨拶。
既に何を作るかを相談されていたようだったので、仲間に入れて頂きました。

ちなみにこのハッカソンではアプリ題材の例が用意されており、以下のラインナップになっています。

1:電卓
2:メモ帳
3:TODOリスト
4:キッチンタイマー
5:ライブウォールペーパー
・・etc
なお、この一覧はあくまで一例であり、これ以外のものを作ってもOKというルールです。


★AM11:00 チーム分け・題材決めが終了

周りで話し合っていた方々とそのままチームを組ませて頂けることになり
自分たちのチームは「TODOリスト」を作ることに決定しました。

チームメンバーは自分含めて4人

・@chan_gamiさん(プログラマー)
・@kodaigoさん(デザイナー)
・@rinaoyagiさん(プログラマー)
・@rukiadia(プログラマー) ※僕です

プログラマー3人+デザイナー1人という構成に。

★AM11:00〜 相談タイム

チームを組んでから知ったのですが、チーム内の自分以外の方々が今回ハッカソン初参加とのことでした!
(自分で話を振ったのですが、素で「えっ!?」とか声が出るくらいびっくりしました・・w)

ということで、僕の過去の苦い経験を活かし
まずは「TODOリストの基本機能を完成させてから、追加機能を実装していく」という方針を提案することに。

発表の際に、アプリが完成していない・・という事態はどうしても避けたかったのです。
チームメンバーの方々も僕の意見に同意してくださり、次は追加機能のアイデア出しをしました。

色々な案が挙がったのですが、最終的に

書いたTODOリストをTwitterにつぶやけるTODOアプリ】に決定しました。

と、ここで一旦昼食タイムへ(´〜`)。

★AM12:30〜 作業割り振り+作業開始

お腹も膨れたし、いざ作業開始。

@chan_gamiさん、@rinaoyagiさんのお二方に「アプリ機能の実装+実装方法の調査」をお願いし
自分はメイン画面を担当、@kodaigoさんには背景やボタンに使う素材の製作をお願いすることに。

しかし、ここで問題が1つ・・。

Twitterのアプリ認証のやり方が分からん(´・ω・`)

Twitterでそれを呟いていたら、自分の知人である技術者の方から

「Twitter4Jを使えば簡単だよ!!」とお言葉を頂いたので早速調べて見ることに。

プログラマー3人がかりで調べ、なんとなく実装の方法は分かったものの
時間の関係もあり、今回はTwitter4Jを使うことは諦めました。

じゃあ、Twitter連携を使うのは諦めるか・・という流れになったのですが
自分以外のお二方、チューターである@tomorrowkeyさんの力をお借りして
なんとか実装の方法を確立ktkr!

★PM3:00〜 ひたすらもくもく

この辺りでアプリ裏側の機能の実装も完了し、デザイン素材も出来上がり
後は自分が画面を作って、機能と結合させるだけという状況になりました。

画面構成は以前自分が趣味で作ったアプリのものを改造し
なんとか機能面も実装完了。

後は頂いた画面素材(背景、ボタン)を入れこみ
プレゼンの資料をメンバーの方に作っていただいたりしている内にあっと言う間に発表の時間がやってきました。

★PM5:00〜 各チームの発表

ここからは、全6チームが順番に5分程度の発表をし
参加者全員で投票を行なって優劣を競うという流れに。

結果、自分たちのチームは5位となりました。

ここで、プレゼンを振り返っての反省点をいくつか・・

・今回は実機上でアプリを動かして発表したのですが、その方法が良くなかった。
Android Screen Monitorを使えば、PC経由でプロジェクターにアプリ画面を移せたのに・・自分のバカorz。

・自分の喋りが雑だった。資料に合わせて話せておらず、なんかグダグダに。

他のチームメンバーの方々にご迷惑をおかけしてしまい、非常に申し訳ない気持ちでいっぱいでした。

発表に関しては、次回までの課題としておきます!

★PM6:00〜 上位入賞チームへの景品の授与

このハッカソンでは毎回上位入賞チームに景品が授与される習慣があります。
ちなみに今回の商品は本(技術書・参考書)でした!

★PM6:30〜 会場の片づけ→懇親会

ハッカソンもあっという間に終了し、会場の後片付けをした後は恒例の懇親会に!

参加者の方々と真面目な話や、普段の愚痴を話したり
自分の甘酸っぱい思い出とかを暴露したり(笑)と楽しい時間を過ごさせて頂きました〜。

★PM11:00 帰宅

作業に気力を使ったせいか、眠気が限界だったので即就寝・・。

                                                                                                      • -


やたらと長くなってしまいましたが、僕の1日はこんな感じでした(・∀・)。
ここまで読んで下さった方、本当にありがとうございます!

最後に今回のハッカソンを主催頂き、運営を頂きました株式会社ブリリアントサービス様に
深くお礼を申し上げます。
皆様、本当にありがとうございました!また機会があれば、よろしくお願いいたします。

MIT版App Inventorについての覚書・その2

前回はMIT版AppInventorβ版の導入方法を簡単に解説させてもらいました。

なので今回は前回の続きと、環境構築中につまづきそうな箇所(というか、自分がつまづいた箇所)についての補足を書いていこうかと思います。

■環境構築の続き

先週の記事では確か、AppInventorを起動する前くらいまで解説したと思います。

必要な物は一通りDL出来ていると思うので
再びMIT App InventorのHPにある「Use MIT AppInventor」のボタンを押し、自分のGoogleアカウントでログインしてみましょう。

すると、下の画面と同じようなページが開くと思います。


ここまで来れば、AppInventorの使用準備はほとんど終わったと言っても良いでしょう。

ちなみにこの画面はアプリケーションのUI(ユーザインタフェース)を決める画面、いわばデザインをいじる画面です。
Eclipseを使われている方は、レイアウトのxmlファイル内の『Graphical Layout』をイメージして頂くと良いかも。
ここで画面にボタンやテキストボックスを配置したりするわけですね〜。

■AppInventorの2つの画面

普通、Androidのアプリケーションを作る場合はここからは動作処理部分のコードをガリガリ書いて・・となるわけですが
AppInventorではコードを書くことはない」と前回申し上げました。

じゃあ、どこで動作部分を作っていくの??

と思う方も少なくないと思います(というか、自分も最初は戸惑いました)。

さてここで一度、App Inventorの画面に戻ってみましょう。
画面の右上に「Open the Block Editor
というボタンがあると思いますのでこれをクリックしてみてください。
クリックすると「AppInventorForAndroidCodeblocks.jnlp」というファイルのDLが始まるので
そのままDLして実行してみましょう。

すると、下のような画面が立ち上がると思います。




そう、これが動作部分を作っていく画面です!
AppInventorは「見た目」部分と「処理」部分を作る画面にそれぞれ分かれてるんですね。
この画面が問題なく開けば、AppInventorの環境設定は完了です!

■設定手順でつまづく箇所について

上の画面がすんなり開かず、設定につまづいてしまうケースがあるので補足していきます。

「AppInventorForAndroidCodeblocks.jnlp」を実行すると、下のような画面が開いた方がいると思います。



そしてよくわからないまま、ダイアログの「取り消し」を押すと・・・


こうなります。

ダイアログにErrorと書いてあるように、エラーメッセージがつらつらと書いてあり
設定に失敗しています。

エラーダイアログに書いてある内容は場合によって異なるのですが
こうなってしまう原因は1つです。

それは、PC内に『App Inventor Setup』が入っていないから

『App Inventor Setup』をインストールすると、C:\Program Files (x86)フォルダ直下に「AppInventor」というフォルダが出来ます。
OS:Windows7のPCにデフォルト設定でインストールした場合

その中には「commands-for-Appinventor」というフォルダがあって
USBドライバやらADBコマンドのbatファイルとか色々なものが入っています。

調べてみたところ、BlockEditorを起動する際に「AppInventorForAndroidCodeblocks.jnlp」を実行すると
上記の「commands-for-Appinventor」フォルダを参照しにいっているのです。

エラーが起きる流れをまとめると

1.『App Inventor Setup』をインストールせずにAppInventorを起動する。

2.BlockEditorを開こうとしても、「commands-for-Appinventor」のフォルダがあるはずもないので当然参照に失敗する。

3.設定に失敗して、エラーダイアログが出る。

こんな感じですかね〜。

ちなみに自分が参照したページを下記に記載しますのでご参考までに。

AppInventorの会
BlockEditorについて
※要Googleアカウント

                                                                                • -

今回はこの辺にしておこうと思います。
少々長くなってしまいましたが、少しでも読んでくださった方のお役に立てば幸いです。

それではお疲れ様でした!

MIT版App Inventorについての覚書・その1

「俺はブログを続ける!」とか言いつつ、数日で飽きて9ヶ月放置してしまったけど、気にせず書いていくよ!
これからは1ヶ月に3回くらいは更新できるよう、ネタ作りに奔走して行く予定でいます。

で、本題。

とある事情でここのところAppInventorについて勉強しているのですが、
環境構築やら何やらで色々つまづいていたので自分で調べた事をここに覚書として残しておきます。


■AppInventorとはそもそも何なのか?

AppInventorとはAndroidアプリを作るためのツールです。

通常、Androidのアプリを作るには「Java」と「AndroidSDK」をPCにダウンロードし
地味に面倒な環境構築を行った後に「Eclipse」というツール上でJavaのコードをガシガシ書く・・・
というのが最もポピュラーな手段ではないかなと思います。

しかし、AppInventorではコードを書くことなく
直感的にAndroidアプリを作ることが出来るのです。

元々このツールはプログラミングを専門的に学んだことがない学生のための教材用として開発されたものらしいので
プログラミング知識の無い方でもとっつきやすいと思います。


■環境構築

まずは環境構築をしないと始まりませんよね。

必要な環境は以下の通りです。

・OS

WEBブラウザ

  • Firefox3.6以降
  • IE7以降
  • Google Chrome4.0以降
  • Safari5.0以降

・ハードウェア

  • 上記OSを搭載したPC
  • Android端末(無くても可)
  • USBケーブル

次に準備しなければいけないものとしては

↑これを先に入れておかないと後で必ずつまづきます

の3つです。

AppInventor上でJavaのコードを書くことはありませんが、アプリケーションを動かすのにJavaは必要不可欠。
Oracleのページから適当なバージョン(※ただしJava6以上)をダウンロードしましょう。
Javaのダウンロード方法については端折ります。

Googleアカウントの取得についても今更書くことは特に無いはずなので省略。

次にここから「App Inventor Setup」をダウンロードします。
リンク先を開き、各自自分のOSに合ったものを選びましょう。

インストーラの手順はデフォルトのまま「Next」連打で問題ないと思われます。

下準備については以上です。


■実際に使ってみよう

ここまでの手順を終えたら、MIT App InventorのHPを開きます。
開いたら、ページ右上の「Use MIT App Inventor」をクリック!

すると、Googleアカウントのログイン画面が出てきます。
そこから予め用意しておいたアカウントでログインをすれば、環境構築は(ほぼ)完了!

これでひとまず、AppInventorを使えるようになります。


■本日のまとめ

かけ足になってしまいましたが、以上がAppInventorの導入手順になります。
細かい部分や足りない部分については後日の記事で追々補っていく予定です。

ですが、今日はくたびれたのでここまでとさせてください。
それではお疲れ様でした(^^)v。

CoronaとかPhoneGapとかUnityとか

前の記事に書いた講習会で聞いた話の追記なんだ・・長くなりすぎたから2つに分けたんだ・・。

Titanium Mobile以外にも、アプリ制作のためのフレームワークはいくつもある事実を知ったのでここに書いておく。

講習会で聞いたフレームワークは以下の3つで

  • PhoneGap

HTML5 + CSS3のサイトをアプリ化

  • Corona

Luaで2Dゲームを作る

  • Unity

C++Javascriptで3Dゲームを作る

というシロモノがあるとのこと。

全部に精通するっていうのは土台無理な話だから、
Coronaについてだけ勉強を始めてみようかな。

多分良い感じのACGやSTGが出来る夢のようなツールだと思うから〜。