Sledge ドキュメント - にぽたん研究所

November 04, 2005

このエントリーをはてなブックマークに追加
先日の Shibuya.pm テクニカルトーク #6 で、やっぱり注目のフレームワークは Catalyst なんだなぁーって思いつつ、日頃から Sledge を使っているせいか、あまり良さや真新しさを感じなかったりして。
「メタフレームワーク」という存在定義っぽいので、Catalyst のそれ自体は割と貧相。
なのに Helper まわりとかは妙にゴージャス & 拡張されているので、やる事や Model が決まってればすぐに使え、そうじゃない場合はすぐ使えなさそう。
Rails の対抗馬なのかも知れないですが、Rails な人が wink とか使ってアジャイル開発とか言って見せびらかしているようなのを真似するには向かないかも知れないですね。
まぁ Sledge も Model に制約がなかったりするのでまず向かないですが「10 分でブックマーク作れ」とか言われたら出来るかも知れん。
Catalyst で scaffold で CRUD フンフンって、あんまよくわかってないです、そんなのをやればサックリ出来るんでしょうかねぇ。
まぁ、弊社社内にある Class::DBI と連携して動く某 Sledge Plugin (未公開) を使えば出来るかも知れん。

Catalyst は、元々 Simon Cozens が作った Maypole から派生した MVC フレームワークだと記憶していますけど、Maypole が出た時は「Sledge に良く似てるなー」って印象でした。Catalyst 自体はそこから更にスマートにして制約を落とす方向に、Maypole は制約を上げてお手軽実装出来るように進化したかも知れないです。
制約の度合を表現すると

ガチガチ Rails > Maypole > Sledge > Catalyst 柔軟

こんな感じでしょうか。
制約がキツくなく、でもある程度決まりきった処理をサクっと実装するには、Catalyst より Sledge のほうが上な気がしますが、Catalyst には Helper が充実しているから、とっつきやすいのかも知れませんが、そう言や Six Apart のせきむらさんが、Sledge Helper を作られてたなぁーとか思いました。
httpd も入ってます。
ちなみに、Sledge の場合 Sledge::Install::Stub を自分用にゴッソリ編集してしまえば、ナニ用のスケルトンだなんだってホゲホゲやるよりプロジェクト全部のスケルトンを一気に作ってしまったりも出来ますから、別に Helper とか言われてもピンと来なかったです。
ちなみに普段は sledge-setup によって吐かれるデフォルトのスケルトンを使ったりはまずしないです。
んで、何が言いたいんかと言えば、Catalyst いいなーとか言っている人に対し、今まで Sledge のドキュメントってまともなのが無かったので、ちょっと書いてみるかぁって意気込みを見せてみようかと思いました。
「Sledge とか存在は知っているけど、ドキュメントが無いから Sledge 使ったこと、使おうと思ったことがない」って人多いんでしょうねぇ。
まぁぶっちゃけ、Prototype とかと一緒で「ソース嫁」が基本スタンスなんですけどね。
ってことで、Shibuya.pm から発生した、にわか Catalyst マンセームードに反抗すべく、Sledge ドキュメントを書いてみるであります。



Update:
そう言えば、以前 ThinkIT というサイトで、Sledge をベースにした Web アプリケーションフレームワーク特集がありましたので、そもそもフレームワークが何たるかとか、Sledge とは何たるかとかの前提知識がない方は、下記を読まれると良いかも知れません。
  1. Web アプリケーションフレームワークとは
  2. セッション管理
  3. 認証
  4. テンプレート管理
  5. データベース
  6. さらなる活用のために



■ Sledge のインストール

これは clouder 氏の「Clouder::Blogger: Sledgeのインストールと設定方法」あたりを読んでください。
ここに詳しく書かれた内容だけで全てが完結するはずです。

ちなみに、Sledge は UNIX な環境向けに作られていて、Windows な環境では、PREREQ_PM とかのせいで入れるのはかなり骨が折れます。
PREREQ_PM の一部は Active Perl の ppm リポジトリから、そこにも無いものは Randy Kobes の ppm リポジトリから、それでも無いのは、Microsoft Visual C++ ToolkitPlatform SDK を使用して build する必要があります。
ちなみに Active Perl 自体が VC++ でビルドされているので、Borland C++ Compiler とかでは殆んどダメだったりします。
そこまで頑張れば「Windows でも Sledge が動く」ことが実感出来ると思います。
現に私の持っていた Windows XP のノートで Apache (Win32) + mod_perl + Active Perl という構成の上に Sledge で組んだテストアプリケーションが動いてました。
今ではもう面倒クサイのでやらないですし、普通に Mac OS X 上で動かして遊んでいたりしますが。
また、Sledge を mod_perl 環境下で動かす場合は、Apache/1.3.x 上での利用を前提としています。Apache/2.x + mod_perl 2.x での利用に対しては動作保証しません。
…てか、動きません。

■ Sledge の構造

Sledge を使った web アプリケーションでは、基本的に Sledge::Pages::Base を継承した Controller 経由で行ないます。
その Sledge::Pages::Base のインスタンスから、基本コンポーネントの全に対しアクセサ経由で利用することが出来ます。
そして、下記が Sledge の基本コンポーネントとなります。
  • Sledge::Pages::Base
  • Sledge::Request
    • Sledge::Request::Upload
  • Sledge::Template
  • Sledge::Session
  • Sledge::Config
  • Sledge::Charset
  • Sledge::SessionManager
  • Sledge::Authorizer
  • Sledge::FillInForm
ここから Sledge の解説を致しますが、今回のこの解説部分では、MyProject というプロジェクト (package) 名で開発を行なうことを前提とさせていただきます。

Sledge::Pages::Base

Sledge::Pages::Base は、Sledge の Controller 部で、通常、Sledge::Pages::Base を継承したクラス内から、web アプリケーションの挙動を制御します。
Sledge::Pages::Base が、言わば「web アプリケーションがリクエストを受け、内部処理を実行し、適切にレスポンスを返す」という基本的な処理を行う、Sledge の根幹部分です。
以後、この部分を「page クラス」と呼びます。

Sledge::Request

page クラスから、r() アクセサ経由で利用します
Sledge を利用した web アプリケーションにおける、HTTP リクエスト処理部分を抽象化しています。
MyProject::Pages から、use される Sledge::Pages::Compat は、環境変数 $MOD_PERL の値に応じ、Sledge::Pages::Apache もしくは Sledge::Pages::CGI のどちらかを @ISA 配列につっこみます。
これによって、mod_perl 環境か、mod_cgi 環境かに応じて、適切なリクエスト処理を行なうクラスを選択し、r() アクセサに (create_request() ミュテイタ経由で) セットします。 それぞれは、Apache::RequestSledge::Request::CGI のインスタンスをリクエスト処理のクラスとしセットします。
Apache::Request によって呼び出せるメソッドで、Sledge::Pages::Base から呼び出されるものは Sledge::Request::CGI によって、CGI.pm を利用してエミュレートされていますが、Sledge::Request::CGI から利用出来ない、Apache::Request のメソッドも多数あり、mod_perl 環境のほうがアプリケーションに多くの柔軟性を提供してくれます。
なお、Sledge::Request オブジェクトは、テンプレート内で "r" という変数でセットされるため、[% r.param('foo') | html %] のようにしてリクエストを画面に展開させることが容易にできます。
param($key[, $value])
以下、前提として、Sledge::Pages::Base を継承した、MyProject::Pages::* 以下の Controller から利用しているため、ここでの $self は、dispatch_foo() メソッド内で受けた page クラスのインスタンスと解釈してください。
my @names = $self->r->param();
取得したリクエストパラメータの name を配列で返します。
my $username = $self->r->param('username');
引数一つを渡すと、その渡した name に属する value が返されます。
my @values = $self->r->param('foo');
セレクトマルチプルや、チェックボックス等、値が複数セットされる可能性のあるパラメータは、配列で受け取れます。
なお、スカラコンテキストの場合、一番最初の値のみが返されます。
$self->r->param(foo => 'bar');
引数 2 つの場合、値をセット出来ます。
$self->r->param(foo => ['bar', 'baz']);
引数 2 つで value に arrayref を渡せば、複数の値がセット出来ます。
upload($name)
my $upload = $self->r->upload('icon');
上記の場合、<input type="file" name="icon"> から送信されたファイルを操作する Sledge::Request::Upload オブジェクトを取得します。

Sledge::Request::Upload

Sledge::Request::Upload は、Sledge::Request のインスタンスから upload() アクセサ経由で利用出来ます。
また、Sledge::Request::Upload から req() アクセサ経由で Sledge::Request のインスタンスを操作する事も出来ます。
link($filename)
$upload->link('/path/to/filename');
送信されたファイルを保存します。
なお、保存先が別パーティションの場合、失敗しますので、こちらから Sledge::Plugin::SaveUpload を入手、インストールし、下記のようにする必要があります。
use Sledge::Plugin::SaveUpload;
my $upload = $self->r->upload('icon');
$upload->save('/path/to/filename');
これにより、link() が失敗した場合に File::Copy::copy() が呼ばれます。
<$upload>
while (my $data = <$upload>) {
    # ...
}
Sledge::Request::Upload オブジェクトは、ファイルハンドルとして扱うことが出来ます。
filename()
my $original_filename = $upload->filename();
元のファイル名を取得出来ます。
size()
my $size = $upload->size();
ファイルサイズを返す。
info()
my $info = $upload->info();
アップロード時の、対象ファイルのパートヘッダを格納した hashref を返します。
my $disposition = $upload->info('Content-Disposition');
引数付きで呼ぶと、そのパートヘッダの値を返します。
type()
my $content_type = $upload->type();
パートヘッダから、Content-Type 行 (MIME type) を返します。
next()
while (my $upload = $uploads->next) {
    # ...
}
同じ name 属性でアップロードされたファイルの次の upload オブジェクトを取得します。取得するオブジェクトがない場合は、undef を返します。
tempname()
my $file = $upload->tempname();
テンポラリファイルの名前を返します。
header_out($field[, $value])
$self->r->header_out(Foo => 'bar');
任意に出力するヘッダのフィールド名と値をセットします。
上記の場合は
Foo: bar
というヘッダがレスポンスに付加されます。
my $value = $self->r->header_out('Foo');
出力ヘッダ Foo の値を取得します。
headers_out($field[, $value])
my %headers = $self->r->headers_out();
出力するヘッダのフィールド名 => 値のハッシュを取得します。
my $headers = $self->r->headers_out();
スカラコンテキストでは出力するヘッダのフィールド名 => 値が入ったハッシュリファレンスが bless されたオブジェクトを返します。
header_in($field)
my $ua = $self->header_in('User-Agent');
リクエストヘッダ内の値を取得します。
content_type($type)
Content-Type ヘッダの値を意図的に変更する場合に呼び出します。dispatch() 内から自動的に呼び出される output_content() の呼び出しによって、この設定値は上書きされるため、変更した場合は $self->send_http_header() 等を呼び出し、$self->finished(1) しておく必要があります。
method()
my $method = $self->r->method();
リクエストメソッドを返します。
status($status)
$self->r>status(403);
HTTP 応答ステータスを "200 OK" 以外に設定する場合に利用します。
print($content)
$self->r->print('Hello World!');
コンテンツを出力します。
uri()
my $uri = $self->r->uri();
REQUEST_URI から QUERY_STRING を取った URI を返します。
args()
my $qs = $self->r->args();
QUERY_STRING を返します。
send_http_header()
$self->r->send_http_header();
HTTP 応答ヘッダを出力し、最後に空行を出力します。dispatch() 内から自動的に呼び出される output_content() でこれは実行されるため、このメソッドを実行した場合は明示的に $self->finished(1) を呼び出す必要があります。

Sledge::Template

page クラスから、tmpl() アクセサ経由で利用します
通常は、Template-Toolkit の wrapper クラスである Sledge::Template::TT のオブジェクトが呼び出されますが、テンプレートエンジンに HTML::Template を使用したい場合は、MyProject::Pages クラスで Sledge::Template クラスを利用するように指定する必要があります。
なお、自動的に利用されるテンプレートのファイル名は、$self->tmpl_dirname() + dispatch() メソッドへの引数 + ".html" というファイル名が、$self->create_config->tmpl_path のパスを起点とし、利用されます。
param($key[, $value])
my $value = $self->tmpl->param('foo');
引数 1 つでテンプレートにセットされたテンプレート変数の値を取り出します。
$self->tmpl->param(
    phone => $phone,
    email => $mail,
);
引数 2 個以上 (ハッシュ) で、テンプレート変数をセットします。
余談ですが、Sledge の多くのコンポーネントで param() というメソッドが利用出来、どれも同じような挙動をしますが、複数の値を同時にセット出来るのは、Sledge::Template(::TT) ぐらいだったりします。
set_option($key, $value)
$self->tmpl->set_option(INCLUDE_PATH => '/path/to/include');
テンプレートエンジンのコンストラクタに渡すオプションを設定します。
add_option($key, $value)
$self->tmpl->add_option(INCLUDE_PATH => '/path/to/include2');
テンプレートエンジンのコンストラクタに渡すオプションに追加の値を設定します。
output()
my $output = $self->tmpl->output();
テンプレートエンンジンによって処理された結果を文字列で返します。ここで返されるのは、fillin_form()charset() および add_filter() による出力フィルタリングを行なっていない段階のものなので、実際に出力されるコンテンツとは異なる可能性があります。

Sledge::Session

page クラスから、session() アクセサ経由で利用します
セッションで利用されるデータを保存するストレージには、MySQL、PostgreSQL、SQLite、File が標準で使用出来、DBM、memcached を利用するための Sledge::Session クラスも sourceforge 内の CVS リポジトリから入手することが出来ます。
何を使用するかは MyProject::Pages の中で指定することが可能で、デフォルトは MySQL が使用されます。
なお、Sledge::Session オブジェクトは、テンプレート内で "session" という変数でセットされるため、[% session.param('foo') | html %] のようにしてセッションの中身を画面に展開させることが容易にできます。
param($key[, $value])
$self->session->param(name => $name);
session に対して値をセットします。
my $name = $self->session->param('name');
セットされた値を取り出します。
ただ、実際にこのような方法では、name が沢山作られ、複雑になる可能性が高いので、hashref 等に入れて session に入れる場合が殆どです。
remove($key)
$self->session->remove('name');
指定されたキーにセットされている値を削除します。
expire()
$self->session->expire();
全ての session を破棄します。
session_id()
my $sid = $self->session->session_id();
発行された session_id を取得します。
is_fresh()
if ($self->session->is_fresh()) {
    # do something ...
}
今回のアクセスによって、セッションが新たに生成されたか否かを判定します。
cleanup($page, $min)
$self->session->cleanup($self, 1440);
指定された時間 (分) 経ったセッションをストレージから破棄します。

Sledge::Config

page クラスから、create_config() アクセサ経由で利用します
Sledge::Config は、MyProject::Config::_common 内の %C というハッシュを読みます。 次に SLEDGE_CONFIG_NAME という環境変数を調べ、定義されていなければ、/etc/MyProject-conf.pl というファイルを実行します。必要であればこの中で SLEDGE_CONFIG_NAME 環境変数を設定し、実行環境に応じて異なる設定値を読ませてアプリケーションの挙動を変えたりします。
(e.g. テスト環境では $ENV{SLEDGE_CONFIG_NAME} = '_test'; にし、本番では $ENV{SLEDGE_CONFIG_NAME} = '_production'; のように設定。これによって同じアプリケーションでも path や datasource を環境別に分けることが容易)
次に改めて SLEDGE_CONFIG_NAME 環境変数が設定されていれば "MyProject::Config::$ENV{SLEDGE_CONFIG_NAME}" を読み込みます。
つまり "MyProject::Config::$ENV{SLEDGE_CONFIG_NAME}" によって MyProject::Config::_common における設定値を上書けます。
なお、Sledge::Config オブジェクトは、テンプレート内で "config" という変数でセットされるため、[% config.param('foo') | html %][% config.foo | html %] のようにして設定値の中身を画面に展開させることが容易にできます。
create_config()
my $conf = $self->create_config();
MyProject::Config のインスタンスを返します。
case_sensitive() メソッドが true を返さない限りは、%C というハッシュのキーに対して大文字、小文字を問わずにメソッド経由でアクセスします。
my $tmpl_path = $self->create_config->tmpl_path;
my $tmpl_path = $self->create_config->TMPL_PATH;
また、Config 側で、 $C{FOO} = ['bar', 'baz']; $C{FOO0} = { bar => baz }; のように arrayref や hashref で値が定義されている場合、コンテキストによってはデリファレンスされた値が返ります。
なお、これらの値は基本的には上書き不可ですが、can_modify_param() が true を返す場合は上書きが可能となります。
param($key[, $value])
my $tmpl_path = $self->create_config->param('tmpl_path');
上記の場合は、$C{TMPL_PATH} の値を返します。
$self->create_config->param(
    DATASOURCE => [ 'dbi:SQLite:/etc/sledge.db', '', '' ],
);
can_modify_param() が true の場合、このように値が設定出来ます。
set($key => $value)
$self->create_config->set(cookie_name => 'hoge');
can_modify_param() が true の場合、値が設定出来ます。
get($key)
my $domain = $self->create_config->get('cookie_domain');
指定したキーの設定値が取得出来ます。
MyProject::Config->instance()
use MyProject::Config;
my $conf = MyProject::Config->instance;
Sledge::ConfigClass::Singleton を継承しているので、このような方法でインスタンスを利用することも可能です。

Sledge::Charset

page クラスから、charset() アクセサ経由で利用します
Content-Type ヘッダ値の設定や、入出力データのフィルタ (convert) を行うもので、基本的に直接操作することはありません。
デフォルトは Sledge::Charset::Default が使用され、EUC-JP で開発されることを前提としています。

Sledge::SessionManager

page クラスから、manager() アクセサ経由で利用します
セッション情報の操作を行うためのユニークキーを、Cookie から取得、設定を行うためのクラスで、こちらも直接的に使用することは殆んどありません。

Sledge::Authorizer

page クラスから、authorizer() アクセサ経由で利用します
認証関連に使用出来るクラスで、デフォルトは、Sledge::Authorizer::Null を使用しています。
これはその名の通り、何もしておらず、通常はこれをスケルトンとして、独自の認証機構を組込みます。

Sledge::FillInForm

page クラスから、fillin_form() アクセサ経由で利用します
Sledge では、$self->r->methodPOST の場合、HTML に対して自動的に各フォームの要素を埋めるために、HTML::FillInForm を wrap した Sledge::FillInFormfillin() メソッドが実行されます。
なお、通常は、POST method の場合のみ、fillin_form() アクセサから Sledge::FillInForm オブジェクトが返され、POST じゃない場合は明示的に load_fillin_form() を呼び出すことによって、fillin_form() 経由で呼べるようにセットしなくてはならない。
ignore_fields($field1[, $field2, $field3, ...])
$self->fillin_form->ignore_fields(@fields);
$self->fillin_form->ignore_fields(\@fields);
引数は配列でも arrayref でも可。fillin させたくないフォーム要素の name 属性を入れます。
fobject($object)
$self->fillin_form->fobject($self->session);
param() メソッドを持つオブジェクトを渡すことによって、その内部で、param() メソッドを呼び値を fillin する。
add_fobject($object)
$self->fillin_form->add_fobject($self->create_config);
param() メソッドを持つオブジェクトを渡すことによって、fillin する対象を追加出来る。
target($name)
$self->fillin_form->target('login_form');
fillin する対象のフォームを <form name="login_form"> 〜 </form> 内に限定する。
fdat(\%data)
$self->fillin_form->fdat(\%data);
%data というハッシュの値を fillin する。
$Sledge::FillInForm::FillPassword
local $Sledge::FillInForm::FillPassword = 0;
<input type="password"> の要素を fillin させるかどうかを設定出来る。デフォルトは 1 (する) になっている。

■ 非アクセサ

以下、Sledge::Pages::Base 内部の、非アクセサ系 API です。
load_template($filename)
ページと異るファイル名のテンプレートを利用する場合に利用します。
redirect($url[, $scheme])
$self->redirect('http://www.example.com/');
HTTP 302 でリダイレクトを行います。
$self->redirect('./next');
相対 URL でも、絶対 URL に変換して Location ヘッダを送出します。
$self->redirect('/payment/input', 'https');
スキーム名を与えることで、スキーム変更しながらリダイレクトも行えます。
注意点として、redirect() メソッドを呼び出した時点では、リダイレクトが行なわれるわけではありません。
dispatch_* を抜けるまでは処理が続くため、redirect() 実行時以降に書かれた処理を実行させることも可能です。
また、redirect() 実行後は AFTER_DISPATCH トリガは実行されません。
finished($bool)
$self->finished(1);
dispatch_* 内の処理を終了させる場合、明示的に呼び出します。
ただし、output_content() 等がこの値が true の時に呼び出されないため、何もコンテンツが出力されないという問題が発生する可能性がありますので、明示的に output_content() を実行する等が必要です。
output_content()
$self->output_content();
HTTP ヘッダやコンテンツの出力を行う場合に利用します。
通常は、開発する側が何もしなくても、dispatch_* の実行後に自動的に呼び出されます。
current_url()
my $url = $self->current_url();
現在の URL を返します。
register_hook($hook => $code);
__PACKAGE__->register_hook(
    BEFORE_DISPATCH => sub {
	my $self = shift;
	my $now = localtime();
	$self->tmpl->param(now => $now);
    },
);
この場合 dispatch_* が実行される前にテンプレート変数 now が定義されます。
定義可能なトリガポイントは、
  • AFTER_INIT
  • BEFORE_DISPATCH
  • AFTER_DISPATCH
  • AFTER_OUTPUT
の 4 つで、CVS にある最新版では、BEFORE_INIT トリガも存在します。
add_trigger($code)
$self->add_filter( sub {
    my($self, $content) = @_;
    $content =~ s/UNIX/Linux/ig;
    return $content;
});
出力するコンテンツ全体にフィルタするメソッドを追加します。複数追加可能です。
tmpl_dirname($dir)
__PACKAGE__->tmpl_dirname('shop/cart');
Config で設定された TMPL_PATH からの相対パスで、利用するテンプレートのディレクトリを指定します。
set_content_length($length)
$self->set_content_length(12345);
Content-Length ヘッダ値を設定します。output_content() が実行されると、この値は正しい値に上書きされます。
is_post_request()
my $is_post = $self->is_post_request;
$self->r->method() が "POST" であった場合に true を返します。
make_content()
my $content = $self->make_content();
テンプレートを展開して出力するコンテンツを返します。output_content() はこれを自動的に実行します。
make_absolute_url($url[, $scheme]);
my $abs_url =
    $self->make_absolute_url('../../foo', 'https');
現在の URL に基づいた絶対 URL を作ります。redirect() の内部で利用されています。
page()
my $page = $self->page();
dispatch() メソッドに渡された、現在のページ名を取得出来ます。
load_fillin_form()
$self->load_fillin_form();
REQUEST_METHOD にかかわらず、fillin させたい場合に実行し、fillin_form() アクセサに Sledge::FillInForm をセットさせます。

Sledge のメソッド解説は以上です。
他にもここで紹介していないメソッドが存在しますが、ここに記載されている内容だけで、普通のアプリケーションを開発するには十分です。

では、ここから、実際に Sledge を使って、簡単なブックマークアプリケーションを作ってみましょう。


■ 10 分で作る Sledge アプリケーション

実践編はこちらです。
開発手順の参考になさってください。

nipotan at 14:03 | Comments(7) | TrackBack(4)
このエントリーをはてなブックマークに追加

Trackback URL for this entry

Trackbacks

1. Sledge ドキュメントが公開されとる。  [ #!shebang.jp ]   November 04, 2005 17:35
[[Sledge ドキュメント&gt;http://blog.livedoor.jp/nipotan/archives/50293736.html]]が公開されましたね。GJ! しかし、[[10分で作る Sledge アプリケーション&gt;http://b.nipotan.org]]はタイピングの速度勝負なとこあるなー それはともかく、もうちょっと Sledge は....
2. Sledgeの詳細ドキュメント公開  [ Clouder::Blogger ]   November 04, 2005 21:11
Sledge ドキュメント - にぽたん研究所 ってことで、Shibuya.pm から発生した、にわ...
3. Sledgeドキュメント公開!!  [ hori-uchi.com ]   November 06, 2005 13:50
Sledgeのドキュメントをにぽたんさんが公開されてます。 Sledge ドキュメント - にぽたん研究所 先日のshibuya.pmテクニカルトーク#6でのCatalystマンセームードに反抗すべく公開ということですが、Sledgeマンセ...
4. [Sledge][Perl]How to use Sledge - 基本編  [ かるぱねるらすたいる ]   August 16, 2010 01:41
Sledgeの使い方のまとめです。個人用のメモのようなものなので誰かの役に立つかは不明です。 僕自身が初心者のようなものなのでフレームワーク初心者にも読みやすいかも知れません。もしかしたら。 とりあえず今回は基本編です。 はじめに Sledgeを知らない人のために。 免

Comments

1. Posted by miyagawa   November 04, 2005 14:10
>まぁ、弊社社内にある Class::DBI と連携して動く某 Sledge Plugin (未公開) を使えば出来るかも知れん。
Sledge::Scaffold でリリースしる

> ちなみに、Sledge の場合 Sledge::Install::Stub を自分用にゴッソリ編集してしまえば、ナニ用のスケルトンだなんだってホゲホゲやるよりプロジェクト全部のスケルトンを一気に作ってしまったりも出来ますから、

リリースしる
2. Posted by k.daiba   November 04, 2005 18:21
連載してくださいませぇ〜
1回で理解するのは難しいですぅ
3. Posted by foyamada   November 04, 2005 18:57
> Apache/2.x + mod_perl 2.x での利用に対しては動作保証しません。
> …てか、動きません。

あり、んじゃおいらがCentOS4.2で動かしてる
Apache/2.0.54(DSO)+mod_perl-2.0.1
は動いてないのだろうか。

まぁ実際に作り始める前にトラブったときのメンテナンスがきつそうなので投げ出したので、どっかで動いてないとかいう可能性も否定しませんが・・・。
4. Posted by せきむら   November 04, 2005 19:07
すばらしいドキュメントですね。。これくらいのドキュメントは当時欲しかったです。

で、HelperですけどFlashの中で高速にmkdirしているview, etc, misc, lib とかを作ってくれたらそれなりにうれしいのかなぁとは思いますよ。

クラス設計->Helperでスケルトン作成->dispatch_hogeの実装

ってなれば最初に使う人はうれしいなぁと。
5. Posted by nipotan   November 05, 2005 19:41
> miyagawa さん
やっぱ view 側も意識しないでゴリってやってくれる scaffold ってインパクト強いですよね。
そこらへん作りなおしてリリースしてみまふ。

> 台場さん
週刊 Sledge ですか…。
一気に放出してしまったので、休み休み適当なとこで止めながら読んでいただけると助かります。。。

> foyamada 氏
「正常に動作する」のと、「正常ではないが辛うじて動作している」のと大違いなので…。
デフォルトではリクエスト処理周りで Apache::Request が非互換故に失敗しているはず。
開き直って Sledge::Request::CGI を継承させれば、それっぽく動くかも知れないけど。
6. Posted by nipotan   November 05, 2005 19:41
> せきむらさん
Sledge がリリースされた 9 ヶ月後に、私が社内版ドキュメントを作ったのですが、社内版 Sledge とオープンソース版 Sledge は互換こそしますが違うものだったりするので、公開する部分の取捨選択等が面倒で、ずっと公開されなかったという経緯があります。
Helper 的なもの (sledge-setup よりも数倍手数を減らすツール) が社内にはあるっちゃあるんですが、それは一般向けじゃない部分 (とあるサイトの共通認証だったり…) が異常に多いので一般向けなものがいいですね。
せきむらさんの作られた Helper でも十分いいと思いますが、もっと Rails のように制約してしまえば、手数はかなり減らせるものになるでしょうね。
7. Posted by 入来 鮎美   January 04, 2013 06:14
すべてが素敵に見えます。

Post a comment

Name:
URL:
  Remember info?: Rate: Face    Star