Object Oriented Perl DocumentWorkSpace

 Object Oriented Perl DocumentWorkSpace>>


<<CONTACT>>

下記フォームに必要事項を入力後、確認ボタンを押してください。

ご用件
お名前 ※必須
会社名 ※必須
電話番号(半角) ※必須
Mail(半角) ※必須
性別 男 
年齢
サイトを知ったきっかけ 友人・知人  検索エンジン
お問い合わせ内容

 



T.Perl Catalyst PROGAMMING

1.Catalyst フレームワーク

アプリケーションフレームワークとはフレームワークが提供するベースに従ってフレームワークコードをカスタマイズをしていきながら独自のロジックを実装するための基本テンプレートコードを呼びます。フレームワークを使った開発では開発方針や基本的なコードはフレームワーク部分によって事前に組まれているため、開発時間の短縮、開発生産性の向上につながります。またフレームワークによって構造の統一化が図られ、リリース後のカスタマイズも容易にできます。  今回、ご紹介するCatalystはWebアプリケーションを開発するためのWebアプリケーションフレームワーク(WAF)と呼ばれperl言語を使用したWebアプリケーション開発で代表的なフレームワークの一つとして知られています。このCatalystを選択した理由として比較的ドキュメントが豊富で解析が容易であったためこのフレームワークを選択しています。 Catalyst-Manual Document:https://metacpan.org/release/Catalyst-Manual

2.Catalystによるアプリケーション構築

 Catalystは【Webアプリケーションフレームワーク】です。これを使用することでWeb上で実行されるアプリケーションやWeb用に使用されるプロトコルを使用して実行されるアプリケーション構築を支援します。Perlでは必要な機能はCPANを使用して既存のモジュールをインストールすることでプラグインとして使用することを可能とします。CatalystはMVCモデルを使用したWebアプリケーション開発を支援します。 (1) MVCモデル 【MVC】モデルとは「Model-View-Controller」のデザインパターンで現在のWebアプリケーションフレームワークのベースとなっているものでもともとはsmall talkeプログラミング言語のものであると言われています。基本的な考え方はプロケーションフロー( application-handling application flow)である[Controller]、情報処理( processing information)を行う[Model]、結果や表示(outputting the results)を行う[View]の3つの主要領域から構成されています。3つの領域の内容は以下の通りです。
T.Controller
ControllerはMVCモデルの主要な個所でその名のとおりコントロールするプログラミング領域です。MVCモデルの基本的なデータフローではController領域でユーザーの操作を実現するためのアルゴリズムを組みユーザーの操作をControllerで判断しModel領域にてセッションを行い必要なデータを収集したのちにViewにデータを送信して表示/出力する流れになります。
U.Model 
データにアクセスするプログラミング領域です。モデルではリレーショナルデータベースとセッションを行いますが、他のデータソースであるXapian検索エンジンやLDAPサーバーなどとセッションすることも可能です。
U.View  
Viewはセッションしたデータを表示するプログラミング領域です。典型的なビューではTemplate Toolkit(TT)、Mason、HTML::Templateなどを使用してテンプレートモジュールからHTMLコードを生成して表示します。またその他ViewからPDF出力、Eメール送信なども可能です。

3.Catalystインストール

 この章ではCatalystをインストールするまでを説明します。perlがインストール済みでありCPANモジュールが起動することを前提としています。catalystはCPANで公開されているパッケージであり、Perlインストール時にパッケージ管理のための機能であるPPM(Perl package manager)を使用してインストールを進めていきます。 (1) PPMを起動  PPMを起動するには[すべてのプログラム]-[ActivePerl*,*,*]-[Perl Package Manager]を選択して起動するか、又は[ファイル名を指定して実行]若しくは[コマンドブロンプト]を開き[PPM]と入力して起動を行ってください。 (2) パッケージの表示  PPMが軌道した後は現在インストールされているパッケージがリストに表示されています。[View]-[All Packages]にチェックを入れることで利用可能なパッケージ一覧が表示されます。今回インストールするパッケージは次のパッケージです。
[Controller] ・Catalyst-Devel  ->Catalyst Development toolでCatalystに必要なモジュールをまとめたパッケージです。クリプトとテストを自動生成するCatalyst :: Helperシステムが含まれています [View] ・Catalyst-View-TT  ->Template Toolkitでページをレンダリングするためのビューコンポーネント [Model] ・Catalyst-Model-DBIC-Schema  ->DBIx::Class::Schemaによるデータベース用のネイティブPerlインターフェイス ・Catalyst-Model-DBI  ->DBIは実行のためにメソッド呼び出しを適切なドライバに「ディスパッチ」するためのツール ・Catalyst-Model-Adapter  ->Modelアダプター [その他プラグイン] ・Catalyst-Plugin-Session  ->セッション機能 ・Catalyst-Plugin-Session-State-Cookie  ->CookieによるセッションID管理 ・Catalyst-Plugin-Session-Store-File  ->セッション情報の管理 ・Catalyst-Plugin-Authentication  ->認証機能 ・Catalyst-Authentication-Store-DBIx-Class  ->認証情報のデータベースによる管理 ・Catalyst-Authentication-Store-DBIx-Class
では検索バーに【catalyst】と入力してリストにパッケージを表示します。パッケージリストを表示したのちは右上の【Run marked Action】 を押しインストールを初めて下さい。

4.Catalystプロジェクト

(1) Catalystプロジェクトの作成方法  Catalystプロジェクトを作成します。まず初めにcatalystプロジェクトを展開するフォルダを作成します。仮に【data】というフォルダを作成してそちらにプロジェクトを展開することを前提に進めます。  では次にPerlを起動しましょう。【ファイル名を指定して実行】からcmd.exeを入力して実行しコマンドブロンプトを起動して下さい。コマンドブロンプトを起動後はperl -vを入力してperlを起動します。
C:\users\user>perl -v

This is perl 5, version 24, subversion 1 (v5.24.1) built for MSWin32-x64-multi-t
hread
(with 1 registered patch, see perl -V for more detail)

Copyright 1987-2017, Larry Wall

Binary build 2402 [401627] provided by ActiveState http://www.ActiveState.com
Built Jan  5 2017 02:08:02

Perl may be copied only under the terms of either the Artistic License or the
GNU General Public License, which may be found in the Perl 5 source kit.

Complete documentation for Perl, including FAQ lists, should be found on
this system using "man perl" or "perldoc perl".  If you have access to the
Internet, point your browser at http://www.perl.org/, the Perl Home Page.

C:\users\user>
 チェンジディレクトリ【cd】で[data]フォルダに移動します。[data]フォルダに移動したのちは【catalyst.pl [APP_NAME]】コマンドを入力してプロジェクト作成を行ってください。[APP_NAME]はプロジェクト名で仮にHelloとして進めていきますので、catalyst.pl Hello とコマンドを入力して入力して実行してください。
<Catalystプロジェクト作成コマンド>
catalyst.pl [APP_NAME]
コマンドを入力して実行します。
c:\data>catalyst.pl Hello
created "Hello"
created "Hello\script"
created "Hello\lib"
created "Hello\root"
created "Hello\root\static"
created "Hello\root\static\images"
created "Hello\t"
created "Hello\lib\Hello"
created "Hello\lib\Hello\Model"
created "Hello\lib\Hello\View"
created "Hello\lib\Hello\Controller"
Locale 'Japanese_Japan.932' may not work well.  Some characters in it are not re
cognized by Perl.
created "Hello\hello.conf"
created "Hello\hello.psgi"
created "Hello\lib\Hello.pm"
created "Hello\lib\Hello\Controller\Root.pm"
created "Hello\README"
created "Hello\Changes"
created "Hello\t\01app.t"
created "Hello\t\02pod.t"
created "Hello\t\03podcoverage.t"
created "Hello\root\static\images\catalyst_logo.png"
created "Hello\root\static\images\btn_120x50_built.png"
created "Hello\root\static\images\btn_120x50_built_shadow.png"
created "Hello\root\static\images\btn_120x50_powered.png"
created "Hello\root\static\images\btn_120x50_powered_shadow.png"
created "Hello\root\static\images\btn_88x31_built.png"
created "Hello\root\static\images\btn_88x31_built_shadow.png"
created "Hello\root\static\images\btn_88x31_powered.png"
created "Hello\root\static\images\btn_88x31_powered_shadow.png"
created "Hello\root\favicon.ico"
created "Hello\Makefile.PL"
created "Hello\script\hello_cgi.pl"
created "Hello\script\hello_fastcgi.pl"
created "Hello\script\hello_server.pl"
created "Hello\script\hello_test.pl"
created "Hello\script\hello_create.pl"
Change to application directory and Run "perl Makefile.PL" to make sure your ins
tall is complete
c:\data>
これでプロジェクトは作成されました。 (2) Catalystサーバ起動  catalystプロジェクトが作成されたかどうかの確認方法として、次のコマンドを実行して組み込みの開発Webサーバーを起動します。-restart"引数を使用すると、コードの変更時にリロードが可能になるので、コードを更新するときにサーバーを停止して起動する必要はありません
<開発Webサーバの起動>
[APP_NAME]_server.pl [Option]
 開発サーバの起動します。開発サーバ起動後はhttp://localhost:3000をアドレスに入力してCatalystのデフォルトページが表示されれば開発サーバ起動がされています。開発サーバを停止する際は<ctrlキー+C>を押して停止します。
C:\data\Hello\script>Hello_server.pl
[debug] Debug messages enabled
[debug] Statistics enabled
[debug] Loaded Config "C:\data2\Hello\hello.conf"
Term::Size::Any is not installed, can't autodetect terminal column width
Trouble trying to detect your terminal size, looking at $ENV{COLUMNS}
Cannot determine desired terminal width, using default of 80 columns
[debug] Loaded plugins:
.----------------------------------------------------------------------------.
| Catalyst::Plugin::ConfigLoader  0.34                                       |
'----------------------------------------------------------------------------'

[debug] Loaded PSGI Middleware:
.----------------------------------------------------------------------------.
| Catalyst::Middleware::Stash                                                |
| Plack::Middleware::HTTPExceptions                                          |
| Plack::Middleware::RemoveRedundantBody  0.04                               |
| Plack::Middleware::FixMissingBodyInRedirect  0.12                          |
| Plack::Middleware::ContentLength                                           |
| Plack::Middleware::MethodOverride  0.15                                    |
| Plack::Middleware::Head                                                    |
'----------------------------------------------------------------------------'

[debug] Loaded Request Data Handlers:
.----------------------------------------------------------------------------.
| application/json                                                           |
| application/x-www-form-urlencoded                                          |
'----------------------------------------------------------------------------'

[debug] Loaded dispatcher "Catalyst::Dispatcher"
[debug] Loaded engine "Catalyst::Engine"
[debug] Found home "C:\data2\Hello"
[debug] Loaded components:
.-----------------------------------------------------------------+----------.
| Class                                                           | Type     |
+-----------------------------------------------------------------+----------+
| Hello::Controller::Root                                         | instance |
| Hello::Controller::hello                                        | instance |
'-----------------------------------------------------------------+----------'

[debug] Loaded Private actions:
.----------------------+--------------------------------------+--------------.
| Private              | Class                                | Method       |
+----------------------+--------------------------------------+--------------+
| /default             | Hello::Controller::Root              | default      |
| /index               | Hello::Controller::Root              | index        |
| /end                 | Hello::Controller::Root              | end          |
| /hello/index         | Hello::Controller::hello             | index        |
'----------------------+--------------------------------------+--------------'

[debug] Loaded Path actions:
.-------------------------------------+--------------------------------------.
| Path                                | Private                              |
+-------------------------------------+--------------------------------------+
| /                                   | /index                               |
| /...                                | /default                             |
| /hello/                             | /hello/index                         |
'-------------------------------------+--------------------------------------'

[info] Hello powered by Catalyst 5.90112
HTTP::Server::PSGI: Accepting connections at http://0:3000/
(3) コントローラクラスの作成  次はcatalystの骨組みであるコントローラクラスを作成します。コントローラクラスはプロジェクトフォルダに作成されたscriptフォルダに移動、この場合はc:\data\Hello\scriptフォルダに移動後、[APP_NAME]_create.pl contoroller [controller_NAME]のコマンドを入力して作成します。
<コントローラクラスの作成>
[APP_NAME]_create.pl controller [controller_NAME]
 今回、コントローラクラス[Hello]を作成します。
c:\data2>cd C:\data\Hello\script

C:\data2\Hello\script>hello_create.pl controller hello
 exists "C:\data\Hello\lib\Hello\Controller"
 exists "C:\data\Hello\t"
created "C:\data\Hello\lib\Hello\Controller\hello.pm"
created "C:\data\Hello\t\controller_hello.t"

C:\data\Hello\script>
これでコントローラクラスが作成されました。 (4) コントローラクラスのみを使用した簡単なCatalystプログラムの作成  今回は、作成したコントローラクラスだけを使用してウェブブラウザに"こんにちは、世界""と表示するプログラムを作成します。作成したコントローラクラス[Hello.pm]をメモ帳や開発ツールで開いてください。C:\data\Hello\lib\Hello\Controller に作成されています。[Hello.pm]を開いたら次のサブルーチンを追加してください。  サブルーチンを実行する際のクライアントからのリクエストを処理するメソッドはアクションメソッドと呼ばれています。この場合はsubの後に続く[helloworld]をアクションメソッドと呼び[::Local]が属性となりLocal属性が付与されたhelloworldアクションとなります。  このサブルーチンの流れはアクションメソッドがコントローラクラス[$self]と[$c]はCatalystアプリケーションにアクセスするために使用されるCatalystコンテキストに渡されます。コンテキストの[$c]を矢印演算子によってresponseメソッドを呼び出し実行します。 $c->response->body によってHTTPレスポンスを返します。  その後ファイルを保存しますが、この場合の注意としては[ファイルはUTF-8]で保存しないと文字化けの原因になります。基本は保存ファイルは[UTF-8]で統一して下さい。
package Hello::Controller::hello;
use Moose;
use namespace::autoclean;

BEGIN { extends 'Catalyst::Controller'; }

=head1 NAME

Hello::Controller::hello - Catalyst Controller

=head1 DESCRIPTION

Catalyst Controller.

=head1 METHODS

=cut


=head2 index

=cut

sub index :Path :Args(0) {
    my ( $self, $c ) = @_;

    $c->response->body('Matched Hello::Controller::hello in hello.');
}

#サブルーチンを追加#############################################
sub helloworid :Local {
	my ( $self, $c ) = @_;
	$c->response->body('こんにちは 世界!!Hello World!!');
}
################################################################
=encoding utf8

=head1 AUTHOR

A clever guy

=head1 LICENSE

This library is free software. You can redistribute it and/or modify
it under the same terms as Perl itself.

=cut

__PACKAGE__->meta->make_immutable;

1;
 ウェブブラウザに http://localhost:3000/hello/helloworld を入力して こんにちは 世界!!Hello World!! と表示されたらOKです。  今回使用したのはModel-View-Controllerのうち、Controllerのみを使用しましたが、いかがでしょうか。上手く表示されなければ開発Webサーバを再起動して再度ブラウザにアドレスを入力してください。