「プロセスを Rust 化」

2025/12/25 8:11

「プロセスを Rust 化」

RSS: https://news.ycombinator.com/rss

要約

Japanese Translation:

著者は何年も Rust を学び続け、現在ではプロセスを十分に信頼できるほど自信がありコードを書き始めました。初期の勉強は The Rust Programming Language の第 4章までで、実務は主にミシガン州のソーラーカーと SpaceX で C++ を使って行われており、Rust はほとんど使用されていませんでした。
今年、著者は積極的に Rust コーディングを始めました。まず rustlings で構文を練習し、その後「Raytracing in One Weekend」のプロジェクトを Rust に移植して実際のタスクで自信をつけました。htop のようなターミナル UI ツールに触発され、著者は OpenSnitch 用の TUI を作ることにしました。OpenSnitch はオープンソースの Linux ファイアウォールデーモンで、優れたターミナルインターフェイスが不足しているためです。
OpenSnitch は gRPC API で機能を公開していますので、著者は Rust から通信するために Tokiotonic を使用し、その後 UI を ratatui で構築しました。完成した TUI は GitHub に公開され、OpenSnitch の軽量なターミナルベースのインターフェイスを提供します。
開発全体を通じて、このプロジェクトは Rust の強みを際立たせました:関連データ付きの表現力豊かな列挙型、

Result
を使った堅牢なエラーハンドリング、内部可変性パターン、およびユニットテスト・フォーマッティング・静的解析といった強力なツールチェーンです。著者はまた、所有権/借用チェッカーのエラーや HTTP ライブラリの奇妙さなど具体的な課題にも直面しましたが、型安全性のおかげで async Rust は JavaScript/NodeJS よりも楽だったと述べています。
時折 LLM を使って内部可変性や async タイムアウトといった概念を明確にしたものの、ほぼ実践的なコーディングに頼りました。この経験は、Rust の制約が C/C++ でよく見られる落とし穴を回避するのに役立ち、新規プロジェクトを推進する助けになることを再確認させました。一方で組織的なトレードオフや技術債務への配慮も必要であると認識しています。

この改訂版要約は主要ポイントを網羅し、根拠のない比較を排除し、GitHub ホスティングと限定的な LLM 使用についての欠落情報を追加しています。

本文

執筆 – プログラミング(2025‑12‑24)

何年も前から Rust を学び始め、やっと「(t)rust」できるレベルに達しました。 いや、実際には

<T>rust
というのが正しいかもしれません。

大学時代は The Rust Programming Language(通称 “The Book”)を読んで学びましたが、4章前後でほぼ壁にぶつかってしまい、進めることができませんでした。 その失敗の大きな原因は、本だけを読むことに偏りすぎた点だと反省しています。 数学のテストで RTFM(Read The Fine Manual)ばかりして練習問題をスキップした経験に似ています。 まあ、私はそんなに賢くはありません。

同時期に大学授業やミシガン州立大学の Solar Car チームで C++ の実務経験も続けていました。 Solar Car チームでは、ミシガン大学の CS カリキュラムで教わった C++ 基礎を土台に開発しましたが、フレッシュマンやソフォモアといった若手メンバーが多く、複雑な言語・ライブラリ・インフラは「1人の熱意ある学生が卒業した後も続けられない」ケースが多かったので、実装はシンプルに抑えました。

SpaceX で働いていたころは C と C++ が主流でした。 C++ の使用量は適度で、コードを「フライトソフトウェアとして決定論的」に書く必要があるかどうかの判断基準も柔軟に設けていました。 Go や Rust など新しいエコシステムが時折登場しましたが、ネットワーク/フライトソフトウェアチームで主流になることは稀でした。 SpaceX を退職した頃には、言語の神話的な「ホーリーウォーズ」が依然としてソフトウェア領域を混乱させていました。

そこで今年からは、本当に Rust だけ読むのではなく書くことに意識的に取り組むようになりました。 Rust の仲間たちは絶賛しており、システムプログラミングコミュニティも確実に Rust を受け入れています。

まず rustlings で文法と基本パターンを確認しましたが、それだけでは「Rustを書く」自信には十分になりませんでした。 「本格的なプロジェクト」で学びながら、言語機能については指導付きで進めたいという欲求が湧きました。

そこで Raytracing in One Weekend をブックマークから見つけました。 そのサンプルはフィードバックが即座に可視化できるため、学習効率が高く(Gen Z のドーパミンヒットにも最適)、Rust 版の翻訳も手厚いガイドになっていました。 数学的な詳細をすべて覚えているわけではありませんが、実装に取り組んでみると十分に理解できました。


Raytracing から TUI へ

Raytracing の練習後、さらにアイデアを探していたところです。 近年 htop や k9s といったターミナル UI(TUI)ツールの使用が増え、自分で TUI を作ることに興味が湧きました。

同時期に Linux 用の LittleSnitch のオープンソース版 OpenSnitch を見つけ、実行してみたいと考えていました。 OpenSnitch は機能的には優れていますが、ユーザー体験はやや煩わしいです:

  • 接続ごとにフルスクリーンの UI が表示されるため、中断が多い
  • 端末中心の環境(ヘッドレスサーバーやコンテナなど)では、X/VNC/RDP を経由するか GUI バイナリをローカルで実行しないと UI が使えない

この問題に対処するため、TUI が適切な中間層になると考えました。 OpenSnitch の作者は gRPC API でデーモンと UI の責務を明確化しているので、その設計が基盤となります。

tokiotonic を組み合わせて、実際にネットワーク上のバイト列を確認できるようになりました。 アプリケーションロジックを構築する中で borrow checker の壁や HTTP ライブラリの奇妙な振る舞いに直面しましたが、C++ や Go に戻ろうという衝動は抑えました。

最終的には async を取り入れ、ratatui ベースの TUI と tonic で駆動される gRPC サーバー間にメッセージング層を構築しました。 非同期 Rust は JavaScript / Node.js の過去の苦い経験よりずっと楽しいと感じました。 強力な型システムが助けてくれます。

現在の TUI は下図のようになっており、GitHub で公開しています。 TUI を作る過程でグラフィックデザインへの興味も蘇りました(Adobe のサブスクリプションに縛られることは望みません)。 さらに、AI 支援開発時代のツールとして有用だというユーザーからの報告もあります。


開発旅路で得た散漫なノート

  • 関連データを持つ列挙型 はネットワークソフトウェアにおいて頻繁に使われるパターン(アドレスファミリ、プロトコル、バリアント、オプショナルなど)で、Rust が安全性を確保してくれる点がありがたいです。
  • Rust のエラーハンドリング哲学は SpaceX での「戻り値型+例外なし(panic)」と似ており、馴染み深いパターンでした。
  • 可変性と所有権ルールが結合され、一部のデータ共有を禁止するケースに遭遇した際には 内部可変性 と共有状態パターンを学びました。
  • 単体テスト、フォーマット、静的解析が言語ツールチェーンに組み込まれている点は非常に便利です。 ただしコードカバレッジのデフォルト設定があればさらに良いでしょう。 オープンソース拡張でフラメグラフを生成できました。
  • C/C++ がデータの配置(スタック vs ヒープ、構造体アラインメント)を明示してくれる一方、Rust はやや抽象化されていると感じます。 Go でも同様です。 現在はそのレベルの最適化に踏み込む必要はありませんが、将来的には学びたい領域です。
  • TUI に使っている tokio の非同期ランタイムも同じ感覚を強めます。 深く掘り下げる必要は無いという点は良い抽象化だと感じていますが、さらに知識を深めたくなります。
  • LLM を使って TUI 開発を高速化できたかもしれませんが、学びの機会として 99 % は避けました。 残り 1 % は内部可変性や非同期タスクにタイムアウトを設定する方法を理解するためでした。

全体的に進捗には満足しています。 私の限られた視点では、今後のグリーンフィールドプロジェクトは C/C++ よりも Rust で書く方が賢明だと考えます。 Rust のプリミティブと制約は多くの落とし穴を防ぎます(ただし Cloudflare の例のように完全ではありません)。 読みにくいコードもあるものの、これは C++ と同じ「取得味」であり、80/20 原則にも当てはまります。

プラットフォームが一般的なプロセッサや OS でない場合にはさらにニュアンスがあります。 こうした決定は単なる言語比較以上に複雑です。 組織は技術債とイノベーターのジレンマを天秤にかけながら、大学のエンジニアチーム向けに持続可能なソフトウェアスイートを構築するという人間的要因も考慮しなければなりません。 したがって「すべて Rust 化」にはまだ踏み切れていません。 大学で 100 レベルのコンピュータサイエンスコースに Rust を導入し、AI エージェントがソーラーパワーのレースカーを作るような時点まで、再検討したいと思います。

それまでは、遅れてバンドワゴンに乗ったとしても、自分でこれらの練習を通じて Rust を学べたことに感謝しています。 OpenSnitch TUI の構築は楽しく、今後の個人プロジェクトや職場でも Rust に直面する際により自信が持てます。 学び続ける余地はまだ多いと確信しています。 迷っているなら、(t)rust the process.

— Amal

同じ日のほかのニュース

一覧に戻る →

2025/12/28 5:15

**エンターテインメントでのコミュニケーション喪失の理由** 近年、観客がエンターテインメントに関わる形態は劇的に変化しました。 - **デジタル分散**:コンテンツは無数のプラットフォームに拡散され、クリエイターが統一したオーディエンスへ到達しにくくなっています。 - **アルゴリズムによるゲートキーピング**:推奨システムは深みよりもクリックベイトを優先し、アーティストとファンの間で意味ある対話が薄れています。 - **収益化圧力**:広告収入モデルはプロデューサーにセンセーション志向を促し、思慮深い物語よりも衝撃的な内容へ傾斜させます。 これらの要因が重なり合い、かつてクリエイターと観客が直接交流できたコメント欄・ライブチャット・ファンフォーラムなどの伝統的コミュニケーション手段を侵食しています。

## Japanese Translation: (incorporating all key points):** > 2025年12月15日のプルームのブログ投稿では、Pixelfed が Fediverse 実装からメッセージ配信を削除したことを批判し、信頼できる通信はあらゆるソーシャルプロトコルの基本機能であるべきだと主張しています。著者は Pixelfed の創設者 Dansup を引用し、ActivityPub は保証されたメッセージングではなくコンテンツ消費を目的としていると述べ、また Manuel Moreale もプロトコルが通信の信頼性を確保するためではなくプラットフォーム構築のために設計されていたと指摘しています。 > > プルームは、多くの Fediverse ユーザーが Mastodon と Pixelfed のアカウントを別々に保持している点を指摘し、これは大手ソーシャルメディア独占企業によって推奨される「一つのプラットフォーム、一つのアカウント」というマインドセットを反映しています。また、doomscrolling 中に人々が閲覧したコンテンツのほとんどを忘れてしまうという研究結果を挙げ、信頼できる通信としてのソーシャルメディアの有用性を疑問視しています。 > > 著者はメールが非同期媒体として衰退していることを嘆き、自身の Inbox 0 とワンタイムアドレス使用経験を挙げ、現代の「退屈」プロトコル(メール、RSS、XMPP)とエンターテインメント重視のプラットフォームが依存症や収益性を推進していることを対比しています。 > > Pixelfed は近々「ドロップなし」のオプションテキストメッセージを提供する予定ですが、プルームは読者に対し、Offpunk や Gemini などのオフラインファーストな代替手段で簡潔かつ信頼できる通信を検討するよう促しています。彼は最後に、興味があるユーザーに対して、シンプルで非商業的なコミュニケーション専用のメール、RSS、および Gemini コミュニティ「保護されたリザーブ」に参加することを勧めています。

2025/12/28 2:05

GPGの実行に失敗しました。

## Japanese Translation: **要約:** 本書は、GnuPG およびその他の OpenPGP ツールにいくつかの重大なセキュリティ脆弱性が発見されたことを警告しています。これらの欠陥により、攻撃者はデジタル署名を偽造したり、隠されたプレーンテキストを復元したり、検出されずに悪意あるサブキーをキーリングに追加したりできるようになります。主な問題点は次のとおりです。 * 切離型 PGP 署名へのプレーンテキスト攻撃で、クリアテキスト署名を切り捨てることで偽造署名が可能になる。 * リテラルデータにおけるパスセパレータの不適切な処理により、ディレクトリトラバーサルとファイル上書きが実行できる。 * 暗号化マレイビリティチェックの誤った適用で、メッセージ内容が漏洩する可能性がある。 * ASCII アーマー解析における脆弱性がメモリ破壊を引き起こす。 * MiniSign が信頼コメントを受け入れることで注入攻撃が許容される。 * ダッシュでエスケープされていないヘッダーの誤処理により、クリアテキスト署名の偽造が可能になる。 * OpenPGP クリアテキスト署名フレームワークへのフォーマット混乱攻撃と radix64 行切り捨てがポリグロット攻撃を生むことがある。 * キー署名検証中に SHA‑1 へダウングレードするパスがトリガーされ、整合性チェックが弱体化する。 これらの問題を修正しない場合、GnuPG を安全通信、コード署名、文書認証に依存しているユーザーは脅威にさらされます。報告書では、検証ロジックの更新とパス処理の厳格化によって OpenPGP 実装への信頼を回復するよう促しています。

2025/12/28 3:22

ウィンドウズ 2(Apricot PC / Xi 用)

## Japanese Translation: ## Summary: 著者は、古いApricot PCにWindows 2を成功裏に導入しました。この実現にはカスタムドライバの作成と機械のハードウェア制限を克服するためのRAM拡張ボードが必要でした。Microsoft DDKでスタブドライバを書き、WIN100.BIN/OVLからHerculesビデオコードをパッチし、互換性のないWindows 1用ドライバをApricotのIntel 8086 CPUと9インチモノクロディスプレイに適した新しいSYSTEM.DRVで置き換えました。プロジェクトには、著者の婚約者が設計したRAMアップグレードも含まれ、Windows 2のメモリ要件を満たしました。 この成果は、1987年にWindows 1をポートした以前の取り組み(マージドライバを使用していたが新機能の完全サポートがなかった)を踏襲しています。現在、Windows 2が稼働することで、Word、Excel、PC Paintbrushなどのアプリケーションをレガシー硬件上で利用できるようになり、古いシステムでも適度なアップグレードで再活性化できることを示しています。著者はMastodonスレッドでフィードバックを歓迎し、リトロコンピューティングコミュニティ内でさらなる改善や議論が行われる可能性を示唆しています。 ## Summary Skeleton **What the text is mainly trying to say (main message)** 著者はWindows 2を古いApricot PCにポートし、カスタムドライバとRAM拡張ボードでハードウェア制限を克服しました。 **Evidence / reasoning (why this is said)** - 著者はMicrosoft DDKを使ってスタブドライバを書き、WIN100.BIN/OVLからHerculesビデオコードをパッチしました。 - Windows 1のドライバが互換性がなかったため、新しいSYSTEM.DRVを実装しました。 - ポートには著者の婚約者が設計したRAM拡張が必要でした。 **Related cases / background (context, past events, surrounding info)** - Apricot PCはIntel 8086と9インチモノクロ画面でVGAグラフィックスを持たなかった。 - Windows 1は1987年にApricotへポートされ、ブートファイルにはマージドライバが含まれていた。 - 以前の試みでは高速起動WIN100.BIN/OVLに依存していたが、完全なドライバサポートは欠如していた。 **What may happen next (future developments / projections written in the text)** 著者はMastodonスレッドでコメントを募集し、貢献者への感謝と共に継続的な議論やさらに微調整の可能性を示唆しています。 **What impacts this could have (users / companies / industry)** - レガシー硬件上でWord、Excel、PC PaintbrushなどのモダンWindowsアプリケーションが動作できるようになる。 - 最小限のハードウェアアップグレードでレガシーシステムを復活させる方法を示し、リトロコンピューティング愛好家に教育的価値を提供する。