Shoeisha Technology Media

CodeZine(コードジン)

記事種別から探す

iPhoneとRuby on Railsを超簡単に連携する ObjectiveResource
- iPhone編

  • LINEで送る
  • このエントリーをはてなブックマークに追加
2010/04/22 14:00

 Ruby on Railsで構築したサーバーと連携してデータを表示するiPhoneアプリを作ります。iPhone編の本稿では今回作成するiPhoneアプリの実装方法について解説します。

目次

はじめに

 Ruby on Railsサーバーアプリと連権するiPhoneアプリを超簡単に書けるObjectiveResourceに付いて書かせて頂きます吉田裕美です、宜しくお願いいたします。

 この記事は、iPhoneアプリを開発には詳しくないWebアプリを主に開発しているプログラマーと、Webアプリの開発には詳しくないiPhoneアプリのプログラマー両方の方に読んでいただけるよな構成になっています。

  • iPhone開発経験者の方は
    • iPhone編(本稿)は「ObjectiveResourceとは」を読んだら「iPhone開発入門は」さっと目を通し、
    • Ruby on Rails編はじっくりと読んでください。
  • Ruby on Rails開発経験者の方は
    • iPhone編(本稿)はじっくりと読んでください。
    • Ruby on Rails編はRuby on Railsとは」と「Ruby on Rails開発入門」さっと目を通し「ObjectiveResourceを使う」を読んでください。

ObjectiveResourceとは

 ObjectiveResourceはホームページに、

 ObjectiveResource is a framework for the iPhone that makes

 interacting with Ruby on Rails applications dead simple.

 と書かれているように、iPhoneアプリとRuby on Railsで作られたサーバーアプリを超簡単に連携するフレームワークです。iPhone SDKにあるAPIだけ使ってサーバーと連携する場合、サーバー側にはXMLやJSONでやり取りができるサービスを構築し、iPhone側からはHTTPプロトコルを使い情報を送ったり、受け取ったりします。

 例えばiPhone側でHTTPプロトコルを使った通信を行うには、以下のようなコードを書く必要がります。

  1. NSURLRequestでリクエストを作成
  2. NSURLConnectionで通信
  3. 通信エラーの処理
  4. 受信XMLデータをパース。XMLのパースにはNSXMLParserを使ったSAX風パーサーを書く必要があります。また、JSONを使う場合は、iPhone SDKにはJSONライブラリが無いので、オープンソースのライブラリを探してくる必要があります。

 ObjectiveResourceは、こういった面倒なサーバーとの通信処理を、データをやり取りするためのシンプルなクラスを用意するだけ実現できます。

 以下は、TODO、いつ(due)、何を(task)行うかの情報をObjectiveResourceを使って通信する際に用意するTodoクラスのインターフェース定義です(コードの詳細は後述します)。データを格納するだけのシンプルなクラスを定義し、そこにObjectiveResourceのヘッダーファイルをimportし、オブジェクトのIDを格納するインスタンス変数、ここではtodoIdを追加しただけです。

#import <Foundation/Foundation.h>
#import "ObjectiveResource.h"

@interface Todo : NSObject {
        NSString *todoId; 
        NSDate   *due;
        NSString *task;
}
@property (nonatomic , retain) NSString *todoId;
@property (nonatomic , retain) NSDate   *due;
@property (nonatomic , retain) NSString *task;
@end


@implementation Todo
@synthesize todoId, due, task;

- (void) dealloc
{
        [todoId release];
        [due release];
        [task release];
        [super dealloc];
}
@end

 なお、以下のようなサーバーの情報を与える初期設定を書くだけで、アプリがアクセスするサーバーを指定できます。

[ObjectiveResourceConfig setSite:@"http://localhost:3000/"];

 また、サーバーから全Todoデータを取得するには以下のように記述し、

NSArray *todos = [Todo findAllRemote];

 新規データをサーバーに登録するには以下のように記述するだけで簡単に行えます。

Todo *todo = [[Todo alloc] init];
todo.due = [NSDate date];
todo.task = @"コンサートの予約";
[todo saveRemote];

  • LINEで送る
  • このエントリーをはてなブックマークに追加

著者プロフィール

  • 吉田裕美(ヨシダユウミ)

    有限会社 EY-Office 取締役 CADのベンチャー企業でCADのコア部分や図面管理システムなどの開発に従事した後、独立しJava,Ruby,PerlでWebアプリを中心に開発してきた。現在は殆どの開発はRuby on Rails。 ここ数年はソフトウェアエンジニアの教育に興味をもち、従来の...

バックナンバー

連載:iPhone+Ruby on Rails連携テクニック
All contents copyright © 2006-2017 Shoeisha Co., Ltd. All rights reserved. ver.1.5