CGI(Common Gateway Interface)は一昔前に主流だったWebアプリのプラットフォームですが、現代のレンタルサーバーでも大体のものは動かすことが可能です。
今回は、既に完成している昔のCGIスクリプト(Perl製)をレンタルサーバーで動かしてみたので、手順を共有してみたいと思います。
尚、イチからCGIアプリを作成したい方は、以下の関連記事も合わせてご参考ください。環境構築とコーディングを紹介しています。
◇目次
何を動かしてみたのか?
「三国志NET」という、2003年に個人により開発されたフリーのCGI製ブラウザゲームを稼働させてみました。
多人数登録型の国盗りシミュレーションでプレイヤーは武将として参加します。そのテーマの関係上様々な人間ドラマが展開されてきました。
現在も三国志NETは派生(改造)版が稼働しているなど一部に根強い人気があるゲームです。私自身も長年参加しているよしみで、手元にあったオリジナル版のスクリプトを実験台として使ってみました。
(開発元サイトはずいぶん前に消滅してしまいました。スクリプトの再配布はおそらく権利的に難しいのでご容赦ください。)
ちなみに今回公開したサイトはこちらです。(PR)
実際に公開する手順
スクリプトは既に完成しているので、項目数は多いですが、手順としては極めてシンプルです。まず初めにまとめます。
- 規約を確認の上、レンタルサーバーを契約する。
- SSHを許可する設定をする(後でパーミッション設定を行うため)
- サーバーのPerlパスを確認して、スクリプトに反映
- スクリプトをFTPでアップロード
- SSH接続してパーミッション設定
- cgiファイルにブラウザーからアクセス
規約を確認の上、レンタルサーバーの契約
どこでもほとんど変わりはないと思いますが、今回はエックスサーバー(PR)を使用しました。事業用等、一定の安定性を求めるのであればこちらがオススメです。
また、より安く済ませるならさくらのレンタルサーバ(PR)などもオススメですが、さくらでは最安のライトプランではSSH接続ができません。よって、CGI目的ならスタンダード以上の選択が必要と思われます(2022年9月現在)。
(さくらのレンタルサーバ ヘルプより抜粋)
尚、どこのサーバーを利用するにせよ、CGIの利用可否や設置物の性質・ジャンル上問題がないかなど、必ず利用規約を確認するようにしましょう。
SSHを許可する設定
デフォルトでONになっているサーバーもあるかもしれませんが、エックスサーバーであればサーバーパネルからSSH接続を許可する必要があります。
サーバーのPerlパスを確認して、スクリプトに反映
Perlは、各スクリプトの最初に次のようなおまじない的なコードを書く必要がありますが、これはサーバー内でのPerlパスを指定しています。
Perl
#!/usr/bin/perl
各サーバーでは、サポートページなどでPerlのパスを公開していますので、参照して各スクリプトに反映させましょう。
スクリプトをFTPでアップロード
私はFTP通信にはFileZillaというソフトウェアを利用しています。CGIアプリフォルダーをまるっとアップロードしましょう。
ここまでで、CGIが動く準備は整いました。しかし多くの場合、この状態で接続しても500エラーが返されるのではないでしょうか。
そこで必要になるのが、次のパーミッション設定です。cgiの実行権限を各ファイルに設定する必要があります。
SSH接続してパーミッション設定
SSHでサーバーに接続して、各ファイルのパーミッションを設定します。
WindowsのコマンドプロンプトやMacのターミナルから操作しましょう。(Windowsの場合、バージョンが古いと対応していない可能性があります。WSL2などの利用をご検討ください。)
ここではコマンドプロンプトから接続を行います。エックスサーバーではポートは10022と指定されているので、それに従います。-iオプションは先ほど保存した秘密鍵ファイルのパスを指定します。
コマンドプロンプト
ssh -p 10022 -i C:\Users\sakai\xs000000.key xs000000@xs000000.xsrv.jp
尚、ログインIDは、エックスサーバーの場合はFTPアカウントでも管理画面ログイン名でもなく、「サーバーID」です。管理画面トップに記載があり値を確認できます。
接続後、各ファイルのその他ユーザーに対する実行権限を許可します。
今回は簡単のため、全て755の権限を付与することにします。
FTPでアップロードしたCGIアプリのディレクトリに移動して、下記のコマンドを実行します。-Rオプションで再帰的にchmodを反映できます。
コマンドプロンプト
$ chmod -R 755 .
※ここでは省略しますが、実行ファイル以外の画像等であれば644などの権限で良いかと思います。個別にご検討頂ければと思いますが、777権限だけは何かと問題があるので避けておきましょう。
※SSHは用事が済んだら、サーバーのコントロールパネルでオフにしておきましょう。
以上が終わったら、ページにアクセス。CGIが動くはず。
これら設定が正しくできたら、恐らく正常にCGIが動作するはずです。
httpでcgiファイルにアクセスしてみましょう。
簡単にトラブルシューティング
CGIを公開するうえで起こるエラーについて、簡単に解説しておきます。
アクセスすると404エラーになる
CGI動作以前にURLが間違っている可能性があります。
レンタルサーバーの公開ルートディレクトリを確認して、正しいURLにアクセスするよう試みてください。
アクセスすると500エラーになる
パーミッションの設定で実行できていない可能性があります。この記事の上部で説明しているので、ご確認ください。
あるいは、CGI内部でスクリプトがクラッシュ(エラーが発生)している可能性があります。
SSH接続中、ルート権限やsudoが利用できない
レンタルサーバーはほとんどがLinuxベースですが、共用サーバーゆえルート権限を公開していない場合が多いです。その場合、suやsudoコマンドが使用できません。
ルート権限が不要な方法で設定を行いましょう。
sudoコマンドを使用すると「あなたはシステム管理者から通常の講習を受けたはずです。」などと表示される
この場合も↑と同じです。ルート権限は開放されていないので、他の手を探しましょう。
尚、何からのパスワードを入れても実行できません。
CGIってそもそもなんだっけ?という人へ簡単な解説
ブラウザゲームというと、今でこそ据え置き機やスマホアプリにも劣らないプラットフォームですが、ほんの10~15年前はフォームポストが主体の簡易ネトゲーといった雰囲気でした。
その多くは、サーバーサイドの処理とHTMLレンダリングまるっとPerlというインタプリタ言語などで記述するCGI(Common Gateway Interface)という仕組みが使われています。
CGIの用途はゲームはもちろんのこと、BBS(掲示板)やアクセスカウンタなどにも利用され、2000年代初頭以前のネット草創期の文化を下支えした技術と言えるでしょう。
レンタルサーバーは多くはLinuxベースでPerlやCGIが標準で利用できるようになっています。なので、既に30年近くの歴史があるCGIですが、スクリプトファイルをアップロードして設定すればきちんと稼働し、動的コンテンツサイトを作ることが可能なのです。
三国志NETの派生は今でも元気に動いてるよ!
今回題材とした、まもなく20周年を迎える歴史あるブラゲー、三国志NET。その派生形は今でも元気に稼働しています。
私自身も長年参加させていただいているサイトも折角なのでリンクしておきます。ご興味があれば是非ご参加ください。
今回は以上です。どうもありがとうございました。
記事筆者へのお問い合わせ、仕事のご依頼
当社では、IT活用をはじめ、業務効率化やM&A、管理会計など幅広い分野でコンサルティング事業・IT開発事業を行っております。
この記事をご覧になり、もし相談してみたい点などがあれば、ぜひ問い合わせフォームまでご連絡ください。
皆様のご投稿をお待ちしております。