ひさしぶりにCGIを書いた

具体的なことは、改めて書く予定。
とりあえず、書いたよって。

最近、自分しかいないSlackチームを作って、
botが褒めてくれたら良いのにって漠然と思ってたんだけど、
それを形にした。

最初の実装は、Azure上にNodeJSで実装したんだけど、
自分の書き込みに対する反応が複数回行われることに気付いて、
これPerlだったら対策できるのに・・・って思ってて、
Perlで書き直して、さくらのレンタルサーバーで動かすことにした。

CGIと言えば
むかし掲示板とか設置したことある人なら分かると思うんだけど、
ロジック以外に余計な部分が多くて、
思い出すだけでもうんざりすると思うんだけど、
きょうびのCGIはそんなことはしない。

こんな感じで雛形を生成して、
足りないモジュールとペライチCGIファイルをアップロードするだけ。
$ mojo generate lite_app hoge.cgi

ただ、注意しなきゃいけないこともあって、
例えば、自分の開発環境はperlbrewを使ってperl-5.22 on mojaveで、
上記のコマンドを使ってモジュールを用意しても、
システムPerlであるv5.18では動作してくれなかった。
なので可能な限り、動作環境と同じバージョンのPerlを使った上で、
足りないモジュールをインストールするのが確実と思われる。

perlbrewを使っているなら、一度System Perl(*1)に戻して、
任意のフォルダにモジュールをインストールする。
$ perlbrew off
$ cpanm -L lib Mojolicious Sub::Util

すると、ペライチCGIファイルの頭の方は、こんな感じになる。

#!/usr/bin/perl
use strict;
use warnings;
use v5.14;

use lib './lib/lib/perl5';

use Mojolicious::Lite;
use Mojo::UserAgent;
use Mojo::JSON qw/decode_json/;

もちろん、Perlのバージョンが古いとか、
他に必要なモジュールが無い場合は?とかあると思うんだけど、
少なくともさくらのレンタルサーバーでは上記の条件は満たせるし、
こんなこともあろうかと的なモジュールも入ってたりする。

動かないときはSSHで入って、

$ perl hoge.cgi cgi

って入力すれば、足りないモジュールが分かる。(*1)
$ mojo generateコマンドで作ったならRouterもシンプルだし、
JSONを受けてJSONを返すだけなら、ほんの十数行ほど書き足すだけ。

最近、お仕事を始めてアレなんだけど、
余裕ができたら具体的なことを書こうと思う。

おしまい。

(*1) v5.18.2
(*2) Sub::Utilが足りないのは、これで分かった。

Leave a Comment