Perlの哲学 - Perlに対する誤解を解く

昔CGIで掲示板を作った方へ。CGIに代わるPerl現代的Web開発手法のまとめ

Twitterのタイムライン眺めていると、昔Perl/CGIで掲示板を作ったなぁ、改造したなぁという方が結構な数でいらっしゃいます。

ところで、今のPerlのWeb開発って、どうなっているのという方のために、キーワードを検索すれば調べられるように案内を作成します。

CGIで作成されているWebアプリケーションを、開発効率とパフォーマンスが高い現代的Web開発手法に変更するために、どのような知識が必要なのかということがわかるようにします。

Unix/Linux環境

CGIといれば共有レンタルサーバーを借りますが、開発効率とパフォーマンスが高い現代的Web開発手法は、自分専用のUnix/Linuxサーバー上に構築します。

Linuxは無料で利用できるので、始めやすいでしょう。無料で利用できる代表的なLinuxについて、五十音順で紹介します。

  • CentOS
  • Debian
  • Fedora
  • RedHat
  • Ubuntu

これらの環境は、VPSサービスやクラウドサービスを契約することによって利用することができます。

  • AWL
  • Microsoft Azure
  • さくらのクラウド
  • さくらのVPS

さくらのVPSは、月額698円から始めることができます。

また、現在は、WindowsでLinux環境を疑似体験できる方法があります。つまり、Windowsしか持っていなくっても、ローカル環境で、PerlのWeb開発の環境構築ができるのです。方法を五十音順で紹介します。

  • msys2
  • Cygwin
  • Windows Subsystem for Linux

msys2は、環境構築の手順が少なく簡単で、動作が軽いので、お勧めしています。Windowsしか持っていない、Linuxを体験してみたいという方は、msys2で入門してみましょう。

リモート環境への接続とファイル更新

本番環境や開発環境がリモートにある場合は、いったいどうやって接続して、ファイルを更新するのでしょうか?

Windowsでは、そのためのツールがあります。以下のSSH接続できるツールを使うと、リモートサーバでコマンドを送信することができます。

  • Putty
  • TeraTerm

Mac OSの場合は、sshコマンドなどが使えるでしょう。

リモードサーバーでの、ファイルの更新はどうするのでしょうか?

以下のツールが使えます。

  • WinSCP

Mac OSの場合は、sshで接続語、vimエディタを使えるでしょう。

Perlのインストール

CGIの場合は、デフォルトでインストールされているPerlを使いましたが、現代的Web開発手法では、Perlを自分でインストールします。

Linux環境に、その環境ローカルで使えるPerlをインストールします。

このためのツールを五十音順で紹介します。

CPANモジュールインストール

CGIでは、デフォルトでレンタルサーバーにインストールされているPerlモジュールを使うことが主流でした。

開発環境や本番環境へのCPANモジュールのインストールは、必要なモジュールをcpanfileに定義して、cpanmというコマンドを使うと、自動的に配置できます。

  • cpanm
  • cpanfile

perlbrewやplenvのオプションとしてcpanmをインストールするコマンドが存在するので、それを利用するのが簡単です。

PerlのWebフレームワーク

CGIでは、cgi-lib.pl、CGI.pmなどを使って、掲示板を作ったり、Web開発を行っていたと思います。CGI自体は、ひとつの動的なWebを実現する技術ですが、パフォーマンスと開発効率の面で、課題を抱えていました。

現代的なPerlのWebフレームワークは、パフォーマンスと開発効率を改善しています。

PerlのWebフレームワークを五十音順で紹介します。

  • Amon2
  • Catalyst
  • Dancer2
  • Mojolicious
  • Plack/PSGI(Webミドルウェア)

Amon2, Catalyst, Dancer2, Mojoliciousは、PerlのWebフレームワークです。

Plack/PSGIは、Webミドルウェアで、WebサーバーとWebアプリケーションがコミュニケーションをするための共通仕様を提供します。

詳細は、記述しませんが、検索すれば、たくさんの情報を得ることができると思います。

CGIの課題を解決するためにPHPが利用されることは多いですが、Perl自体もCGIの課題を解決するために独自の手法を発展させてきました。

PerlのWebサーバー(アプリケーションサーバー)

PerlのWebサーバーとは、Perl製のHTTPサーバーで、一般的には、ApacheやNginxの後ろにリバースプロキシ構成で配置して利用するものです。

  • Mojolicious::Server::Hypnotoad
  • Starman
  • Starlet
  • Server::Starter

Starman,Starlet,Mojolicious::Server::Hypnotoadは、PerlのWebサーバーです。Server::Starterは、StarmanやStarletをホットデプロイメントするために利用されます。Mojolicious::Server::Hypnotoadには、ホットデプロイメント機能が付いています。

文字コードはUTF-8

CGIのWebアプリは、文字コードがShift_JISやeuc-jpで合ったりしました。使用されるモジュールも、jcode.pl、JCode.pmが使われていました。現代的PerlWeb開発では、文字コードはUTF-8を使用し、文字コードに関するモジュールは、Encodeモジュールとutf8モジュールを使用します。

もし過去にCGIで作ったWebアプリケーションを、現代的Perl Web開発に置き換えるときは、Encodeモジュールとutf8モジュールに置き換えていくようにしましょう。

本番環境

CGIの場合は、CGIスクリプトを共有レンタルサーバーに配置していましたが、現代的Web開発手法では、クラウドサービスかVPSサービスを借りて、配置することになります。

  • AWS
  • Microsoft Azure
  • さくらのクラウド
  • さくらのVPS

さくらのVPSは、月額698円で、本物のLinux環境を利用できます。個人で始める方は、こちらが、低額で、お安くて便利です。

企業が、本番環境に配置する場合は、半固定料金か、従量制課金のクラウドを使うことが多いかと思います。

CGIの時代は、FTPでファイルをアップロードしていましたが、現代的Web開発手法では、Githubというサービスとgitというツールを使うのが簡単です。昔は手動でFTPでファイルを上げていましたが、gitを使うと、すべてのファイルをひとつのコマンドで、配置することができます。

  • Github
  • git

Webサーバー

CGIでは、ファイルを配置するだけで完了しましたが、現代的Web開発手法では、Webサーバーを使って、リバースプロキシの設定をして、アプリケーションサーバーに接続します。

よく利用されるWebサーバーは、ApacheかNginxです。

Webサーバーのインストールは、「Linux名 Webサーバー名 インストール」で検索しましょう。

  • Apache
  • Nginx

リバースプロキシという機能を使って、WebサーバーとWebアプリを接続する方法については、「Apache リバースプロキシ」「Nginx リバースプロキシ」で、検索してみましょう。

データベース

CGIの場合は、データをファイルに保存することが多かったのですが、現代的Web開発手法では、データをデータベースに保存します。

Webアプリでよく使われるデータベースです。

  • MySQL
  • MariaDB
  • PostgreSQL

インストールは、「Linux名 データベース名 インストール」で検索しましょう。

MySQLとMariaDBは、まぁ同じようなものです。Perlからデータベース接続する場合はDBIとDBD::mysqlが必要です。

PostgreSQLに接続するためにはDBIとDBD::Pgが必要です。

データベースへの接続管理とO/Rマッパー

CGIの時代は、レンタルサーバーにインストールされているDBIを使って、データベースに接続していましたが、現代的Web開発手法では、データベースのテーブルにアクセスする便利なモジュールを、インストールします。

データベースへの接続は、接続管理維持や、joinを簡単に使いたいなどの要望がでてきますね。そういう場合のために、いくつかのO/Rマッパーを紹介しておきましょう。五十音順です。

  • Aniki
  • DBIx::Class
  • DBIx::Connector
  • DBIx::Custom
  • DBIx::Handler
  • DBIx::Simple
  • SQL::Maker
  • Teng

DBIx::ConnectorとDBIx::Handlerは接続管理だけをやってくれるモジュールです。それ以外は、さらに、接続管理モジュールをラッピングしていて、O/Rマッパー機能を提供します。SQLのように使える抽象度の低いものから、データベースアクセスをメソッドにして抽象度の高いものまでがそろっています。

ドメインの取得

CGIの場合は、デフォルトでひとつのURLをもらえていましたが、現代的Web開発で、Webサイトを公開するには、ドメインを取得する必要があります。

ドメイン取得サービスで、ドメインを取得しましょう。

  • お名前.com
  • ムームードメイン

ドメインの設定は、ドメインサービスで、ドメインとIPアドレスの対応を記述した上で、ApacheやNginxなどのWebサーバーの設定ファイルに記述する必要があります。Apacheの場合は、バーチャルホストで検索してください。

SSLを使いたい

Let's Encryptというサービスを使うと、無料でSSL証明書を発行することができます。

  • Let's Encrypt

テキストエディタ

テキストエディタは、お好みで。愛着のあるもの、そのままお使いいただけます。

まとめ

PerlのWeb開発の手法は、一度覚えてしまえば、非常に応用が利く技術です。Web技術は、ひとつひとつの難易度は高くないのですが、構成要素が、多く継続的な学習がまさに必要になる分野だと思います。

CGIの次に、現代的なWeb開発の手法を知りたいという方は、ぜひ参考にしてみてください。

今システムがCGIで動いていて、現代的なPerlのWeb開発手法に移行したいという開発マネージャーの方もぜひ参考にしてください。

CGIの課題解決としてPHPが開発されましたが、Perl自体もCGIの課題解決のために独自の発展を遂げています。