SHOEISHA iD

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

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

近未来の技術トレンドを先取り! 「Tech-Sketch」出張所

スマホのネイティブアプリでSocket.IOを利用する

近未来の技術トレンドを先取り! 「Tech-Sketch」出張所 第2回


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

 「Tech-Sketch」出張所の連載第2回は、スマートデバイスとリアルタイムWebについて解説します。第1回では「情報の更新をリアルタイムに反映し共有する概念やその仕組み」として"リアルタイムWeb"を、そしてリアルタイムWebを実装するためのライブラリとしてSocket.IOを紹介しました。

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

 しかしその「リアルタイムな情報」を、「PCの前にいるときにPCのブラウザで」しか受け取れないとしたら、そのリアルタイムなパワーが半減してしまいます。スマートフォンやタブレット(以降スマートデバイス)の普及が加速し、「いつでもどこでも手軽に情報に接すること」が当たり前になりつつある昨今、「リアルタイムな情報」をスマートデバイスから送受信することで、さらにリアルタイムWebの可能性が広がるのです。

 本記事では、スマートデバイスをSocket.IOのクライアントにする方法について解説します。Tech-Sketchに掲載した元ネタはこちらです。

HTML5とネイティブアプリ

 第1回で紹介したSocket.IOSupported browsersを確認すると、iPhoneやiPadのSafari、AndroidのWebkitなどがサポートされていることが分かります。よって、スマートデバイスのブラウザからリアルタイムに情報を送受信するだけであれば、Socket.IOのクライアント側JavaScriptコードをスマートデバイスのブラウザ上で動作させれば事足ります。実際、第1回で作成したチャットアプリは、iOS上のSafariやAndroid上のWebKitやChromeでそのまま動作します。

 しかし「スマートデバイスのブラウザ(のHTML5とJavaScript)ができること」以上の機能を実現したい場合、ネイティブアプリを実装せざるを得ません。例えばカメラやマイク、加速度センサーなどの生のセンサー情報を扱う場合や、3Dグラフィックスをバリバリ動作させる場合などです。

 WebRTCWebGLといったHTML5とそれに付随する規格がスマートデバイスのブラウザにも実装され、性能がさらに向上すれば、ブラウザとJavaScriptのみでカメラや音声を扱い、3Dグラフィックスを滑らかに動作できるようになるでしょう。しかしそれまでは、ネイティブアプリで実装するという選択肢を取らざるを得ません。

ネイティブアプリとSocket.IO

 では実際に、iOSネイティブアプリとAndroidネイティブアプリをSocket.IOのクライアントとし、第1回で作成したSocket.IOによるチャットサーバへ接続してみましょう。

 なお、iOSの場合はUIWebView、Androidの場合はWebViewを用いれば、公式のSocket.IO JavaScriptクライアントライブラリを内包したHTML経由でSocket.IOサーバへ接続することも可能です。ただしパフォーマンス面で難がありますし、クライアント側が複数の言語で構成され煩雑になるので、今回はObjective-CとJavaそれぞれのネイティブライブラリから直接Socket.IOサーバへ接続する方法を紹介します。

 なお、以降で紹介するソースコードには省略されている部分があります。完全なソースコードは、Tech-Sketchのgithubを参照してください。

iOS:AZSocketIO

 では最初に、iOSネイティブのSocket.IOクライアントを実装してみましょう。

 Socket.IOの公式Wikiでは、Objective-Cで書かれたSocket.IOライブラリとして「pkyeck/socket.IO-objc」が紹介されています。ただ、このpkyeckのsocket.IOライブラリはCocoaPodsと相性が悪いようで、依存するライブラリを1つずつインストールする必要があります。そこで今回は、CocoaPodsで簡単にインストールできるAZSocketIOを用います。

CocoaPodsとは

 CocoaPodsとは、Objective-C用のパッケージ管理システムです。RubyでのBundlerやNode.jsでのnpmに相当します。

 CocoaPodsを利用すると、githubなどから依存ライブラリを自動ダウンロードしてくれるだけでなく、ARCコードとnonARCコードそれぞれのビルドオプションの設定やヘッダサーチパスの追加など、面倒なプロジェクト設定をすべて自動で行います。

 大変便利なので、利用可能な場合はCocoaPodsを利用すべきでしょう。

 CocoaPodsの詳細は公式サイトTech-Sketchの記事を参考にしてください。

依存ライブラリの定義

 Xcodeプロジェクトのプロジェクトファイル(XXX.xcodeproj)と同じディレクトリに、下記podfileを作成します。

platform :ios, '5.0'
pod 'AFNetworking'
pod 'SocketRocket'
pod 'AZSocketIO', '~> 0.0.4'

 このpodfileでは、ターゲットとなるプラットフォームを、iOS 5.0と定義しています。Xcodeで指定されているDeployment Targetバージョンと一致させてください。

 またAZSocketIOはバージョンを "~>0.0.4"と指定しているため、0.0.4~0.0.9の中から最新バージョンが選択されます。

依存ライブラリのインストール

 ターミナルから"pod install"を実行すれば、podfileに指定した依存ライブラリがダウンロードされ、適切にビルド設定が行われたXcodeワークスペース(XXX.xcworkspace)が生成されます。

 以降は、生成されたXcodeワークスペースで開発を行います。

会員登録無料すると、続きをお読みいただけます

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

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

メールバックナンバー

次のページ
Android:socket.io-java-client

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

  • X ポスト
  • このエントリーをはてなブックマークに追加
近未来の技術トレンドを先取り! 「Tech-Sketch」出張所連載記事一覧

もっと読む

この記事の著者

松井 暢之(TIS株式会社)(マツイ ノブユキ)

TIS株式会社 コーポレート本部 戦略技術センターに所属。アーキテクチャ設計やデータモデル策定、フレームワーク構築などバックエンド側のアーキテクトとしてプロジェクトに従事していたが、現部門への異動を契機に戦略技術の検証や新規サービスの事業企画に軸足を移す。近頃はなぜか、インフラ・運用のパターン化と自動化を目...

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

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

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/7076 2013/07/17 16:22

おすすめ

アクセスランキング

アクセスランキング

イベント

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

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

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

メールバックナンバー

アクセスランキング

アクセスランキング