第6回 ネットワークiアプリのためのサーバサイド活用(1)90Xi専用ゲームiアプリ開発講座(4/4 ページ)

» 2004年11月22日 23時59分 公開
[澤橋辰典・武上将樹,ITmedia]
前のページへ 1|2|3|4       
DownloadクラスDownload時にのみ必要な特殊な処理を行うクラス
・getUtn UTNを取得する
・registUser ユーザ登録を行う
・showError エラーを表示する
・writeJam ADFを書き換える
などのメソッドを実装
DBAccessクラスDBアクセス用の共通クラス
UserDBAクラスDBAccessクラスを拡張して、Userテーブルのみで行うメソッドを追加
・insertNewUser DBにユーザ情報を追加
・getUserIdFromUTN DBからユーザIDを取得
・updateUserName ユーザ名を上書きする
などのメソッドを実装

 DBAクラスは、次回ネットワーク対戦用のAPIを追加する時に再利用することになる。クラスの再利用について少し述べておくと、505i以前のモデルのアプリ開発時には、クラスを分割して再利用性の高いプログラミングを行うことは、容量の上限があって難しかった。しかし、今回のようにサーバを利用する場合、サーバサイドでは、容量の制限がないため、柔軟な設計のプログラミングが可能である。大容量を生かす道の一つが、設計の質を上げ、バグを防いで拡張性を高めることであるのはいうまでもない。

正規表現でUTNを取得する

 インストールが済み、次に行うべき処理はUTNの取得であるが、これはDownloadクラスの、getUtnメソッドで実装する。UTNは携帯電話の製造番号(FOMAの場合はFOMAカードのIDも付加される)であるが、htmlのフォームタグの中に

<form method=XXX action=XXX utn>

 と、追加することで、UserAgentの後ろに

DoCoMo/2.0 YYYY(c10;serXXXXXXXXXXXXXXX; iccxxxxxxxxxxxxxxxxxxxx)

 という形式で追加させることが可能だ。これをPHPの場合は$_SERVER['HTTP_USER_AGENT']から、JAVAの場合はHttpServletRequestオブジェクトのgetHeader()メソッドを使って取得し、さらに正規表現関数を使ってUTNだけを抜き出す処理を実装した。

preg_match("/\;(ser[A-Za-z0-9]{15}\;icc[A-Za-z0-9]{20})\)$/i",$ua,$matches)

 上記がその処理に当たる。言葉に直すと、

「"ser" + 英数字15個 + ";icc" + 英数字20個」

 が、";"と行末の間にある場合に、取得せよという命令になる。Javaの場合には、java.util.regexパッケージの、PatternとMatcherという2つのクラスを利用する。

 正規表現関数は、iアプリ開発では利用できないので、なじみのない方がいるかもしれないが、これはとても便利な関数であり、例えば、UserAgentから機種名を判別して、非対応機種のユーザにはダウンロードができないという処理なども可能になる。情報もインターネット上に豊富にあるので、この機会に覚えておくといいだろう。

データベースに情報を登録する

 続いて、取得したUTNと、ユーザが入力した登録名をregistUserメソッドを使って、DBに登録する作業を行う。registUserメソッドの中で、UserDBAクラスのgetUserIdFromUTNメソッドを呼び出し、すでにユーザ情報が存在するかどうかを調べて、新規ユーザの場合はinsertNewUserメソッド、登録済みユーザの場合はgetUserIdFromUTNメソッドで、データベースに適切なデータを格納している。

 データベースへのアクセスは、今回のようにPEARのDBクラスを利用するのが一般的だ。PEARとはPHPに標準でバンドルされている便利なライブラリ集である。PEARのDBクラスを使う利点は、データベース関連の抽象化が容易なこと、エラーをクラスで処理できること、固有のRDBMSへの依存を少なくできることなどが挙げられる。Javaを使用する場合はJDBCドライバを活用する。これも「ビジネスiアプリ開発講座第4回」で詳しく解説されているので、こちらを参考にしてほしい。

ADFファイルを書き換える

 最後に、writeJamメソッドによって、テンプレートとして用意したADFの、"AppParam"を書き換える処理を実装した。これでUTN情報をアプリ上から参照することができるようになり、ネットワーク対戦時にこの情報をサーバに通知することで、対戦者同士の識別が可能になる。これは、上で述べてきた正規表現のシンプルな応用である。これで、ダウンロード前の処理は全て完了し、アプリのダウンロードが開始される。サーバの仕事は以上でひとまずお休みとなる。

 今回の開発したプログラムのソースはこちらからダウンロードできる。

 次回は、ネットワーク対戦部分の、設計から実装までをサーバ・アプリ両面から解説する。ネットワーク対戦アプリを実現する一番重要な部分なので、楽しみにしていてほしい。

筆者紹介──澤橋辰典・武上将樹

 ケータイアプリ(iアプリ/EZアプリ/Vアプリ)のNo1ポータルサイト「アプリ★ゲット」を運営するスパイシーソフトに勤務。

 澤橋は学生時代、iアプリのコンテストでゲームアプリやツールアプリを制作し、入賞経験がある。また、所属していたサークルの後輩に、ものづくりの楽しさやアプリの奥義を授け、その後輩も入賞していることから、自らをiアプリエヴァンジェリスト(伝道者)と呼んでいる。現在も大手企業にOEM提供しているアプリの開発を行っている。

 武上は、イーアクセスとの共同事業「どこでも読メール」や、各社にOEM提供しているアプリメールサービスなどで、主にサーバサイドやデータベースまわりの開発を担当している。ゲームアプリは、もっぱらプレイ専門。

前のページへ 1|2|3|4       

Copyright © ITmedia, Inc. All Rights Reserved.

アクセストップ10

2026年07月22日 更新
  1. ダイソーで330円の「人感・明暗センサーLEDバーライト(Type-C)」が意外と便利 1人暮らしの帰宅時や非常灯に便利  (2026年07月18日)
  2. Apple値上げ後も「2年実質24円」は消えず 4キャリアの「iPhone 17/17e」価格まとめ【7月21日版】 (2026年07月21日)
  3. なぜ「060」携帯番号は18カ月あっても延期になったのか? それでも「慌てる必要はない」現状 (2026年07月20日)
  4. ドコモの「arrows Alpha」、残価変更と割引終了で2年33円→5万9180円に (2026年07月21日)
  5. 専用充電器はもう不要? 中韓スマホから国内勢まで巻き込む「USB PPS」急速充電の新常識 (2026年07月14日)
  6. 「Pixel 11」は何が変わる? メモリ減少で100ドル前後の値上げも? 出そろったうわさを整理する (2026年07月19日)
  7. JR東日本「分かりにくい」新幹線券売機を改善へ なぜ、スマホではなく「駅での最短1分購入」を実現? (2026年07月04日)
  8. ショップとAIで差別化を図る「ドコモの銀行」――住信SBIネット銀行ユーザーからは戸惑いも (2026年07月19日)
  9. 携帯番号に「060」が採用されるワケ 「電話番号とは何か」を歴史とともに振り返る (2024年10月09日)
  10. iPhoneやApple Watch一斉値上げ 17無印は14万2800円に、17eは10万円超え 加速する中古スマホ特需 (2026年07月18日)
最新トピックスPR

過去記事カレンダー