Pearlで勉強!CGIを開発しよう!!

 Perlは、C言語やsed、awk、シェルスクリプトといった他のプログラミング言語の優れた機能を取り入れて作られたラリー・ウォールによるプログラミング言語で、ウェブアプリケーションやテキスト処理、システム管理などのプログラムを書くのに用いられている言語です。このプログラミング言語はArtistic LicenseとGPLによって配布されているフリーソフトウェアなので、誰でも好きな方のライセンスを選んで利用することが出来ます。UNIXやWindowsなど多くのプラットフォームで動くことや、プロプライエタリなソフトウェアでなかったことから、多くの人に利用されるようになり、JavaScript、PHP、PythonやPowerShellなどの後続の言語に多大な影響をあたえました。また日本人によって作られたプログラミング言語であるまつもとゆきひろ氏の「Ruby」もその影響を多大に受けております。なおRubyはPerlの言葉の響きが6月の誕生石のPearl(真珠)に似ていることから、まつもと自身の同僚の誕生石である七月の誕生石、ルビーから名付けられたといいます。

特に、日常的な業務を自動化したいと考えている方や、動的言語を覚えたい方、PHPを覚えてWebプログラミングの知識もできたので、汎用的な言語も覚えたい、bashやcshなどのシェルで文字列処理を行うのが大変だと感じている方にお勧めのPerlについて初心者にもわかりやすいようにご説明します。

特徴

モジュール

 特にPerlでのプログラミングでは、モジュールを追加することによって機能をさらに拡張する事ができます。他のプログラムやネットワークとの通信を受け持つモジュール、各種ファイル形式の取り扱うモジュール、数学的な計算を行うモジュールなどと、数多くのモジュールが存在し、前述したとおり無数の有志のメンバーが様々なモジュールを公開している為、そのリソースを再利用することができます。また、PerlにはCPANというモジュールを体系的に管理することが出来るインターネット上のシステムがあって、もしもインターネットに接続しているのであれば、このCPANにアクセスすることによって 、様々なモジュールをインストールし、使用する事が出来るようになります。

標準的なモジュール

勿論モジュールを追加しなくても、デフォルトで利用する事が出来るモジュールがPerlには沢山あります。

有名なCPANのモジュール

テキスト処理
Text::CSV - CSVファイルの解析
Text::Diff - diffコマンド
Template Toolkit - テンプレートシステム
データベース
DBI - 汎用データベースインタフェース
Webアプリケーション
CGI - CGIプログラミング
Plack - PSGIのリファレンス実装
Mojolicious - Webフレームワーク
Catalyst - Webアプリケーションフレームワーク
Webアクセス
LWP::UserAgent - WWWクライアント
データ記述言語の処理
XML::Simple - XMLをPerlのデータ構造に変換
XML::LibXML - XMLのサポート
JSON - JSONのサポート
YAML - YAMLのサポート

PSGI/Plack

 Perlスクリプトは実行ファイル形式またはモジュール形式を用いてウェブアプリケーションとして実行することができます。実行ファイル形式はCGI、FastCGI、SpeedyCGI、モジュール形式はmod_perl、ISAPIなどがあり、このうちCGIが主な実行する方法として知られていますが、実行のたびにプロセスの読込・破棄を行っているため、オーバーヘッドが大きいとされており、よって、より多くのアクセスを処理しなければならないウェブアプリケーションにおいては、パフォーマンスが悪くなってしまうことがあるといいます。一方で、FastCGI、SpeedyCGI、mod_perlなどの環境などでは、プロセスをメモリ上に永続的に置くことによってプロセスの読込・破棄の作業を省き、高速化を図っているそうです。

特に前述したような実行環境である場合はそれぞれインターフェイスが異なるため、ウェブアプリケーションフレームワークごとに差異を吸収するコードが繰り返し再発明されていた。この問題を解決すべく、宮川達彦氏が主導として、WSGIやRackにインスパイアされたPSGIというウェブアプリケーション フレームワーク用の規格が打ち出されたのです。これは、同時にPSGIのリファレンス実装のPlackも発表されたこともあり、具体的な実行環境を意識することなくウェブアプリケーションを作成できるようになっていきました。2010年現在では、ほとんどのPerl製ウェブアプリケーションフレームワークがPSGIに対応しています。

実際にどのような実行の為の環境を用意するか、使用するかについてはオペレーティングシステム(OS)の種類やウェブサーバの仕様によって様々ですが、主に次のような利用方法があります。

UNIX系

IIS

モジュールとはそもそも何なのか?

 モジュール (Module)はそもそも、工学的な概念として使われる言葉で、それは設計上、はたまたシステムを構成する上で必要となる要素のことを言います。これはそれぞれの部品的機能別のものの中から、ある程度まとまりのある機能を持った一部分で、また、それらの部品自身を指す言葉でもあります。また、一般的にこのモジュールに従っているものをモジュラーと表現します。

 特に、入力部分と、出力部分を絞り込むことによって、それらが標準化すると、全てのシステム開発を「モジュールの組み合わせ」という形で実現できるようになるわけです。

ハードウエア

モジュールという言葉が一番最初に生まれたのはハードウェアの分野からです。これはパソコンなどを作成する際に、標準規格に合った部品であれば、どの会社のモノを使用しても機能を発現できるというもので、IBMが、1980年代にパソコンの仕様を公開し、規格にあったモジュールであれば内部はブラックボックスでもかまわないという開発体制をとったことからスタンダードな流れとなっていったものです。このムーブメントに乗って、世界中で無数の部品メーカーが誕生し、モジュールの性能を競ったことからパソコンの性能は飛躍的に高まり、次第に価格競争へと突入していくことになりました。しかし逆に、日本メーカーは系列会社の生産した部品による作り込みという体制を取っていたため、競争力を喪失してしまいました。これ以降は、皆がこぞって、安くて性能が良いモジュールを世界中から探しだして組み立てるようにビジネスモデルが変化していった為、組み立て産業になってしまったパソコン産業では、格安の賃金で大量に生産が行える新興企業が幅を利かせることになっていきました。このことから、旧来のメーカーなどは利幅が薄く太刀打ちできなくなっていき、その結果、とうとうIBMというパラダイム 転換の主であったはずの巨人が撤退することになってしまいました。

 現在、「組み立て」の前段階のモジュール作成においてはCPUやメモリなどの分野で最新技術がブラックボックスとして詰め込まれています。このため利益を上げやすく、一方で、「組み立て」後のアフターケアも需要は厚く利益を上げやすいというメリットがあります。また、このように中段階だけ利益率が低く、前段階と後段階が利益率が高い状態が「∪」のような曲線を描くためスマイルカーブと呼ばれています。

 同じようなモジュールの組み立てを産業として成り立たせている業界には、自動車産業がありますが、この自動車の場合では、容積や重量などが重要要件となっていて、その上で、2万点以上ある部品間の相互依存性(interdependency)が大きくなっている為、部品間において綿密かつ独自のすり合わせが必要不可欠となっています。このことから、組み立てといえども容易に参入できるものではなく、自動車組み立て業は高い利益を上げることができるということなのです。

ソフトウエア

 プログラミングにおいて、一連の機能をひとまとまりになる複数の機能:モジュールに分割し、それぞれ別に開発する場合があります。こうすることで、全体として完成を早めることが出来る上、モジュール単位でテストしたりすることが出来るになり、モジュールの入れ替えで機能を高めたり補修したりすることができるようになります。

 プログラムのモジュールは、出来るだけ他のモジュールとの結合度を弱めて、独立性を高めることが望ましいとされます。

 モジュールは、(一般に凝集した)サブルーチンとデータ構造の集合体としてのソフトウェアの実体です。モジュールはその部分だけでコンパイル出来るな単位でもあり、再利用出来るであると同時に、複数のプログラマが同時並行的にそれぞれ異なるモジュールの開発を行うことが出来るとなります。モジュールの特徴として「モジュール性」とカプセル化があり、それらによって複雑なプログラムを理解しやすくできます。

 モジュールはインタフェースと実装を分離する。モジュールのインターフェイスはそのモジュールが外部に提供すべき要素とそのモジュールが必要とする要素を表しています。実装はそのインターフェイスで提供するよう定義された機能を実際に実現するコードを含みます。モジュールの概念を明示的にサポートする言語として、Ada、D言語、F言語、FORTRAN、Pascal、ML、Modula-2、Python、Rubyなどがあります。

Contents