Scribble at 2026-10-22 20:38:03 Last modified: 2026-10-22 20:42:53
さきほど話題に出した弊社のコーポレート・サイトだが、もともとは今年度中にミドルウェアを Go で置き換える予定だったのだ。今回のような事情もあることだし、このタスクの優先順位を上げることにした。
Go で問い合わせフォームを置き換えると、他に PHP を使っているのは、トップ・ページに RSS から幾つかのお知らせを読み込むという機能だけだ。これは、ぶっちゃけ JavaScript で書き換えてもいい。ということで、このサーバで PHP を動かす必要があるのは問い合わせフォームだけとなるので、これを単に Go へ置き換えると、更に良いことがある・・・いや「良い」かどうかは一概に言えないが、運用という点では更にシンプルになる。なぜなら、Apache すら消せるからだ。
クライアントから届くリクエストは、ウェブ・サーバの特定のポートに設定されている基準のパスにおいて動作するようになっているから、これが Apache の DocumentRoot に相当する。なので、Go のプログラムが特定のポートで Listen するように起動していれば、それがそのまま「ウェブ・サーバ」なのであり、そのポートを使ってアクセスしてきたリクエストはカーネルによって Go のプロセスにアクセスすることとなる。なので、Apache も必要なくなるわけである。
問い合わせフォームのように、頻繁にプログラムを更新するわけでもないアプリケーションだけなら、もうこれでいいという気がするね。もちろん、コーポレート・サイトの他の静的なファイルもレスポンスできるように動作するから、静的なページは幾らでも更新できる。
実は、さきほど既存の問い合わせフォームのソースを使って、ローカルで試してみた。index.html, finish.html から PHP のコードを取り去って、セッションの値を読み込むマクロだけ書き換える。次に、処理の本体である submit.php を main.go に移植する(中身は全く違う)。最後に main.go をコンパイルしてから、専用のポートでアクセスすると、なるほど Apache を停止していてもレスポンスを返してくれる。面白いな。それで、ウェブ・サーバの機能も兼ねているのに、Go のソースコードがシンプルで分かりやすい。