Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
dRuby 入門者によるあなたの身近にあるdRuby 入門
Search
makicamel
August 24, 2024
Programming
1.9k
4
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
dRuby 入門者によるあなたの身近にあるdRuby 入門
dRuby 入門者によるあなたの身近にあるdRuby 入門
2024.08.24. 大阪 Ruby 会議 04
makicamel
August 24, 2024
More Decks by makicamel
See All by makicamel
dRuby over BLE
makicamel
2
500
Road to RubyKaigi: Play Hard(ware)
makicamel
1
1.3k
First step to PicoRuby
makicamel
2
720
PicoRuby on Rails
makicamel
4
350
Take a small step beyond the api
makicamel
2
240
Road to RubyKaigi: Making Tinny Chiptunes with Ruby
makicamel
4
1.9k
Road to RubyKaigi
makicamel
4
740
Rails アプリ地図考 Flush Cut
makicamel
1
250
ErdMap: Thinking about a map for Rails applications
makicamel
2
4.3k
Other Decks in Programming
See All in Programming
Security issues being discussed on Web Platforms
petamoriken
0
1.4k
市販E-Readerを乗っ取れ 〜Embedded Swiftで電子ペーパーガジェットを制御する〜
trickart
0
230
WebRTC映像をAirPlayに対応させる挑戦.pdf
monolithic_adam
0
330
選挙速報を多くのユーザーへ 届ける Live Activities 設計
hamayokokuririn
0
190
Ghostty + Neovimで作る 透明でカッコ良い開発環境
j341nono
0
150
ソニーのクラウド共通基盤の変遷とAI時代の開発スタイルに合わせた進化 / The Journey of Sony’s Common Cloud Platform and Its Evolution for AI-Native Development
kenjiyoneyama
0
200
すこし踏み込む CancellationToken
htkym
2
1.5k
スマートフォンでモールス信号を送受信する 〜スマートフォンのLEDとカメラで作る光通信の設計と実装〜
atsuki_seo
0
220
更なる可用性を求めて、5年間運用したKotlinのアプリケーションをGoでリプレイスする話
ken_tunc
0
420
Androidだけじゃない、DroidKaigiで広がった私の技術スタック
akkeylab
0
110
Streamlitで実現する自然言語データアプリ開発
ayumu_yamaguchi
1
330
Intent as Code
shoppingjaws
6
1.1k
Featured
See All Featured
The Cost Of JavaScript in 2023
addyosmani
55
10k
KATA
mclloyd
PRO
35
16k
Dominate Local Search Results - an insider guide to GBP, reviews, and Local SEO
greggifford
PRO
0
350
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
133
20k
AI Search: Implications for SEO and How to Move Forward - #ShenzhenSEOConference
aleyda
1
1.4k
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
10
1.4k
Test your architecture with Archunit
thirion
2
2.4k
WENDY [Excerpt]
tessaabrams
14
40k
Gemini Prompt Engineering: Practical Techniques for Tangible AI Outcomes
mfonobong
2
560
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
162
16k
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
9
1.6k
The innovator’s Mindset - Leading Through an Era of Exponential Change - McGill University 2025
jdejongh
PRO
1
350
Transcript
dRuby 入門者による あなたの身近にある dRuby 入門 @makicamel 大阪 Ruby 会議 04
2024.08.24
自己紹介 @makicamel / 川原万季 Ruby とビール とお酒が好き 好きな VR ゲームは
BeatSaber ㈱アンドパッド
dRuby
dRuby distributed ruby 分散 Ruby 分散オブジェクトシステムを実現するライブラリ 1999 年初出 関将俊さん作
dRuby 1999 年初出 https://gist.github.com/seki/5713863
dRuby ( *1) ( *1) dRubyによる分散・Webプログラミング / 関将俊 https://www.ohmsha.co.jp/book/9784274066092/
dRuby distributed ruby 分散 Ruby 分散オブジェクトシステムを実現するライブラリ 1999 年初出 関将俊さん作
分散オブジェクトシステム とは?
分散オブジェクトシステム プロセスやネットワークを超えてメッセージを送る 他のプロセスのオブジェクトのメソッドを呼び出せる
分散オブジェクトシステム
分散オブジェクトシステム
分散オブジェクトシステム
分散オブジェクトシステム
分散オブジェクトシステム
分散オブジェクトシステム
分散オブジェクトシステム
分散オブジェクトシステム
分散オブジェクトシステム プロセスやネットワークを超えてメッセージを送る 他のプロセスのオブジェクトのメソッドを呼び出せる かんたんにサーバが作れる
分散オブジェクトシステム # terminal $ irb -r drb rabbit = DRbObject.new_with_uri
'druby://127.0.0.1:10101' # rabbitのdRubyサーバのuri rabbit.title # => "dRuby 入門者による\nあなたの身近にある\ndRuby 入門" %w[Rabbit最高 dRubyすごい 大阪たのしい ].each { rabbit.append_comment _1 } z # => [...] rabbit.toggle_fullscreen スタブを介してメッセージを送ることで Rabbit を操作できる
分散オブジェクトシステム デモ
分散オブジェクトシステム リアルワールド dRuby 活用例
分散オブジェクトシステム ( *2) ( *2) 岡山天体物理観測所広視野赤外カメラの製作 / 柳澤 顕史 https://www.astr.tohoku.ac.jp/~akiyama/astroinst2015/20151207_yanagisawa.pdf
Rinda in the real-world embedded systems. / 関将俊 https://rubykaigi.org/2020-takeout/presentations/m_seki.html
分散オブジェクトシステム ( *3) ( *3) dRuby in the real-world embedded
systems. / 関将俊 園川龍也 https://www.druby.org/seki-RK2021.pdf https://rubykaigi.org/2021-takeout/presentations/m_seki.html
分散オブジェクトシステム ( *4) ( *4) Scaling Twitter / Blaine Cook
https://www.slideshare.net/slideshow/scaling-twitter/41197
分散オブジェクトシステム すごすぎる
dRuby 入門者によるあなたの身近にある dRuby 入門
わたしたちの身近にある dRuby RSpec ActiveSupport Rabbit るりま
わたしたちの身近にある dRuby RSpec ActiveSupport Rabbit るりま
RSpec drb オプション $ rspec --help -X, --[no-]drb Run examples
via DRb. --drb-port PORT Port to connect to the DRb server.
RSpec アプリケーションを dRuby プロセスに読み込んでテストサーバにする rspec 実行時にテストサーバでテスト実行する
RSpec
RSpec
RSpec
RSpec
RSpec
RSpec
RSpec テストサーバ プリローダ アプリケーション起動時間を省略 e.g. spork( *5) A DRb server
for testing frameworks ※ 最終コミットは 2014 年 2024 年現在はあまり使われていないかも ( *5) spork https://github.com/sporkrb/spork
わたしたちの身近にある dRuby RSpec ActiveSupport Rabbit るりま
ActiveSupport ActiveSupport::TestCase#parallelize( *6) テストの並列化 使用マシンのコア数分プロセスをフォーク ( *6) ActiveSupport::TestCase https://api.rubyonrails.org/classes/ActiveSupport/TestCase.html#method-c-parallelize
ActiveSupport rails new で test_helper.rb を生成 デフォルトで parallelize が記述されている 何も意識しなくてもテストが並列実行される(
*7) # test/test_helper.rb module ActiveSupport class TestCase parallelize(workers: :number_of_processors) fixtures :all end end ( *7) ※ Minitest のみ対応
ActiveSupport ActiveSupport::TestCase#parallelize の並列実行のしくみ
ActiveSupport
ActiveSupport
ActiveSupport
ActiveSupport
ActiveSupport
ActiveSupport
ActiveSupport
ActiveSupport
ActiveSupport
ActiveSupport 並列実行のしくみ アサーションの管理を dRuby に任せる( *8) フォークしたプロセスが各個アサーションを引き出しテスト実行 ( *8) テスト結果の管理は親プロセスの仕事
わたしたちの身近にある dRuby RSpec ActiveSupport Rabbit るりま
Rabbit ( *9) ( *9) Contribute to Ruby - Yukihiro
"Matz" Matsumoto https://speakerdeck.com/matz/contribute-to-ruby-rubykaigi-2022?slide=25 https://rubykaigi.org/2022/presentations/yukihiro_matz.html
Rabbit Rubyist 御用達プレゼンテーションツール( *10) うさぎとかめでお馴染み 須藤功平さん作 ( *10) Rabbit https://rabbit-shocker.org/ja/
https://github.com/rabbit-shocker/rabbit
Rabbit デフォルトで dRuby サーバを立ち上げる class Rabbit::Command::Rabbit def do_display # ...
front = make_front(canvas) setup_druby(front) if @options.use_druby # ... end def setup_druby(front) require "drb/drb" begin DRb.start_service(@options.druby_uri, front) # ... end end end
Rabbit # terminal $ irb -r drb rabbit = DRbObject.new_with_uri
'druby://127.0.0.1:10101' # rabbitのdRubyサーバのuri rabbit.title # => "dRuby 入門者による\nあなたの身近にある\ndRuby 入門" %w[Rabbit最高 dRubyすごい 大阪たのしい ].each { rabbit.append_comment _1 } rabbit.available_interfaces # => [...] rabbit.toggle_fullscreen スタブを介してメッセージを送ることで Rabbit を操作できる
Rabbit API 提供
Rabbit API RabbiRack( *11) Web ブラウザから Rabbit を操作するツール get "/pages/next"
do @rabbit.move_to_next_if_can haml :index end ( *11) RabbiRack https://rabbit-shocker.org/ja/rabbirack https://github.com/rabbit-shocker/rabbirack ※ macOS ではhttps://github.com/rabbit-shocker/rabbit/commit/ 2b2ce805d98fd972d0a288ac7df944e53d48bbbfの適用が必要
Rabbit API Rabbiter( *12) Twitter からツイートを収集し、コメントとして Rabbit に流しこむツール rabbit =
DRbObject.new_with_uri(options.rabbit_uri) client = Rabbiter::Client.new(logger) client.start(*options.filters) do |status| # ... comment = "@#{status.user.screen_name}: #{clean_text(status, options)}" rabbit.append_comment(comment) end ( *12) Rabbiter https://rabbit-shocker.org/ja/rabbiter https://github.com/rabbit-shocker/rabbiter ※ Twitter (現 X) が壊れているので 2024 年 8 月現在は動かせない
わたしたちの身近にある dRuby RSpec ActiveSupport Rabbit るりま
るりま ( *13) ( *13) オブジェクト指向スクリプト言語 Ruby リファレンスマニュアル https://docs.ruby-lang.org/ja/latest/doc/index.html
るりま doctree ドキュメント https://github.com/rurema/doctree BitClust ドキュメントシステム リファレンスデータベースの更新、表示、検索、html 生成など https://github.com/rurema/bitclust
BitClust BitClust データベース Ruby のクラスをふつうに使う rd をコンパイルしたデータを持つ テキストファイルで永続化 人間可読のテキスト MySQL
でも PostgreSQL でも Redis でもないデータベース SQL も O/R マッパーも要らない
BitClust refe( *14) るりまのエントリを引くためのコマンドライン用ツール デーモン化 BitClust データベースをフロントオブジェクトとして dRuby サーバを起動 class
BitClust::Server def listen(url, foreground = false) # ... WEBrick::Daemon.start unless foreground DRb.start_service url, @db DRb.thread.join end end ( *14) ReFe https://i.loveruby.net/ja/prog/refe.html
BitClust データベースとしての Ruby プロセス PORO でデータ操作 ファイルに永続化 ふつうの Ruby プログラミングの延長線上で
データベースサーバを作れる
わたしたちの身近にある dRuby プリローダ 並列 API データベース
たとえば明日から dRuby を使うとしたら
たとえば明日から dRuby を使うとしたら PoC Web サーバを dRuby で立ててみる DB サーバを
dRuby で立ててみる 手に馴染む道具で検討して固まったら本実装に入るのも手かも
たとえば明日から dRuby を使うとしたら PoC Web サーバを dRuby で立ててみる DB サーバを
dRuby で立ててみる 手に馴染む道具で検討して固まったら本実装に入るのも手かも
dRuby ( *15) ( *15) dRubyによる分散・Webプログラミング / 関将俊 https://www.ohmsha.co.jp/book/9784274066092/
Special Thanks @youchan
ご清聴 ありがとう ございました