Skip to content

Instantly share code, notes, and snippets.

@masakielastic
Last active July 18, 2025 09:02
Show Gist options
  • Save masakielastic/8599efb67982444121c81c83564ec2a2 to your computer and use it in GitHub Desktop.
Save masakielastic/8599efb67982444121c81c83564ec2a2 to your computer and use it in GitHub Desktop.
PHPビルトインサーバーのコードで改善できそうなこと(アップデート)

PHPビルトインサーバーのコードで改善できそうなこと【2025年版・レスポンス改善を反映】

  1. 命名規則の揺れ・プリフィックス統一の徹底

  • normalize_vpath, append_http_status_line, add_response_header など、
    php_cli_server_ プレフィックス抜けの関数をリネーミング・名寄せ

  • 責務が曖昧/継ぎ目部分の関数は、役割明確化のうえで命名・ファイル整理

  • 新APIや構造体導入のタイミングで**「レスポンス系」命名も積極導入**


  1. “グラデーション”部分の責務調査・明確化

  • cli_header_value_dtorget_last_errorstatus_comp など
    責務の分かりづらい関数群の役割・呼び出し元を調査・明文化

  • 「グラデーション」箇所のドキュメント化とリファクタ計画への明示


  1. HTTPリクエスト/レスポンスの対称性の再設計 & ResponseBuilder導入

  • request/responseの「対称設計」を徹底

    • php_cli_server_response 構造体、もしくは ResponseBuilder を新設

    • レスポンス生成・管理を「積み上げ型(Builderパターン)」で再設計

    • チャンク・バッファ操作や送信処理もresponseオブジェクト経由に移行

  • 「積み上げ型API」で、レスポンス状態・ヘッダー・ボディ・送信進捗を一元管理


  1. 関数の粒度と「ストーリーテラー関数」の導入

  • 低粒度API(append系、チャンク・バッファ管理等)群をラップする
     「ストーリーテラー関数(高水準な流れ関数)」を設計・追加

    • 例: php_cli_server_send_simple_response, php_cli_server_handle_file_response
  • ユーザーや他モジュールが「全体の流れ」を簡単に把握できるAPIに整理

  • ドキュメント・コメントでも「典型的な処理シナリオ」を明示


  1. 名前空間(プリフィックス)の分裂部位の整理

  • php_cli_server_(サーバ本体)とsapi_cli_server_(SAPI連携)の責務を明文化

    • ファイル・モジュールごとにどちらの層か明確化
  • グラデーション部はbridge.c, interface.c等の「中間層ファイル」で吸収/暫定管理


  1. 「分類不能」や違和感ある関数の設計・整理候補化

  • 分類しきれない関数名・処理は「リネーム/役割分割/廃止」候補リストへ

  • 設計改善Todoリストを随時アップデート


  1. イベントループ/IO層の独立・抽象化

  • ポーリング・FD管理・イベントループ系は別ファイルへ分離・抽象化

  • 将来のlibuv/TLS/async対応にも備えた「差し替えポイント」設計


  1. API粒度・命名・責務レベルの設計ドキュメント化

  • コードリファクタと並行して「役割と責務のミニマップ」や「APIサンプル」を用意

  • OSSや後継者向けに設計意図や典型ユースケースもドキュメント化


  1. 高水準API(httpserver.h型)への発展

  • ResponseBuilder方式+ストーリーテラー関数を足場に、
     httpserver.h型(ユーザー向け超高水準API)も検討

  • 例:http_server_init, http_server_listen,
    ハンドラー関数でリクエスト/レスポンスを直接操作できる構成


追加調査・アクション例

  • 命名揺れ・分類不能関数の呼び出し元洗い出し

  • レスポンス側カプセル化不足の流れ調査・設計見直し

  • ストーリーテラー関数の既存有無をサーチ

  • 「積み上げ型API」適用範囲の分析・段階的移行計画の立案


改善できそうなこと要約(アップデート版)

  1. 命名・責務分担の徹底統一/名寄せ

  2. グラデーション・継ぎ目部の調査・可視化

  3. request/responseペアAPIの本格導入、response側のBuilderパターン適用

  4. ストーリーテラー関数の追加・高水準API層の整備

  5. プリフィックス/ファイル配置/中間層設計の明確化

  6. 分類不能/違和感関数のリスト化・優先的改善

  7. IO・イベントループ層の独立・差し替え設計

  8. 設計ドキュメント・APIサンプル・典型ユースケースのドキュメント化

  9. 超高水準API(httpserver.h型)への発展余地を常に意識

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment