SHOEISHA iD

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

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

iPhone+Ruby on Rails連携テクニック

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

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

ObjectiveResourceを使ったサーバー連携

 それでは、いよいよiPhoneアプリ「ひとりったー」をサーバー連携してみましょう

ObjectiveResourceの組み込み

 ObjectiveResourceのダウンロードページにある「1.01 Libraries」をダウンロードしZIPファイルを展開します。

 Xcode左カラムの「Classes」を右クリックし「追加」→「既存のファイル」で上で展開してできたobjective_resourceディレクトリを選択し、追加ボタンをクリックします、次に表示される画面では「ディスティネーショングループのフォルダに項目をコピーする」をチェックして追加ボタンをクリックします。

 その結果、Classesにobjective_resourceが追加されます。

コードの変更

 iPhone側のソースコードに通信機能を追加します。

Talkクラス

  • ObjectiveResourceが使えるように ObjectiveResource.hをimportします。
  • Ruby on RailsのModelにあるPrimary keyを格納するインスタンス変数を追加します。変数名はモデル名 + Idになります。
Talk.h
#import <Foundation/Foundation.h>
#import "ObjectiveResource.h"      // ← 追加


@interface Talk : NSObject {
        NSString *talkId;                 // ← 追加
        NSDate   *createdAt;
        NSString *text;
}
@property (nonatomic, retain) NSString *talkId;      // ← 追加
@property (nonatomic, retain) NSDate   *createdAt;
@property (nonatomic, retain) NSString *text;

@end
Talk.m
#import "Talk.h"

@implementation Talk

@synthesize talkId;     // ← 追加
@synthesize createdAt;
@synthesize text;

- (void) dealloc {
        [talkId release];     // ← 追加
        [createdAt release];
        [text release];
        [super dealloc];
}

@end

HitoritterViewController.mへ通信機能の追加

 HitoritterViewController.mには、変更のあったメソッドのみ書きました。viewDidLoadメソッドでは以下のように初期設定とデータの取得を行っています。pushOnTalk:メソッドでは新規のつぶやきの登録を行っています。

  1. 通信を行うサーバーの指定。
  2. やり取りする、日時フォーマットの指定。これに伴いObjectiveResourceDateFormatter.hのimport します。
  3. [Talk findAllRemote] でサーバーからつぶやきデータの一覧を取得し、talks配列に設定しています。
  4. 新規のつぶやきを [talk saveRemote] でサーバーに登録しています。
#import "HitoritterViewController.h"
// ↓ 追加 (2)
#import "ObjectiveResourceDateFormatter.h"
#import "Talk.h"

@implementation HitoritterViewController


- (void)viewDidLoad {
        [super viewDidLoad];
         // ↓ 追加 (1)
        [ObjectiveResourceConfig setSite:@"http://localhost:3000/"];
         // ↓ 追加 (2)
        [ObjectiveResourceDateFormatter setSerializeFormat:DateTime]; 
        talks = [[NSMutableArray alloc] init];
        //  ↓ 追加 (3)
        [talks setArray:[Talk findAllRemote]]; 
}

- (IBAction)pushOnTalk:(id)sender {
        Talk *talk = [[[Talk alloc] init] autorelease];
        talk.createdAt = [NSDate date];
        talk.text = talkText.text;
        NSLog(@"entry %@: %@", talk.createdAt, talk.text);
        
        talkText.text = @"";
        [talkText resignFirstResponder];

        [talks addObject:talk];
        //  ↓ 追加 (4)
        [talk saveRemote];
        [talksTable reloadData];
}
@end

 コードの変更は、これだけです!

 この変更でiPhoneアプリ起動時に、Ruby on Railsサーバーからつぶやきを取得し、iPhoneでつぶやいた内容はサーバーに送られます。HTTP通信やXMLへの変換コードはまったくいりません!!

まとめ

 iPhoneアプリとサーバーとの連携機能は、今後ますます必要になってくると思います。その際にRuby on Railsを使ったサーバーアプリとObjectiveResoureceを使うことで簡単にサーバー側アプリや通信ができる事がお分かりいただけたでしょうか。

 また、現在Ruby on Railsでサーバーアプリを開発されている方にはサーバーと連携するiPhoneアプリ作成のイメージをつかんでいただけたのではないかと思います。

 ぜひ、Ruby on Railsと連携するiPhoneアプリに挑戦してみてください。

iPhoneアプリ構築編はこちら

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

  • X ポスト
  • このエントリーをはてなブックマークに追加
iPhone+Ruby on Rails連携テクニック連載記事一覧
この記事の著者

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

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

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

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

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/5127 2010/04/22 14:00

おすすめ

アクセスランキング

アクセスランキング

イベント

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

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

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

メールバックナンバー

アクセスランキング

アクセスランキング