C言語とCGIで商用Webアプリを構築、OpenBSD上で提供する事例
Corey Prophitt氏は、C言語で書いたCGIプログラムをOpenBSD上で提供する商用Webプロダクト「marketyour.games」を2026年に公開したと説明している。ユーザーアカウント、決済、メール送信を備えたアプリを、フレームワークを使わずに構築した。
Corey Prophitt氏は、自身の商用Webプロダクト「marketyour.games」の構成と開発過程を記事で紹介している。C言語で書かれたこのアプリは、OpenBSD上でhttpdとCGIを用いて提供されている。
発表内容
marketyour.gamesは、ユーザーアカウント、コンテンツクリエイター向けの検索ダッシュボード、コンテンツを整理するフォルダ機能を備えたWebプロダクトである。決済にはStripe、トランザクションメールにはPostmarkを利用している。JavaScriptを必要としないプログレッシブエンハンスメントに従って設計されている。
著者は、1994年にはCプログラムを書いてcgi-binディレクトリに置き、Apacheがリクエストごとにそれをforkさせることで動的サイトを作れたと説明している。そこから「Thirty-two years」が経過した現在、ほぼ同じ技術で商用製品を出荷したと述べている。
著者は cgi.h について「Maybe I'll publish cgi.h as a start」と述べ、公開する可能性があるとしている。
技術スタック
著者はこの構成を「BCHS」と呼び、OpenBSD、C、httpd、SQLiteで構成されると説明している。
- アプリはCGI環境変数を読み取って応答するCプログラムで、フレームワークもテンプレート言語も使用していない。
- SQLiteのファイルはSQLiteのC APIで開かれ、別途データベースサーバーは存在しない。
- バイナリは静的リンクされ、フォルダに配置するだけでデプロイされる。新バージョンへの更新は1ファイルの置き換えで行う。
- httpdは全トラフィックをCGIバイナリに振り分ける。アセットはすべて実行ファイルにコンパイルされ、メモリから配信される。
著者はプラグインを使わずにクラシックVimを利用している。また、Cookieの解析、クエリとフォームの解析、検証、入力エスケープを扱う単一ヘッダファイル cgi.h を作成した。
依存ライブラリとビルド
著者は3つのライブラリを使用しており、その用途は次のとおりである。
- libcurl:StripeとPostmarkへの送信リクエストを処理する。
- libsodium:ランダム識別子の生成、パスワードハッシュ、Stripeウェブフックの HMAC 検証を処理する。
- libcjson:StripeとPostmarkのJSON解析を処理する。外部依存のない単一のCファイルである。
ビルド依存としては、libcurlとlibsodiumの2つが該当する。SQLiteは公式のamalgamationビルドとして同梱され、libcurlとlibsodiumも同梱してプロジェクトの一部としてビルドされる。クリーンビルドは「a few seconds」、再ビルドは「less than half a second」で完了する。
CGIの仕様と背景
CGI 1.1仕様は2004年に公表され、それ以降変更されていないと記事は述べている。著者は、ライブラリの信頼性を比較する例として、週間ダウンロード数が「eleven」にとどまるパッケージを挙げている。そのパッケージのオーナーは2019年に離脱したという。
筆者の見立て
- CGIの衰退は2004年時点では正当化されたが、2026年の状況には当てはまらないと論じている。
- CGIが2000年代初頭に見限られた理由の大半は、今日では成立しないと論じている。
- プロセスのforkは、現代のカーネルが大幅に最適化しているため、かつてほど高コストではないと解釈している。
- CGIはベンダーや予想外の請求を除けばサーバーレスに相当するとの含意を示している。
- libcurlを侵害するにはインターネット全体が注視するプロジェクトを侵害する必要があるとし、サプライチェーン攻撃への耐性を示唆している。
- 自律型エージェントやパッケージリポジトリへの攻撃が増える中、依存が少ないことは安心感につながると論じている。
- SQLiteは新鮮な存在だと評価している。
- Cだけを書くことは爽快だったとし、見た目は美しくないがTailwindも同様だと論じている。
- 現代のWebアプリケーションをCで書くことは十分に実現可能だと論じている。
- このスタックは、著者がこれまで出荷したどのスタックよりも可動部分が少ないと論じている。
- コストが問題になった場合、FastCGIへの移行は十分に単純だと考えている。
- 今後もこのスタックを使うと予想している。
- このスタックでは優れたツール環境が手の届く範囲にあると論じている。
この記事は元記事の事実のみに基づいて自動生成されました。
出典
- 媒体名:Corey Prophitt
- 元記事タイトル:A modern web app in c
- URL:https://prophitt.me/writing/a-modern-web-app-in-c