C言語とCGIで商用Webアプリを構築

原題: A Modern Web App in C

なぜ重要か

フレームワーク依存・コンテナ複雑化・サプライチェーンリスクへの反動として、極限まで依存を減らした構成が商用レベルで成立することを実証した事例は、小規模SaaS開発の選択肢を広げる。

個人開発者のCorey Prophittが、C言語とCGI技術を用いて商用Webサービス「marketyour.games」を2026年に実際にリリースした。スタック構成はBCHS(OpenBSD・C・httpd・SQLite)で、外部依存ライブラリはlibcurl、libsodium、libcjsonの3つのみ。ユーザー認証・検索・フォルダ管理・Stripe決済・Postmarkメール送信を備え、JavaScript不要で動作する。

Prophittが構築した「marketyour.games」は、コンテンツクリエイター向けの検索ダッシュボードを中心とした商用Webサービスだ。1994年代にCGI-binでApacheに処理させていた手法と根本的に同じ技術を使いながら、現代的な機能を完全に実装している点が注目される。

技術スタックはBCHS(OpenBSD、C、httpd、SQLite)で、フレームワークも独立したデータベースサーバーもコンテナも使わない。CGI環境変数を読み取り、C言語でHTMLを直接出力するシンプルな構成だ。SQLiteはシングルファイルの公式amalgamationビルドを利用し、libcjsonも単一Cファイルのためビルド依存は実質2つに留まる。結果として、クリーンビルドは数秒、差分ビルドは0.5秒以下で完了する。

デプロイは新バイナリを1ファイル差し替えるだけで済み、サーバー再起動もダウンタイムも発生しない。新リクエストは自動的に新バイナリを参照する仕組みだ。静的アセットはすべてバイナリにコンパイルされ、メモリから配信される。

セキュリティ面では、OpenBSDの「pledge」と「unveil」でCプログラムのシステムコールとファイルアクセスを制限し、httpdはデフォルトでchrootから動作するためCGIバイナリはファイルシステム上の限られた領域にサンドボックス化される。

Prohittは、CGIの構造がサーバーレスアーキテクチャに近いと指摘する。スーパーバイザーがリクエストごとにプロセスを起動し、環境変数のセットを渡して結果を受け取る構造は、AWS LambdaやCloud Functionsの設計思想と本質的に同じだ。ただし、ベンダーロックインも予期しない請求もない点が異なる。

サプライチェーンリスクの観点からも、自律型AIエージェントによるパッケージリポジトリへの攻撃が増える現在、外部依存を極限まで減らした構成は安心感があるとProhittは述べている。CGI仕様は2004年に1.1が策定されて以来変更がなく、一度理解すれば知識が陳腐化しない点も評価ポイントとして挙げた。

出典

prophitt.me — 元記事を読む →