Home - ha1t/php-gm-server GitHub Wiki

php-gm-server

ReactPHPベースのGemini Protocolサーバー実装。静的ファイル配信、TLS/SSL対応、環境変数設定対応。

Generated: 2026-04-02 20:31:54

Pages

  • プロジェクト概要 — PHP GM Serverのプロジェクト全体像、目的、技術スタック、主な機能を説明するランディングページ。プロジェクト目的(PHP勉強会での発表、個人サイト公開)と対応範囲を明記。
  • アーキテクチャ設計 — システム全体のコンポーネント構成、各コンポーネント間の関係、データフロー、設計パターンを図解。ReactPHPベースのイベントループ駆動設計、非同期I/Oの活用方法を説明。
  • Geminiプロトコル仕様実装 — Gemini Protocol の概要、リクエスト形式(gemini://host/path\r\n、最大1024バイト)、レスポンス形式(STATUS SPACE META\r\n BODY)、サポート対象のステータスコード(20成功、51見つからない、59不正リクエスト)、MIMEタイプの仕様。プロトコル仕様の対応範囲と制限事項。
  • インストール・セットアップガイド — システム要件(PHP 8.1以上、openssl拡張)、Composerでの依存パッケージ導入、初回起動方法、自動証明書生成の流れ。開発環境構築手順。
  • 環境変数設定リファレンス — サーバーの動作を制御する全ての環境変数(GEMINI_HOST、GEMINI_PORT、GEMINI_DOC_ROOT、GEMINI_CERT_DIR、GEMINI_HOSTNAME)のデフォルト値、意味、指定方法を網羅。設定例を複数提示。
  • GeminiServerコンポーネント — GeminiServer クラスの役割、TcpServer と SecureServer の使用、接続ハンドラーの処理フロー、バッファ管理、エラーハンドリング。リクエストパース、ファイルハンドリング、レスポンス送信までの流れ。
  • RequestParserコンポーネント — RequestParser クラスの実装、Geminiリクエスト(gemini://host/path\r\n)のパース処理、スキーム検証(gemini のみ受け入れ)、ホスト名抽出、パス解析、最大長チェック(MAX_REQUEST_LENGTH=1024)。パース失敗時の null 返却。
  • ResponseBuilderコンポーネント — ResponseBuilder クラスの実装、Geminiレスポンス形式の構築(STATUS SPACE META\r\n BODY)、成功レスポンス(20)、見つからないエラー(51)、不正リクエストエラー(59)の各メソッド。レスポンス形式仕様の詳細。
  • StaticFileHandlerコンポーネント — StaticFileHandler クラスの実装、ドキュメントルートからのファイル解決、ディレクトリハンドリング(index.gmi の自動返却)、拡張子からのMIMEタイプ自動判定(MIME_MAP の詳細)、realpath による正規化とパストラバーサル防止機構。
  • ファイル配信システム詳細 — ファイル配信フロー、サポートMIMEタイプ一覧(.gmi=text/gemini、.txt=text/plain、.html=text/html、.png=image/png 等)、ディレクトリアクセス時の index.gmi 自動解決、デフォルトMIMEタイプ(application/octet-stream)。ファイル不在時の処理。
  • セキュリティ設計 — パストラバーサル攻撃の防止(realpath による正規化、ドキュメントルート内チェック)、リクエスト長制限(1024バイト)、TLS/SSL 必須化、自己署名証明書の使用とTOFU(Trust On First Use)モデル。セキュリティ上の考慮事項と制限事項。
  • CertificateGeneratorコンポーネント — CertificateGenerator クラスの実装、OpenSSL拡張を使用した自己署名証明書生成、RSA 2048ビット秘密鍵生成、証明書署名要求(CSR)の処理、1年間有効な証明書の生成、PEM形式での保存。既存証明書の再利用。
  • TLS証明書管理 — TLS証明書の自動生成・管理、certs/ ディレクトリでの保存、環境変数 GEMINI_CERT_DIR と GEMINI_HOSTNAME による制御、証明書有効期限(365日)、開発環境での自己署名証明書使用、クライアント側での信頼設定。
  • エラーハンドリング戦略 — エラーレスポンスの分類、ステータスコード 51(見つからない)と 59(不正リクエスト)の使い分け、接続エラーと読み取りエラーの処理、バッファオーバーフロー時の処理(Request too long エラー)。エラー時のコネクション終了処理。
  • リクエスト処理フロー — クライアント接続からレスポンス送信までの完全フロー、TLS接続確立、バッファへのデータ蓄積、リクエスト完全性チェック(\r\n の検出)、RequestParser によるパース、妥当性検証、ファイルハンドラーへの処理依頼。
  • レスポンス構築フロー — ファイルハンドラーからの結果(mime と body)に基づくレスポンス生成、ResponseBuilder による Gemini プロトコル形式のレスポンス構築、ステータスコードとMETA情報の付与、BODY の追加、クライアントへの送信。
  • テスト戦略と実装 — テストスイート構成(4つのテストクラス)、PHPUnit 設定(phpunit.xml)、各コンポーネントのユニットテスト対象範囲、テスト実行方法(vendor/bin/phpunit)、テスト結果キャッシュファイル。テスト駆動の設計思想。
  • 依存パッケージと外部統合 — プロジェクト依存パッケージ(react/socket、react/event-loop)、PHPUnit 開発依存パッケージ、PSR-4 オートロード設定(GeminiServer と GeminiServer\Tests)、最小限の外部依存設計思想。
  • ディレクトリ構成と規約 — プロジェクトディレクトリ構成(bin/、src/、tests/、content/、certs/)、各ディレクトリの役割、ファイル配置規約、.gitignore での除外ファイル。PSR-4 オートロード規約。