Android: Antでテストを実行する

Jenkinsでテストの自動化を試みていたわけですが、なんかうまくいかない。
そもそも準備の順序が悪かった。

  • いきなりリモート環境でJenkinsを動かそうとした
  • ローカル環境でAntを使ってテストの実行をしたことがないのにしようとした
  • 手順を手動で確認する前にネットの情報を鵜呑みにしてやろうとしていた

面倒臭がっていたのが非常によくない。
手動でできないことは自動化できるわけがない。
基本に立ち返って、影響範囲のスコープを狭めて、徐々に自動化していこうと思いました。そこで、まずはAntを使ってアプリのビルドとテストを行なうようにしようと思います。

  1. まず対象プロジェクトをantでビルドするためのbuild.xmlの作成を行ないます。
    HelloAndroidプロジェクトのディレクトリにいるとします。

    android update project -p .
    
  2. 次に、対象のテストプロジェクトをantでビルドするためのbuild.xmlの作成を行ないます。
    テストプロジェクトに移動して行ないます。

    cd ../HelloAndroidTest
    android update test-project -m ../HelloAndroid -p .
    
  3. 最後に、テストを実行します。Android端末はUSBデバッグがONの状態で接続していると過程します。
    ant clean debug install test
    
  4. 以上のようにすると、デバッグ用apkがインストールされて、テストが実行されます。

デバイス指定でテストを実行(エミュレータとか)

実機じゃなくてエミュレータ起動してやろうとおもったらどうやるんだったかな…。
と思って調べてみた。

参考サイト
http://d.hatena.ne.jp/tlync/20120326/1332691894

  1. まずエミュレータを起動する。
    コマンドラインでエミュレータの起動をします。
    ここではXperiaというVirtual Deviceを作っていたとします。

    emulator -avd Xperia
    
  2. エミュレータが立ち上がっていることを確認。
    adb devices
    

    実行すると以下が表示される。
    List of devices attached
    emulator-5554 device

  3. emulator-5554があることが確認できたので、以下のコマンドを実行する。
    ant -Dadb.device.arg="-s emulator-5554" clean debug install test
    

ただ、これだとコマンドだけで完結してないので、もっと調べてみないといかんなぁ。

追記:エミュレータを画面なしで起動する!

JenkinsのAndroid emulator pluginのコンソールログを参考にしてコマンド打ったらできた。
(-avd Xperiaの部分は適当に変えて)

emulator -no-boot-anim -avd Xperia -no-snapshot-load -no-snapshot-save -wipe-data -no-window

こうしたら、エミュレータの画面は表示されてないけれど、adb devicesを打ったら、ちゃんとデバイスとして表示されました。画面は鬱陶しいという場合にいいのかも。スクリプト的にエミュレータを出して、処理をしたいのだけれど、エミュレータが起動し終わったタイミングを拾う方法が今のところ俺の頭ではわかってない。まぁJenkinsのAndroid emulator pluginではできているからできるんだろうけども。


JenkinsでAndroidプロジェクトをビルドする(書きかけ)

【送料無料】Jenkins実践入門

【送料無料】Jenkins実践入門
価格:2,919円(税込、送料別)

CloudCoreサーバにて、Jenkinsを稼働し、継続的インテグレーションを行なおうと思っています。
アジャイルサムライを読んで、やはり必要なのは継続的インテグレーションだなと。
テストの自動化もさることながら、ビルドの自動化なども行なえるようになれば、省力化が図れるので、少しずつでもいいので自動化していこうと思っています。そのためには、Jenkinsの使い方を覚えていく事が大事。仕事でも使えるだろうから、まずはボチボチやってみようかと。

Jenkinsのインストール

Jenkinsのインストール自体は、本の通りにやってみています。
まず、OpenJDKのインストール。

yum install java-1.6.0-openjdk

次に、Jenkinsをインストールするために、RPMパッケージの公開鍵のインポートを行ないます。

wget -O /etc/yum.repos.d/jenkins.repo http://pkg.jenkins-ci.org/redhat/jenkins.repo
rpm --import http://pkg.jenkins-ci.org/redhat/jenkins-ci.org.key

そして、yumでインストール

yum install jenkins

Jenkinsの起動

Jenkinsの起動は、serviceコマンドで行なえます。

service jenkins start

ローカル環境で動かしている人は、http://localhost:8080/でアクセスできるはずです。
しかし、外部サーバにインストールしている人はこれではアクセスできません。

Apacheの後ろで動かす

ローカル環境でない場合、このままだとアクセスできないので、apacheの設定を変えます。
正確には、Apacheのリバースプロキシを利用してJenkinsにアクセスします。
/etc/httpd/conf/httpd.confを編集します。
一応バックアップは各自で取ってください。

私の場合はサブドメインでアクセスしたかったのでVirtualHostで設定しました。また、ベーシック認証を付けています。
http://hoge.example.com/にアクセスしたら表示されるように設定しています(もちろん、このドメインは偽物ですので適宜変えてください)
本来はログの設定とかを各々のファイルとかにしたほうがいいので、そういう設定をしたほうがいいかと思いますが、ここでは割愛しています。

<VirtualHost hoge.example.com:80>
    ServerName hoge.example.com
    <Location />
        AuthType Basic
        AuthName "Please Enter Your Password"
        AuthUserFile /var/lib/jenkins/.passwords
        AuthGroupFile /dev/null
        Require valid-user
        ProxyPass http://localhost:8080/
        ProxyPassReverse http://localhost:8080/
    </Location>
</VirtualHost>

そして、Apacheを再起動します。

service httpd restart

これで、http://hoge.example.com/にアクセスしたらJenkinsのページが見られるようになるはずです。

Android SDKのインストール

Android-SDKをダウンロードし、解凍、移動します。

wget http://dl.google.com/android/android-sdk_r18-linux.tgz
tar xvzf android-sdk_r18-linux.tgz
mv android-sdk-linux /usr/share

Android SDKにパスを通すために、/etc/profileに以下を追加します。

export ANDROID_SDK=/usr/share/android-sdk-linux
export PATH=$ANDROID_SDK:$PATH

いったんログアウトして再度ログインします。

Android SDKをアップデートかけます。かなり時間がかかるので気長に待ちましょう。

android update sdk -u

今、絶賛DLしているので今回はここまで。
続きはまたここに書いていきます。


アジャイルサムライ読み終わった

アジャイルサムライ

アジャイルサムライ
著者:ジョナサン・ラスマセン
価格:2,730円(税込、送料込)
楽天ブックスで詳細を見る

アジャイルサムライ読み終わった。テクニック以外の部分(いわゆる取り組み方)が重要なのは当然として、取り組み易い環境作りが大事。人は怠け者だから、取り組み易い環境がないとやっぱりうまくいかない。所詮は理想と思って取り組めなくなってしまう。

アジャイル開発をするのに重要な以下の4つ。

  • ユニットテスト
  • リファクタリング
  • テスト駆動開発
  • 継続的インテグレーション

どれも個人的な開発ではおざなりにしてまいがちな項目…。
これらの環境整備をまず行なっていきたい。
これらがひいては時間の節約をするための強力なツールになるので、事前に投資するべき。

プロジェクトの回し方については、アジャイルな見積りと計画作りに書かれていたように、イテレーションの中でベロシティ(チームの開発力)を計測しつづけて、チケットに当てられたポイントをベロシティxイテレーションで差し引くことでプロジェクト完了時期を算出するという方法だった。
それを根拠に期間を調整したり、リリース時期のほうが重要な場合は、機能のほうを削っていくなどで対応する。
完成してない機能に関しては、半分完了しているからといってその分を進捗報告に加えない。リリースできないものは加えてはならない。あくまでもリリース可能なソフトウェアの形を維持し続けることが大事。

アジャイルであるためには失敗を怖れてはならない。失敗は誰でもする。またプロジェクトの進み方が理想的でないにしても、それは失敗ではない。理想的でないというだけ。改善していけるところから改善していけばよい。

自分の言葉があんまりにもなかったので、自分の言葉で書いてみる。

たぶん管理手法としては、自分は付箋紙やホワイトボードを使うようなアナログな管理手法のほうが小規模チーム(顔を見渡せるくらいのサイズ)では向いていると思う。それをデジタルツールにも移すけれども、手で書いた方が早い場合のほうが多いんじゃないだろうか?ただ項目数が増えすぎるとアナログツールでは管理しにくいので、そこをデジタル化で管理したのがいいのかなと。

ユーザーストーリーから機能を掘り起こして、機能からテスト項目を掘り起こして、というツールがあって、それがある程度コードを自動的に生成するような仕組みがあったらよさげ。Railsのgenerateコマンドでもひな形は作ってくれるけれど、それをもう一つ踏込んだ形で、例えばチケットを発行したらそれに合うCucumberのテストが書かれるとか。

プロジェクトの見通しがよいようにするためには、管理することに重点を置く、のではなくて、自動的に管理されることに重点を置く方がいいのかなと思う。チケットに仮の名前を付けられるようにするとかできたらいいのになとか、時々思う。
チケット駆動開発が、自分的には理想型なんじゃないかと思っているのだが、これを徹底するのもまた難しかったりする。利便と不便の狭間があるのだが、なかなか落としどころがわからない。

あまり勉強をしない人には、なんでそんなことをするのか?ということを説明するのも大変だったりするので、アジャイル開発の勉強をする機会を社内で設けて知識の共有を図っていったほうがいいのだと思う。そうすれば自ずとスライドとかも蓄積されて新しく来るであろう人の教育にも使えるのであろうし。

ダラダラと書いてみたが、そういうのを企画していきたいと思う。


アジャイルサムライを読書中

アジャイルサムライ

アジャイルサムライ
著者:ジョナサン・ラスマセン
価格:2,730円(税込、送料込)
楽天ブックスで詳細を見る

アジャイルサムライをPDF版で購入してMBAで読んでる。
まだ読んでいる途中だけど、面白い。
要件定義や仕様や納期、予算に引っ張られがちなプロジェクト管理をユーザにとって価値のある機能(フィーチャ)に注力して、期間を区切ってイテレーションで回す方法のノウハウが詰まっている。

プロジェクトをアジャイルにするためのノウハウは知ってはいてもなかなか実行できないことが多いので、まずはイテレーションゼロでソース管理、ビルド自動化、テスト自動化などをやれるようにしたいなと思った。

ユーザストーリーをじっくりと書いていくことをサボりがちなので、その辺りを心の余裕を持ってやれるようになりたい。

最近アジャイルサムライ読書会がないからなー、ちょい寂しいなー。
スカイプチャットでのアジャイルサムライ読書会とかしたらいいかもしれんなーとか。


第4回シャープハッカソン@東広島に参加してきました

前回に続き、今回もSHARP様主催のハッカソンに招待していただけましたので、参加してきました!今回は開発者・デザイナー・一般女性でチームを組んで女子力アップアプリを作ろう!というのが主旨でした。

前回の教訓を元に、知り合いの近い席で座るとそのままチームになってしまうから色々と回ること、というつもりでした。昼ご飯を食べるとその集団がそのままチームになるというのが常っぽいですね。今回もそうなりました。名刺交換している間に自分の席を取られてしまったので(ぇ、ご飯食べるのどうしようかとオロオロしてたら混ぜてもらえましたw

お弁当。

今回もSHARP製の端末がズラリ。タブレットや未発売の機種まで準備されていました!
チーム組ですが、チーム毎に最低1人は一般女子を加えていることが条件でした。

今回のチームのメンバーはこちら。

@zamojojoさんは、私が作っているアプリのコスメマネージャーのデザイナーさんなのでデザイナー枠で参加してると思ったらまさかの一般女子枠でビックリしました。

そしてアイデアソンに。
そもそも女子力とは?という議論を開始して女性に女子力を問うていたのだけれど、気付いたら女子力を語りだす@akai_tさん。@akai_tさんの女子力の講義を聞きながら@rie05さんと@zamojojoさんは「参考になるわー!」っていう感じで一番女子力高かったのは@akai_tさんであることが判明。

洋服を管理するアプリはあるから下着を管理するアプリはどうか?というアイデアが女性陣からでてきて、初めてホワイトボードにアイデアが書かれる。

そしてアイデアソンが白熱しだした頃、

まるで俺だけが連呼しているような呟きが…。いや、みんな言ってたよ?むしろ俺よりも言ってる人いたよ?

チーム名まだ決まってない段階でチューターにパンツ扱いされる面々。

アイデアは転々と変わり、最終的に作るアプリはプリクラ的に写真にラクガキできる。しかも複数台のスマホで同時にラクガキが反映されながら楽しめるというアプリに決定。パンツはもはや忘却の彼方へ。しかし、インパクトが強すぎたせいか、チーム名が「かわいいはパンツ」に(イミフ

担当は、

  • ラクガキ機能(@eaglesakura)
  • ラクガキ画面UI(@akai_t)
  • トップ画面(@shogogg)
  • Bluetooth機能(@Toro_kun & @patorash)
  • 調整役(@youten_redo)
  • デザイン(@rie05)
  • ご意見番(@zamojojo)

役割分担を決め、みんながゴリゴリと進める中、俺はEclipseにSVNのプラグインが入ってなくて(ほら、えっと、最近gitだから…)、なかなかうまくチェックアウトができなくてようやくプロジェクトをチェックアウトしたところで1日目終了。なんの!懇親会の後からが真のハッカソン…!

ホテルに移動し、荷物を預けてから懇親会の会場に移動!酒造がたくさんあるところで美味しいお酒とお鍋をつつきながらの懇親会!大吟醸うまぁああいい!!!完全に上機嫌で懇親会でお酒を煽る面々。美酒鍋といって、鍋を煮込むのに水の代わりに日本酒を使うという鍋でとっても美味しい!そしてお刺身も美味しいし楽しいし!

こんだけ盛り上がっておいて時間はまだ20時半。これからがハッカソンだ!!

とりあえずみんなコンビニでレッドブルやウコンの力や夜食などを買ってホテルに戻る。チームパンツは、@youten_redoさんの部屋に集まって夜のハッカソン開始。Bluetoothの参考ソースを@Toro_kunと読み解きながら、@Toro_kunがソースをプロジェクトにコミットして、@patorashがサンプルアプリでそれを試すという流れ。


他のチームの面々も部屋にいた。どうも@gabuさんと@vvakameさんが潰れて部屋から出てこなかったかららしい。

ラーメンを食べにいく面々がいたけれど、食べたら寝てしまいそうだと思って行かずに黙々とBluetoothの機能実装をする@Toro_kunと私。
そしてチーム内での会話がカオス。

SVNのtrunkにコミットするという意味です、ええ。
機能の区切りが付いたところで一同解散。寝たのは午前4時。

7時過ぎに起きて朝飯。
TLをチェックすると0時に用事があるから自分の部屋で作業をすると言った@akai_tさんが…

そして2日目!!

夜の間に作った機能やデザインを結合させていく面々。この頃はあんまり結合部分のやりとりに深く関われてなかったので、デバッグに専念することに。余計なことはしないほうがよさげだった。スマホ2台で接続してラクガキできるようになって、「オオー!」とチーム内から歓声があがった!しかしまだ2台。2台だったらなんだか普通にできそうなものなので、これを3台、4台でやれるようにせねば。

デバッグして不具合を検出して修正したら、3台以上でもできるようになって、そこから更に「オオー!!これはいける!!面白い!!」という声に。他のチームからも同じように「うちのアプリすごい!」という声が上がっていていたので、どのチームもアプリの完成が近そう。しかし今回はうちのチームが勝てるだろう、絶対に勝てる!そう皆確信していたと思う。

そしていよいよ発表の時間に。

チューターの@tommorowkeyさんとSHARPの@shigepon7さんたちの発表の後、いよいよチーム「かわいいはパンツ」の発表。アプリ名は、プリクラ共有ラクガキアプリ「プリ♡シェア」。

プレゼンは@shogoggさんが担当。そしてデモへ。事前に4台接続しておいて、各チームに1台ずつ渡してラクガキしてもらったらものすごい食いついてた!Ust用にもデモをやって、発表後に端末を回収したら全画面にラクガキとスタンプが書かれてたので、これは絶対にもらった!!と思った。

安心の様相で他のチームの発表を聞いていたら、他のチームの発表もとてもレベルが高くて女子力も高い!!多分、今回のハッカソンはどのチームも「自分のチームが優勝だわー」って思っていたに違いないと思う。何より全部のチームがちゃんと完成させているのがすごい!(細かいバグはあったとしても)

そして結果発表へ。その前に景品の紹介があったのだけれど、なんとタブレット(GALAPAGOS)が5台!!そして卓上プラズマクラスター発生機も!あとLED電球も!エネループも!超豪華!

みんなが恐らく「申し訳ないがあのタブレットは俺のや(ニヤリ」としていたと思う。

しかしなんと蓋をあけてみるとうちのチームは4チーム中4位に…(T_T)
しかしポイントは、

  • 1位 37P(スタ☆me)
  • 2位 32P(LiveDeco)
  • 3位 31P(春のアニキの付けまつ毛)
  • 4位 31P(プリ♡シェア)

という結果。3位と4位はポイントは同じだけどジャンケンで負けましたorz
正直勝てると思っていたのでもの凄く悔しかったです…!でもどのチームも素晴らしかった!

前のハッカソンだと1位がダントツで優勝するパターンだったのに、今回はほぼ横並びで超接戦だったことがわかります。それだけハイレベルでした。これだけのエンジニアとデザイナーと一般(?)女子が集まって2日間レッドブル飲みまくりながら頑張るとすごい力が発揮されるなぁと改めて思いました。こんな機会を提供し続けてくださるSHARP様とブリリアントサービス様には感謝感謝です!

また是非とも参加したいですし、ここで作ったアプリをマーケットにリリースできるように頑張りたいと思います!チームパンツの皆さん、ありがとうございましたー!そしてこれからも頑張りましょう!!

他のシャープハッカソンの情報はこちら(わかる範囲でまとめた)