SlideShare a Scribd company logo
1 of 13
Download to read offline
【RBC Tech Saturday】
MobiRubyでiOSアプリをつくろう
∼スマホアプリ開発にmrubyがやってきた∼

            2012/9/22




        村部 淳也

      http://www.lancard.com/
自己紹介

• 村部 淳也
  • アクセス
    • Twitter:@murave
    • Mail:murabe@lancard.com

 • 所属コミュニティ
   • Rubyビジネス・コモンズ(スタッフ)
   • 他、いろんなところに出没
すけじゅーる
• 14:00 MobiRuby
 •       現在の状況(MobiRuby作者、増井さんの資料で紹介)
     •     mruby入門(九州工業大学、田中先生の資料で紹介)
 •       コードを読み書き
     •     サンプル書いててハマったところなど

• 16:00 その他Ruby系スマホ開発
 •       RubyMotion(RBC最首会長の資料で紹介)
 •       Rhodes (& Phonegap) (RBC古川さん)



• 懇親会
 •       オクトーバーフェストでビール!ビール!
C関数の呼び出し
• CFunc::call(返り値の型, 関数名, 引数...)


• C = CFunc されてるので C::call でもOK
 •   mobiruby.rb にあります。


• 型はCFuncのクラスメソッドで
 •   cfunc_rb.rb参照。
 •   C::SInt32、C::Pointerなど
 •   C::Voidも忘れずに
構造体の扱い
class TestStruct < CFunc::Struct
  define CFunc::SInt8, :x,
         CFunc::SInt16, :y
end


test = TestStruct.new
test[:x] = 10
Cocoaブリッジ
• Objective-Cのメソッドは頭に_つけて呼ぶ

        screen_rect = Cocoa::UIScreen._mainScreen._bounds
        view = Cocoa::UIView._alloc._initWithFrame(screen_rect)


• Objective-Cのメソッド定義はdefineで
    •     define は cocoa.rb で定義されてます
- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex {
        //処理
}



define C::Void, :alertView, C::Pointer, :clickedButtonAtIndex, C::SInt32 do ¦me, index¦
        #処理
end
Cocoaブリッジ
• 構造体の扱い

 point = Cocoa::Struct::CGPoint.new
 point[:x], point[:y] = x.to_f, y.to_f
requireでハマる
• コンパイルされてないとだめです
BuildPhasesのCompile Source
Build Rules
C言語化されたバイトコード
 • app.rb → app.c
const char mruby_data_app[] = {
0x52,0x49,0x54,0x45,0x30,0x30,0x30,0x39,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x39,
0x30,0x30,0x30,0x30,0x4d,0x41,0x54,0x5a,0x20,0x20,0x20,0x20,0x30,0x30,0x30,0x39,
0x30,0x30,0x30,0x30,0x00,0x00,0x00,0x93,0x00,0x01,0x00,0x00,0x20,0x20,0x20,0x20,
0x20,0x20,0x20,0x20,0xe6,0xe5,0x00,0x00,0x00,0x55,0x53,0x43,0x00,0x02,0x00,0x04,
0x00,0x02,0x6f,0x28,0x00,0x00,0x00,0x07,0x01,0x00,0x00,0x06,0x01,0x80,0x00,0x3d,
0x01,0x00,0x00,0xa0,0x01,0x00,0x00,0x06,0x01,0x80,0x00,0xbd,0x01,0x00,0x00,0xa0,
0x00,0x00,0x00,0x4a,0x06,0xf8,0x00,0x00,0x00,0x02,0x10,0x00,0x08,0x6d,0x6f,0x62,
0x69,0x72,0x75,0x62,0x79,0x10,0x00,0x06,0x6d,0x75,0x72,0x61,0x76,0x65,0x8d,0x31,
0x00,0x00,0x00,0x01,0x00,0x07,0x72,0x65,0x71,0x75,0x69,0x72,0x65,0xa4,0x7e,0x00,
0x00,0x00,0x00,
};
defineでハマる
• Cocoaのメソッド定義に使用
•      型を指定する必要があるため
•      cocoa.rbで実装されてます



• 適切な型を指定しないとあとで困ったり
•      例えば、hello.rb内の次の定義
    define C::Void, :alertView, C::Pointer, :clickedButtonAtIndex, C::SInt32 do ¦me, index¦

•      meにC::Pointer型でイベント対象がセットされる
•      Objective-Cのオブジェクトのidはポインタなので間違いではない
•      しかし me._tag 等メソッドを呼ぶとエラーになる
•      適切な型を指定すればOK
    define C::Void, :alertView, Cocoa::UIAlertView, :clickedButtonAtIndex, C::SInt32 do ¦me,
    index¦
関係資料
•   増井さんRubykaigiスライド
    http://www.scribd.com/doc/105622019/MobiRuby-introduction

•   増井さんRubykaigiビデオ
    http://www.ustream.tv/recorded/25396312
    http://www.ustream.tv/recorded/25396851
•   muraveサンプルプログラム

    http://www.lancard.com/blog/2012/09/21/mobirubyのサンプル作りまし
    た動画付/

•   RBC最首会長RubyMotionスライド

    http://www.slideshare.net/saishu/ruby-motion-20127
•   RBC古川さんRhodesスライド
    http://www.slideshare.net/purukyawa/iphoneandroid-13906013

More Related Content

Similar to MobiRubyでiOSアプリをつくろう

いま考えられる限り最も速く対話型アプリを開発する方法
いま考えられる限り最も速く対話型アプリを開発する方法いま考えられる限り最も速く対話型アプリを開発する方法
いま考えられる限り最も速く対話型アプリを開発する方法Kenichiro Nakamura
 
Objective-Cプログラマのためのswift導入法
Objective-Cプログラマのためのswift導入法Objective-Cプログラマのためのswift導入法
Objective-Cプログラマのためのswift導入法Tomoki Hasegawa
 
The Fastest Possible Way to Develop an Interactive App
The Fastest Possible Way to Develop an Interactive AppThe Fastest Possible Way to Develop an Interactive App
The Fastest Possible Way to Develop an Interactive AppLINE Corporation
 
【17-E-2】Ruby PaaS「MOGOK」 ~ ソフトウェアエンジニアのためのクラウドサービス ~ 藤原秀一氏
【17-E-2】Ruby PaaS「MOGOK」 ~ ソフトウェアエンジニアのためのクラウドサービス ~ 藤原秀一氏【17-E-2】Ruby PaaS「MOGOK」 ~ ソフトウェアエンジニアのためのクラウドサービス ~ 藤原秀一氏
【17-E-2】Ruby PaaS「MOGOK」 ~ ソフトウェアエンジニアのためのクラウドサービス ~ 藤原秀一氏Developers Summit
 
2012 05-19第44回cocoa勉強会発表資料
2012 05-19第44回cocoa勉強会発表資料2012 05-19第44回cocoa勉強会発表資料
2012 05-19第44回cocoa勉強会発表資料OCHI Shuji
 
密着! nibohsiデプロイ 13:00-13:05 - railsアプリのデプロイ事例 -
密着! nibohsiデプロイ 13:00-13:05 - railsアプリのデプロイ事例 -密着! nibohsiデプロイ 13:00-13:05 - railsアプリのデプロイ事例 -
密着! nibohsiデプロイ 13:00-13:05 - railsアプリのデプロイ事例 -Yukihiko SAWANOBORI
 
20150421 Geeks Night @ Money Foward
20150421 Geeks Night @ Money Foward20150421 Geeks Night @ Money Foward
20150421 Geeks Night @ Money FowardNaoki Shimizu
 
実践 Web App for Containers! ~コンテナ開発の基礎からDevOps環境の構築まで~
実践 Web App for Containers! ~コンテナ開発の基礎からDevOps環境の構築まで~実践 Web App for Containers! ~コンテナ開発の基礎からDevOps環境の構築まで~
実践 Web App for Containers! ~コンテナ開発の基礎からDevOps環境の構築まで~Saki Homma
 
C#のやさしさを語る時間
C#のやさしさを語る時間C#のやさしさを語る時間
C#のやさしさを語る時間kamukiriri
 
VSCodeで始めるAzure Static Web Apps開発
VSCodeで始めるAzure Static Web Apps開発VSCodeで始めるAzure Static Web Apps開発
VSCodeで始めるAzure Static Web Apps開発Yuta Matsumura
 
Ruby東京プレゼン 資料
Ruby東京プレゼン 資料Ruby東京プレゼン 資料
Ruby東京プレゼン 資料Kazuaki Tanaka
 
OpenCVをAndroidで動かしてみた
OpenCVをAndroidで動かしてみたOpenCVをAndroidで動かしてみた
OpenCVをAndroidで動かしてみた徹 上野山
 
Cocos2d-x によるスマートフォンアプリ開発のこれまでとこれから
Cocos2d-x によるスマートフォンアプリ開発のこれまでとこれからCocos2d-x によるスマートフォンアプリ開発のこれまでとこれから
Cocos2d-x によるスマートフォンアプリ開発のこれまでとこれからAkihiro Matsuura
 
20120413 nestakabaneworkshop
20120413 nestakabaneworkshop20120413 nestakabaneworkshop
20120413 nestakabaneworkshopYoichiro Sakurai
 
Remote-Containersでnext.js環境を 作った話
Remote-Containersでnext.js環境を作った話Remote-Containersでnext.js環境を作った話
Remote-Containersでnext.js環境を 作った話Masaki Suzuki
 
cocos2d-x 開発の効率化
cocos2d-x 開発の効率化cocos2d-x 開発の効率化
cocos2d-x 開発の効率化Akihiro Matsuura
 
The Twelve-Factor (A|M)pp with C#
The Twelve-Factor (A|M)pp with C#The Twelve-Factor (A|M)pp with C#
The Twelve-Factor (A|M)pp with C#Yuta Matsumura
 

Similar to MobiRubyでiOSアプリをつくろう (20)

いま考えられる限り最も速く対話型アプリを開発する方法
いま考えられる限り最も速く対話型アプリを開発する方法いま考えられる限り最も速く対話型アプリを開発する方法
いま考えられる限り最も速く対話型アプリを開発する方法
 
Objective-Cプログラマのためのswift導入法
Objective-Cプログラマのためのswift導入法Objective-Cプログラマのためのswift導入法
Objective-Cプログラマのためのswift導入法
 
The Fastest Possible Way to Develop an Interactive App
The Fastest Possible Way to Develop an Interactive AppThe Fastest Possible Way to Develop an Interactive App
The Fastest Possible Way to Develop an Interactive App
 
【17-E-2】Ruby PaaS「MOGOK」 ~ ソフトウェアエンジニアのためのクラウドサービス ~ 藤原秀一氏
【17-E-2】Ruby PaaS「MOGOK」 ~ ソフトウェアエンジニアのためのクラウドサービス ~ 藤原秀一氏【17-E-2】Ruby PaaS「MOGOK」 ~ ソフトウェアエンジニアのためのクラウドサービス ~ 藤原秀一氏
【17-E-2】Ruby PaaS「MOGOK」 ~ ソフトウェアエンジニアのためのクラウドサービス ~ 藤原秀一氏
 
Introduction of Rhodes
Introduction of RhodesIntroduction of Rhodes
Introduction of Rhodes
 
2012 05-19第44回cocoa勉強会発表資料
2012 05-19第44回cocoa勉強会発表資料2012 05-19第44回cocoa勉強会発表資料
2012 05-19第44回cocoa勉強会発表資料
 
密着! nibohsiデプロイ 13:00-13:05 - railsアプリのデプロイ事例 -
密着! nibohsiデプロイ 13:00-13:05 - railsアプリのデプロイ事例 -密着! nibohsiデプロイ 13:00-13:05 - railsアプリのデプロイ事例 -
密着! nibohsiデプロイ 13:00-13:05 - railsアプリのデプロイ事例 -
 
20150421 Geeks Night @ Money Foward
20150421 Geeks Night @ Money Foward20150421 Geeks Night @ Money Foward
20150421 Geeks Night @ Money Foward
 
実践 Web App for Containers! ~コンテナ開発の基礎からDevOps環境の構築まで~
実践 Web App for Containers! ~コンテナ開発の基礎からDevOps環境の構築まで~実践 Web App for Containers! ~コンテナ開発の基礎からDevOps環境の構築まで~
実践 Web App for Containers! ~コンテナ開発の基礎からDevOps環境の構築まで~
 
Cubby-2008-01-15 OT
Cubby-2008-01-15 OTCubby-2008-01-15 OT
Cubby-2008-01-15 OT
 
C#のやさしさを語る時間
C#のやさしさを語る時間C#のやさしさを語る時間
C#のやさしさを語る時間
 
VSCodeで始めるAzure Static Web Apps開発
VSCodeで始めるAzure Static Web Apps開発VSCodeで始めるAzure Static Web Apps開発
VSCodeで始めるAzure Static Web Apps開発
 
Ruby東京プレゼン 資料
Ruby東京プレゼン 資料Ruby東京プレゼン 資料
Ruby東京プレゼン 資料
 
OpenCVをAndroidで動かしてみた
OpenCVをAndroidで動かしてみたOpenCVをAndroidで動かしてみた
OpenCVをAndroidで動かしてみた
 
Cocos2d-x によるスマートフォンアプリ開発のこれまでとこれから
Cocos2d-x によるスマートフォンアプリ開発のこれまでとこれからCocos2d-x によるスマートフォンアプリ開発のこれまでとこれから
Cocos2d-x によるスマートフォンアプリ開発のこれまでとこれから
 
20120413 nestakabaneworkshop
20120413 nestakabaneworkshop20120413 nestakabaneworkshop
20120413 nestakabaneworkshop
 
つぶLT20121215
つぶLT20121215つぶLT20121215
つぶLT20121215
 
Remote-Containersでnext.js環境を 作った話
Remote-Containersでnext.js環境を作った話Remote-Containersでnext.js環境を作った話
Remote-Containersでnext.js環境を 作った話
 
cocos2d-x 開発の効率化
cocos2d-x 開発の効率化cocos2d-x 開発の効率化
cocos2d-x 開発の効率化
 
The Twelve-Factor (A|M)pp with C#
The Twelve-Factor (A|M)pp with C#The Twelve-Factor (A|M)pp with C#
The Twelve-Factor (A|M)pp with C#
 

MobiRubyでiOSアプリをつくろう

  • 2. 自己紹介 • 村部 淳也 • アクセス • Twitter:@murave • Mail:murabe@lancard.com • 所属コミュニティ • Rubyビジネス・コモンズ(スタッフ) • 他、いろんなところに出没
  • 3. すけじゅーる • 14:00 MobiRuby • 現在の状況(MobiRuby作者、増井さんの資料で紹介) • mruby入門(九州工業大学、田中先生の資料で紹介) • コードを読み書き • サンプル書いててハマったところなど • 16:00 その他Ruby系スマホ開発 • RubyMotion(RBC最首会長の資料で紹介) • Rhodes (& Phonegap) (RBC古川さん) • 懇親会 • オクトーバーフェストでビール!ビール!
  • 4. C関数の呼び出し • CFunc::call(返り値の型, 関数名, 引数...) • C = CFunc されてるので C::call でもOK • mobiruby.rb にあります。 • 型はCFuncのクラスメソッドで • cfunc_rb.rb参照。 • C::SInt32、C::Pointerなど • C::Voidも忘れずに
  • 5. 構造体の扱い class TestStruct < CFunc::Struct define CFunc::SInt8, :x, CFunc::SInt16, :y end test = TestStruct.new test[:x] = 10
  • 6. Cocoaブリッジ • Objective-Cのメソッドは頭に_つけて呼ぶ screen_rect = Cocoa::UIScreen._mainScreen._bounds view = Cocoa::UIView._alloc._initWithFrame(screen_rect) • Objective-Cのメソッド定義はdefineで • define は cocoa.rb で定義されてます - (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex { //処理 } define C::Void, :alertView, C::Pointer, :clickedButtonAtIndex, C::SInt32 do ¦me, index¦ #処理 end
  • 7. Cocoaブリッジ • 構造体の扱い point = Cocoa::Struct::CGPoint.new point[:x], point[:y] = x.to_f, y.to_f
  • 11. C言語化されたバイトコード • app.rb → app.c const char mruby_data_app[] = { 0x52,0x49,0x54,0x45,0x30,0x30,0x30,0x39,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x39, 0x30,0x30,0x30,0x30,0x4d,0x41,0x54,0x5a,0x20,0x20,0x20,0x20,0x30,0x30,0x30,0x39, 0x30,0x30,0x30,0x30,0x00,0x00,0x00,0x93,0x00,0x01,0x00,0x00,0x20,0x20,0x20,0x20, 0x20,0x20,0x20,0x20,0xe6,0xe5,0x00,0x00,0x00,0x55,0x53,0x43,0x00,0x02,0x00,0x04, 0x00,0x02,0x6f,0x28,0x00,0x00,0x00,0x07,0x01,0x00,0x00,0x06,0x01,0x80,0x00,0x3d, 0x01,0x00,0x00,0xa0,0x01,0x00,0x00,0x06,0x01,0x80,0x00,0xbd,0x01,0x00,0x00,0xa0, 0x00,0x00,0x00,0x4a,0x06,0xf8,0x00,0x00,0x00,0x02,0x10,0x00,0x08,0x6d,0x6f,0x62, 0x69,0x72,0x75,0x62,0x79,0x10,0x00,0x06,0x6d,0x75,0x72,0x61,0x76,0x65,0x8d,0x31, 0x00,0x00,0x00,0x01,0x00,0x07,0x72,0x65,0x71,0x75,0x69,0x72,0x65,0xa4,0x7e,0x00, 0x00,0x00,0x00, };
  • 12. defineでハマる • Cocoaのメソッド定義に使用 • 型を指定する必要があるため • cocoa.rbで実装されてます • 適切な型を指定しないとあとで困ったり • 例えば、hello.rb内の次の定義 define C::Void, :alertView, C::Pointer, :clickedButtonAtIndex, C::SInt32 do ¦me, index¦ • meにC::Pointer型でイベント対象がセットされる • Objective-Cのオブジェクトのidはポインタなので間違いではない • しかし me._tag 等メソッドを呼ぶとエラーになる • 適切な型を指定すればOK define C::Void, :alertView, Cocoa::UIAlertView, :clickedButtonAtIndex, C::SInt32 do ¦me, index¦
  • 13. 関係資料 • 増井さんRubykaigiスライド http://www.scribd.com/doc/105622019/MobiRuby-introduction • 増井さんRubykaigiビデオ http://www.ustream.tv/recorded/25396312 http://www.ustream.tv/recorded/25396851 • muraveサンプルプログラム http://www.lancard.com/blog/2012/09/21/mobirubyのサンプル作りまし た動画付/ • RBC最首会長RubyMotionスライド http://www.slideshare.net/saishu/ruby-motion-20127 • RBC古川さんRhodesスライド http://www.slideshare.net/purukyawa/iphoneandroid-13906013