【Perl講座 第1回】Linuxの「最強の武器」を手にせよ!環境構築とCGIでのHello World完全ガイド

「黒い画面」の住人が愛する、最強の相棒。

こんにちは!「LINUX工房」管理人の「リナックス先生」です。
今回から全8回にわたり、サーバーサイドプログラミングの原点にして、今なおインフラエンジニアの必須スキルである「Perl(パール)」の集中講座をスタートします!

最近はPythonやGo言語が人気ですが、Linuxサーバーを管理する上で、Perlは避けて通れません。
なぜなら、ほぼ全てのLinuxに最初から入っており、追加インストールなしで高度なテキスト処理やシステム管理ができるからです。

コウ君

先生、Perlって昔の言語じゃないんですか?
僕、Webアプリを作るならPHPとかJavaScriptかなって思ってたんですけど…。
今さらPerlを覚えるメリットってあるんですか?

リナックス先生

あら、コウ君。Perlを侮ってはいけないわ。
ログ解析、設定ファイルの置換、サーバー監視スクリプト…現場ではPerlが大活躍しているのよ。
それに、Webの仕組み(HTTPヘッダーやプロセス実行)を理解するには、PerlのCGI(Common Gateway Interface)を学ぶのが一番の近道なの。
「Webアプリがどうやって動いているか」という基礎体力をつけるために、一緒にPerlを学びましょう!

本連載では、AlmaLinux 9 を使って、PerlによるWebアプリケーション開発(CGI)の基礎から、データベース連携、そしてモダンなフレームワーク利用までをステップバイステップで解説します。

🐪 Perlサーバサイドプログラミング講座(全8回)目次

現在地:【第1回】Linuxの「最強の武器」を手にせよ!環境構築とCGIでのHello World

  • 【第2回】入力フォームを攻略せよ!GET/POSTデータの受け取りと変数入門
  • 【第3回】掲示板を作ろう(前編)!制御構文とファイル操作(読み書き)の基礎
  • 【第4回】車輪の再発明を防ぐ!CPANモジュールの導入とCGI.pmの活用
  • 【第5回】データはデータベースへ!MariaDB(MySQL)連携とDBI/DBDモジュール
  • 【第6回】モダンPerlの世界へ!Webフレームワーク「Mojolicious」入門
  • 【第7回】セキュリティと見た目の分離!テンプレートエンジンの利用とXSS対策
  • 【第8回】実践アプリ開発!簡易ブログシステムの構築とPSGIデプロイ

第1章:PerlとCGIの仕組みを理解しよう

コードを書く前に、そもそも「CGI」とは何か、Webサーバーとプログラムがどう連携しているのかを理解しましょう。

1. 静的ページと動的ページ

  • 静的ページ (HTML): 誰が見ても、いつ見ても同じ内容が表示されるファイル。Webサーバーはファイルをそのままブラウザに送るだけ。
  • 動的ページ (CGI): アクセスするたびに内容が変わる(掲示板、検索結果など)。Webサーバーはプログラムを実行し、その「実行結果」をブラウザに送る。

2. CGI (Common Gateway Interface) とは

CGIは、Webサーバー(Apacheなど)が外部プログラム(Perlなど)を呼び出すための「決まりごと(インターフェース)」です。

  1. ブラウザが hello.cgi にアクセスする。
  2. Webサーバーは hello.cgi がプログラムであることを認識し、実行する。
  3. Perlプログラムは、結果(HTMLなど)を標準出力(STDOUT)に吐き出す。
  4. Webサーバーは、その出力を受け取ってブラウザに返す。

つまり、PerlでWebアプリを作るということは、「HTMLを標準出力にprintするプログラム」を書くということなのです。


第2章:開発環境の構築 (AlmaLinux 9)

それでは、AlmaLinux 9 に必要なソフトウェアをインストールしましょう。
Perl自体は標準で入っていることが多いですが、Webサーバー(Apache)とその関連ツールが必要です。

1. パッケージのインストール

ターミナルを開き、以下のコマンドを実行します。

# システムの更新
sudo dnf update -y

# Apache(httpd)とPerl、および関連ツールのインストール
sudo dnf install httpd perl perl-core -y

2. バージョンの確認

インストールされたPerlのバージョンを確認します。

perl -v

AlmaLinux 9 では、通常 Perl 5.32 系がインストールされます。
これは非常に安定しており、モダンな機能も使えるバージョンです。

3. Apacheの起動と自動起動設定

sudo systemctl start httpd
sudo systemctl enable httpd

4. ファイアウォールの設定

Webサーバーへのアクセス(ポート80)を許可します。

sudo firewall-cmd --add-service=http --permanent
sudo firewall-cmd --reload

第3章:ApacheでCGIを動かすための設定

Apacheを入れただけでは、セキュリティ上の理由からCGIプログラムは動きません。
「このディレクトリにあるファイルはプログラムとして実行しても良いよ」という許可設定が必要です。

1. cgi-bin ディレクトリの確認

Apacheの標準設定では、/var/www/cgi-bin/ というディレクトリが、CGI専用の置き場所として設定されています。
設定ファイル /etc/httpd/conf/httpd.conf を確認してみましょう。

ScriptAlias /cgi-bin/ "/var/www/cgi-bin/"

という行があれば、http://サーバーIP/cgi-bin/ファイル名 でアクセスすると、そのファイルはプログラムとして実行されます。
今回は、この標準ディレクトリを使って開発を進めます。

💡 任意のディレクトリでCGIを動かしたい場合
/var/www/html/ などの公開ディレクトリで .cgi ファイルを動かしたい場合は、設定ファイルに以下のような記述を追加し、Apacheを再起動する必要があります。

<Directory "/var/www/html">
    Options +ExecCGI
    AddHandler cgi-script .cgi .pl
</Directory>

今回は基本に忠実に /cgi-bin/ を使います。


第4章:最初のPerlスクリプト「Hello World」

いよいよプログラミングです。
ブラウザに「Hello World!」と表示するだけのシンプルなプログラムを作成します。

1. ファイルの作成

nano エディタなどで、/var/www/cgi-bin/hello.cgi を作成します。

sudo nano /var/www/cgi-bin/hello.cgi

2. コードの記述

以下のコードを正確に入力してください。
1文字でも間違えるとエラーになります。

#!/usr/bin/perl

use strict;
use warnings;

print "Content-Type: text/html\n\n";
print "<html><body>";
print "<h1>Hello World!</h1>";
print "<p>This is my first Perl CGI.</p>";
print "</body></html>";

3. コードの詳細解説

コード 意味
1 #!/usr/bin/perl Shebang(シバン)。このファイルを実行するプログラム(Perlインタプリタ)の場所を指定します。必須です。
3-4 use strict;
use warnings;
おまじない(重要)。文法チェックを厳しくする設定です。バグを防ぐため、必ず書く癖をつけましょう。
6 print "Content-Type: text/html\n\n"; HTTPヘッダーの出力。「これから送るのはHTMLですよ」とブラウザに伝えます。
末尾の \n\n(改行2つ)は、ヘッダーと本文の区切りとして絶対必須です。これを忘れると500エラーになります。
7- print "..."; HTML本文の出力。ここに書いた内容が画面に表示されます。

第5章:【最重要】権限とSELinuxの設定

コードを書いただけでは動きません。
Linuxセキュリティの洗礼を受けることになります。
ここが初心者が最もつまずくポイントです。

1. 実行権限の付与 (chmod)

作成したファイルは、ただのテキストファイルです。
「プログラムとして実行していいよ」という権限(Executable)を与えます。

sudo chmod 755 /var/www/cgi-bin/hello.cgi
  • 755: 所有者は読み書き実行OK、他の人(Apacheなど)は読み込みと実行だけOK。CGIの基本設定です。

2. SELinuxコンテキストの修正

AlmaLinux 9 では、SELinux(Security-Enhanced Linux)が標準で有効になっています。
SELinuxは、「Apacheが触っていいファイル」と「触ってはいけないファイル」を厳格に管理しています。
手動で作ったファイルは、正しいラベル(コンテキスト)が付いていないことがあり、Apacheがアクセスしようとするとブロックされます。

# 正しいコンテキスト(httpd_sys_script_exec_t)を付与する
sudo chcon -t httpd_sys_script_exec_t /var/www/cgi-bin/hello.cgi

または、以下のコマンドで /var/www/cgi-bin/ 以下の設定を修復します。

sudo restorecon -vR /var/www/cgi-bin/

第6章:動作確認とトラブルシューティング

準備は整いました。
ブラウザを開き、以下のURLにアクセスしてみましょう。

http://(サーバーのIPアドレス)/cgi-bin/hello.cgi

成功した場合

大きな文字で「Hello World!」と表示されましたか?
おめでとうございます! これがあなたの最初の動的Webアプリケーションです。

失敗した場合 (500 Internal Server Error)

もし「Internal Server Error」と表示されたら、以下の手順でデバッグします。
慌てる必要はありません。エンジニアにとってエラーは友達です。

1. エラーログを見る

何が起きたかは、全てログに書かれています。

sudo tail -f /var/log/httpd/error_log

2. よくあるエラー原因と対策

ログのメッセージ 原因 対策
End of script output before headers スクリプトが正しく出力を返さずに終了した。 1. コードの文法ミス(perl -c hello.cgi でチェック)。
2. \n\n(改行2つ)の忘れ。
3. Windowsで編集して改行コードが CRLF になっている(dos2unix コマンドで変換)。
Permission denied 実行権限がない。 chmod 755 を忘れていないか確認。
(SELinux関連のログ) SELinuxにブロックされた。 chcon コマンドでコンテキストを設定する。

3. コマンドラインでの構文チェック

ブラウザで実行する前に、ターミナルで文法チェックをする癖をつけましょう。

perl -c /var/www/cgi-bin/hello.cgi

Syntax OK と出れば文法は正しいです。


まとめ:PerlはWebの仕組みそのもの

お疲れ様でした!
たった数行のプログラムですが、これを動かすために「Webサーバーの設定」「ファイルの権限」「HTTPヘッダー」など、多くの重要な知識が必要だったはずです。

今回の重要ポイント:

  • PerlはLinux標準搭載の強力なテキスト処理言語。
  • CGIは「標準出力」を使ってWebサーバーと会話する仕組み。
  • chmod 755 と SELinux設定はCGI動作の必須条件。
  • エラーが出たら、まずは /var/log/httpd/error_log を見る。

今はまだ「文字を表示するだけ」ですが、Perlの真価はここからです。
ユーザーからの入力を受け取り、計算したり、保存したりすることで、本当の「Webアプリ」になります。

次回、第2回は「入力フォームを攻略せよ!GET/POSTデータの受け取りと変数入門」です。
HTMLフォームから送信されたデータをPerlで受け取り、画面に表示する方法を学びます。
変数(スカラ、配列、ハッシュ)の使い方もガッツリ解説しますので、お楽しみに!

▼ エンジニアとしてのキャリアを加速させる ▼

Perl環境を作るなら
「VPS」で自分専用環境

おすすめVPSを見る

インフラ知識を年収に
「ITエンジニア転職」

転職エージェントを見る

コメント