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