[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"article-deep-evm-5-yul-nyuumon-solidity-assembly":3},{"article":4,"author":58},{"id":5,"category_id":6,"title":7,"slug":8,"excerpt":9,"content_md":10,"content_html":11,"locale":12,"author_id":13,"published":14,"published_at":15,"meta_title":7,"meta_description":16,"focus_keyword":17,"og_image":18,"canonical_url":18,"robots_meta":19,"created_at":15,"updated_at":15,"tags":20,"category_name":38,"related_articles":39},"d4000000-0000-0000-0000-000000000105","a0000000-0000-0000-0000-000000000042","Deep EVM #5：Yul入門 — Solidityの秘密のアセンブリ言語","deep-evm-5-yul-nyuumon-solidity-assembly","Yulの実践的入門：構文、Solidityでのインラインアセンブリ、使用すべき場面、ストレージ読み取り、イベント発行、Solidityオーバーヘッド回避の実例。","## Yulとは何か、なぜ存在するのか\n\nYulはSolidityチームが設計した中間言語で、EVMバイトコードにコンパイルされます。Solidityと生のオペコードの間に位置し、変数、関数、if\u002Fswitch\u002Ffor構文、スコープブロックを持つ読みやすい構造化構文を通じて、すべてのEVMオペコードに直接アクセスできます。\n\nYulが存在するのは、Solidityのコンパイラが保守的なバイトコードを生成するからです。オーバーフローチェック、ABIエンコーディング、メモリ管理 — アプリケーションコントラクトには便利ですが、MEVボットやDEXルーターなどのガスクリティカルなコードには許容できないオーバーヘッドです。\n\nSolidity内で`assembly { ... }`と書くと、それがYulです。\n\n## Yulの構文基礎\n\n### 変数\n```yul\nlet x := 42\nlet y := add(x, 1)    \u002F\u002F y = 43\n```\n\n### 関数\n```yul\nfunction safeAdd(a, b) -> result {\n    result := add(a, b)\n    if lt(result, a) {\n        revert(0, 0)  \u002F\u002F オーバーフロー\n    }\n}\n```\n\n### 制御フロー\n\nYulのifにはelseがありません。代わりにswitchを使用：\n\n```yul\nswitch selector\ncase 0xa9059cbb { \u002F* transfer *\u002F }\ncase 0x70a08231 { \u002F* balanceOf *\u002F }\ndefault { revert(0, 0) }\n```\n\n## Solidityでのインラインアセンブリ\n\nYulの最も一般的な使い方は、Solidityの`assembly { }`ブロック内です。Solidity変数はブロック内でアクセス可能です。\n\n## Yulを使うべき場合\n\n### 使うべき場合：\n1. ガスがクリティカル — MEVボット、DEXアグリゲータルーター\n2. ビット演算が必要 — データのパック\u002Fアンパック\n3. メモリレイアウトが重要 — 外部コール用calldataの構築\n4. Solidityが最適でないコードを生成 — メモリ間コピーなど\n5. 一時ストレージが必要 — Solidityがネイティブサポートを追加する前のTLOAD\u002FTSTORE\n\n### 使うべきでない場合：\n1. 可読性がガスより重要 — ほとんどのアプリケーションコントラクト\n2. EVM知識に自信がない — Yulにはセーフティネットがない\n3. ガス節約が無視できる — 500,000ガスの関数で200ガスの節約は価値がない\n\n## 実践例：効率的なMulticall\n\nガス効率の良いmulticall関数の実世界の例を示します。\n\n## 実践例：Uniswap V3のSlot0読み取り\n\nMEVボットにとって、プール状態の素早い読み取りは不可欠です。Yulでは最小限のメモリ使用でstaticcallを実行し、ABIデコーディングオーバーヘッドなしで結果が即座にスタック変数として利用可能になります。\n\n## Yul vs Huff\n\n| 機能 | Yul | Huff |\n|------|-----|------|\n| スタック管理 | 自動（コンパイラ） | 手動 |\n| 変数名 | あり | なし |\n| 関数 | あり | マクロ |\n| 制御フロー | if\u002Fswitch\u002Ffor | JUMPI\u002FJUMPDEST |\n| コードサイズ制御 | 限定的 | 完全 |\n| ガスオーバーヘッド | 小（変数管理） | ゼロ |\n\nほとんどのガス最適化作業では、Yulが大幅に優れた可読性で80-90%の節約を提供します。\n\n## よくある落とし穴\n\n1. **メモリはゼロ初期化されない** — 書き込み前のメモリ読み取りはゴミデータ\n2. **リターンデータの誤解** — 次のCALL後にreturn dataは無効\n3. **大きな関数でのスタック深度超過** — 小さな関数に分割するか、メモリを使用\n4. **ダーティな上位ビットの未処理** — calldataからのアドレス読み取り時にマスクが必要\n\n## まとめ\n\nYulはSolidityの安全性とEVMの生のパワーの間の橋渡しです。オペコードレベルの制御を、変数名、関数、構造化制御フローで実現します。MEV開発者にとって、Yulをマスターすることがガス効率で利益を出すボットと競争に負けるボットの違いです。","\u003Ch2 id=\"yul\">Yulとは何か、なぜ存在するのか\u003C\u002Fh2>\n\u003Cp>YulはSolidityチームが設計した中間言語で、EVMバイトコードにコンパイルされます。Solidityと生のオペコードの間に位置し、変数、関数、if\u002Fswitch\u002Ffor構文、スコープブロックを持つ読みやすい構造化構文を通じて、すべてのEVMオペコードに直接アクセスできます。\u003C\u002Fp>\n\u003Cp>Yulが存在するのは、Solidityのコンパイラが保守的なバイトコードを生成するからです。オーバーフローチェック、ABIエンコーディング、メモリ管理 — アプリケーションコントラクトには便利ですが、MEVボットやDEXルーターなどのガスクリティカルなコードには許容できないオーバーヘッドです。\u003C\u002Fp>\n\u003Cp>Solidity内で\u003Ccode>assembly { ... }\u003C\u002Fcode>と書くと、それがYulです。\u003C\u002Fp>\n\u003Ch2 id=\"yul\">Yulの構文基礎\u003C\u002Fh2>\n\u003Ch3>変数\u003C\u002Fh3>\n\u003Cpre>\u003Ccode class=\"language-yul\">let x := 42\nlet y := add(x, 1)    \u002F\u002F y = 43\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Ch3>関数\u003C\u002Fh3>\n\u003Cpre>\u003Ccode class=\"language-yul\">function safeAdd(a, b) -&gt; result {\n    result := add(a, b)\n    if lt(result, a) {\n        revert(0, 0)  \u002F\u002F オーバーフロー\n    }\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Ch3>制御フロー\u003C\u002Fh3>\n\u003Cp>Yulのifにはelseがありません。代わりにswitchを使用：\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-yul\">switch selector\ncase 0xa9059cbb { \u002F* transfer *\u002F }\ncase 0x70a08231 { \u002F* balanceOf *\u002F }\ndefault { revert(0, 0) }\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Ch2 id=\"solidity\">Solidityでのインラインアセンブリ\u003C\u002Fh2>\n\u003Cp>Yulの最も一般的な使い方は、Solidityの\u003Ccode>assembly { }\u003C\u002Fcode>ブロック内です。Solidity変数はブロック内でアクセス可能です。\u003C\u002Fp>\n\u003Ch2 id=\"yul\">Yulを使うべき場合\u003C\u002Fh2>\n\u003Ch3>使うべき場合：\u003C\u002Fh3>\n\u003Col>\n\u003Cli>ガスがクリティカル — MEVボット、DEXアグリゲータルーター\u003C\u002Fli>\n\u003Cli>ビット演算が必要 — データのパック\u002Fアンパック\u003C\u002Fli>\n\u003Cli>メモリレイアウトが重要 — 外部コール用calldataの構築\u003C\u002Fli>\n\u003Cli>Solidityが最適でないコードを生成 — メモリ間コピーなど\u003C\u002Fli>\n\u003Cli>一時ストレージが必要 — Solidityがネイティブサポートを追加する前のTLOAD\u002FTSTORE\u003C\u002Fli>\n\u003C\u002Fol>\n\u003Ch3>使うべきでない場合：\u003C\u002Fh3>\n\u003Col>\n\u003Cli>可読性がガスより重要 — ほとんどのアプリケーションコントラクト\u003C\u002Fli>\n\u003Cli>EVM知識に自信がない — Yulにはセーフティネットがない\u003C\u002Fli>\n\u003Cli>ガス節約が無視できる — 500,000ガスの関数で200ガスの節約は価値がない\u003C\u002Fli>\n\u003C\u002Fol>\n\u003Ch2 id=\"multicall\">実践例：効率的なMulticall\u003C\u002Fh2>\n\u003Cp>ガス効率の良いmulticall関数の実世界の例を示します。\u003C\u002Fp>\n\u003Ch2 id=\"uniswap-v3-slot0\">実践例：Uniswap V3のSlot0読み取り\u003C\u002Fh2>\n\u003Cp>MEVボットにとって、プール状態の素早い読み取りは不可欠です。Yulでは最小限のメモリ使用でstaticcallを実行し、ABIデコーディングオーバーヘッドなしで結果が即座にスタック変数として利用可能になります。\u003C\u002Fp>\n\u003Ch2 id=\"yul-vs-huff\">Yul vs Huff\u003C\u002Fh2>\n\u003Ctable>\u003Cthead>\u003Ctr>\u003Cth>機能\u003C\u002Fth>\u003Cth>Yul\u003C\u002Fth>\u003Cth>Huff\u003C\u002Fth>\u003C\u002Ftr>\u003C\u002Fthead>\u003Ctbody>\n\u003Ctr>\u003Ctd>スタック管理\u003C\u002Ftd>\u003Ctd>自動（コンパイラ）\u003C\u002Ftd>\u003Ctd>手動\u003C\u002Ftd>\u003C\u002Ftr>\n\u003Ctr>\u003Ctd>変数名\u003C\u002Ftd>\u003Ctd>あり\u003C\u002Ftd>\u003Ctd>なし\u003C\u002Ftd>\u003C\u002Ftr>\n\u003Ctr>\u003Ctd>関数\u003C\u002Ftd>\u003Ctd>あり\u003C\u002Ftd>\u003Ctd>マクロ\u003C\u002Ftd>\u003C\u002Ftr>\n\u003Ctr>\u003Ctd>制御フロー\u003C\u002Ftd>\u003Ctd>if\u002Fswitch\u002Ffor\u003C\u002Ftd>\u003Ctd>JUMPI\u002FJUMPDEST\u003C\u002Ftd>\u003C\u002Ftr>\n\u003Ctr>\u003Ctd>コードサイズ制御\u003C\u002Ftd>\u003Ctd>限定的\u003C\u002Ftd>\u003Ctd>完全\u003C\u002Ftd>\u003C\u002Ftr>\n\u003Ctr>\u003Ctd>ガスオーバーヘッド\u003C\u002Ftd>\u003Ctd>小（変数管理）\u003C\u002Ftd>\u003Ctd>ゼロ\u003C\u002Ftd>\u003C\u002Ftr>\n\u003C\u002Ftbody>\u003C\u002Ftable>\n\u003Cp>ほとんどのガス最適化作業では、Yulが大幅に優れた可読性で80-90%の節約を提供します。\u003C\u002Fp>\n\u003Ch2 id=\"\">よくある落とし穴\u003C\u002Fh2>\n\u003Col>\n\u003Cli>\u003Cstrong>メモリはゼロ初期化されない\u003C\u002Fstrong> — 書き込み前のメモリ読み取りはゴミデータ\u003C\u002Fli>\n\u003Cli>\u003Cstrong>リターンデータの誤解\u003C\u002Fstrong> — 次のCALL後にreturn dataは無効\u003C\u002Fli>\n\u003Cli>\u003Cstrong>大きな関数でのスタック深度超過\u003C\u002Fstrong> — 小さな関数に分割するか、メモリを使用\u003C\u002Fli>\n\u003Cli>\u003Cstrong>ダーティな上位ビットの未処理\u003C\u002Fstrong> — calldataからのアドレス読み取り時にマスクが必要\u003C\u002Fli>\n\u003C\u002Fol>\n\u003Ch2 id=\"\">まとめ\u003C\u002Fh2>\n\u003Cp>YulはSolidityの安全性とEVMの生のパワーの間の橋渡しです。オペコードレベルの制御を、変数名、関数、構造化制御フローで実現します。MEV開発者にとって、Yulをマスターすることがガス効率で利益を出すボットと競争に負けるボットの違いです。\u003C\u002Fp>\n","ja","b0000000-0000-0000-0000-000000000001",true,"2026-03-28T10:44:26.853035Z","Yulアセンブリの実践的入門：構文、Solidityでのインラインアセンブリ、ガスクリティカルなスマートコントラクトの実例。","Yul アセンブリ言語",null,"index, follow",[21,26,30,34],{"id":22,"name":23,"slug":24,"created_at":25},"c0000000-0000-0000-0000-000000000016","EVM","evm","2026-03-28T10:44:21.513630Z",{"id":27,"name":28,"slug":29,"created_at":25},"c0000000-0000-0000-0000-000000000020","Gas Optimization","gas-optimization",{"id":31,"name":32,"slug":33,"created_at":25},"c0000000-0000-0000-0000-000000000014","Solidity","solidity",{"id":35,"name":36,"slug":37,"created_at":25},"c0000000-0000-0000-0000-000000000018","Yul","yul","ブロックチェーン",[40,46,52],{"id":41,"title":42,"slug":43,"excerpt":44,"locale":12,"category_name":38,"published_at":45},"d0000000-0000-0000-0000-000000000602","Ethereumインターオペラビリティレイヤー：55以上のL2が一つのチェーンになる方法","ethereum-interoperability-layer-55-l2-hitotsu-no-chain","Ethereumには55以上のLayer 2ロールアップがあり、流動性とユーザー体験が断片化しています。Ethereumインターオペラビリティレイヤー — クロスロールアップメッセージング、共有シーケンサー、ベースドロールアップを組み合わせて — それらを一つのコンポーザブルネットワークに統合することを目指しています。","2026-03-28T10:44:44.721589Z",{"id":47,"title":48,"slug":49,"excerpt":50,"locale":12,"category_name":38,"published_at":51},"d0000000-0000-0000-0000-000000000601","ロールアップを超えるZK証明：Ethereumでの検証可能なAI推論","rollup-wo-koeru-zk-shomei-ethereum-kensho-kanou-ai-suiron","ゼロ知識証明はもはや単なるスケーリングツールではありません。2026年、zkMLはオンチェーンでの検証可能なAI推論を実現し、ZKコプロセッサは重い計算をオフチェーンで実行してオンチェーンで検証し、SP1やJoltなどの新しい証明システムが実用化を推進しています。","2026-03-28T10:44:44.716908Z",{"id":53,"title":54,"slug":55,"excerpt":56,"locale":12,"category_name":38,"published_at":57},"d0000000-0000-0000-0000-000000000578","EIP-7702実践ガイド：Pectra後のスマートアカウントフロー構築","eip-7702-jissen-gaido-pectra-go-sumaato-akaunto-furoo-kouchiku","EIP-7702により、任意のEthereum EOAが単一トランザクション内でスマートコントラクトとして一時的に動作可能になりました。バッチトランザクション、ガススポンサーシップ、ソーシャルリカバリーの実装方法を解説します。","2026-03-28T10:44:43.184719Z",{"id":13,"name":59,"slug":60,"bio":61,"photo_url":18,"linkedin":18,"role":62,"created_at":63,"updated_at":63},"Open Soft Team","open-soft-team","The engineering team at Open Soft, building premium software solutions from Bali, Indonesia.","Engineering Team","2026-03-28T08:31:22.226811Z"]