Create Ruby native extension gem with Go
by
sue445
×
Copy
Open
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
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