Upgrade to Pro — share decks privately, control downloads, hide ads and more …

AI時代に、あえてHTTPサーバー自作している話

 AI時代に、あえてHTTPサーバー自作している話

2026.10.15のHello LT Worldでお話しさせていただいた際の登壇資料です。

Avatar for Aki Nakahara

Aki Nakahara

October 15, 2026

More Decks by Aki Nakahara

Other Decks in Programming

Transcript

  1. GET /why HTTP/1.1 AIで、開発の抽象度が一段上がった Martin Fowler いわく、抽象度が上がるだけでなく、「毎回同じ答えとは限らない道 具」で作る時代に。 “LLMs are

    making that degree of impact, but with the distinction that it isn't just raising the level of abstraction, but also forcing us to consider what it means to program with non-deterministic tools.” Birgitta Böckeler ― Martin Fowler「LLMs bring new nature of abstraction」(2025) より https://martinfowler.com/articles/2025-nature-abstraction.html 知らないことが多くても、なんでも作れるようになった。 #helloltworld_findy
  2. GET /layers HTTP/1.1 抽象度が上がるほど、見えない部分が増える プロンプト(AIに「作って」と頼む) 見えなくても、 いま見ている層 消えたわけではない。 フレームワーク・ライブラリ 見えにくい

    Webアプリの仕組みを理解せず HTTP(リクエストとレスポンス) TCP(ソケット・接続) #helloltworld_findy 今回、自作した層 見えにくい に、正しい出力なのかを見極め ることができるのか?
  3. GET /built HTTP/1.1 作ったのは、たった3つの処理 1 TCPで接続を待ち受ける 2 リクエストを解析する 3 レスポンスを組み立てる

    gs = TCPServer.open("127.0.0.1", 8080) 接続ごとにThreadを作って並行処理 method, path, version = request_line.split(' ') 1行ずつ読み、空行でヘッダー終了と判断 "HTTP/1.1 .{@status} .{status_message}\r\n" ステータス行+ヘッダー+空行+ボディ 最小限なら、想像よりずっと少ないコードで動く。 #helloltworld_findy
  4. GET /api/users HTTP/1.1 HTTPは、ただのテキストだった HTTP/1.1 200 OK ステータスライン Content-Type: application/json

    ヘッダー Content-Length: 157 ヘッダー \r\n [{"id":1,"name":"Alice", ...}] いつも受け取っているHTMLもJSONも、この形で届いていた。 #helloltworld_findy 空行 = ヘッダーはここまで ボディ
  5. POST /api/users HTTP/1.1 POSTレスポンス受け取った後、リダイレクトしたい 1. HTMLフォームから送信 2. 自作サーバーの応答 3. ブラウザの画面

    POST /api/users 201 Created 一覧に戻らない ユーザーを1人作成する Location ヘッダーも付けた URLは /api/users のまま Location も付けたのに、 なぜ一覧に戻らない? #helloltworld_findy
  6. HTTP/1.1 201 or 303 ? リダイレクトは300番台のステータスコードで可能 201 Created Location は、作ったリソースの

    場所を伝えるだけ ブラウザは移動しない 303 See Other Location のURLへ、 ブラウザが自動で移動する ブラウザが移動する 選んだのは 201。「作成できた」をステータスで伝え、リダイレクト処理はクライアント側から行う。 #helloltworld_findy
  7. GET /status-codes HTTP/1.1 ステータスコードごとに決まっているヘッダー情報も調整 した 作成できた 201 削除できた Created Location

    で、作った リソースのURLを伝える 204 使えないメソッドだった No Content ボディも Content-Length も 付けない API設計時に、意味を理解した上で返すステータスコードを決めたい #helloltworld_findy 405 Method Not Allowed Allow で、使える メソッドを伝える