見出し画像

TWSNMPのフィードバックのためにGO言語でcgiを作った話

TWSNMPに利用者からのフィードバック機能つけるためにGO言語でcgiを作った時の話です。「今時cgi?」と思った人もいると思います。

TWSNNPのフィードバック機能

TWSNMPのバグや改善の要望を作者にメールで問い合わせるのは勇気のいるものだと思います。そこで匿名で意見を言える機能をTWSNMPに組み込むことにしました。昔のはTWSNMPの公式サイトで「TWSNMP相談室」という掲示板を運営していましたが、不正な書き込みのメンテナンスで時間と取られるの閉鎖しました。それに代わるのがフィードバックの機能です。
フィードバック機能は

画像1

のような仕組みで開発することにしました。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の運営にも貢献できるのでよろしくお願います。