iPhoneアプリ「ITpro」が新しくなった。iPhoneをお持ちの方は、App Storeで「ITpro」と検索すれば、表示できる(iTunes Storeへのリンクはこちら)。利用は無料だ。新版のバージョンは2.0。開発を担当した日経Linux編集部が新機能の特徴と使い方、採用技術などを解説する。なお、従来のバージョン1.xについてはこちらを見ていただきたい。(ITpro)


 新バージョン2.0では全体的に、ITproのイメージカラーである青い背景に白文字というデザインに変更。記事本文のフォントを大きくし行間を空けることで、読みやすくした(写真1)。それ以外に、様々な新機能を追加した。旧版からの主な変更点は次の通りである。

(1)iOS 4 マルチタスクへの対応

写真1●トップ画面
[画像のクリックで拡大表示]

 「ITpro 2.0」は、iPhoneのマルチタスク対応OS「iOS 4.0」以上で動作する。iOS 4のマルチタスクに対応したアプリは、ホームボタンを押すと終了せずにサスペンド(バックグラウンドに移行)する。再びアイコンをタップすると、フォアグラウンドに復帰し、以前の状態から再開できる。

 アプリケーションが「マルチタスクに対応」というと違和感を覚える人がいるかもしれない。 一般にマルチタスクOSでは、アプリケーション側でマルチタスクを意識する必要はないからである。ここでいうマルチタスクとは、カーネルレベルのマルチタスクではなく、iPhone OSの機能としての「マルチタスク」である。このiOSのマルチタスク機能を使うには、アプリ側での“対応”が必要となっている。ちなみにiPhone OSのカーネルは以前から「Mach」を用いておりもともとピュアなマルチタスクOSである。

 従来のITproアプリはiOS 3以前を想定していたため、OS4.0上で動かすことはできるものの、マルチタスクを有効に使えずホームボタンを押すと実質的に終了していた。ITproアプリは今回の2.0で初めてiOS 4およびマルチタスクに対応。iPhone 3GSやiPhone 4であれば、フォアグランド復帰時に記事の続きから読むことができる。

 iPhoneアプリをマルチタスクに対応させるには通常、iOS 4.0をターゲットにしてアプリをソースから再ビルドするだけで済むが、コードの修正が必要な場合もある。ITpro2.0の場合、ネットワークからのデータ取得処理を別スレッドで実行しているため、スレッド関連処理でIOS 4.0対応の修正が必要だった。

 ただ、マルチタスクに対応したといっても、残念ながら記事のデータをバックグラウンドで取得できるわけではない。バックグラウンドで実行できるメソッドは限られており、ネットアクセスは実行できないからだ。またiPhone 3Gでは、iOS 4を導入してもこのマルチタスク機能が有効にならないため、ホームボタンを押すとアプリが終了する。

(2)オフライン閲覧対応

 新版では、ダウンロードした全記事のタイトルと要約本文をキャッシュとして持ち、地下鉄内などネットワークが使えないところでも読めるようにした。

 ITproアプリは、「ITpro総合」のほか、「記者の眼」「ニュース」など6つの記事カテゴリーをそれぞれ別の「タブ」に割り当てている。タブに登録するカテゴリーは、設定アプリ(写真2)で選択できる(写真3)。

写真2●設定アプリで設定できる
[画像のクリックで拡大表示]
写真3●記事カテゴリーの選択
[画像のクリックで拡大表示]

 タブをタッチすると、そのカテゴリーの記事タイトルが一覧され、各タイトルをタッチするとその要約文を読むことができる。従来のバージョンでは、カテゴリーのタブをタッチしたときにサーバーから記事を取得する仕組みだった。そのため地下鉄のトンネル内などでは、他のカテゴリーの記事に切り替えられなかった。例えば、地下鉄内で「ニュース」を読んでいて、途中で「記者の眼」を読もうとしても、記者の眼は別カテゴリーであるため、「network error」となっていた。

 新版では、起動時や全ページ更新時に全ページをいったんダウンロードしキャッシュとして保存するようにした。これにより、記事カテゴリーのタブ時にネットアクセスが不要になり、地下鉄内でも自由に他のカテゴリーの記事を要約文読めるようになった。

 全ページをダウンロードするタイミングは、アプリの起動時またはバックグラウンド(サスペンド)からフォアグラウンドへの復帰時である。復帰時に毎回、全ページ更新するか、それとも1日1回のみにするかは設定で変えることができる(写真4)。

 「1日に1回」の設定では、フォアグラウンド復帰時に現在時刻と前回の全ページ更新時刻とを比較。前回の全ページ更新時から日付が変わって、かつ午前6時を過ぎていた場合に全ページ更新を確認するアクションシートが現れる(写真5)。日付変更をチェックするのは、1日に何度もアクションシートが現れるのを防ぐため。また、午前0時ではなく、6時としたのは、、「ニュース」や「記者の眼」、「キーワード」などカテゴリによって、最新RSSが配信されるタイミングが異なるためだ。早朝にならないと更新されないケースもある。

写真4●全ページ更新のタイミングを設定
[画像のクリックで拡大表示]
写真5●全ページ更新の確認
[画像のクリックで拡大表示]

 例えば、朝起きてITproアプリで記事を読み、ホームボタンを押していったんサスペンドさせ、次の日の朝にITproアプリを開くと、「全ページ更新しますか」というダイアログが現れる。そこで全ページを一気に更新できる。一方、朝ITproアプリで記事を読み、同じ日の昼にまたITproアプリを開く場合は、日付が変わっていないため全ページ更新ダイアログは表示されない。

 この全ページ更新機能ではユーザーの操作感を損なわないように、現在表示中のページのみをまず更新して、ユーザーがその記事を読んでいる間に他のページをすべてダウンロードするようにした。3G回線では7つのカテゴリーのすべてをダウンロードするには時間がかかる。すべてのページをダウンロードしてから記事リストを表示するのでは、遅くてたまらない。そこで、見かけ上は1カテゴリーだけの更新にして、実は裏で全カテゴリーの記事を取得する。これは、ネットワークからのデータ取得を別スレッド処理にした理由でもある。