クックパッドという料理レシピサイト(http://www.cookpad.com/)がある。料理好きの筆者は、しばしば利用する好きなサイトの一つである。このクックパッドが2010年4月23日から「開発コンテスト 24」というイベントを開催する(http://info.cookpad.com/24contest)。主催者が発表した課題を解決するプログラムを開発するコンテストで、課題の発表から24時間以内に成果物を応募するというものである。

 24時間で何かを作るというのは面白い。Microsoftが主催する学生向けの技術コンテスト「Imagine Cup」では、いくつかの部門で24時間のチャレンジという競技ルールがあって、その取材は楽しかった。趣味の人力飛行機でも、明日のこの時間までに問題を解決しなければ、ということが何度かあり、これらはしんどい経験だったが、やはり楽しかった。

 筆者はクックパッドの開発コンテスト 24に参加したいと思ったが、その週末は別の予定が入りそうである。そこで一人で勝手に24時間での開発にチャレンジしてみることにした。プログラミングは本業ではないが、やってみたいのだからしょうがない。

 4月某日、午後1時9分。今からスタートである。こうして衝動的に始めるあたりがずいぶん素人っぽい気がするが、あえて気にしない。

とりあえずAndroidアプリ、2時間でHello World

 まず何を作るかを決める。開発環境を整える必要もある。ちょうどITproでは「Android Application Award 2010 Spring」というAndroidアプリケーションの開発コンテストを開催中である。机を見れば、ソニー・エリクソンのAndroidを搭載したスマートフォンXperiaがあった。常々Androidの開発を試したいと思っていた筆者は、作るモノはさておき、とりあえずAndroidアプリを作ることに決めた。

 さっそく開発環境を整える。日経ソフトウエアの2010年1月号にあった記事をさっと眺めて雰囲気をつかみ、JDKとEclipse、Android SDKなどを次々とインストールする。途中、お昼ご飯を食べたり、ちょっと悩んだりしながら進める。1時間40分ほどで準備が整った。

 インストールできた開発環境を試すには、今も昔もHelloWorldプログラムを使う。さきほど眺めた日経ソフトウエアにHelloWorldのサンプルコードと手順が載っていたので、そのまま試してみることにした。誌面にはAndroid 1.5用とあるが、問題が出たらそのとき解決することとして、ひとまず試す。

 誌面を見ながらポツポツと入力したコードが図1である。

図1●HelloWorldを書いてみた
図1●HelloWorldを書いてみた

 知らないクラス名も出てくるが、調べるのはあと回しにして実行してみる。するとあっさり動いた(図2)。たとえ文字列を表示するだけのプログラムであっても、この瞬間はやはりうれしい。

図2●HelloWorldが動作した
図2●HelloWorldが動作した

Android SDKと遊んでいたら見えてきた

 この気分の良さを生かして、ほかの仕事を片づけていたら、1時間ほど経っていた。残り21時間、そろそろ何を作るか考え始める。

 筆者にとって、Androidプログラミングはわからないことだらけである。仕様をむやみに大きくしたくはない。一方で、「作ったぞー」と思えるような、それなりに満足度のあるアプリにもしてみたい。先ほど眺めていた日経ソフトウエアをパラパラめくったり、いくつかのAndroidアプリを動かしたりしながら、Androidでできることと、その大変さのアタリをつける。

 Javaのコードが読めるのは幸いだった。ひとまず文法的な意味はわかるし、Android SDKの名前付けの規則もわかりやすい。サンプルコードを読んだり、動かしたり、改造したり、リファレンスの読み方を学んだりしながら、できることとやり方の組み合わせを覚えていく。StringBufferのメソッド名やListインタフェースの使い方を思い出したりもする。

 3時間ほどAndroid SDKで遊んでいるうちに、作りたいアプリがなんとなく見えてきた。端末をつかんでピッチングするふりをすると「ビュン!」「ストラーイク!」と音が出るだけのアプリだ。

 このアイデアを、プログラミングを理解する同僚に話してみると「くだらねー」と笑われつつも「面白いっすね」と言ってくれた。加速度計の値をうまくとれれば、加速度の最大値と適当な半径からの計算で球速の表示を実現できるかもしれない。「誰か作ってるかもな」という思いも頭をよぎるが、まあ自分で好みのアプリを作ってみたいだけなので気にしない。

 とにかく欲張らないで、最低限の仕様を考える。必要なのは、(1)画像の表示、(2)加速度計、(3)音の出力---の三つ。(1)の画像の表示は普通にできそうだが、(2)の加速度計がまだうまく扱えない。

 残り18時間。加速度計をひとまず放りだして(3)の音の出力をやってみようかなと思ったが、もう2時間ほど加速度計につきあってみることにした。ちょっと休憩してから、Webにそれっぽいサンプルコードを探しに行く。