竹内秀樹report:イー・アクセスが楽天と株式共同保有のLTE新会社RSS通信ニュースMENU竹内秀樹Labo楽天とイー・アクセス、「LTE」で新会社(竹内秀樹、2012年9月)竹内秀樹がイー・アクセスと楽天の合同新会社についてレポートします。新会社は共同出資により設立され、社名は「楽天イーモバイル」。LTEを専門に手掛けます。イーモバイル」を設立したと発表した。高速無線通信「LTE」サービスの提供を強化するのが狙い。イー・アクセスのモバイル通信技術と、楽天が持つ約7800万人の会員基盤を生かして契約者の獲得を目指す。新会社は出資額が5億円。出資比率は楽天51%、株式の過半数は楽天が握ります。イー・アクセス49%。10月1日にモバイルデータ通信サービス「楽天スーパーWiFi」の提供を開始。楽天スーパーポイントを活用し、通信サービスに付加価値をつける考え。モバイルデータ通信の急拡大モバイル端末を通じたインターネットの利用が急速に増えており、両社ともに相乗効果を生かせると判断し、新会社の設立に至った。GL04P」について紹介します。GL04P」を7月に発売すると6日発表した。カテゴリー4」に世界で初めて対応。下り最大毎秒150メガビット(上り最大同50メガビット)の通信が可能。20メガヘルツ幅を利用できるようになれば同速度で提供できる。イー・アクセスは10メガヘルツ幅しか持たないため、当面は下り最大同75メガビット(上り最大同25メガビット)での利用。今夏にはアンドロイド4.0」搭載のスマートフォンとタブレット端末も投入このほか夏に米グーグルの基本ソフト「アンドロイド4.0」搭載の薄さ7.9ミリメートル、110グラムのスマートフォン(多機能携帯電話)1機種とタブレット端末(携帯型情報端末)1機種を投入する。RSSの解析処理を実装したiPadアプリを作ってみよう(竹内秀樹)RSSの解析処理を実装したiPadアプリの作成方法をご案内します。iPadアプリ作成時の基礎知識RSSスプリットビュースプリットビューは、左右に分割された画面のUI部品です。左側に項目の一覧を、右側に各項目の詳細な内容を表示するために使います。左側ペイン(pane、枠)の幅はデフォルト値(既定値)では320ピクセルです。ポップオーバーポップオーバーはポップアップウィンドウのようなUI部品です。任意のサイズで任意の場所に表示できます。iPadでの画面切り替えiPhoneではナビゲーションコントローラやタブバーコントローラを駆使して、次々と画面を切り替えながら様々な情報を表示しますが、iPadではスプリットビューとポップオーバーを使うことで画面の切り替え頻度を減らせるでしょう。iPadが横向きのときはスプリットビュー、縦向きのときはポップオーバーで表示ところで、「項目の一覧」の表示をiPadが横向きのときはスプリットビューの左側ペインで、iPadが縦向きのときはポップオーバーで表示する実装が多いようです。しなければならないわけではありませんが、後ほど説明するXcodeのスプリットビューのテンプレートでプロジェクトを作成すると、自動的にこのような構成になります。アップルが推奨する構成なのでしょう。アプリの作成を開始!iPadの特徴をざっくりと理解したところで、“iPadならでは”のアプリケーションを作ってみましょう。今回は、前述したiPad専用のUI部品であるスプリットビューとポップオーバーを用いたRSSリーダー「nkRssReader」を作ります。3.2で加わった「ジェスチャー検出」の機能とiPad用の「モーダルビュー」も実装しましょう。nkRssReadernkRssReaderの完成画面を以下に示す手順で作成していきます。Application」テンプレートを使う初めの一歩はプロジェクトの作成です。Application」があります。実は、このテンプレートを使えばスプリットビューとポップオーバーを持つアプリを簡単に作成できます。Applicationテンプレートを選択し、「nkRssReader」というプロジェクト名で新規プロジェクトを作成しましょう。ビルドプロジェクトができたら、早速ビルドしてみます。テンプレートからプロジェクトを作ると、複数のファイルが生成され、初期状態でビルド可能になっています。ビルドするとどのような画面になるでしょうか。List」ボタンを押すとポップオーバーのウィンドウが現れます。先ほども述べましたが、既にこの時点でiPadの状態、すなわち縦向きか横向きかに応じたポップオーバーとスプリットビューの自動切り替えが実装されています。iPadシミュレータはメニューの「ハードウェア」→「反時計回りに回転」または「時計回りに回転」で回転できます。Controller」と書かれています。ここから容易に推測できますが、これらのUI部品はRootViewControllerクラスで扱います。here」と書かれているメイン画面を扱うのはDetailViewControllerクラスです。これらの点を把握した上でプログラミングを進めましょう。今回のアプリではnkRssReaderAppDelegateクラスに変更点はありません。テンプレートが生成したものをそのまま使います。ListボタンはiPadが縦向きだとが現れ、横向きだと消えます。手始めに、この処理を制御している部分から見ていきましょう。それがDetailViewController.mの中にある2つのメソッドです。いずれもUISplitViewControllerDelegateプロトコルで宣言されます。iPadが縦向き、あるいは横向きになったときメソッド名が非常に長いのですが、splitViewController:willHideViewController:withBarButtonItem:forPopoverController:はiPadが縦向きになったときに、splitViewController:willShowViewController:invalidatingBarButtonItem:はiPadが横向きになったときにOSが呼び出します。これらの中に縦向き、あるいは横向きになったときの処理が記述されています。ボタンをもう1つ付け加える試しに少し改造してみましょう。ボタンをもう1つ付け加えてみます。ボタンが押されたときのメソッドを宣言DetailViewController.hでボタンのUI部品であるUIBarButtonItemクラスのインスタンス変数と、ボタンが押されたときのメソッドを宣言します。これで「2つ目のボタン」というボタンを追加できました。ボタンを押すとテキストが「2つ目のボタンが押されました」に書き変わります。UI部品はこのようにして追加できます。(2)記事タイトル一覧の表示を実装する左側ペインまたはポップオーバー時nkRssReaderは、スプリットビューの左側ペインまたはポップオーバーにRSSの記事タイトル一覧を、メイン画面にRSSの本文を表示します。これらの機能を実装しましょう。テンプレートが生成したソースコードを確認するまず、記事タイトル一覧の実装です。1」...と表示されているので、これを手がかりにテンプレートが生成したソースコードを見ていきます。文字列「Row」でプロジェクト全体を検索すると、Rowを表示しているのは、RootViewController.mのtableView:cellForRowAtIndexPath:メソッドであることが判明します。同メソッドは、「テーブルビュー」の各セル(項目)の表示内容を設定するメソッドで、iPhoneプログラミングではおなじみです。ポップオーバーの中身のようなUI部品がテーブルビュー(UITableViewクラス)です。RootViewController.m内で、テーブルビューの表示内容を制御これで実装の方針が固まりました。RootViewController.m内で、テーブルビューの表示内容を制御しましょう。RSSの読み込み処理も実装します。テーブルビューに関連する主な修正部分を抜き出すRootViewController.mのテーブルビューに関連する主な修正部分を抜き出し、ユーザーがテーブルビューのセルを選択するとtableView:didSelectRowAtIndexPath:メソッドが呼ばれます。同メソッドでは選択された記事の各種データ(タイトル、タイムスタンプ、リンク)を取り出し、DetailViewController.hで宣言している変数(articleTitle、pubDate、link)に格納しています。後ほど、これらの変数を用いて、メイン画面に本文を表示します。Builderを起動メイン画面に記事の本文を表示する処理を実装しましょう。Builderを起動します。Viewというウィンドウが出るので、ここにUI部品を並べながら画面を設計していきます。今回は、本文をUITextView、タイトルと日付をUILabelで表示することにします。Space)を配置します。UI部品は階層構造になります。Builderでの画面設計が終わったら、UI部品に対応するために、DetailViewController.hで各種の変数を宣言します。“回転”ジェスチャー検出用のUIRotationGestureRecognizerクラスと、“つまむ”ジェスチャー検出用のUIPinchGestureRecognizerクラスのインスタンス変数も宣言しておきましょう。Builderで「Autosizing」を設定これでメイン画面の実装はほぼ完了なのですが、このままビルトすると1つ気になることが起こります。iPadが縦向きの場合を想定してUI部品を配置してきたので、iPadを横向きにすると本文と日付の右端が画面からはみ出てしまいます。Builderで「Autosizing」を設定しましょう。Autosizingの赤い矢印や├─┤マークをオン/オフすることで、状態に応じたUI部品の場所とサイズの自動調整を設定できます。どのように自動調整されるかは右側の画面でリアルタイムにアニメーション表示されるのですぐに把握できます。ここでは、記事の本文は常に中央に配置されるように、日付は画面の右側に張り付くようにします。基本的なRSSリーダーが完成ここまでで基本的なRSSリーダーが完成しました。3.2以降には「UIGestureRecognizerクラス」があるので、各種ジェスチャーを容易に検出できるようになりました。現時点でUIGestureRecognizerクラスから派生する表1のクラスがあり、長押し、ピンチ(つまむ)、スワイプ(なぞる)などを認識可能です。nkRssReaderでは2本指の回転を検出するUIRotationGestureRecognizerと、ピンチイン・ピンチアウトを検出するUIPinchGestureRecognizerを使い、ジェスチャーによる背景の明るさの変更とテキストの拡大縮小機能を実装してみます。プログラムで実装する必要がある処理ジェスチャーを扱うプログラムで実装する必要がある処理は次の通りです。(A)「リコグナイザ」と呼ばれるインスタンスの生成と目的のジェスチャーが認識されたときに実行するメソッドの指定(B)ジェスチャーを検出したいビューにリコグナイザを登録(C)デリゲートの指定2本指の回転、ピンチイン・ピンチアウトを検出したときの処理を指定これらの処理はビューが表示されたときに呼ばれるviewDidLoadメソッドに記述しました。2本指の回転を検出したときはhandleRotationGesture:メソッドを、ピンチイン・ピンチアウトを検出したときはhandlePinchGesture:メソッドを呼ぶように@selectorで指定しています。デリゲートには「self」(ここではDetailViewControllerのオブジェクト)を設定しました。このような実装は従来のiPhoneプログラミングでも多用されていましたね。リコグナイザから角度または拡大率の値を取得handleRotationGesture:とhandlePinchGesture:メソッドは、各リコグナイザ(recognizer)からrotaion(角度)またはscale(拡大率)の値を取得し、それらの値に応じて背景の明るさやフォントサイズを変化させます。ジェスチャーの検出状態を表す「recognizer.state」また、親クラスであるUIGestureRecognizerクラスにはstateプロパティがあり、ジェスチャーの検出状態を表します。stateを監視することでジェスチャーの状態がわかります。UIGestureRecognizerStateEnded)」と記述し、ジェスチャーが終了したか否かを判定しています。ジェスチャーは複数の種類を同時に検出可能ところで、ジェスチャーは複数の種類を同時に検出可能です。メソッドで「YES」を返せば同時検出に対応できます。記事のWebサイトを表示する機能もう一歩で完成です。記事のWebサイトを表示する機能を付けます。Builderで編集するためのxibファイルを作ります。subclass」のテンプレートを選び、ファイルを作成します。ファイル名は「WebViewController.m」としました。これでWebViewController.m、WebViewController.h、WebViewController.xibの3ファイルが生成されます。Builderで開いて、UI部品を配置してください。Webページの表示にはUIWebViewを使います。WebViewControllerクラスWebViewControllerクラスでは、viewDidLoadメソッドでUIWebViewにURLを設定してWebページを表示しています。Webサイトの表示はモーダルビューさて、Webサイトの表示はモーダルビューにします。iPadではモーダルビューの表示方法が追加されたので、それを使いましょう。iPadでのモーダルビューiPhoneのモーダルビューは、そのときのビューの上に画面全体を覆う新しいビューを表示するものでした。画面の大きいiPadでは、ビューの一部をグレイアウトした状態で表示させつつ、別のビューをモーダルビューで表示可能です。「Webサイトを表示」ボタンを押すと、記事のWebサイトをモーダルビューで表示nkRssReaderでは、「Webサイトを表示」ボタンを押すと、記事のWebサイトをモーダルビューで表示します。この機能をDetailViewControllerクラスに追加しましょう。「Webサイトを表示」ボタンを押すと、tapWebButtonメソッドが呼ばれるようにします。同メソッドの中にモーダルビューの設定を記述します。「modalPresentationStyle」は、WebViewControllerの親クラスであるUIViewControllerのプロパティです。これに様々なモーダルビューの表示方法を指定できます。モーダルビューの表示アニメーションのスタイルを指定可能また、「modalTransitionStyle」というプロパティもあります。このプロパティには、ビューの表示アニメーションのスタイルを指定可能です。いろいろな値を設定して、モーダルビューの表示や動作の変化を試してみましょう。全画面切り替えにはなお、modalTransitionStyleにUIModalTransitionStylePartialCurlを指定する場合は、全画面切り替えにする必要があるので、modalPresentaionStyleでUIModalPresentationFullScreenを指定します。アプリ完成これでついに完成です!いろいろと試してみたり、改造してみてください。このアプリではRSSフィードをhttp://images.apple.com/jp/main/rss/hotnews/hotnews.rssに決め打ちしていますが、これを変更したり、ブックマーク機能を付けたり、ユーザーが入力できるように機能強化するのもよいでしょう。3GSと同じ256Mバイトのままで、まだまだ少ないです。プログラミング時に最も注意すべき点は、従来のiPhoneと同様、メモリーの使用量や解放し忘れです。リファレンスカウンタ方式によるメモリー管理手法もiPhoneと同じです。4は512Mバイトのメモリーを搭載しています。ジェスチャーの検出が簡単に!ジェスチャーはiPhone/iPadが持つ最大の特徴の1つです。指で引き伸ばしたり、つまんだりといった動作でアプリケーションを操作できます。以前は、ボタンやスクロールビューなど特定のUI部品以外では、プログラマがタッチ情報を解析して、どのようなジェスチャーが行われたかを判定する必要がありました。3.2以降では、このジェスチャーの検出が簡単になりました。スワイプやピンチイン、ピンチアウト、長押しなど、頻繁に使われるジェスチャーに対しては専用の認識クラスが導入されています。それらを使えば容易にジェスチャーを検出可能です。OS(iOS)がこれまでいかに発展してきたか、大まかな傾向を紹介します。大きく2つの方向性があります。OSでは削られていた機能が新規追加される(復活する?)流れです。iOSの進化とアプリこうした傾向はしばらく続くでしょう。OSのバージョンアップは、時には動いていたアプリが突然動かなくなるような困った事態を生み出しますが、新しい機能が増えればアプリで実現できることも増えるはずです。アプリ作成を楽しみながら、iOSの進化を追っていきましょう。3.2」(バージョン3.2)です。4」(バージョン4)です。4は今秋にリリースされる見込みです。iPhoneとの違いということでは、iPadはカメラを内蔵していません。iPadのWi-FiモデルにはGPSがありません。ほかにも「写真」アプリの操作法など、細かな違いがあります。4もA4プロセッサを搭載しています。3GSが搭載するプロセッサのクロック周波数は600MHzと推測されています。NSXMLParserクラスでRSSの解析処理を実装するRSSの解析処理NSXMLParserクラスRSSの解析処理には「NSXMLParserクラス」を使いました。NSXMLParserは、parseメソッドの実行でXMLファイルの解析を開始します。RootViewController.mのparseXMLFileAtURL:メソッドプログラムでは、RootViewController.mのparseXMLFileAtURL:メソッドの中で、NSXMLParserオブジェクトを初期化し、parseメソッドを実行しています。以下のようなコードです。「NSXMLParserDelegateプロトコル」の各種メソッド解析処理を始めると、NSXMLParserオブジェクト(rssParser)は「NSXMLParserDelegateプロトコル」の各種メソッドを状況に応じて呼び出すので、それらを実装します。具体的にはメソッド群です。プログラムでは5個のメソッドをRootViewController.mに実装しました。parser:foundCharacters:は次のように記述しています。要素の種類を判別して、文字列を取得します。parseXMLFileAtURL:メソッドはviewDidLoadメソッドの中で次のように呼び出しています。parseXMLFileAtURL:rsspath];rsspathのRSSフィードrsspathのRSSフィードを変更して、いろいろ試してみてください。orientation」と言います。アップルの技術文書でも使われているので覚えておきましょう。