HTTP プロキシ作成の検証計画

sum より大きいプログラムとして、Node.js の HTTP プロキシサーバをエージェントに書かせ、試験側で実際に通信を通して合否を決める
📅 作成: 2026-10-10 / 更新: 2026-10-10

目次

  1. 目的
  2. 問
  3. 判定
  4. 対象と進め方
  5. 気をつけること

目的

sum の問(10 行ほどのプログラム)では、モデルとエージェントの組の向き不向きが分かった。 実際の作業に近い、数十行で、待ち受けと通信を含み、仕様を満たすかを外から確かめられるプログラムを書かせ、どの組が「使える」かを確かめる。 題材は HTTP のプロキシサーバ。標準の http・net モジュールだけで書け、正しく動くかを試験側で機械的に確かめられる。あわせて、作ったものの仕様書を書かせる。

問

2 つの試験に分ける。HTTPS を通すには CONNECT の扱いを指示する必要があり、1 つ目の指示文では仕様が足りないため。どちらも、エージェントには次の指示文だけを渡す(sum と同じく補足の文や例は付けない)。

試験 1: HTTP のプロキシ(proxy)

Node.js の標準モジュールだけで HTTP のプロキシサーバを proxy.js に書く。127.0.0.1 の 18080 番で待ち受け、受けたリクエストを URL の宛先へ転送し、応答をそのまま返す。node proxy で起動する。仕様書を proxy.md と proxy.html に書く。書いたら起動はしたままにせず終える

試験 2: HTTPS も通すプロキシ(proxy-https)

Node.js の標準モジュールだけで HTTP と HTTPS のプロキシサーバを proxy.js に書く。127.0.0.1 の 18080 番で待ち受ける。HTTP は受けたリクエストを URL の宛先へ転送し、応答をそのまま返す。HTTPS は CONNECT を受けて宛先との TCP の接続をつなぎ、双方向にそのまま中継する(中身は復号しない)。node proxy で起動する。仕様書を proxy.md と proxy.html に書く。書いたら起動はしたままにせず終える

判定

エージェントが終わったあと、試験側で次を順に行う。

  1. proxy.js・proxy.md・proxy.html があるか
  2. 試験側が宛先のサーバ(127.0.0.1 の空いた番号)を立てる。GET /hello に決めた文字列、POST /echo に受けた本文をそのまま返す
  3. node proxy を起動し、18080 番が開くまで最大 10 秒待つ
  4. プロキシ経由で送る(下の表)
  5. プロキシと宛先を止める(ジョブオブジェクトに入れ、試験側が終われば必ず止まるようにする)
記号送るもの正しい応答試験 1試験 2
local-getGET http://127.0.0.1:<宛先>/hello200 と決めた文字列○○
local-postPOST http://127.0.0.1:<宛先>/echo(日本語を含む本文)同じ本文○○
local-404GET http://127.0.0.1:<宛先>/missing宛先の 404 がそのまま返る○○
ext-httpGET http://example.com/200 と Example Domain を含む本文○○
ext-httpsCONNECT example.com:443 を経て https://example.com/200 と Example Domain を含む本文(証明書の検証も通る)—○

試験 1 で ext-https も送り、通らないこと(CONNECT を扱わない)を記録する。合否には入れない。

仕様書の判定

印

印条件
✅ 合格その試験の送るものがすべて正しく返り、仕様書の判定を満たし、エージェントの作業ログに node で動かして確かめた跡がある
☑️ 補欠合格送るものはすべて通り仕様書もあるが、自分では動かしていない
⚠️ 一部一部だけ通る、または仕様書が欠けている(どれが欠けたかを記録する)
❌ 不合格proxy.js が無い、起動しない、どれも通らない
⏱️ 時間切れエージェントが時間内に終わらない(サーバを起動したまま待ち続けた場合も含む)

判定の関数は sum-judge.ps1 と同じく別の関数にし、テストを先に書く(正しいプロキシ・GET しか通さないプロキシ・CONNECT も通すプロキシ・起動しない proxy.js・仕様書の欠けた組を試験用に用意して、それぞれの印になることを確かめる)。

対象と進め方

  1. 判定の関数とテストを書く
  2. 試験スクリプトに -Tests proxy・-Tests proxy-https を足す(test-agents.ps1・test-cc-tools.ps1)
  3. gemma-4-E4B と Pi で 1 回流し、手順が動くことを見る
  4. 全体を流し、結果を試験結果に書く

気をつけること