Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
APIとABIの違い
Search
Satoru Takeuchi
PRO
August 31, 2025
Technology
690
5
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
APIとABIの違い
以下動画のテキストです
https://youtu.be/T-01LJnqdyg
Satoru Takeuchi
PRO
August 31, 2025
More Decks by Satoru Takeuchi
See All by Satoru Takeuchi
119-多機能ファイルシステムBtrfs_のコピー.pdf
sat
PRO
1
80
Linuxカーネルの インタフェースは変わりうる?
sat
PRO
1
110
あなたの知らないバージョン命名規則
sat
PRO
3
930
Rook: Intro and Deep Dive with Ceph
sat
PRO
1
78
Machine Check Exception
sat
PRO
2
72
バイナリダンプの模様を読む
sat
PRO
0
120
cpコマンドはディスク上でデータを コピーしないことがある
sat
PRO
3
110
114-ファイルのshallow_copy.pdf
sat
PRO
2
66
113-Btrfsのスナップショット.pdf
sat
PRO
0
48
Other Decks in Technology
See All in Technology
AIエージェントに 権限と鍵をどこまで渡すか
nrinetcom
PRO
2
160
Technical Project Manager の役割とやりがい、少しだけ AI
yoshiiryo1
0
390
Vue.jsのGitHubから学ぶ意思決定
yut0naga1_fa
1
340
Maestro MCPとClaude Code Skillsによる自律的なE2Eテスト支援
asmz
0
390
基本から分かる!AWSセキュリティ運用の考え方と任せ方
cmusudakeisuke
1
260
データマネジメント × 法務で作りあげる、 freeeの新しいデータガバナンスへの軌跡
freee
PRO
2
580
Draft AIエージェントの トークン消費を最小化する 8つの原則
kinopeee
6
1.9k
ビジネス部門からPOを迎えての半年間の進歩と課題
zozotech
PRO
0
170
Content Mapper APIの応用例~CSS Modules、言語ファイル~
uhyo
2
360
[General] 개발자로 해외 기업에서 일하기
skydoves
1
110
なぜAI時代に技術記事を書くのか?どう書くのか? 〜bunの場合〜
kworkdev
PRO
0
1.1k
AIテスト自動化と評価駆動開発EDD
happysamurai294
0
110
Featured
See All Featured
Measuring Dark Social's Impact On Conversion and Attribution
stephenakadiri
2
320
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
162
16k
The Invisible Side of Design
smashingmag
301
52k
Practical Orchestrator
shlominoach
192
12k
Un-Boring Meetings
codingconduct
0
470
Design in an AI World
tapps
1
380
Building a Scalable Design System with Sketch
lauravandoore
464
34k
Why Your Marketing Sucks and What You Can Do About It - Sophie Logan
marketingsoph
0
440
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
38
3.1k
What does AI have to do with Human Rights?
axbom
PRO
1
2.5k
Making Projects Easy
brettharned
120
6.8k
Ecommerce SEO: The Keys for Success Now & Beyond - #SERPConf2024
aleyda
1
2.2k
Transcript
APIとABIの違い Aug. 31st, 2025 Satoru Takeuchi X: satoru_takeuchi 1
はじめに • ソフトウェア技術の文脈で「API」と「ABI」という言葉がよく出てくる • どちらも異なるプログラム(関数含む)間で情報をやりとりするためのインタフェース だがレイヤが異なる ◦ API(Application Programming Interface)
▪ ソースコードレベル ◦ ABI(Application Binary Interface) ▪ バイナリレベル • これだけではよくわからないので、2つの違いを具体例を使って説明 • 話を単純化するために、以下の例を考える ◦ Linux環境である ◦ C言語で書かれたソースコードをコンパイルして足し算をする関数を呼び出す 2
足し算をするplus関数のAPI • 書式通りにソースコードを書いてコンパイルすると、plus関数を呼び出して結果を受 け取る機械語コードを出力してくれる ◦ 言語が違うとAPIも違う事が多い 3 c = plus(1,
2); printf(“%d\n”, c); ソースコード aaabbbccc xxxyyyzzz コンパイル x86_64機械語コード ARM64機械語コード 書式: int plus(int x, int y); 説明: xとyを足した結果を返す APIを使って呼び出す
ABI • バイナリレベルで、関数を呼び出して戻り値を受け取る方法を定める • x86_64 LinuxでC言語で書かれた関数を呼び出す場合に通常使用するABI ◦ 第1,第2引数はCPUのrdi,rsiレジスタを使って渡し、 call機械語命令を使って呼び出す ◦
戻り値はCPUのraxレジスタを使って返す • ソースコードをバイナリ(機械語コード)にコンパイルする時、した後の話 ◦ プログラマは通常ABIを気にする必要はない 4 aaabbbccc x86_64機械語コード dddeeefff x86_64のplusのコード ABIを使って呼び出す
📝 役に立つページ • 一般的な話: wikipediaの「呼び出し規約」のページ ◦ https://ja.wikipedia.org/wiki/%E5%91%BC%E5%87%BA%E8%A6%8F%E7%B4%84 • x86_64の話: System
V Application Binary Interface AMD64 Architecture Processor Supplement Draft Version 0.99.7(とくに3.2が役立つだろう) ◦ https://www.uclibc.org/docs/psABI-x86_64.pdf ◦ Linux上のC言語で書かれた関数は通常この ABIを使う 5
プログラマがABIを気にする場合の例 • go-sqlite3 ◦ https://github.com/mattn/go-sqlite3 ◦ libsqlite3ライブラリを使うための Go言語用ライブラリ • 課題
◦ Goのソースコードから直接 libsqlite3の関数を呼び出せない • 解決策 ◦ ユーザにはGo標準の”database/sql”APIを提供 ◦ APIを実装する関数の中で、 libsqlite3の機械語コードをABIを使って呼び出す ▪ cgoというしくみを使う 6
まとめ • APIとABIはどちらもプログラム間で情報をやりとりするインタフェース • レイヤが違う ◦ API: ソースコードレベル ◦ ABI:
バイナリレベル • プログラマは通常APIについてだけ考えればよい • 別言語のライブラリを呼び出すようなときにABIを意識することも 7