りん: 2011年3月アーカイブ

 WWDC2011が正式アナウンスされ,チケットが発売されました。

 おそらく数時間で完売されるだろうと予想がつきましたし,いつか参加してみたいなという思いも抱えていたので,何度も購入しようかどうしようかとボタンに手をかけていました。

 しかし,残念ながら資金無し。

 今回も見送ることになりました。あとで流れてくる噂だと10時間ぐらいでチケット完売したそうで,真夜中だった日本では,多くの開発者の皆さんが夢を見ている間に発売と完売が済んでしまい,購入を逃したようです。

--

 すでにニュースメディアは,iPhone5の登場の有無や,新しいiOSの登場などを予想していたりします。

 消息筋からの情報という言葉を聞くと信じちゃいそうな雰囲気になりますが,Appleの行動パターンを考えると馬鹿馬鹿しいと思える情報もあり,いつもながらApple関係の話題は関心を集めるのに格好のネタのようです。

 WWDCでiOSとMac OS Xの未来を披露するとアナウンスしたとすれば,iPhone5の登場は秋以降という風に考えるのが自然でしょう。

 iPad3なんて書いている記事には笑ってしまいますが,サイレントアップデートはあるにしてもiPad3にあたるものが年内に出るとは到底考えられません。

 ハードウェアに関しては,慌ててもいいことが無いというのはApple自身,アンテナ問題であらためて骨身に感じているはずですので,納得のいくものが完成するまでは出てこないだろうと思います。

 iPhone4もiPad2もかなり完成度が高いモデルですからなおさらです。

--

 WWDC2011の目玉はもちろん2つのOS。

 開催アナウンスメールのグラフィックからは,この2つのOSの力関係も見えてきます。まずは「iOS」と書いて次に「Mac OS X」という順なのですから,Apple社がいかにiOSに力を入れているのかが分かります。

 そのうえ,Mac OS X10.7 "Lion"ではiOSから持ち込まれた様々な様式が取り込まれていることは知られている通り。

 おそらく,この2つのOSは,WWDC2011を婚約の場に選ぶことになりそうです。

 これはまったくの予想で,消息筋よりもいい加減な妄想話です。しかし,おそらくこの2つのOSの垣根が,表面的なものから取り払われようとしていることは確かです。この流れが内部的なものへと進んでいくことを否定する理由はありません。

 確かにiOSのUIKit(Cocoa Touch)とOS XのAppKit(Cocoa)は,それぞれタッチパネル向け,マウス向けという異なるインターフェースを対象に構築されたもの。それらが単純に融合することはないと思われます。

 けれども,Appleとしては2つのOSを同時並行的に維持することをコストだと感じているはずです。なんとかして,これらを統合的に扱えるようにしたいと考えているはずです。

 そのための模索が本格的に始まろうとしていると思われます。結婚はまだ先だけれども,今回のWWDCで2つのOSが婚約することがはっきりと示されるのではないか,そう思うのです。

--

 ユーザー側にとってはどういう世界になるのか。

 アプリストアで購入するアプリが,iPhone,iPad,Macという3つのハードウェアに対して対応しているかどうかだけを気にする形に移行するでしょう。

 あるアプリはiPhone専用かも知れませんが,別のアプリはiPhone,iPad,Macの3つに同時対応する形のユニバーサル・アプリかも知れない,という風になります。

 つまりユーザーは,欲しいアプリがアプリストアにあるかどうか,それが自分の持っているハードウェアのどれに対応したものであるのかを気にするだけでいいのです。

 おそらくAppleが目指すシンプルなユーザー体験はその辺じゃないかと思います。

--

 ポストPCの時代到来において,Macは残るのか。

 私はクリエイティブな作業をするプラットフォームとして残るだろうと考えます。そのうち,ハードウェアも融合していくのかも知れませんが,少なくとも開発環境としてのMacに値するものが残っていくことは確実だと考えます。

 まあ,その時代にはもっと新しいコンピューティングの世界が開けているとは思います。新しいハードウェアの形もソフトウェアの形も,またその時代を踏まえて変わっていくことになるのでしょう。

 とにかくWWDC2011は記念碑的なイベントになると思います。参加できないけど...。

 JR東海・西日本の新幹線予約サービス「エクスプレス予約」(EX予約)をスマートフォンで使うためのアプリを新規アプリとして開発することにします。

 すでに既存アプリについては概観しました。どのアプリもPC向け予約サイトをスマートフォンの画面に表示するための調整をするアプローチをとったものでした。そこに自動ログイン機能などが追加された形です。

 このアプローチは,PC用予約サイトの使い方を知っていればその知識を踏まえてつかえるというメリットはあります。一方で,どうしても小さい画面で操作しなければならず使いづらいというデメリットもあります。

 そうした現状に対して,とうとうJR側も重い腰を上げて,EX予約サイトをスマートフォンに対応させる意向を表明しました。

 となれば,標準ブラウザで快適な利用ができるのも時間の問題。既存アプリにとっても,自動ログイン機能のメリットはそのままにサイト側の改善で使いやすくなるので,一気に問題解決に向かいます。

 新しいアプリを開発する余地は無いのではないか,とも考えられます。

 しかし逆に、技術的なチャレンジができるという色合いも強まり,隙間時間プログラマーとしては興味の増すところです。採算は悪いですが、趣味の範疇のチャレンジとしては面白い。

--

 新規アプリは,iPhoneアプリらしくUIKitでインターフェイスを構築して操作できるEX予約アプリにすることにしました。

 既存のアプリのような調整型Webブラウザ方式じゃありません。

 Interface Builder(Xcode4では統合されちゃいましたが...)でボタンやラベル,テーブルビューやピッカービューを配置するような,ふつ〜のアプリにします。

 PC向けのEX予約サイトの中身に準じるとしても,Webの画面をそのまま出すのではなく,すべてアプリで覆い隠しちゃいましょうということです。

 それが出来たら,EX予約がもっと使いやすくなるはずです。

 つまり,EX予約専用アプリをゼロからつくろうというアイデアです。

--

 アイデア段階は楽しいのですが,実際のアプリにするためには,どんな条件が必要なのでしょうか。開発過程を構想してみます。

 既存アプリは,画面表示に調整を加える形のWebブラウザです。そのため画面調整と自動ログインの手続き以外,EX予約部分に関してはユーザーとJRのサーバーに仕事を任せているだけです。

 「Rapidy新幹線予約」はメニューアシスト機能があり,Webの画面に表示されているメニュー情報を読み取って処理しているようですが,予約画面を調整したら,そのまま表示しているという点は変わりません。

 要するに,基本的に既存アプリはEX予約サイトの手続き内容を理解して動いているわけではないということです。

 理解しているのは表示調整に必要なhtmlで記述された情報だけ。その他は,もともとiPhoneに備わっているWebブラウザ機能に任せればいいのです。もともとSafariブラウザのブックマークレットという裏技が発祥ですから,当然ですね。

 さて,もしもWebの画面をWebブラウザ機能に頼らず,すべて専用部品を使ったアプリ画面に置き換えるとしたら,どうでしょうか。

 それはつまり,自分自身でWebブラウザ機能がしていた機能をゼロから作るということです。htmlファイルを読み取って,理解させて,ルールにもとづいて画面を構成しなければなりません。

 新規アプリをつくるためには,EX予約サイトのhtmlを読み取って,それを解読して,必要な情報を表示した上で,必要な情報を送り返して,次の画面に移動(遷移)するという作業を埋め込まなければならないということです。

  • html受信
  • html解析
  • 予約手続き情報の処理
  • アプリ画面への表示
  • 選択操作
  • 情報送信
 なかなか大変そうです。

--

 htmlを受信して解析するなら簡単簡単とお思いの方もいるかも知れません。

 最近のiOSプログラム関連書でもRSSリーダーアプリがサンプルとして示されていることも多くなって,それを応用すれば情報を読み取って表示させることは難しくないように思えます。

 実際,基本的な仕組みは同じです。とすれば,あんまり心配することもないかも知れません。

 ただし,一筋縄ではいかないのが世の常。そもそも,読み取るべきhtml画面の数はいくつあるのか分かりません。
 Webブラウザ機能に任せればhtmlの変更があっても心配いりませんが,自分で解読する場合にはプログラムの修正が必要になることもあります。
 それに加えて,EX予約サイトは単純なホームページとは違って,セッション接続して手続きを進めます。接続する度に手続きのための番号が変るということで,これにきちんと対応しなければならないのです。

 というわけで,ゼロからつくるにあたって,まずはEX予約サイトをじっくりと分析する必要があります。

 JR東海の「エクスプレス予約」(以下,EX予約)は東海道・山陽新幹線のための予約サービスです。

 先日(3/19)サイトのリニューアルもされましたが,もともとは2001年から始まっており,すでに10年間の歴史を積み重ねています。

 またサービスの目玉の一つである「チケットレス」サービスは,ICカードの導入によって券売や改札の手間を省いたところが利点です。

 その他の事柄はJRのサイトやWikipediaに情報がありますので省略しましょう。もともとは法人利用を想定した流れのようですが,会費を払えば一般利用も可能です。

--

 EX予約を利用するには,1) JR東海の「エクスプレスカード」会員になる,2) JR西日本の「J-WESTカード」会員になる,3) JR東日本の「ビューカード」会員となってさらに「ビュー・エクスプレス会員」申込をする,などの道筋があります。

 1と2で申し込むと,それぞれのクレジットカードとともに「EX-ICカード」が発行され,それを使うことによってチケットレス改札が可能になります。

 3の場合は少し手間で,「モバイルSuica」サービスを申し込んで携帯電話のIC機能を使えるようにしてから「ビュー・エクスプレス会員」にも申し込んで初めてチケットレスが可能です。残念ながらビューカードのICは使用できません。

 まあ,携帯電話で予約することが多いし,その携帯電話でそのまま改札を通ると考えれば,便利といえないこともない。1と2の場合,在来線用のICカードは別に必要ですから2枚重ねで改札をタッチしますが,3だと,モバイルSuica携帯電話一つでOKです。

--

 さて,そこで登場したのがiPhoneでした。

 iPhoneにはIC機能が付いていません。つまりEX-ICサービスはもちろん,Suicaもおサイフケータイ機能も使えないという弱点がありました。登場当時は,そこをよくネガティブに突かれていました。

 いまNFC機能と呼ばれるIC機能が次期モデルに搭載されるのかどうかといった話題がされていますが,だからといってSuicaやEX-ICとして使えるようになるわけではないので,iPhoneとEX予約の関係は,なかなか難しいということになっています。

 けれども,iPhoneは爆発的に利用者を増やしましたし,特にビジネスマンにとってスマートフォンの多機能性は強い味方として受け入れられています。

 となれば,どうしてもiPhoneなどスマートフォンでもEX予約をうまく利用したい。IC機能はダメでも,予約くらいは対応できないか。そういう願いが強くなります。

--

 単純素朴にEX予約サイトをiPhoneから利用できないか...。

 そういう考えから,iPhoneのSafariブラウザでアクセスするも,多くの人達が頭を抱えることになりました。

 「使いにくい...(あるいは,使えない...)」

 PC用の予約サイトをiPhoneの小さな画面に表示させると,様々な問題があると分かってきたのです。

 端的に言えば,EX予約サイトの画面は設計が特殊なため,表示させられないことはないが,操作が使い物にならない程度に複雑になってしまうのです。

 ボタンの押し難さもさることながら,分割された画面の中に表示される情報をスクロールするのに苦労しなければならず,とてもiPhoneらしからぬ使い勝手になるのです。


 そこで,もともとシンプルな携帯電話用ページを使えば問題を解決できるのではないかと考えた人もいました。

 しかし,これはあっけなく失敗。

 EX予約の携帯電話向けサイトは,携帯電話会社経由での接続かどうかをチェックしているため,スマートフォンのような一度インターネットの公開部分を経由してから接続する仕組みの機器では受け付けてくれないのです。

 ということは,PC用のサイトを何とかするしかない。そう考えたある人が,当時ホームページを閲覧するのが便利になる「ブックマークレット」という裏技的(?)手法で少しでもiPhoneでサイトを見やすくする工夫を編み出しました。

 普段使うSafariブラウザにセットすればよいのですが,初心者にはなかなか難しいかも知れないということで,これをアプリにしたものがリリースされたというわけです。

 参考リンク→「エクスプレス予約をiPhoneで使う」(yoshimasa niwaさんのブログ)

--

 前置き大変長くなりましたが,いま公開されているアプリを探してみましょう。

○「Rapidy新幹線予約」(点スイッチ) 230円
○「EX予約ブラウザ」(Takuya Murakami) 115円
○「i新幹線予約」(taisuke fujita) 無料

ちなみにAndroid向けも覗いてみましょうか。

○「BooXpress」(yanzm) 無料

○「EX予約ブラウザ」(Takuya Murakami) 無料

 最後のアプリは同名のiPhoneアプリのAndroid版という事になりますが,こちらは無料で提供されています。

--

 まず最初にひとまとめで説明すると,これらはすべて上記の「ブックマークレット」という技と同じようなアプローチ,つまりPC用サイトをiPhoneあるいはiPadにある程度整えて表示するという方法を採用したアプリです。

 要するにEX予約専用のWebブラウザ。

 それに会員番号やパスワードを入力する手間を省く「自動ログイン」をつけたり,空席や料金情報のページも切り替えて見せたり,操作を手助けする機能をつけたりしているものです。


【Rapidy新幹線予約】

 ブックマークレットのアイデアを提供した方自身でつくったアプリ。デザインセンスがよく,自動ログイン機能,操作のアシスト機能,そしてiPad対応など,貫録も見せます。230円という値段もそれゆえといったところ。

 アカウント登録は一つまで。ログイン画面のURLを設定可能。アプリ起動時のロック機能は無し。

【EX予約】

 同じアイデアを使って先にリリースされたのがこちらのアプリ。自動ログインとパスコードロック(起動時のロック)機能があるシンプルなもの。
 アンドロイド版は,パスコードロック機能はなく。単純に自動ログイン機能の追加だけとなっています。

 アカウント登録は一つまで。iPhone版のみアプリ起動時のロック機能有り。

【i新幹線予約】

 iPhoneでは唯一無料のアプリ。自動ログイン機能はもちろん,タブの画面切り替えで「空席照会」「運賃ナビ」という別のサイトの情報も確認できる。画面を横にすればタブが消えてくれるので,ちょっと見やすい。

 アカウント登録は一つまで。パスワードだけは保存されないので毎回入力。起動時のロック機能は無し。

【BooXpress】

 こちらはAndroidアプリ。こちらも自動ログイン機能がついたシンプルなもの。メニューを開くといつでもログイン画面に戻るためのHomeボタンがあったりはする。

 アカウント登録は2つ可能。どちらでログインするかを選択しておく設定項目がある。接続切れ問題を防ぐための画面遷移待機時間を調整する設定項目もある。

--


 以上のことから,


  • 自動ログイン機能

  • 複数のアカウント登録

  • 起動時のロック機能


といった機能が欲しいところ。

余裕があれば空席照会や運賃表など


  • 補足情報の表示機能

  • 接続切れ対策機能


も搭載する,というのが既存のアプリの形になりそうです。

--

 個々のアプリに対するユーザーレビューを見ると,良い評価ばかりではないことが分かります。

 スマートフォン上でEX予約サイトを利用しやすくしている点は評価しつつも,動作が遅いであるとか,落ちて予約できなかっただとか,サイトのリニューアルなどあるとログインできなくなったとか,実に様々な指摘が過去に出ています。

 個々のアプリの対応は異なります。素早く問題に対処したり,サイト側の変更でいつの間にか問題が解決していたり,複雑な予約をしなければよいといったユーザー側の対処でしのいだり...。なかなか大変そうです。

 特にEX予約サイトの特殊性が開発者,ユーザー泣かせなところがあるようです。

 BooXpressのレビューを見ると,予約サイトとのセッション切れという問題が起こるため,わざと各Webページ読み込み時に待機時間を数秒設けて遅くしているという苦渋の対処を余儀なくされていることが分かります。これがEX予約サイトの特殊性の一つとして指摘されている問題です。

 興味深いことは,こうした紆余曲折の中,JRは昨年後半に一旦はスマートフォンは未対応とあらためて宣言すると同時に,Omni miniブラウザを「携帯表示」モードにすれば使えるかもねぇ...という情報をWebページに掲載しました。

 というわけで,いまのところユーザーは,アプリを使える人はアプリを使って自動ログインなどの恩恵を受けたり,アプリが安定して使えない人はOmni miniブラウザを使うなどのように個別状況判断しているのが実態のようです。

 そして,JRは利用者の声に押されたのか,2011年1月31日「スマートフォンによるエクスプレス予約ご利用について」というお知らせを掲載して,スマートフォンへの対応を予告したというわけです。

 以上が,エクスプレス予約サービスと既存アプリのレビューです。

 2本目のアプリの開発と記録を始めます。

 開発は初期段階にあるので,完成するかも,リリースするかも分かりません。だとすれば,記録ぐらいは残しておくかなという感じです。


 1本目のアプリの改善を後回しにして2本目に取り掛かるのは,2本目をスクラッチで作ることでプログラミングのノウハウをさらに得てから1本目に戻った方がより良いと考えたからです。

 1本目の「Ride on Time」は,東京暮らしで欲しいと思った時刻表アプリを勢いで作ったものでした。そのためプログラム的にはMVCをあまり考慮せず,分割整理されていないソースコードとなっていました。

 2本目のアプリは,その辺を少し意識して設計・プログラミングすることでノウハウを得ようという訳です。

--

 さて,動機はともあれ,2本目のアプリとして何を開発するのか。

 やはり欲しいと思ったものを作るのが一番なので,1本目を開発するにあたって同時に欲していたアプリにすることにしました。東京暮らしの最後に遭遇した鉄道関係の体験に由来するものです。

 短期間の間に新幹線を使ってあちらこちらへ移動するという体験をしました。仕事で頻繁に使用する人間ではなかったので,新幹線を日常遣い的に乗る体験は新鮮でした。

 そのときに大変役に立ったのがJR東海の「エクスプレス予約」(EX予約)サービスとIC乗車券によるタッチ改札でした。これは帰省するときに利用していたのですが,普段遣いの乗車だとさらに効果を発揮することが体感的に理解できました。

 けれども,当時のEX予約はiPhoneには対応していませんでした。現時点でも対応していません。

 そこで「EX予約が出来るアプリが欲しい」という願いが出てくることになります。この願いを持つ人はかなり多いようです。

 2本目は「EX予約アプリ」にすることにしました。

--

 あとで検討しますが,EX予約をスマートフォンで使いたいという要望に応えるためのいくつかのアプリがiPhone用やAndroid用にリリースされています。

 また,JR東海は2011年に入ってスマートフォンの普及に対応するための取組みを発表しましたので,直に予約サイトがiPhoneで使いやすくなると思います。


 ということはEX予約アプリを新規につくる意味はないんじゃないか?という風にも考えられます。

 けれども,他の多くのアプリと同様,同じ目的を達成するとしても様々なアプローチが併存して選択できることは悪い事ではないはずです。

 しかも,現在リリースされているEX予約アプリは,ほとんど同じアプローチで開発されており,正直「予約は可能だけど使いやすくはない」と感じます。これは新規アプリを開発するに十分な理由です。

 まあ,出来るかどうかは分かりませんから,とにかく挑戦することにしたわけです。うまくいけば完成して,ちょっと違うEX予約への道筋がつくかも知れません。

 iOSに名前が変わる前後で,また大量の開発/プログラミング関連図書が発行されました。発行順はすっかりわからなくなってしまいましたが,羅列してみましょう。


【iOSプログラミング】

○よくわかる開発の教科書
 オールカラーのクックブック的な入門書。

○基礎からの改訂版
 定番の入門書もiOS向けに改訂。iPadプログラミングの章が増える。

○デバッグ&最適化技法
 メモリ管理などに関して解説。Xcode4.0のスクリーンショットを採用。

○UIKit詳解リファレンス
 UIKitのクラスやメソッドを網羅した便利なリファレンス。必携。

○開発のレシピ

○アプリを作ろう!

○基礎から学ぶアプリ開発
 『Objective-C逆引きハンドブック』の姉妹本。

○オートマティズム
 MVCでアプリを組むための設計心構えとコードのパターンを解説。知識整理に役立つ。

○デジカメプログラミング

○そのまま使える

○iOS108

○プログラミングバイブル

○iOS SDK HACKS

○オモチャ箱

○iOS4

○電子書籍アプリ開発

○iPhoneプログラミング入門

○iPadプログラミング

○iPhone/iPad/Androidプログラミング入門
 「日経ソフトウェア」誌の記事の再編集ムック。

○Adobe FlashでつくるiOSアプリ
 Adobe Flash CS5でアプリ書きだしする方法などを紹介。


【ゲームプログラミング】

○ゲーム開発ガイド

○ゲームプログラミング

○そのまま使えるゲームプログラミング

○シューティングゲーム

○OpenGL

○OpenGL ES


【Objective-C】

○つくって覚える
 アプリを作りながら言語を紹介するクックブック式入門書。

○世界一わかりやすい
 会話形式でObjective-C言語を解説。

○荻原本改訂版
 最強の言語本も改訂。

○はじめての

--

 驚きなのはObjective-Cの本もいろいろ出てきたこと。いやはや,iPhone/iPadのメジャー振りは凄いですね。

 長らく更新してませんでした。

 昨年11月下旬から今日まで,Mac App Storeが生まれたり,iPad2が登場して,本当にiOS 4.3が登場したりとApple的には賑やかな出来事が続いています。

 そしてXcode 4.0も正式リリースされました。とりあえずiOS 4.3環境をターゲットに開発を再開してみることにしました。

 東日本大震災が起こり,心が落ち着かない日々なのですが,だからこそプログラミングでもして気持ちを落ち着けようかと思った次第です。

--

 以前リリースした時刻表アプリ「Ride on Time」の改善にも取り組まなければならないと考えているのですが,まだ満足いく改善デザインを思い描けていないため,もう少し後で取り組むことにしました。

 試行錯誤しながらコーディングしたアプリなので,ソースコードがスパゲッティ化していることも作業に取り掛かることを難しくしている理由です。

 辛抱して活用し,改善を待ち望んでいる皆さんには大変申し訳ないのですが,新しいアプリを先に開発することにしました。

--