HN 日本語サマリー

← 一覧へ戻る
プログラミング

CからRustへの移行ガイドブック

The C to Rust migration book (mainmatter.com)

21 pointsby LukeMathWalker13 コメント

要約

Mainmatter社は、C言語のコードベースをRustに安全かつ段階的に移行するためのガイドブックを公開しました。この書籍では、CとRustの混在コードベースの維持、クリーンなAPIの設計、一般的なCのイディオムを慣用的なRustに翻訳する方法など、実践的なテクニックを学ぶことができます。メモリ安全性や信頼性の向上が求められる現代において、既存のCコードをRustにモダナイズしようとする開発者にとって貴重なリソースとなります。

全文翻訳

Mainmatter CからRustへの移行ガイドブック By Mainmatter 概要 コース 目次 著者について Mainmatterについて 世界を壊すことなくCからRustへ移行する ソフトウェアのセキュリティとモダナイゼーションは、今日の最優先事項です。技術的負債とメモリ安全性のバグは、依然として脆弱性の最大の原因であり、チームが信頼性とメモリ安全性のためにRustにますます注目する理由です。しかし、リライトは困難で、恐ろしく、多くのリスクを伴います。Mainmatterは、クライアントが世界で最も重要なソフトウェアの一部を首尾よくモダナイズするのを支援した経験をこの本にまとめました。 自己完結型のライブラリをゼロからリライトする場合でも、大規模で複雑な、変化し続けるコードベースを段階的に移行する場合でも、この本は成功するためのテクニックを教えてくれます。安全なCとRustの混在コードベースを維持し、クリーンなAPIを設計し、一般的なCのイディオムを慣用的なRustに翻訳する方法を学びます。 CからRustへの移行ガイドブック 学習を開始 このコースは、自習式演習の哲学に基づいて構築されています。各コンセプトには、実際のRustパッケージで解決する演習がペアになっており、ソリューションをチェックするテストスイートが含まれています。 RustとCに関する事前の知識を前提としています。FFIの経験は必要ありません。それがこのコースが教えることです。最終的には、生産的な方法でCコードベースにRustを導入できるようになります。 更新情報を受け取る 新しい章が追加される予定です。ニュースレターを購読して、最初にお知らせを受け取ってください。メールアドレス (必須) 必須 購読 目次 1. 外国関数インターフェース (Foreign Function Interfaces) FFIの基本:CとRustがC ABI、シンボルテーブル、リンカを介してバイナリレベルで通信する方法。最初のextern "C"ブロックを手書きし、バインディングを宣言する際にコンパイラに何を約束しているのか、そしてシグネチャが一致しない場合に何が問題になるのかを確認します。 2. 境界を越える型とデータ (Types and Data Across the Boundary) 所有権を明確にしながら、プリミティブ値、文字列、構造体、コレクションを言語境界を越えて移動する方法。bindgenを使用してCヘッダーからRustバインディングを生成し、Mainmatterの逆方向ツールであるcheadergenを使用してRustコードからCヘッダーを生成し、非自明な型のために両方を設定します。 3. FFIセーフな型 (FFI-Safe Types) 生ポインタと型なしプリミティブは、FFI境界での主要なバグの原因です。より安全な代替手段を学びます:NonNull、Option、newtypeラッパー、および意味を持つ列挙型識別子。これらは、独自の型安全性を持たないCコードと通信する場合でも、無効な状態を表現できないように型を設計する方法です。 4. FFI検証 (FFI validation) すべてのFFI関数は信頼境界です。Cの呼び出し元はnullポインタ、範囲外の値、または無効なUTF-8を渡す可能性があり、Rustはコンパイル時にそれを検出できません。境界で入力を検証し、絞り込む規律を構築し、Cからの無効なデータが安全なRustやビジネスロジックに到達しないようにします。 5. エラー処理とAPI設計 (Error Handling and API Design) RustのResultと?はextern "C"では停止します。Rustのエラー型をエラーコードの列挙型とアウトパラメータを持つC互換の結果に変換し、Rustの内部を漏らすことなく失敗情報を表面化します。また、フィールドごとのセッターではなく粗い操作を公開し、APIサーフェスを小さく保つことも学びます。 6. プロダクション品質のFFI (Production-Quality FFI) Rustの /// # Safety 規約と番号付けされた不変条件でFFI関数を文書化し、すべての安全でない契約が明示的になり、cheadergenを介して生成されたヘッダーでCのdocコメントとして表示されます。ビルド統合、自動チェック、FFIサーフェスを永遠に維持するAPIとして扱うことについて説明します。 著者について Jonas Kruckenberg シニアエンジニアリングコンサルタント @Mainmatter Jonas Kruckenbergは、次世代コンピューティングインフラストラクチャに焦点を当てたシステムエンジニアおよびテクノロジストです。彼は実験的な高信頼性オペレーティングシステムであるk23の主要著者です。TC39の招待エキスパートとして、彼は非ブラウザの視点をJavaScript言語の標準化にもたらし、ウェブの未来を形作るのに貢献しています。 Mainmatterは、Rustを専門とするエンジニアリングコンサルティング会社です。CからRustへの移行、または既存のコードベースへのRust導入を目指す企業に、エンジニアリングサービス、トレーニング、メンターシップを提供しています。 Rustの課題に直面し、手助けが必要ですか? 複雑なCからRustへの移行、信頼性の問題、トレーニング、スキルギャップを支援できます。お問い合わせください コミュニティ EuroRust 2026 EuroRustは、Rustに関するあらゆることを扱う2日間のカンファレンスで、さらに2日間のサイドアクティビティ、ワークショップ、ハッカソンが開催されます。10月にバルセロナでお会いしましょう。 チケットを入手 世界を壊すことなくCからRustへ移行する ソフトウェアのセキュリティとモダナイゼーションは、今日の最優先事項です。技術的負債とメモリ安全性のバグは、依然として脆弱性の最大の原因であり、チームが信頼性とメモリ安全性のためにRustにますます注目する理由です。しかし、リライトは困難で、恐ろしく、多くのリスクを伴います。Mainmatterは、クライアントが世界で最も重要なソフトウェアの一部を首尾よくモダナイズするのを支援した経験をこの本にまとめました。 自己完結型のライブラリをゼロからリライトする場合でも、大規模で複雑な、変化し続けるコードベースを段階的に移行する場合でも、この本は成功するためのテクニックを教えてくれます。安全なCとRustの混在コードベースを維持し、クリーンなAPIを設計し、一般的なCのイディオムを慣用的なRustに翻訳する方法を学びます。 CからRustへの移行ガイドブック 学習を開始 このコースは、自習式演習の哲学に基づいて構築されています。各コンセプトには、実際のRustパッケージで解決する演習がペアになっており、ソリューションをチェックするテストスイートが含まれています。 RustとCに関する事前の知識を前提としています。FFIの経験は必要ありません。それがこのコースが教えることです。最終的には、生産的な方法でCコードベースにRustを導入できるようになります。 更新情報を受け取る 新しい章が追加される予定です。ニュースレターを購読して、最初にお知らせを受け取ってください。メールアドレス (必須) 必須 購読 目次 1. 外国関数インターフェース (Foreign Function Interfaces) FFIの基本:CとRustがC ABI、シンボルテーブル、リンカを介してバイナリレベルで通信する方法。最初のextern "C"ブロックを手書きし、バインディングを宣言する際にコンパイラに何を約束しているのか、そしてシグネチャが一致しない場合に何が問題になるのかを確認します。 2. 境界を越える型とデータ (Types and Data Across the Boundary) 所有権を明確にしながら、プリミティブ値、文字列、構造体、コレクションを言語境界を越えて移動する方法。bindgenを使用してCヘッダーからRustバインディングを生成し、cheadergen、Mainmatterの逆方向ツールを使用してRustコードからCヘッダーを生成し、非自明な型のために両方を設定します。 3. FFIセーフな型 (FFI-Safe Types) 生ポインタと型なしプリミティブは、FFI境界での主要なバグの原因です。より安全な代替手段を学びます:NonNull、Option、newtypeラッパー、および意味を持つ列挙型識別子。これらは、独自の型安全性を持たないCコードと通信する場合でも、無効な状態を表現できないように型を設計する方法です。 4. FFI検証 (FFI validation) すべてのFFI関数は信頼境界です。Cの呼び出し元はnullポインタ、範囲外の値、または無効なUTF-8を渡す可能性があり、Rustはコンパイル時にそれを検出できません。境界で入力を検証し、絞り込む規律を構築し、Cからの無効なデータが安全なRustやビジネスロジックに到達しないようにします。 5. エラー処理とAPI設計 (Error Handling and API Design) RustのResultと?はextern "C"では停止します。Rustのエラー型をエラーコードの列挙型とアウトパラメータを持つC互換の結果に変換し、Rustの内部を漏らすことなく失敗情報を表面化します。また、フィールドごとのセッターではなく粗い操作を公開し、APIサーフェスを小さく保つことも学びます。 6. プロダクション品質のFFI (Production-Quality FFI) Rustの /// # Safety 規約と番号付けされた不変条件でFFI関数を文書化し、すべての安全でない契約が明示的になり、cheadergenを介して生成されたヘッダーでCのdocコメントとして表示されます。ビルド統合、自動チェック、FFIサーフェスを永遠に維持するAPIとして扱うことについて説明します。 著者について Jonas Kruckenberg シニアエンジニアリングコンサルタント @Mainmatter Jonas Kruc