SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

話題のあの人にインタビュー!

「時を超える落書き」 doodleはマッシュアップでできています

ケータイのGPSから始まる新しいコミュニケーション


  • X ポスト
  • このエントリーをはてなブックマークに追加

doodleのシステム構築

マッシュアップサイトだそうですが、どんなWeb APIを使っていますか

 使っているのは次のAPIです。

 その他、図書館蔵書検索で東京都のOPAC、WILLCOMの駐車場検索、APIではないですが位置の表現でLocaPointなどを使用しています。

どんなプログラミング言語で構成されているんですか

 いわゆるLAPP環境(Linux、Apache、PostgreSQL、PHP)で動いています。オープンソースの処理系には以前からこだわりがありまして、業務サイトでさえも、ずっとその組み合わせで作ることが多かったので、今回もそうしました。

 まだそれほどトラフィックは無いので、レンタルサーバ1契約だけで動いていますが、今後ユーザが増え、スケールアウトも視野に入れられるくらい成長したらいいな、なんて思ってます。PHPはやりたいことが手軽にすぐできるので、何でも作れる大切な道具ともいえますね。

開発期間について教えてください

 doodleと決まってからリリースまでは約1ヵ月ぐらいです。その後、Mash up Award 2ndを知り、そのためにマッシュアップ先を増やしていったのが1ヶ月くらいなので、合計2ヶ月程度かと思います。確かにdoodleの前身は、1年以上かけて作っていましたが、新しく挑戦した技術やコード量から言えば、リリースまでの短期間のほうが断然内容が濃かったですね。

 ケータイ全キャリア対応、多くのAPIへのマッシュアップ対応、POPメール連携対応、Exif連携、ケータイ動画対応、Wii対応、Googleマップのクロスブラウザ対策などなど、初期βリリースまではdoodleのことばかり考えて、それこそ寝てる間も夢の中でコーディングしているような状態でした。やってみてわかることも多く、例えばDoCoMoやauは画像送信に使うフォームアップロードさえできないという事実など、初めて知る事だらけで大変でした。とはいえ、今にして思い返せば、忙しいながらもとても充実した2ヶ月間だった気がしています。

悩まされた4キャリア対応、クロスブラウザ対応

特に苦労された点はどこですか

 手元にはWILLCOMしかなかったので、しばらくはWebで検索した仕様をもとに想像で作成していました。しかしそれだけでは限界があります。社内のメンバーがDoCoMoとSoftBankを持っていたので私はauを買い、4つそろったところで実際に動作確認したんですが、あまりの挙動の違いに愕然としましたね(笑)。

 仕様の違いを簡単にまとめるだけでも以下のようになるんですが、「PCとモバイルの違い」「モバイルでも4キャリアごとの違い」と、とにかくその差違を吸収するのが大変でした。

(例)文字数制限、デフォルト値、端末固有情報の取得
キャリア 測地系 座標値 変数形式 端末固有情報 格納方法
DoCoMo 世界測地系(GPS) 度分秒 分離型 都度取得 UserAgent埋込
au 世界測地系(GPS) 度(選択可) 分離型 常時取得 独自環境変数
SoftBank 世界測地系(GPS) 度分秒 一体型 常時取得 UserAgent埋込
WILLCOM 日本測地系(基地局) 度分秒 一体型 都度取得 独自変数(GET)
クロスブラウザ対応も大変だったと聞きました

 IEとGoogleマップとの相性を克服するためだけに2週間かかりました。特にIEは仕様が公開されてないし、エラーのトラッキングも全くできないのです。この件は私のブログにも書いてあるのですが、「IE Google Maps アクセスできません」などのキーワードが未だに私のブログ訪問者検索ワード第2位になるぐらいですから、多くの方が苦労しているのかもしれません。

 今のところ経験的にわかっているのは、IEはonloadで呼びだすとうまくいくことが多いこと、つまりレンダリングの順番の問題だと思うんです。IE以外はJavaScriptがどこにあっても(プリコンパイルするのか、そのままインタープリートするのかは精査してませんが)、素直に滝の流れに沿うんです。しかしながらonloadでの実行タイミングは「ページが読み込まれた後」ですから、どこでGoogleマップのインスタンスを生成しているのか、また実際にレンダリングする変数の位置によって不安定になってしまう。それにonloadで関数呼びしていると変数のスコープの問題も無視できなくなる。そこにAjax通信も絡む。どんどん複雑化してスパゲティコードになっていってしまうんです。

 今ではきちんと動いているので一安心です。ただ、今後Safariなども出てくるでしょうから、また検証が大変になるかもしれません。

マッシュアップする上でCGI×Ajaxの連携技術問題

マッシュアッププログラミングならではのコツはあるのでしょうか

 従来のいわゆるCGIによる処理は、自分のあずかり知るサーバ側ですべての処理が行われますので、エラーのトレースも比較的見えやすいんですね。ところが、Ajaxとなると実行タイミングもさることながら、クライアント側で処理されるため、エラーのトレースが格段に難しくなります。もはやテキストエディタ一本での開発では限界を感じ始めるようになりますが、まだ頑張っています。

 最近ではFirefoxの拡張機能でもFirebugなどいいツールが多くそろってきているので、メインでFirefoxを使っています。ちなみに弊社のみんなの拡張機能(Minkaku)というサービスで、便利な拡張機能がたくさん見つかるのでぜひ利用してみてください。

みんなの拡張機能
 他のユーザーがFirefoxにどんな拡張機能を入れているのかわかるサービス。支持されている拡張機能を知ることができる。

 下のコードは簡単なサンプルなんですが、もともとプログラムってpro(前もって)-gram(書かれたもの)というのが原義だそうです。その意味から行けば、AjaxをCGI側で書くということは、それらの処理も事前に想定して「さらに前もって書く」ということを意味するんですね。いわゆるPre-Programingとでも言うのでしょうか。

 「ダブルクオートとシングルクオートのエスケープ」「PHPの変数とJavaScriptの変数」が混在した一見複雑怪奇なCGIとAjaxのアルゴリズムが連携して綺麗に動いたときには、従来のCGIだけの処理では味わえなかった達成感のようなものを、開発者なら誰もがきっと味わえるはずです。この境界線こそがWeb 1.0とWeb 2.0の処理系での違いのような気がしています。

<?php
if($hoge=="*"){  //←PHPの変数
  print("<script language=\”JavaScript\”>");
  print("if(hoge==\"*\"){  //←JavaScriptの変数
    document.write('<form><select name=\"hoge\">
<option value=\”'+dlat[“.$i.”]+'\”>hoge</select>') }");
// ↑JavaScriptの変数をPHPの変数で作っている

//=================================================Web1.0→2.0境界線?!
  var httpObj = GXmlHttp.create();
  httpObj.open("GET",getstation,true);
  httpObj.onreadystatechange = function() {
    if (httpObj.readyState == 4 && httpObj.status == 200) {
    //↑ここでステータスを取るのに実行されるのは外側のSend()
      hoge();
    }
 }
 httpObj.send(null);  //←ここで実行

マッシュアップが教えてくれた「嬉しいこと」

マッシュアップサービスやって良かったなと思ったことはありますか?

次のページ
運営していて嬉しかったこと

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
話題のあの人にインタビュー!連載記事一覧

もっと読む

この記事の著者

CodeZine編集部(コードジンヘンシュウブ)

CodeZineは、株式会社翔泳社が運営するソフトウェア開発者向けのWebメディアです。「デベロッパーの成長と課題解決に貢献するメディア」をコンセプトに、現場で役立つ最新情報を日々お届けします。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

石丸健太郎(イシマルケンタロウ)

株式会社ゴーガ所属。同社においてWeb系業務支援・コンサルティングの他、GPSケータイとGoogleMapsとを連携させたWeb2.0的なマッシュアップサイトdoodleの企画・開発に携わり、リクルート・サン共催...

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/1559 2008/09/04 12:43

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング