はじめに
はじめまして、(株)ミクシィの佐藤友信です。私はパートナービジネス推進部 開発グループという部署に所属して、ミクシィにおける課金システムや、パートナー開発者向けの、mixiアプリ、mixi Graph API、mixi Pluginの情報を管理できるPartner Dashboardの開発をしています。
みなさん、mixi公式のAndroidアプリケーション(公式アプリ)を使っていますでしょうか。この公式アプリの機能として、私が作った「バーコードチェック」という機能があります。実はこの機能は、社内向けのハッカソン「Weekend Challenge 2.5」に参加したときに誕生しました。今回は、その「Weekend Challenge 2.5」の紹介と、バーコードチェックの裏側を紹介したいと思います。
Weekend Challenge 2.5とは
「Weekend Challenge 2.5」(以下、WC2.5)は、社内で3ヵ月に1度開催されるハッカソンで、業務時間の2.5日分を使い、業務とは関係なく、好きな技術開発を行い、その成果をコンテスト形式で競うというものです。
WC2.5にはいくつか重要なメッセージがあり、出場者はこのことを強く意識する必要があります。
- エンジニアによる「たった2日間」のフリーコーディング※
- キーワードは「技術」「アイデア」「達成」
- 必ず「動くもの」を時間内に作り上げる
- みんな「ハッカー」だろ?
また、参加するには次の制約があります。
- 必ず期間内に「動作し、その様子を見せられるもの」を開発すること
- 何らか「mixi」に関係するものを開発すること
- 対外的にリリースできるもの/されるもの、が好ましい
会社からは次のものが提供され、思う存分開発ができます。
「時間」
成果を出すための2.5日間。この間は基本的に通常業務は行わず、社内の思い思いの場所で自分の作りたいモノを作れる
「場」
成果を発表するための舞台。取締役や各サービスを企画/開発しているチーム、人たちに、自分が作ったモノを発表できる
コンテスト形式ですので、当然ながら投票とその結果の発表が行われます。最も高い評価を得たモノは、社内スポンサーからの豪華賞品、観客からの賞賛が得られます。そして、ある基準を満たした場合は、作ったモノをプロジェクト化して継続開発し、リリースしてもよいという、エンジニアとしてはこれ以上ない権利が与えられます。
ハッカソン出場者以外では、発表を見て投票する人の意識も非常に重要で、「単なる傍観者」では意味がありません。良いアイデアはキャッチアップしてリリースさせるというねらいがあります。
Weekend Challenge 2.5で開発したもの
第1回のWC2.5には19チーム、総勢22名が参加しました。自分は1人で参加して、「バーコードチェック」を作りました。これは、商品に付いているバーコード、または書籍に付いているISBNコードをスマートフォンのカメラでスキャンし、その結果をもとにmixi Graph APIのCheck APIを使って、友人と共有するというものです。もともとアイデアベースでは考えていたのですが、2.5日間という期間で実際に動作するところまで作るとなると、スマートフォンのアプリケーション開発経験がほとんどなかったので、少し厳しいかなという思いがありました。
しかし、ちょうどその頃に書籍なども発売されて話題になっていたTitaniumを使うことによって、スマートフォン向けアプリケーション開発の経験不足を補うことができました。Titaniumは、Appcelerator社によるスマートフォン対応アプリケーションの開発環境で、JavaScriptのソースコード1つでiOS、Androidの双方に対応したアプリケーションを開発できます。JavaScriptの開発経験はあったので、新たにObjective-C、Javaを習得する必要がなく、機能開発に集中できました。
mixiバーコードチェック誕生!
WC2.5の成果発表は、観客100名以上、社内にあるセミナールームとコラボレーションスペースをつなげ、ピザやお酒を用意して、お祭りムードで始まりました。こんな大勢の前で発表することはなかなかないので、ひどく緊張&興奮したことを覚えています。
さて、気になる投票結果ですが、惜しくも3位でした。豪華賞品は手に入りませんでしたが、公式アプリを開発しているチームからオファーがあり、正式に機能として組み込むことになりました。
公式アプリは、当然のことながらJavaで作られています。はじめは、ひたすらソースコードとAndroid開発のリファレンスや書籍を漁る毎日でしたが、しだいに何をやっているかがわかるようになり、わかるようになってからは早いもので、順調に開発できました。また、わからない部分があったり、何か技術的な問題にぶつかったりしたときには、それを解決するアイデアや技術を持ったメンバーが社内にいることが、とても力強く感じました。
システム構成とか、APIとか
コアとなるバーコードの読み取りには、zxingというライブラリを使用しています。zxingはオープンソースのバーコード処理ライブラリで、Androidはもちろん、Ruby、C#、C++、iPhone(Objective-C)でも使用できます。
zxingはバーコードの読み取り以外に、バーコードの生成などができる高機能なライブラリになっています。しかし、これらすべてをmixiのAndroidアプリに組み込むと、不要な機能まで組み込んでしまい、アプリケーションのサイズが肥大化してしまうため、少し工夫をしています。どうしているかというと、EAN8、EAN13、ISBNコードの読み取り以外の機能を削除して、サイズの増加を最小限に止めています(図1)。
バーコードの値から商品を検索するには、他社が公開している商品検索APIを使用しました。商品検索APIを使用するときにも一工夫しています。商品検索APIの仕様が変更になった場合でも柔軟に対応できるように、公式アプリから直接APIを使用せずに、一度mixiのサーバを経由するようにしました(図2)。
- ① バーコードを読み取る
- ② 読み取った値をmixiのサーバにリクエストとして送る
- ③ mixiのサーバから商品検索APIにリクエストを送る
- ④ 結果を受け取り、Androidアプリケーション用にレスポンスを作成する
- ⑤ Androidアプリケーションにリターン
公式アプリから直接商品検索APIを使用することも可能ですが、この場合、APIの仕様が変わると、公式アプリを改修して再配布しなければなりません。再配布後もユーザがいつ公式アプリをアップデートするかは制御できないため、アップデートするまでの間、エラーになり使用できない状態が続いてしまう恐れがあります。しかし、mixiのサーバを経由すれば、公式アプリケーションとmixiとの間のやりとりは保証できます。商品検索APIの仕様が変更になった場合は、サーバ側のプログラムを改修するだけで、公式アプリ側には影響を与えずに済みます。
まとめ
実際にプロジェクト化してから、調査/設計が0.5ヵ月、サーバサイドの実装が0.5ヵ月、Android側の実装が1.5月の合計2.5ヵ月でリリースできました。
WC2.5は2回目も開催され、ここでもさまざまなアイデアに溢れた機能、サービスが誕生しました。togetterに第1回、第2回の模様がありますので、よかったら併せてご覧ください。近く第3回が開催されます。この中から、また世に出る機能が誕生すると思います。
ミクシィには、WC2.5以外に社内サークル制度を利用し、月に1回、技術や興味などを語り合うライトニングトークの開催、四半期ごとに募集されるinnovation50という制度などがあります。innovation50は、エンジニアドリブンなイノベーションを生み出す制度で、提案の承認が下りれば50日間が与えられ、プロジェクトマネージャとして機能を開発できます。
ここで紹介している制度以外にも、エンジニアとしての力を発揮する場が社内には溢れており、さまざまなチャレンジができます。通常の業務以外でも、私たちはこのような取り組みを行い、少しでもmixiをより良いサービスにするよう努めています。