loctouch_title04

ごあいさつ


こんにちは吉川です。今回は「ロケタッチができるまで」プログラマ編を書かせていただきます。
ロケタッチではスキーマ定義などのシステムの設計から、ロケタッチのWebアプリ周りのコードの実装を担当させていただきました。

吉川

プロトタイプの作成


プログラマとはいっても、今までの連載でも何度か触れられたとおり、今回のプロジェクトではキックオフからの2ヶ月あまりはサービスのコンセプトを決めるためのブレスト等を行っていて実際に設計やコーディングにとりかかることができませんでした。

今までの弊社の開発スタイルではプログラマがアサインされた時点でサイトの概要はほぼ決まっており、作れるところからどんどんコードを書いていくという進め方が多かったため、2ヶ月間作らないというのは本当に初めてのことでした。

さらに吉川

とはいえプログラマとしてはコードを書かないでいると不安になるので、この期間にいくつかのプロトタイプを作りました。プロトタイプといってもログインしてタッチできるといったサービスのデモ的なものではなく、ただ地図を表示するだけの本当に簡単なものです。

自分だけの地図を作るというロケタッチのメインになる機能で、自分だけの地図を表現できているか、この地図が本当に面白くなるか、ということを確かめるために Google Maps API を使って地図表示し地図上にアイコンを表示するプロトタイプです。

このときに作ったプロトタイプの地図は実際には使わなかったのですが、地図の見せ方を早い時点で開発メンバーと共有できたことで、サービスのコンセプトの設計に一役買うことができたのではないかと思います。

ロケタッチのシステム構成



ここで少しロケタッチのシステム構成について書きたいと思います。ロケタッチではいわゆる LAMP(Linux, Apache, MySQL, Perl)を用いて構築されています。他にも、TheSchwartz や memcached などのオープンソースプロダクトを利用させてもらっています。ウェブアプリケーションフレームワークは少し古いのですが自社製の Sledge を利用しています。

どれも弊社ではいままでよく使われている標準的な構成で、あまり新しいところはありませんが、アプリケーションサーバには Perl で書かれた PSGI サーバの Starman を採用しました。PSGI とは去年の秋ごろに登場した、Web サーバとフレームワークとの間のインターフェースの仕様です。Sledge も今までは Apache + mod_perl 上で運用してきましたが、PSGI に対応するための拡張がされ、すでにいくつかのプロジェクトで利用されています。

位置情報の取り扱い



ロケタッチでは自分やフォローしている人たちがしたタッチを基に地図を表示したり、自分が今いる位置の近くを検索するなど、いろいろなところで2次元座標上での近隣検索が必要になります。このような空間に対しての検索を最適化するためのインデックスを空間インデックスといいます。ロケタッチで採用している RDBMS の MySQL は、空間インデックスをサポートはしていますが、MyISAMという少し古いストレージエンジンのみで、現在標準的に利用されている InnoDB ではサポートされていないためこの部分で少し工夫する必要がありました。

ライブドアグルメなどの社内で位置情報を用いたサービスを開発している他のエンジニアに相談するなどして、今回は GeoHash という手法を利用しました。GeoHash とは地表を、矩形のメッシュに分割してそれぞれのメッシュにつけるユニークな文字列です。この文字列を DB に格納することでインデックスとして利用できるようになります。

GeoHash の特徴として文字列の長さでメッシュの大きさを変えられるという点が挙げられます。短いGeoHashは、より長いメッシュをすべて含む大きな範囲のメッシュを表現します。たとえば "xn774c" という 6 文字の GeoHash は新宿駅の西口付近を表しますが、それより、一文字長い "xn774ck" は、その中のより狭い範囲を示すようになります。

geohash-xn774c


この特徴のため DB にはある程度長い GeoHash を入れておき検索時に必要な長さで前方一致検索をすることで、検索範囲を検索する時点で決めることができます。

またメッシュを使った検索は、経緯度で範囲検索をするよりも、memcached などをつかったDBの外部にあるキャッシュを使いやすいといったメリットもあります。

さいごに



拙筆ながら、今回はロケタッチのシステムについて紹介させていただきました。ライブドアで開発をしたいという方は、ぜひこちらのページからご応募ください。

以下、今後の連載予定。
ディレクターブログが読めるのはライブドアだけ!

第1回 プロデューサー編 (佐々木)
第2回 ディレクター編 (荒井)
第3回 デザイナー編 (小黒)
第4回 プログラマー編 (吉川) ※本記事
第5回 マークアップエンジニア編 (浜)
第6回 プログラマー(ケータイ版)編 (平野)
第7回 プログラマー(iPhoneアプリ版)編 (浅見)

ロケタッチの新規登録はこちら