ゼロから簡易な科学上網コアを開発する際のエンジニアリング課題(AI支援プログラミング視点)

三局、これをゼロから本当に作るとなると、難所は「リピーターを書くだけ」じゃなくて、「山ほどある汚くてしんどい作業を全部受け止める」ところにある。

だいたいこんな塊がある:

  1. プロトコル設計
    ハンドシェイクをどうするか
    認証をどうするか
    多重化をやるかどうか
    UDP、TCP、DNS をどう統一して扱うか
    最初は手抜きすると、結局あとで拡張性のせいでほぼ確実に書き直す

  2. クロスプラットフォームのネットワークスタック
    Windows / Linux / macOS / Android / iOS で挙動が全部違う
    TUN/TAP、システムプロキシ、ルーティング、DNS の乗っ取り方(フック)が全部違う
    本当にキツいのはプラットフォーム互換であって、socket の数行コードじゃない

  3. 性能
    接続数が増えると問題が露呈する
    buffer、copy、ロック競合、コルーチンのスケジューリング、メモリ断片化、syscall のオーバーヘッド
    単一接続で走るからといって実戦で戦えるとは限らない

  4. 安定性
    切断後の再接続
    ネットワーク切り替え
    スリープ復帰
    NAT / IPv6 / MTU / フラグメンテーション
    異常現場が増えるほど、ログを見るだけで PTSD になれる

  5. 暗号化とセキュリティ
    鍵交換
    リプレイ防止
    前方秘匿性(Forward Secrecy)
    セッション復元
    設定配布のセキュリティ
    ここで一番怖いのは「自分で暗号を発明する」ことで、それは自分に難易度を盛る行為

  6. トラフィックとカプセル化戦略
    パケットをどう切るか
    header をどう隠すか
    特徴量が固定化しすぎないようにどう避けるか
    これは「通信できれば終わり」じゃなくて、「長期的に爆発しない」ことが目的

  7. DNS 処理
    ローカル解決かリモート解決か
    DoH / DoT / 生 UDP
    汚染、キャッシュ、一貫性、リーク
    「つながってるのに何か変」問題の犯人は DNS が多い

  8. ルーティングと分流
    グローバル、ルール、ドメイン別、IP 別、プロセス別
    GeoIP / GeoSite / カスタムルール
    ルールシステムは書けば書くほど半分インタプリタみたいになる

  9. 可観測性(Observability)
    ログ
    tracing
    接続状態
    統計ダッシュボード
    これがないとデバッグは玄学(オカルト)と「信じれば通じる」頼みになる

  10. 設定システム
    ホットアップデート
    設定互換
    バージョン移行
    schema 検証
    ユーザーは設定をクソみたいに書いておいて、コアが不安定だと文句を言うのが大好き

  11. クライアントのエコシステム
    GUI
    サブスクリプション
    設定のインポート/エクスポート
    システム統合
    製品として作る段になると、コアのコード量が最大とは限らず、周辺が本体になる

  12. AI 支援プログラミング自体の落とし穴
    AI は「正しそうに見える」ネットワークコードを書くのが得意
    でも並行性、境界条件、プロトコルの状態機械では特に地雷を埋めやすい
    骨組み作り、ボイラープレート補完、テスト作成は手伝える
    プロトコルの正しさの検証は代わりにできない
    最後はたいてい:AI が 5 分でコードを出し、あなたが 5 時間パケットキャプチャで犯人探し

もし簡易コアだけを作るなら、工学的にいちばん現実的な難所は実はこれ:
まず最小目標を定義する
最初からクロスプラットフォームにしない
最初から自作プロトコルにしない
最初からルールエンジンを作らない
最初から「万能・高性能アーキテクチャ」をやらない

そうしないと簡単にこうなる:

第一週:次世代コアを作るぞ
第二週:まず TCP 転送を通す
第三週:DNS がまた爆発した
第四週:やっぱ既存プロジェクトを魔改造するか

一言で辛口評:
ゼロから「動くもの」を書くのはそこまで難しくない。難しいのは「長期で保守できて、クロスプラットフォームで、安定していて、拡張できて、性能が腐ってない」ものを書くこと。

もしあなたが評価したいのが「AI 支援ありで、ゼロから使える MVP までの難易度」なら、この観点でさらに分解して:
2 週間プロトタイプ
1 か月で自分用に使える
3 か月で牢屋みたいな保守にならない
みたいなバージョンで出せる。