Webエンジニア向けプログラミング解説動画をYouTubeで配信中!
▶ チャンネル登録はこちら

【ITニュース解説】Dev log #22 Tearing out the old: Deleting 3,800 lines of legacy p2p code

2026年09月21日に「Dev.to」が公開したITニュース「Dev log #22 Tearing out the old: Deleting 3,800 lines of legacy p2p code」について初心者にもわかりやすく解説しています。

作成日: 更新日:

ITニュース概要

開発者が約3800行の古いP2P通信コードを削除し、より効率的なシステムに刷新した。これによりコードがシンプルになり、保守性が向上。また、不安定なテストの修正や、ファイルアップロードの新機能開発も進めた。

ITニュース解説

今回の記事は、オープンソースプロジェクトに貢献する一人の開発者が、ある一週間の活動を記録した開発日誌である。この週の最も重要な成果は、ソフトウェアのコードベースから約4,000行もの古い、不要なコードを削除し、同時に約160行程度の新しいコードを追加したことだ。これは、ソフトウェアの品質を向上させ、「技術的負債」を解消し、システムの設計をより明確にするための重要な取り組みである。

まず、主な作業が行われたのは「minip2p」という、Rustというプログラミング言語で書かれたピアツーピア(P2P)ネットワーキングの基盤ライブラリである。P2Pネットワーキングとは、インターネットを通じて複数のコンピューターが直接つながり、お互いに情報をやり取りする仕組みを指す。このP2Pの仕組みの中で、ある情報を複数の参加者へ効率的に配信する「pubsub(パブリッシュ/サブスクライブ)」という機能がある。以前使われていた「Floodsub」という方式は、情報が必要なコンピューターだけでなく、ネットワーク上のすべてのコンピューターに情報を無差別に送ってしまうため、ネットワークの負担が大きく、効率が悪かった。これに対して、より現代的で効率の良い「Gossipsub」という方式が、現在の業界標準として広く使われている。

開発者は、この古いFloodsubプロトコルがminip2pプロジェクトにおいて不要な「重荷」になっていると判断し、プロジェクト全体から完全に削除する作業を行った。この作業は、Floodsubに関連する実に53ものファイルを修正する大規模なものだった。具体的には、プロジェクトのドキュメントからFloodsubに関する記述を消し、情報の送受信の中核部分ではGossipsubのみを使うように変更し、さらにはユーザーがどのプロトコルを使うかを選択する必要がなくなるよう、関連するプログラムのインターフェースも整理した。この変更は「破壊的変更」と呼ばれるもので、そのライブラリを利用している他の開発者が、自身のコードを修正する必要が出てくる可能性のある、大きな変更であることを意味する。しかし、この大規模なコードの整理によって、最終的に約3,876行のコードが削除され、新たに追加されたのはわずか141行に過ぎなかった。これにより、minip2pプロジェクトのコードベースは大幅にスリム化され、多くの「技術的負債」が解消された。技術的負債とは、不十分な設計や実装のために将来の改修や保守に余計な手間やコストがかかる問題のことである。古い、非効率なコードを削除することは、この負債を清算し、将来的な開発をスムーズに進める上で不可欠な作業なのだ。

次に、「py-libp2p」というPythonで書かれた別のライブラリでは、より地味だがプロジェクトの安定性にとって重要な修正が行われた。これは、ソフトウェアの品質を保つために自動的に実行される「テスト」に関する問題だ。特に「CI(継続的インテグレーション)」という、開発者がコードを更新するたびに自動でテストを実行し、問題がないかを確認する仕組みの中で、一部のテストが不安定に動作していた。具体的には、test_echo_thin_waistというテストが、テスト中に一時的に起動した子プロセスを適切に終了させず、それらが「ゾンビプロセス」としてシステムに残ってしまうことがあった。ゾンビプロセスとは、処理は完了しているものの、親プロセスに終了が通知されず、システムリソースをわずかに占有し続けるプロセスである。これが原因で、コード自体に問題がない場合でもテストが失敗することがあり、開発の効率を妨げていた。開発者はこの問題を解決するため、子プロセスが確実に終了するようにコードを修正し、テスト実行環境とCIパイプラインの安定性を大きく向上させた。これはわずか18行の追加という小さな変更だが、開発者の日々の作業を快適にし、プロジェクト全体の信頼性を高める上で非常に重要な改善だった。

さらに、開発者は「sixb」というプロジェクトで、新しい機能の開発も進めている。これは、ファイルアップロードのセッションをより堅牢に扱うための機能だ。具体的には、ファイルアップロード中にシステムが再起動しても、そのアップロード作業が中断されずに継続できるようにしたり、一定期間が過ぎた古いアップロードセッションを自動的に「クリーンアップ」(削除)する仕組みを構築している。この機能は、PostgreSQLとSQLiteという二種類のデータベースに対応しており、それぞれのデータベースの特性を考慮しつつ、一貫性のある設計を保つことが求められるため、複雑な作業となっている。これは約1,493行のコードを追加する、比較的大規模な新機能開発であり、現在レビュー中である。

開発者は自身のコードを書くだけでなく、他の開発者が書いたコードを評価し、改善点を提案する「コードレビュー」にも積極的に参加している。今週は二つのコードレビューを行った。一つは、あるツールがLinuxシステムにインストールされた際に、システムが自動で更新を行うか、それともツール自身が自己更新を行うか、というパッケージングに関する提案のレビューだった。システムにインストールされたソフトウェアが勝手に自己更新してしまうと予期せぬ問題を引き起こす可能性があるため、この提案はLinuxシステム上でのソフトウェアの適切な振る舞いを保証するものとして承認された。もう一つは、py-libp2pにおけるGossipsubプロトコルに関するプルリクエストで、Gossipsubの新しい使い方や、他のプロトコルとの比較例を追加する内容だった。これは、ユーザーがより良いツールを選び、適切に利用できるようにするための、優れたドキュメントと具体的な例を提供することの重要性を示すものだ。

使用された技術スタックとしては、主にRustとPythonの二つのプログラミング言語が使われている。Rustは、P2Pプロトコルのように高い安全性とパフォーマンスが求められるシステム開発に適しており、その厳格な型システムは、多くの複雑な状況を確実に処理するのに役立つ。今回のプロジェクトで数千行のコードを安全に削除できたのも、Rustの堅牢な特性によるところが大きい。一方、Pythonは、ストレージの処理やテストの仕組みなど、迅速な開発と試行錯誤が必要な部分で活用されている。このように、それぞれの言語の強みを活かして開発が進められている。

今後の予定としては、sixbプロジェクトでのファイルアップロード機能のプルリクエストをマージすることを目指している。特に、古いセッションを削除するクリーンアップの仕組みが、本番環境で問題なく動作することを確認するとのことだ。また、minip2pプロジェクトにおけるFloodsubの削除が、実際にそのライブラリを使っている他の開発者に予期せぬ問題を引き起こしていないか、注意深く見守るとしている。さらに、py-libp2pのテストスイートについても、まだ不安定な部分が残っているため、引き続きその安定化に取り組む予定である。このように、ソフトウェア開発は、新しい機能を作るだけでなく、既存のコードを改善し、テストを安定させ、システムの健全性を維持し続けるという、継続的な取り組みなのである。

関連コンテンツ

関連IT用語