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
770
0
Share
Create Ruby native extension gem with Go
ペパボ & GO 〜 夏のGo祭り2025、あの夏〜(
https://pepabo.connpass.com/event/363869/
)の発表資料です
sue445
September 16, 2025
More Decks by sue445
See All by sue445
Road to RubyKaigi 2025 #rubykaigi2026_saisoku
sue445
0
140
Kaigi Effect 2025 #rubykaigi2025_after
sue445
0
1.5k
Road to Go Gem #rubykaigi
sue445
0
3k
pixiv Cloud Journey #pixivmeetup
sue445
0
1.7k
Road to RubyKaigi Speaker (case sue445) #rubykaigi2023_after
sue445
0
2.8k
Fix SQL N+1 queries with RuboCop #rubykaigi
sue445
2
7.2k
sue445とOSSと社内ツール #subcul_dev
sue445
0
910
Sentry GKEに リプレイス 1年間の 知見見せます / Migrated to GKE Sentry #pixivdevmeetup
sue445
0
800
sue445謹製社内ツール十一選 / su445 in-house tools #pixivdevmeetup
sue445
1
560
Other Decks in Technology
See All in Technology
"まず試す"ためのDatabricks Apps活用法 / Databricks Apps for Early Experiments and Validation
nttcom
1
210
Podcast配信で広がったアウトプットの輪~70人と音声発信してきた7年間~/outputconf_01
fortegp05
0
240
機能・非機能の学びを一つに!Agent Skillsで月間レポート作成始めてみた / Unifying Bug & Infra Insights — Building Monthly Quality Reports with Agent Skills
bun913
5
3.7k
フルカイテン株式会社 エンジニア向け採用資料
fullkaiten
0
11k
Oracle AI Database@AWS:サービス概要のご紹介
oracle4engineer
PRO
4
2.2k
プロダクトを育てるように生成AIによる開発プロセスを育てよう
kakehashi
PRO
1
850
「できない」のアウトプット 同人誌『精神を壊してからの』シリーズ出版を 通して得られたこと
comi190327
3
620
あるアーキテクチャ決定と その結果/architecture-decision-and-its-result
hanhan1978
2
540
Network Firewall Proxyで 自前プロキシを消し去ることができるのか
gusandayo
0
210
Kubernetes基盤における開発者体験 とセキュリティの両⽴ / Balancing developer experience and security in a Kubernetes-based environment
chmikata
0
210
システムは「動く」だけでは 足りない - 非機能要件・分散システム・トレードオフの基礎
nwiizo
9
3.5k
Autonomous Database - Dedicated 技術詳細 / adb-d_technical_detail_jp
oracle4engineer
PRO
5
13k
Featured
See All Featured
The Illustrated Guide to Node.js - THAT Conference 2024
reverentgeek
1
330
Thoughts on Productivity
jonyablonski
76
5.1k
Mind Mapping
helmedeiros
PRO
1
140
Facilitating Awesome Meetings
lara
57
6.8k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
31
3.1k
Avoiding the “Bad Training, Faster” Trap in the Age of AI
tmiket
0
120
A brief & incomplete history of UX Design for the World Wide Web: 1989–2019
jct
1
340
Introduction to Domain-Driven Design and Collaborative software design
baasie
1
710
KATA
mclloyd
PRO
35
15k
Crafting Experiences
bethany
1
110
<Decoding/> the Language of Devs - We Love SEO 2024
nikkihalliwell
1
180
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
12
1.1k
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