01日目: プロジェクトを始める

はじめに

このチュートリアルでは Advent Calendar の形式を借りて24日間にわたって Ark をつかったウェブアプリケーションの開発方法について説明します。

各章は約1時間ほどで終わる程度であり、実際のWebサイトを最初から最後までコーディングすることで Ark を学習します。

1日1時間24日で合計1日になります。これは Ark の基本を学ぶために必要な時間であると私たちは考えています。毎日、新しい機能がアプリケーションに追加され、Ark の Web 開発のベストプラクティスと同時に新しい機能を紹介するためにこの開発プロセスを利用します。

24日間で作成するアプリケーションの名前は Jobeet です。これは PHP のフレームワークである symfony のチュートリアルと同じです。このチュートリアルでは同じアプリケーションを Ark を使用して作成していきます。

Why Ark ?

モダン Perl に慣れた人であれば、Ark を使うメリットをそれほど感じられないかもしれません。

PSGI/plack 以降のPerl界隈は Web Applicaiton FrameWork が乱立しており、Ark の他にも(Ark 以上に)有力なフレームワークは多数存在します。

また、plack その他豊富な CPAN モジュールを組み合わせれば、気軽に独自のフレームワークを構築することが可能になっているのはご存知のとおりでしょう。

Perl 開発に慣れており、手軽なアプリケーションを開発するのであれば、そういったフレームワークを採用しても良いでしょう。

Ark は Catalyst よりも手軽かつ軽量なフレームワークとして開発されましたが、今や Ark は 軽量かと問われると、そこまで軽量とは言えないかもしれません。

ただ、

等を実現する為には、フレームワーク側にある程度の厚みは必要です。

軽量かつあまり枯れていないフレームワークを使う場合は、必要に応じて自分でフレームワークのソースを読み、 足りない機能があったらモジュールやプラグインを自分で書いたりすることが求められます。 それが楽しいのは確かですが、初中級者にとってはハードルが高いのは確かでしょう。

Catalyst に似たルーティングインターフェースに関しても好き嫌いは分かれますが、慣れてくると複雑な URL も簡潔に表現できるメリットを感じられる ことでしょう。

Catalyst のドキュメントを読めばなんとなく Ark のルーティングもわかるというメリット(?!)もあります。

なにより Ark は枯れています。

多数のサービスを作ってきた実績がありますし、数だけではなく、100万人のユーザーを抱えるようなサービスを1年以上稼働させた実績もあります。

Ark を使わない手はありません。

今日はなにを?

今日は Perl コードは書きません。 しかし1行も書かないにしても新規プロジェクトをブートストラップすることで Ark のようなフレームワークを使うことの利点を理解しはじめるでしょう。

この章の目標は開発環境のセットアップとWebブラウザでアプリケーションのページを表示させることです。

前提条件

Ark は Perl のフレームワークなので当然 Perl がインストールされた環境が必要です。 Ark の開発・実行には Perl 5.8.1 以上が必要です。 最近は perlbrew で気軽に Perl をコンパイル可能なので新しいバージョンをガンガン使って行きましょう。

Windowsな環境をご利用の場合は、Cygwin や (?:Active|Strawberry)Perl で頑張るよりも VMware で Linux 仮想マシンを構築するほうが結果的に労力が少なく済むと思います。

また、このチュートリアルではデータベースも使用します。 SQLite もしくは MySQL が使える環境であることを確認してください。

Perl 開発環境の構築

近年は、システム標準のPerlをそのまま使うのではなく、perlbrewとcpanmを組み合わせて、開発環境を構築するのが主流となっています。

以下のコマンドを打てば、環境構築が可能です。シェルの種類やPerlのバージョン等はリリースにあわせて適宜書き換えてください。

$ curl -L http://xrl.us/perlbrew | perl - install
$ ~/perl5/perlbrew/bin/perlbrew init
$ echo 'source ~/perl5/perlbrew/etc/bashrc' >> ~/.bashrc
$ source ~/.bashrc
$ perlbrew install perl-5.14.2 --as 5.14.2
$ perlbrew switch 5.14.2
$ perlbrew install-cpanm
$ cpanm --self-upgrade

これで、Perl5.14.2の開発環境が整いました。cpanmというコマンドも使えるようになっていると思います。

詳しくは tokuhirom 氏による以下のエントリーをがよくまとまっているのでそちらを参照してください。

モダンな Perl の開発環境の構築方法

cpanm の設定

CPAN の設定に慣れ親しんでいる人、すでに設定が終わっている人はこの項目は読み飛ばしてください。 ただ、今現在 Perl 標準の CPAN シェルをお使いでしたら、cpanm への移行をおすすめします。

CPAN とは Perl のモジュールのレポジトリであり、膨大な数のモジュールがアップロードされています。 Perl の開発を効率的に行うためにはこの CPAN モジュールを有効に活用するかどうかが重要になります。

CPAN モジュールは cpanm コマンドを使用してインストールすることが出来ます。

cpanm は CPAN レポジトリからだけではなく、tarball や URL を指定したモジュールインストールも可 能になっています。実のところ、Ark は CPAN リポジトリにあがっていません。

Ark のインストール

cpanm コマンドの設定が完了したら Ark をインストールしましょう。

前述したとおり、Ark は CPAN に上がっていませんが、github にリポジトリがあるので、そこからインストールができます。

Ark は Catalyst ライクなルーティングを提供するルーティングライブラリ、Path::AttrRouter に依存していますが、 こちらも CPAN に上がっておりません。

また、Ark も Path::AttrRouter も Module::Install を使って、Makeifle.PL が作成されていますが、github のリポジトリ には inc/ 以下が同梱されておりません。よって、Module::Install と幾つかの付随パッケージをインストールする必要があります。

よって、以下の順でインストールする必要があります。

  1. Module::Install::*
  2. Path::AttrRouter
  3. Ark

すこし煩わしく感じるかもしれませんが、cpanm を使えば簡単にインストールできるので心配しないでください。

インストール

$ cpanm Module::Install::TestBase Module::Install::Repository Module::Install::AuthorTests
$ cpanm https://github.com/typester/Path-AttrRouter/tarball/master
$ cpanm https://github.com/typester/ark-perl/tarball/master

URL 指定だとうまくいかない場合、cpanmで使っているバックエンドモジュールがSSLに対応していないのかもしれません。 先にLWP::Protocol::httpsを入れてみて下さい。

$ cpanm LWP::Protocol::https

それでも上手くいかない場合は wget 等で tarball をダウンロードしてきて、cpanm の 引数に指定してください。

$ cpanm Ark.tar.gz

また、github で使われている SSL証明書の検出に失敗して、ダウンロードがうまくいかないことがあるかもしれません。 その場合は決して、--no-check-certificateオプション等を使ったりせず、証明書を追加するようにしましょう。

Module::Setup のインストール

アプリケーションを作り始める場合、一から書き始めるのではなくスケルトンから作りはじめるのが普通でしょう。

Ark 自身はスケルトン作成機構を持っていません。 フレームワーク自体がスケルトン作成機能を持つよりかは、既存のスケルトン作成モジュールに任せてしまったほうが良いでしょう。車輪の再発明は必要ありません。

ここでは、Module::Setup を使うことにしましょう。こちらもCPANからインストール可能です。

$ cpanm Module::Setup

Module::Setupは標準でModule::Setup::Flavor以下にFlavor(スケルトン)が幾つか定義されていますが、当然Ark用のFlavorはありません。

ゆくゆくは自分好みのFlavorを使うと良いと思いますが、今回は以下のFlavorを使うことにしましょう。

$ cpanm https://github.com/Songmu/p5-Module-Setup-Flavor-ArkDBIC/tarball/master

module-setupのセットアップ

module-setup --init --flavor-class=Ark ark

名前やメールアドレス、バージョン管理ツールについて聞かれると思いますが、適宜入力してください。 これでArkでアプリケーションを作成する準備は完了です。

スケルトンは個人の好みもあるので、最初は他の人のものを使わせてもらっても良いと思いますが、自分が使いやすいようにカスタマイズしてみると良いでしょう。

Module::Setup の使い方に関しては以下を参照してみてください。

Module::Setup でらくらくモジュール作成

アプリケーションの作成

それではアプリケーションを作成してみましょう。

$ module-setup Jobeet

Jobeet ディレクトリが作成され、その中にアプリケーションのスケルトンが作成されます。

アプリケーションディレクトリの構成

出来たスケルトンの各ディレクトリの役割は以下のようになります。

ファイルの役割は以下のようになります。

スケルトンアプリケーションの起動

Ark は Plack に対応しているので、以下のコマンドで簡単にスケルトンアプリケーションを起動できます。

$ plackup -r dev.psgi
Watching ./lib dev.psgi for file updates.
[debug] Loaded Path actions:
.-------------------------------------+--------------------------------------.
| Path                                | Private                              |
+-------------------------------------+--------------------------------------+
| /                                   | /index                               |
| /                                   | /default                             |
'-------------------------------------+--------------------------------------'

[debug] Setup finished
HTTP::Server::PSGI: Accepting connections at http://0:5000/

このような出力になったら起動完了です。このようにコンソールにデバッグに便利なさまざまな情報が表示されます。 特にルーティングテーブルの表示は地味に便利であり、他のフレームワークにはなかなか無いものです。

plackup の -E オプション(標準はdevelopment)により表示を変更できますが、開発時は基本的にこの development モードで開発を行うと良いでしょう。

ブラウザから http://0.0.0.0:5000/ にアクセスしてみてください。

Ark Default Index

と言う文字が表示されましたか? これは Ark アプリケーションが正常に起動していることを示します。

plackup の -r オプションについて

-r オプションをつけておくと、 lib/ 以下や、.psgi 変更を検知してサーバーを再起動してくれます。開発中はつけておくと良いでしょう。

ただし、以下のXSモジュールをいれておかないと、CPUをかなり消費してしまうので、インストールしておきましょう。
(Mac OS X Lion の場合逆効果という報告もあるので入れないほうが良いかもしれません)

linux の場合

$ cpanm Linux::Inotify2

mac の場合

$ cpanm Mac::FSEvents

ちなみに、 -L Shotgun というオプションもあるのですが、これはリクエストの度にサーバープロセスを再起動するので、動きが重くおすすめしません。

それではまた明日!

はい、今日はここまでです。まだ Perl コードを一行も書いていませんが、Ark の開発環境をセットアップし、アプリケーションのスケルトンを作成することができました。

明日は、アプリケーションが何を行うのかを明らかにしチュートリアルの間に実装する必要のある要件を話します。