SlideShare uma empresa Scribd logo
1 de 21
Xcodeでmrubyをステップ実
行してみた
Shinjuku.rb #57
自己紹介
● @hotpepsi
● 趣味
○ ピアノ、テニス、競技プログラミング、ボルダリング
● ライフワーク
○ デバッグ
Agenda
● mrubyほとんど使ったことない
● ステップ実行して調べてみよう
○ Debugger driven code reading
用意するもの
● Xcode
○ MacのAppStoreからインストール
● Homebrew
● mruby
○ Mac用にビルドする
Xcodeのプロジェクトファイル (.xcodeproj)
● 直接追加するソースはmruby.cだけ
● その他の部分はlibmruby.aをリンクする
https://github.com/firewood/mruby/tree/xcode
Xcodeのプロジェクトファイル (.xcodeproj)
● Schemeの設定
hello.rb
p "Hello, world!"
改造する
● ロシアンルーレット
● 1/6の確率で死ぬ
● 死んだらデバッガで調べられる
https://github.com/firewood/mruby/tree/rr
Random::russian_roulette
static mrb_value mrb_russian_roulette(mrb_state *mrb, mrb_value self) {
mrb_value r = mrb_random_rand(mrb, self); // randを呼ぶ
if (r.value.f < 1.0/6) {
int *p = 0;
*p = 0; // EXC_BAD_ACCESS
}
return r;
}
hello.rb
p "Hello, world!"
r = Random.new(1)
(1..6).each do |i|
p r.russian_roulette
end
Result
もう少し複雑な例
● ngx_mruby
https://qiita.com/takeswim/items/d80dcf9865d06571cc5e
https://github.com/firewood/ngx_mruby/tree/xcode
ビルド方法
● https://qiita.com/takeswim/items/d80dcf9865d06571cc5e
● https://qiita.com/marumaru/items/ca801c957986302f6fe6
Prepare nginx source
submoduleに足してみた
$ git checkout xcode
$ git submodule init
$ git submodule update
Build mruby
$ ./configure --with-ngx-src-root=./nginx
$ make build_mruby
$ make generate_gems_config
Build nginx
.oから.aを作るMakefileを書いた
$ cd nginx
$ ./auto/configure --with-debug --add-module=.. --add-module=../dependence/ngx_devel_kit --
prefix=/usr/local/nginx
$ make
$ cd ..
$ make -f gen_lib.mk
Copy files
$ sudo mkdir -p /usr/local/nginx/conf /usr/local/nginx/logs /usr/local/nginx/html
$ sudo chown -R `whoami` /usr/local/nginx/
$ cp -a example/*.rb /usr/local/nginx/html/
$ cp -a example/nginx.conf /usr/local/nginx/conf/
$ cp -a nginx/conf/mime.types /usr/local/nginx/conf/
Tips
● ひとつのプロセスで処理する (ワーカープロセスを
使わない)
○ master_process off
Location /rr
location /rr {
mruby_content_handler_code '
r = Random.new
Server = Nginx
Server.echo r.russian_roulette
';
}
Accessing to http://localhost:3000/rr
まとめ
● Xcodeは有能
● デバッガはcode readingに使える (かも)

Mais conteúdo relacionado

Mais procurados

ゼロから始める自作 CPU 入門
ゼロから始める自作 CPU 入門ゼロから始める自作 CPU 入門
ゼロから始める自作 CPU 入門Hirotaka Kawata
 
【2000行弱!】x86用自作カーネルの紹介
【2000行弱!】x86用自作カーネルの紹介【2000行弱!】x86用自作カーネルの紹介
【2000行弱!】x86用自作カーネルの紹介Yuma Ohgami
 
ET2016 小さなRubyボード GR-CITRUSの紹介
ET2016 小さなRubyボード GR-CITRUSの紹介ET2016 小さなRubyボード GR-CITRUSの紹介
ET2016 小さなRubyボード GR-CITRUSの紹介三七男 山本
 
小ネタ:Android上でroscoreを走らせてみた
小ネタ:Android上でroscoreを走らせてみた小ネタ:Android上でroscoreを走らせてみた
小ネタ:Android上でroscoreを走らせてみたRyodo Tanaka
 
Ruby関西76 gr citrusの使い方#2
Ruby関西76 gr citrusの使い方#2Ruby関西76 gr citrusの使い方#2
Ruby関西76 gr citrusの使い方#2三七男 山本
 
etckeeperをopenSUSEの公式リポジトリに入れたいぞ! Ver.2
etckeeperをopenSUSEの公式リポジトリに入れたいぞ! Ver.2etckeeperをopenSUSEの公式リポジトリに入れたいぞ! Ver.2
etckeeperをopenSUSEの公式リポジトリに入れたいぞ! Ver.2Mitsutoshi Nakano
 
ルネサスナイト10発表資料 Rubyで作るラムネシュータ
ルネサスナイト10発表資料 Rubyで作るラムネシュータルネサスナイト10発表資料 Rubyで作るラムネシュータ
ルネサスナイト10発表資料 Rubyで作るラムネシュータ三七男 山本
 
Rubyボードハンズオンテキスト
RubyボードハンズオンテキストRubyボードハンズオンテキスト
Rubyボードハンズオンテキスト三七男 山本
 
スタート低レイヤー #0
スタート低レイヤー #0スタート低レイヤー #0
スタート低レイヤー #0Kiwamu Okabe
 
RubyではじめるIoT(Wakayama.rb活動報告)
RubyではじめるIoT(Wakayama.rb活動報告)RubyではじめるIoT(Wakayama.rb活動報告)
RubyではじめるIoT(Wakayama.rb活動報告)三七男 山本
 
rustdef: Rust on jupyter notebook
rustdef: Rust on jupyter notebookrustdef: Rust on jupyter notebook
rustdef: Rust on jupyter notebookemakryo
 
RubyConfの話の続きのおはなし
RubyConfの話の続きのおはなしRubyConfの話の続きのおはなし
RubyConfの話の続きのおはなしyamanekko
 
Goodby Hatena, hello Sphinx
Goodby Hatena, hello SphinxGoodby Hatena, hello Sphinx
Goodby Hatena, hello SphinxKouhei Maeda
 
Wakayama.rbボードの使い方
Wakayama.rbボードの使い方Wakayama.rbボードの使い方
Wakayama.rbボードの使い方三七男 山本
 
Python, RaspberryPi, Arduinoで作る消費電力モニタリングシステム
Python, RaspberryPi, Arduinoで作る消費電力モニタリングシステムPython, RaspberryPi, Arduinoで作る消費電力モニタリングシステム
Python, RaspberryPi, Arduinoで作る消費電力モニタリングシステムJunichi Kakisako
 
USB3 host driver program structure
USB3 host driver program structureUSB3 host driver program structure
USB3 host driver program structureuchan_nos
 
Rubyボードハンズオン
RubyボードハンズオンRubyボードハンズオン
Rubyボードハンズオン三七男 山本
 
安全にファイル編集する話
安全にファイル編集する話安全にファイル編集する話
安全にファイル編集する話Hisashi HATAKEYAMA
 
ハードウェアを用いてPythonを学ぶ
ハードウェアを用いてPythonを学ぶハードウェアを用いてPythonを学ぶ
ハードウェアを用いてPythonを学ぶYuta Kitagami
 

Mais procurados (20)

ゼロから始める自作 CPU 入門
ゼロから始める自作 CPU 入門ゼロから始める自作 CPU 入門
ゼロから始める自作 CPU 入門
 
【2000行弱!】x86用自作カーネルの紹介
【2000行弱!】x86用自作カーネルの紹介【2000行弱!】x86用自作カーネルの紹介
【2000行弱!】x86用自作カーネルの紹介
 
ET2016 小さなRubyボード GR-CITRUSの紹介
ET2016 小さなRubyボード GR-CITRUSの紹介ET2016 小さなRubyボード GR-CITRUSの紹介
ET2016 小さなRubyボード GR-CITRUSの紹介
 
小ネタ:Android上でroscoreを走らせてみた
小ネタ:Android上でroscoreを走らせてみた小ネタ:Android上でroscoreを走らせてみた
小ネタ:Android上でroscoreを走らせてみた
 
GR-CITRUSの紹介
GR-CITRUSの紹介GR-CITRUSの紹介
GR-CITRUSの紹介
 
Ruby関西76 gr citrusの使い方#2
Ruby関西76 gr citrusの使い方#2Ruby関西76 gr citrusの使い方#2
Ruby関西76 gr citrusの使い方#2
 
etckeeperをopenSUSEの公式リポジトリに入れたいぞ! Ver.2
etckeeperをopenSUSEの公式リポジトリに入れたいぞ! Ver.2etckeeperをopenSUSEの公式リポジトリに入れたいぞ! Ver.2
etckeeperをopenSUSEの公式リポジトリに入れたいぞ! Ver.2
 
ルネサスナイト10発表資料 Rubyで作るラムネシュータ
ルネサスナイト10発表資料 Rubyで作るラムネシュータルネサスナイト10発表資料 Rubyで作るラムネシュータ
ルネサスナイト10発表資料 Rubyで作るラムネシュータ
 
Rubyボードハンズオンテキスト
RubyボードハンズオンテキストRubyボードハンズオンテキスト
Rubyボードハンズオンテキスト
 
スタート低レイヤー #0
スタート低レイヤー #0スタート低レイヤー #0
スタート低レイヤー #0
 
RubyではじめるIoT(Wakayama.rb活動報告)
RubyではじめるIoT(Wakayama.rb活動報告)RubyではじめるIoT(Wakayama.rb活動報告)
RubyではじめるIoT(Wakayama.rb活動報告)
 
rustdef: Rust on jupyter notebook
rustdef: Rust on jupyter notebookrustdef: Rust on jupyter notebook
rustdef: Rust on jupyter notebook
 
RubyConfの話の続きのおはなし
RubyConfの話の続きのおはなしRubyConfの話の続きのおはなし
RubyConfの話の続きのおはなし
 
Goodby Hatena, hello Sphinx
Goodby Hatena, hello SphinxGoodby Hatena, hello Sphinx
Goodby Hatena, hello Sphinx
 
Wakayama.rbボードの使い方
Wakayama.rbボードの使い方Wakayama.rbボードの使い方
Wakayama.rbボードの使い方
 
Python, RaspberryPi, Arduinoで作る消費電力モニタリングシステム
Python, RaspberryPi, Arduinoで作る消費電力モニタリングシステムPython, RaspberryPi, Arduinoで作る消費電力モニタリングシステム
Python, RaspberryPi, Arduinoで作る消費電力モニタリングシステム
 
USB3 host driver program structure
USB3 host driver program structureUSB3 host driver program structure
USB3 host driver program structure
 
Rubyボードハンズオン
RubyボードハンズオンRubyボードハンズオン
Rubyボードハンズオン
 
安全にファイル編集する話
安全にファイル編集する話安全にファイル編集する話
安全にファイル編集する話
 
ハードウェアを用いてPythonを学ぶ
ハードウェアを用いてPythonを学ぶハードウェアを用いてPythonを学ぶ
ハードウェアを用いてPythonを学ぶ
 

Semelhante a Xcodeでmrubyをステップ実行してみた

Macでcocos2d-x 2.1.3を使用した、iOSアプリの開発環境構築について
Macでcocos2d-x 2.1.3を使用した、iOSアプリの開発環境構築についてMacでcocos2d-x 2.1.3を使用した、iOSアプリの開発環境構築について
Macでcocos2d-x 2.1.3を使用した、iOSアプリの開発環境構築についてTomoaki Shimizu
 
Compaq Contura Aero で NetBSD を動かす
Compaq Contura Aero で NetBSD を動かすCompaq Contura Aero で NetBSD を動かす
Compaq Contura Aero で NetBSD を動かすshimadah
 
コードしか書けないエンジニアがゲームを作るには。みんなで作る:ccocos2d-xゲーム開発
コードしか書けないエンジニアがゲームを作るには。みんなで作る:ccocos2d-xゲーム開発コードしか書けないエンジニアがゲームを作るには。みんなで作る:ccocos2d-xゲーム開発
コードしか書けないエンジニアがゲームを作るには。みんなで作る:ccocos2d-xゲーム開発Haco Kohashi
 
第2回勉強会資料 柏木
第2回勉強会資料 柏木第2回勉強会資料 柏木
第2回勉強会資料 柏木beyond0iwamoto
 
Xcode 5 で見つけた「どうでもいい」機能(厳選6つ) #cocoa_kansai, #yidev
Xcode 5 で見つけた「どうでもいい」機能(厳選6つ) #cocoa_kansai, #yidevXcode 5 で見つけた「どうでもいい」機能(厳選6つ) #cocoa_kansai, #yidev
Xcode 5 で見つけた「どうでもいい」機能(厳選6つ) #cocoa_kansai, #yidevTomohiro Kumagai
 
Pre react native0504
Pre react native0504Pre react native0504
Pre react native0504卓馬 三浦
 
Cocos2d-x ver.3 開発の効率化
Cocos2d-x ver.3 開発の効率化Cocos2d-x ver.3 開発の効率化
Cocos2d-x ver.3 開発の効率化Akihiro Matsuura
 
Djangoとweb2pyをapacheに組込む
Djangoとweb2pyをapacheに組込むDjangoとweb2pyをapacheに組込む
Djangoとweb2pyをapacheに組込む2bo 2bo
 
GTMF2015: Cocos最新情報と日本展開 | Chukong Technologies Japan株式会社
GTMF2015: Cocos最新情報と日本展開 | Chukong Technologies Japan株式会社GTMF2015: Cocos最新情報と日本展開 | Chukong Technologies Japan株式会社
GTMF2015: Cocos最新情報と日本展開 | Chukong Technologies Japan株式会社Game Tools & Middleware Forum
 
Cocos2d x-sprite3d
Cocos2d x-sprite3dCocos2d x-sprite3d
Cocos2d x-sprite3daktsk
 
20150317 firefox os勉強会
20150317 firefox os勉強会20150317 firefox os勉強会
20150317 firefox os勉強会Naoki Sekiguchi
 
NVIDIA GPUで作るHeadless X11 Linux
NVIDIA GPUで作るHeadless X11 LinuxNVIDIA GPUで作るHeadless X11 Linux
NVIDIA GPUで作るHeadless X11 LinuxTomoki SHISHIKURA
 
Cq tse-fm3セミナー資料
Cq tse-fm3セミナー資料Cq tse-fm3セミナー資料
Cq tse-fm3セミナー資料Masaki Muranaka
 
WindowsタブレットでLinux、*BSD改造特集と裏技ハッキング in OSC東京2020 #osc20tk Hacking Linux and *...
WindowsタブレットでLinux、*BSD改造特集と裏技ハッキング in OSC東京2020 #osc20tk Hacking Linux and *...WindowsタブレットでLinux、*BSD改造特集と裏技ハッキング in OSC東京2020 #osc20tk Hacking Linux and *...
WindowsタブレットでLinux、*BSD改造特集と裏技ハッキング in OSC東京2020 #osc20tk Hacking Linux and *...Netwalker lab kapper
 
NetBSDのクロスビルドのしくみとインストール済みLive Imageの作成
NetBSDのクロスビルドのしくみとインストール済みLive Imageの作成NetBSDのクロスビルドのしくみとインストール済みLive Imageの作成
NetBSDのクロスビルドのしくみとインストール済みLive Imageの作成Izumi Tsutsui
 
Cc dx lib72-p
Cc dx lib72-pCc dx lib72-p
Cc dx lib72-pCHY72
 
node-gypを使ったネイティブモジュールの作成
node-gypを使ったネイティブモジュールの作成node-gypを使ったネイティブモジュールの作成
node-gypを使ったネイティブモジュールの作成shigeki_ohtsu
 

Semelhante a Xcodeでmrubyをステップ実行してみた (20)

Cocos2dx 8hour
Cocos2dx 8hourCocos2dx 8hour
Cocos2dx 8hour
 
Macでcocos2d-x 2.1.3を使用した、iOSアプリの開発環境構築について
Macでcocos2d-x 2.1.3を使用した、iOSアプリの開発環境構築についてMacでcocos2d-x 2.1.3を使用した、iOSアプリの開発環境構築について
Macでcocos2d-x 2.1.3を使用した、iOSアプリの開発環境構築について
 
Hello Ruby
Hello RubyHello Ruby
Hello Ruby
 
Compaq Contura Aero で NetBSD を動かす
Compaq Contura Aero で NetBSD を動かすCompaq Contura Aero で NetBSD を動かす
Compaq Contura Aero で NetBSD を動かす
 
コードしか書けないエンジニアがゲームを作るには。みんなで作る:ccocos2d-xゲーム開発
コードしか書けないエンジニアがゲームを作るには。みんなで作る:ccocos2d-xゲーム開発コードしか書けないエンジニアがゲームを作るには。みんなで作る:ccocos2d-xゲーム開発
コードしか書けないエンジニアがゲームを作るには。みんなで作る:ccocos2d-xゲーム開発
 
第2回勉強会資料 柏木
第2回勉強会資料 柏木第2回勉強会資料 柏木
第2回勉強会資料 柏木
 
Xcode 5 で見つけた「どうでもいい」機能(厳選6つ) #cocoa_kansai, #yidev
Xcode 5 で見つけた「どうでもいい」機能(厳選6つ) #cocoa_kansai, #yidevXcode 5 で見つけた「どうでもいい」機能(厳選6つ) #cocoa_kansai, #yidev
Xcode 5 で見つけた「どうでもいい」機能(厳選6つ) #cocoa_kansai, #yidev
 
Ide env
Ide envIde env
Ide env
 
Pre react native0504
Pre react native0504Pre react native0504
Pre react native0504
 
Cocos2d-x ver.3 開発の効率化
Cocos2d-x ver.3 開発の効率化Cocos2d-x ver.3 開発の効率化
Cocos2d-x ver.3 開発の効率化
 
Djangoとweb2pyをapacheに組込む
Djangoとweb2pyをapacheに組込むDjangoとweb2pyをapacheに組込む
Djangoとweb2pyをapacheに組込む
 
GTMF2015: Cocos最新情報と日本展開 | Chukong Technologies Japan株式会社
GTMF2015: Cocos最新情報と日本展開 | Chukong Technologies Japan株式会社GTMF2015: Cocos最新情報と日本展開 | Chukong Technologies Japan株式会社
GTMF2015: Cocos最新情報と日本展開 | Chukong Technologies Japan株式会社
 
Cocos2d x-sprite3d
Cocos2d x-sprite3dCocos2d x-sprite3d
Cocos2d x-sprite3d
 
20150317 firefox os勉強会
20150317 firefox os勉強会20150317 firefox os勉強会
20150317 firefox os勉強会
 
NVIDIA GPUで作るHeadless X11 Linux
NVIDIA GPUで作るHeadless X11 LinuxNVIDIA GPUで作るHeadless X11 Linux
NVIDIA GPUで作るHeadless X11 Linux
 
Cq tse-fm3セミナー資料
Cq tse-fm3セミナー資料Cq tse-fm3セミナー資料
Cq tse-fm3セミナー資料
 
WindowsタブレットでLinux、*BSD改造特集と裏技ハッキング in OSC東京2020 #osc20tk Hacking Linux and *...
WindowsタブレットでLinux、*BSD改造特集と裏技ハッキング in OSC東京2020 #osc20tk Hacking Linux and *...WindowsタブレットでLinux、*BSD改造特集と裏技ハッキング in OSC東京2020 #osc20tk Hacking Linux and *...
WindowsタブレットでLinux、*BSD改造特集と裏技ハッキング in OSC東京2020 #osc20tk Hacking Linux and *...
 
NetBSDのクロスビルドのしくみとインストール済みLive Imageの作成
NetBSDのクロスビルドのしくみとインストール済みLive Imageの作成NetBSDのクロスビルドのしくみとインストール済みLive Imageの作成
NetBSDのクロスビルドのしくみとインストール済みLive Imageの作成
 
Cc dx lib72-p
Cc dx lib72-pCc dx lib72-p
Cc dx lib72-p
 
node-gypを使ったネイティブモジュールの作成
node-gypを使ったネイティブモジュールの作成node-gypを使ったネイティブモジュールの作成
node-gypを使ったネイティブモジュールの作成
 

Mais de firewood

Best Bugs 2017 in the SmartNews iOS app
Best Bugs 2017 in the SmartNews iOS appBest Bugs 2017 in the SmartNews iOS app
Best Bugs 2017 in the SmartNews iOS appfirewood
 
Xcodeで値を表示する
Xcodeで値を表示するXcodeで値を表示する
Xcodeで値を表示するfirewood
 
SmartNewsアプリの品質
SmartNewsアプリの品質SmartNewsアプリの品質
SmartNewsアプリの品質firewood
 
WkWebViewのキャッシュについて調べた
WkWebViewのキャッシュについて調べたWkWebViewのキャッシュについて調べた
WkWebViewのキャッシュについて調べたfirewood
 
delayed_jobの自動再起動
delayed_jobの自動再起動delayed_jobの自動再起動
delayed_jobの自動再起動firewood
 
C++でHello worldを書いてみた
C++でHello worldを書いてみたC++でHello worldを書いてみた
C++でHello worldを書いてみたfirewood
 
フィルタドライバ入門
フィルタドライバ入門フィルタドライバ入門
フィルタドライバ入門firewood
 
三日で書くGroonga関数
三日で書くGroonga関数三日で書くGroonga関数
三日で書くGroonga関数firewood
 

Mais de firewood (10)

Best Bugs 2017 in the SmartNews iOS app
Best Bugs 2017 in the SmartNews iOS appBest Bugs 2017 in the SmartNews iOS app
Best Bugs 2017 in the SmartNews iOS app
 
Xcodeで値を表示する
Xcodeで値を表示するXcodeで値を表示する
Xcodeで値を表示する
 
SmartNewsアプリの品質
SmartNewsアプリの品質SmartNewsアプリの品質
SmartNewsアプリの品質
 
WkWebViewのキャッシュについて調べた
WkWebViewのキャッシュについて調べたWkWebViewのキャッシュについて調べた
WkWebViewのキャッシュについて調べた
 
delayed_jobの自動再起動
delayed_jobの自動再起動delayed_jobの自動再起動
delayed_jobの自動再起動
 
C++でHello worldを書いてみた
C++でHello worldを書いてみたC++でHello worldを書いてみた
C++でHello worldを書いてみた
 
フィルタドライバ入門
フィルタドライバ入門フィルタドライバ入門
フィルタドライバ入門
 
三日で書くGroonga関数
三日で書くGroonga関数三日で書くGroonga関数
三日で書くGroonga関数
 
L-R
L-RL-R
L-R
 
FPGA
FPGAFPGA
FPGA
 

Xcodeでmrubyをステップ実行してみた