TWSNMPのフィードバックのためにGO言語でcgiを作った話
TWSNMPに利用者からのフィードバック機能つけるためにGO言語でcgiを作った時の話です。「今時cgi?」と思った人もいると思います。
TWSNNPのフィードバック機能
TWSNMPのバグや改善の要望を作者にメールで問い合わせるのは勇気のいるものだと思います。そこで匿名で意見を言える機能をTWSNMPに組み込むことにしました。昔のはTWSNMPの公式サイトで「TWSNMP相談室」という掲示板を運営していましたが、不正な書き込みのメンテナンスで時間と取られるの閉鎖しました。それに代わるのがフィードバックの機能です。
フィードバック機能は
のような仕組みで開発することにしました。TWSNMPで意見を入力すると公式サイトwww.twise.co.jpにリクエストを送信してメールで私に通知します。
公式サイト側でTWSNMPからのリクエストを受け取って処理するプログラムが必要です。
GO言語でCGIにする理由
TWSNMPの公式サイトwww.twise.co.jpはあまりモダンなレンタルサーバーではないので自分でAPIサーバーを稼働させるようなことができません。PHPやPerlのCGIは使えます。
ちなみに、CGIは、
というもので、かなり昔ぽい技術です。
PHPやPerlでCGIを作ってもようのですが、今更、古い技術で作っても進歩がないのでGO言語で作ろうと思いました。
GO言語でCGI
いつものようにGoogleに聞いてみました。"golang cgi"で検索、
なんとパッケージがありました。
普通にGO言語でWebサーバーのアプリを作る場合は、
import "net/http"
func main() {
http.ListenAndServe(
":8080",
http.HandlerFunc(func (w http.ResponseWriter, r *http.Request) {
// ここでリクエストを処理する
}),
)
}
のように書きますが、同じ処理を
import (
"net/http"
"net/http/cgi"
)
func main() {
cgi.Serve(
http.HandlerFunc(func (w http.ResponseWriter, r *http.Request) {
// ここに同じ処理を書く
}),
)
}
のようにすればCGIになります。http.ListenAndServeをcgi.Serveに変えるだけです。すばらしい!これならPerlで作られた古いWebアプリケーションを高速化するのに使えそうです。
これを利用してTWSNMPのフィードバックを処理するCGIを作りました。
おまけ:Webサーバーで動くようにビルドする
GO言語はコンパルして実行ファイルを作ります。レンタルサーバーのOSが何かわからないと動作する実行ファイルがつくれません。それを調べるには、レンタルサーバーから動作している実行ファイルをダウンロードして、fileコマンドで実行ファイルの情報を調べます。
私の借りているサーバーは、
ELF 32-bit LSB executable, Intel 80386
でしたので、32ビットのIntel CPUであることがわかります。
この情報をもとにCGIのビルドは、
GOOS=linux GOARCH=386 go build .
のようにビルドすれば動作する実行ファイルが作れました。
開発のための諸経費(機材、Appleの開発者、サーバー運用)に利用します。 ソフトウェアのマニュアルをnoteの記事で提供しています。 サポートによりnoteの運営にも貢献できるのでよろしくお願います。