Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Create Ruby native extension gem with Go
Search
sue445
September 16, 2025
Technology
0
320
Create Ruby native extension gem with Go
ペパボ & GO 〜 夏のGo祭り2025、あの夏〜(
https://pepabo.connpass.com/event/363869/
)の発表資料です
sue445
September 16, 2025
Tweet
Share
More Decks by sue445
See All by sue445
Road to RubyKaigi 2025 #rubykaigi2026_saisoku
sue445
0
76
Kaigi Effect 2025 #rubykaigi2025_after
sue445
0
1.3k
Road to Go Gem #rubykaigi
sue445
0
1.6k
pixiv Cloud Journey #pixivmeetup
sue445
0
1.5k
Road to RubyKaigi Speaker (case sue445) #rubykaigi2023_after
sue445
0
2.3k
Fix SQL N+1 queries with RuboCop #rubykaigi
sue445
2
6.2k
sue445とOSSと社内ツール #subcul_dev
sue445
0
870
Sentry GKEに リプレイス 1年間の 知見見せます / Migrated to GKE Sentry #pixivdevmeetup
sue445
0
760
sue445謹製社内ツール十一選 / su445 in-house tools #pixivdevmeetup
sue445
1
520
Other Decks in Technology
See All in Technology
"複雑なデータ処理 × 静的サイト" を両立させる、楽をするRails運用 / A low-effort Rails workflow that combines “Complex Data Processing × Static Sites”
hogelog
3
2k
研究開発部メンバーの働き⽅ / Sansan R&D Profile
sansan33
PRO
3
20k
20250929_QaaS_vol20
mura_shin
0
110
Azure SynapseからAzure Databricksへ 移行してわかった新時代のコスト問題!?
databricksjapan
0
140
AIAgentの限界を超え、 現場を動かすWorkflowAgentの設計と実践
miyatakoji
0
130
Access-what? why and how, A11Y for All - Nordic.js 2025
gdomiciano
1
110
AI時代だからこそ考える、僕らが本当につくりたいスクラムチーム / A Scrum Team we really want to create in this AI era
takaking22
6
3.4k
Oracle Base Database Service 技術詳細
oracle4engineer
PRO
11
77k
コンテキストエンジニアリングとは? 考え方と応用方法
findy_eventslides
4
900
How to achieve interoperable digital identity across Asian countries
fujie
0
120
OCI Network Firewall 概要
oracle4engineer
PRO
1
7.8k
o11yで育てる、強い内製開発組織
_awache
3
120
Featured
See All Featured
GraphQLとの向き合い方2022年版
quramy
49
14k
Designing Experiences People Love
moore
142
24k
How To Stay Up To Date on Web Technology
chriscoyier
791
250k
The Straight Up "How To Draw Better" Workshop
denniskardys
237
140k
Side Projects
sachag
455
43k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
252
21k
Designing for humans not robots
tammielis
254
25k
Git: the NoSQL Database
bkeepers
PRO
431
66k
What's in a price? How to price your products and services
michaelherold
246
12k
Dealing with People You Can't Stand - Big Design 2015
cassininazir
367
27k
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
54
3k
Code Review Best Practice
trishagee
72
19k
Transcript
Create Ruby native extension gem with Go 2025/09/16 ペパボ &
GO 〜 夏のGo祭り2025、あの夏〜 https://pepabo.connpass.com/event/363869/
About • Go Sueyoshi (a.k.a. sue445) • Gopher since 1982
(43 years old) • pixiv Inc. ◦ Infra Unit ◦ AWS, Google Cloud, 雑用全般 etc...
今日話すこと • RubyのgemをGoで作る話 ◦ Go Conference 2025に出して落ちたプロポーザルの供養 • 余談:この発表資料は https://github.com/k1LoW/deck
で作られていま す
Rubyのgemについて • gemとはRubyのライブラリ • Rubyのgemは 基本的には Rubyで書く
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と呼ぶ ことが多い
Native extensionの仕組み(C ver)
cgo • Goのソースコードからshared objectファイル(*.so)を作る機能 • soファイルをCのプログラムから読み込むことでCでGoの機能が使えるよ うになる • さらに応用するとcgoを利用してRubyのgemをGoで作ることができる
Goで作ったNative extension(Go gem)の仕 組み
Go gem Example
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
ruby.hから自動生成したソースコードの例
Go gemのメリット • GoのエコシステムをRubyから利用できる • RubyからGoの機能を利用できる ◦ goroutineやchannelは他の言語にないGoの大きな強み
https://speakerdeck.com/sue445/road-to-go-gem-number-rubykaigi?slide=139
funnel_http • https://github.com/sue445/funnel_http • 複数のhttpリクエストをgoroutineから実行するためのRubyのgem
Example
https://rubykaigi.org/2025/presentations/sue445.html#day3
https://speakerdeck.com/sue445/road-to-go-gem-number-rubykaigi