SlideShare a Scribd company logo
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に使える (かも)

More Related Content

What's hot

ゼロから始める自作 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
 
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
Mitsutoshi 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 notebook
emakryo
 
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 structure
uchan_nos
 
Rubyボードハンズオン
RubyボードハンズオンRubyボードハンズオン
Rubyボードハンズオン
三七男 山本
 
安全にファイル編集する話
安全にファイル編集する話安全にファイル編集する話
安全にファイル編集する話Hisashi HATAKEYAMA
 
ハードウェアを用いてPythonを学ぶ
ハードウェアを用いてPythonを学ぶハードウェアを用いてPythonを学ぶ
ハードウェアを用いてPythonを学ぶ
Yuta Kitagami
 

What's hot (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を学ぶ
 

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

Cocos2dx 8hour
Cocos2dx 8hourCocos2dx 8hour
Cocos2dx 8hour
Tomohiko Okita
 
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, #yidev
Tomohiro Kumagai
 
Ide env
Ide envIde 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 開発の効率化
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 Linux
Tomoki 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-p
CHY72
 
node-gypを使ったネイティブモジュールの作成
node-gypを使ったネイティブモジュールの作成node-gypを使ったネイティブモジュールの作成
node-gypを使ったネイティブモジュールの作成
shigeki_ohtsu
 

Similar to 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を使ったネイティブモジュールの作成
 

More from 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 app
firewood
 
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
 
L-R
L-RL-R
FPGA
FPGAFPGA
FPGA
firewood
 

More from 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をステップ実行してみた