Perl用Webアプリケーション フレームワーク考察

Shibuya Perl Mongersテクニカルトーク#2
Tue, 1 Apr 2003
We are a group of people dedicated to the encouragement of all things Perl-like in Shibuya.
Perl用Webアプリケーション
フレームワーク考察
EY-Office 吉田裕美
協力:株式会社ユラス
なぜフレームワークなのか




短い開発期間
信頼性が求められる
仕様変更、機能拡張は必ずある
いつも優秀な人材が確保できるとはかぎらない
設計やコードの再利用
再利用

ライブラリー(モジュール)
Application
Application
Module
Module

・設計・実装の自由度は高い
Module
Module
Module
Module
Application
Framework
Appl
Module
・生産物の質、開発効率が開発者の
レベルに依存しやす
再利用される部分
フレームワーク
Appl
Module
・「設計」が再利用されなかもしれない
Appl
Module
・設計・実装はフレームワークのスタ
イルにあわせる必要がある
・「設計」が再利用される
・生産物の質、開発効率が開発者の
レベルに依存しにくい
GN/GNAフレームワークの特徴 (1)

Web Appl用基本機能





セッション管理
post/get値の処理 (日本語、ファイルupload…)
cookie
エラー処理
タイムアウト処理
GN/GNAフレームワークの特徴 (2)

高度な型の集中管理





通貨 (\23,000) やE-mailアドレスなどのアプリ寄
りな型のサポート
入出力時の内部⇔外部表現の変換
入力時の形式、値の自動チェック
型はアプリレイヤーで追加可能
型とカラム(DB)の対応付け
GN/GNAフレームワークの特徴 (3)

ページ遷移の集中管理





現在のページとイベント(submit button)による遷
移の制御
アプリ(マクロ)の戻り値による遷移の制御
論理的なページとテンプレートの対応付け
遷移のグループ化
Excel の表で遷移を記述し upload
GN/GNAフレームワークの特徴 (4)

デザイナーに優しいテンプレート





HTML editor/IE 等でテンプレートを表示してデ
ザイナーがページを(想像し)デザインできる
デザイン時だけに有効なデザイナー支援タグ
必要最小限な制御タグ(switch,loop)
アプリで動作を定義可能な 関数タグ
DB(型)との連携
GN/GNAフレームワークの特徴 (5)

アプリ支援の機能

標準マクロ(定義済アプリ)
検索結果の表示、データ入力・確認・DB格納…




ログイン
ユザー(ユザークラス)毎にテンプレートの一部
をON/OFFするアクセス制御
ヘルプページ機能
パンくずリストサポート機能
GN/GNAフレームワークの特徴 (6)

その他







DBアクセス・ライブラリー
リソースの集中管理
DB定義、型、メッセージ、ページ遷移…
コンフィグファイル
デバック支援
ログ管理
メール送信
文字列処理 (日本語…)
GN/GNAフレームワークのMVCモデル
View: テンプレート
(5)
<html>
<%<%gna
gnasimple_confirm
simple_confirm
region=user_region
region=user_region
table=userm
table=userm
%>%>
<body>
<table >
<%loop col_loop%>
<tr>
<td> <%table.col:name%> </td>
<td> <%table.col%> </td>
</tr>
<%loop_end%>
</table>
Controller: ページ遷移
ページID
COND_RESULT
COND_RESULT
COND_RESULT
SEARCH2
SEARCH2
COND_RESULT
COND_RESULT
COND_RESULT
イベント
ok
return
reset
NODATA
OK
priv
next
refresh
Modele: マクロ定義
sub gna_simple_confirm {
my ($opt,$tmpl) = @_;
my $table = $$opt{table};
# 項目のチェック
(4)
gna_check_param_exists($opt,'table,hidden_values_id'
);
gna_check_param_exists($opt,'loop_id,data_id')
if( $$opt{cols} ne '' );
my @titles = split(/,/,$$opt{titles});
# null_ok が 1 なら NULL チェックをしない
my $old_null =
gn_db_set_null_check( $$opt{null_ok} ne '1' );
(2)
(1)
(3)
遷移ページ
SEARCH2
main:MAIN_MENU
COND_RESET2
serach:NO_DATA
COND_RESULT
COND_RESULT
COND_RESULT
COND_RESULT
# デフォルト値の設定 %input に値がないときに、
指定されたマークから始まる
# 値で置き換える
if( $$opt{input_default_prefix} ne '' ) {
my $mark =
$$opt{input_default_prefix};
GN/GNAフレームワークを使ってみて (1)

利点:開発者のレベルによらない開発が出来た

あるプロジェクトのメンバー例
リーダー(アーキュテクト、兼業)
 フレームワーク開発者(専用)
 アプリ開発者(専用)
 アプリ開発者(兼業)
 デザイナー(兼業)

‥‥ 1人
‥‥ 1人
‥‥ 1人
‥‥ 3人
‥‥ 1人
開発期間、品質ともに予想以上であった
GN/GNAフレームワークを使ってみて (2)

問題点:いかにフレームワークの設計思想、
使い方を開発メンバーに理解してもらうか




ドキュメント
講習会
サンプルコード
QAミーティング
GN/GNAフレームワークを使ってみて (3)

問題点: アプリとフレームワークの機能拡張
機能分担をどうするか



アーキュテクト(リーダー)の洞察力
設計思想に立ち戻る
問題点ミーティング
Perl 2年生の私がフレームワークを作るのに
思ったこと・・・(1)

Perlは以前に思っていたより高速
Perlは以前に思っていたより 大規模なプログラム作成に
耐えられる言語

オブジェクト指向 vs 手続き型



吉田はPerlのオブジェクト指向がどうも好きになれなかった・・・
実はPerlのオブジェクト指向を良く理解してないだけかも ^^);
手続き型を採用
逆QA: どうなんでしょうか?
Perl 2年生の私がフレームワークを作るのに
思ったこと・・・(2)

Moduleを積極的に使う・使わない?
 Moduleの信頼性はだいじょうぶ?
 とくに依存関係のあるModuleのバージョンアップは
安全?
 Module間でAPI等に一貫性がない?
ほとんどModuleは使わなかった
逆QA: どうなんでしょうか?
ご清聴
ありがとうございま
す!
GN/GNAフレームワークルーツに関する問い合わせ先
株式会社ユラス
[email protected]
03-5457-1351
♪♪♪ 吉田 裕美 (Yuumi Yoshida)