Create Ruby native extension gem with Go
by
sue445
Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
Slide 1
Slide 1 text
Create Ruby native extension gem with Go 2025/09/16 ペパボ & GO 〜 夏のGo祭り2025、あの夏〜 https://pepabo.connpass.com/event/363869/
Slide 2
Slide 2 text
About ● Go Sueyoshi (a.k.a. sue445) ● Gopher since 1982 (43 years old) ● pixiv Inc. ○ Infra Unit ○ AWS, Google Cloud, 雑用全般 etc...
Slide 3
Slide 3 text
今日話すこと ● RubyのgemをGoで作る話 ○ Go Conference 2025に出して落ちたプロポーザルの供養 ● 余談:この発表資料は https://github.com/k1LoW/deck で作られていま す
Slide 4
Slide 4 text
Rubyのgemについて ● gemとはRubyのライブラリ ● Rubyのgemは 基本的には Rubyで書く
Slide 5
Slide 5 text
Native extension ● 応用的には RubyのgemはRuby以外の言語でも作ることができる ● Ruby以外の言語で作ったgemのことをNative extensionと呼ぶ ● 公式ではCやRustがサポートされている ● RubyはCで作られているので、Native ExtensionからRubyのCの関数を呼 び出すことができる ○ C以外で作られたRubyもあるので https://github.com/ruby/ruby のことをCRubyと呼ぶ ことが多い
Slide 6
Slide 6 text
Native extensionの仕組み(C ver)
Slide 7
Slide 7 text
cgo ● Goのソースコードからshared objectファイル(*.so)を作る機能 ● soファイルをCのプログラムから読み込むことでCでGoの機能が使えるよ うになる ● さらに応用するとcgoを利用してRubyのgemをGoで作ることができる
Slide 8
Slide 8 text
Goで作ったNative extension(Go gem)の仕 組み
Slide 9
Slide 9 text
Go gem Example
Slide 10
Slide 10 text
github.com/ruby-go-gem/go-gem-wrapper ● GoからCRubyの関数を呼び出すためのbindingを提供しているラッパー ● ruby.h で定義されている約1,100個の関数からGoのソースコードを自動 生成している ● ruby.h をparseするためのparserも作った ○ https://github.com/ruby-go-gem/ruby_header_parser
Slide 11
Slide 11 text
ruby.hから自動生成したソースコードの例
Slide 12
Slide 12 text
Go gemのメリット ● GoのエコシステムをRubyから利用できる ● RubyからGoの機能を利用できる ○ goroutineやchannelは他の言語にないGoの大きな強み
Slide 13
Slide 13 text
https://speakerdeck.com/sue445/road-to-go-gem-number-rubykaigi?slide=139
Slide 14
Slide 14 text
funnel_http ● https://github.com/sue445/funnel_http ● 複数のhttpリクエストをgoroutineから実行するためのRubyのgem
Slide 15
Slide 15 text
Example
Slide 16
Slide 16 text
https://rubykaigi.org/2025/presentations/sue445.html#day3
Slide 17
Slide 17 text
https://speakerdeck.com/sue445/road-to-go-gem-number-rubykaigi