0
mod_perlで簡単Apacheモジュール開発<br />Takayuki Hirayama<br />1<br />Copyright 2009  Fractalist inc. All rights reserved.<br />
mod_perlって何者?<br />よくある誤解<br />CGIの高速なやつ×<br />Apacheに組み込んだPerlインタープリタ(例:PHP)×<br />ApacheのAPIにPerlでアクセスできるようにし、Apacheのモジュ...
mod_perlの要素<br />mod_perlとmod_perl2がある<br />mod_perl : Apache1.3系用<br />mod_perl2 : Apache2.x系用<br />Apacheから見たmod_perlハンド...
httpd.conf<br />mod_perlハンドラ<br />LoadModuleperl_module modules/mod_perl.so<br /># MyApp::Apache2::HelloWorldモジュールにハンドラを実装...
Apache2のHTTPリクエストライフサイクル<br />デフォルトのハンドラを「上書きする」ハンドラをモジュールとして提供する<br />※ http://perl.apache.org/docs/2.0/user/handlers/htt...
何が作れるの?<br />レスポンスハンドラ(PerlResponseHandler)<br />パラメータに応じたレスポンス<br />(通常のWebアプリケーション)<br />プロトコルハンドラ<br />カスタム認証ハンドラ(PerlA...
ソースはどんな感じ?<br />#file:/somewhere/perl/lib/MyApp/Apache2/HelloWorld.pm<br />#----------------------<br />package MyApp::Apa...
特徴1:高速+軽快!<br />Apache起動時に実行イメージをロードする<br />PHPでは基本的にインタプリタのみロード<br />必要最小限のモジュールのみ使用するようにできるので、実行イメージが小さくなる<br />必ずしも大きなW...
特徴2:高い開発効率<br />C言語でなくPerlで記述できる<br />リソースの垣根が低い<br />枯れた技術/モジュール等資産の再活用<br />多彩なCPANモジュールを利用できる<br />CGI<br />URI<br />En...
特徴3:変数ライフサイクル<br />Apache親プロセスと子プロセスでファイルロードタイミングなどを意識できる<br />10<br />Copyright 2009  Fractalist inc. All rights reserve...
まとめ<br />利用シチュエーション<br />広告配信<br />カスタムログ収集<br />その他小さいアプリケーションを短期間で開発したい場合<br />まとめ<br />11<br />Copyright 2009  Fractal...
Upcoming SlideShare
Loading in...5
×

フラクタリスト技術知識共有会発表資料 090903

1,949

Published on

フラクタリスト技術知識共有会 2009-09-03 プレゼン資料

Published in: Technology
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
1,949
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
4
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

Transcript of "フラクタリスト技術知識共有会発表資料 090903"

  1. 1. mod_perlで簡単Apacheモジュール開発<br />Takayuki Hirayama<br />1<br />Copyright 2009  Fractalist inc. All rights reserved.<br />
  2. 2. mod_perlって何者?<br />よくある誤解<br />CGIの高速なやつ×<br />Apacheに組み込んだPerlインタープリタ(例:PHP)×<br />ApacheのAPIにPerlでアクセスできるようにし、Apacheのモジュール(プラグイン)を<br />Perlで開発できるようにするもの<br />2<br />Copyright 2009  Fractalist inc. All rights reserved.<br />
  3. 3. mod_perlの要素<br />mod_perlとmod_perl2がある<br />mod_perl : Apache1.3系用<br />mod_perl2 : Apache2.x系用<br />Apacheから見たmod_perlハンドラ(mod_perl2)<br />mod_perlハンドラ<br />完全にApacheモジュールとして開発する<br />パラメータなどは全てAPIを通じて取得する<br />高速<br />cgi-scriptハンドラ<br />プログラム側からCGI風にパラメータ取得できる<br />%ENVパラメータにパラメータ格納<br />printで出力<br />開発環境ではCGIとして開発できるので開発しやすい<br />ModPerl::Registry レスポンスハンドラでCGIとして書かれたプログラムを動かせる<br />ただしグローバル変数などの挙動に制約あり<br />3<br />Copyright 2009  Fractalist inc. All rights reserved.<br />
  4. 4. httpd.conf<br />mod_perlハンドラ<br />LoadModuleperl_module modules/mod_perl.so<br /># MyApp::Apache2::HelloWorldモジュールにハンドラを実装する<br /># /somewhere/perl/lib 以下に.pmファイルを置く<br />PerlSwitches-I/somewhere/perl/lib<br /># 事前ロード<br />PerlModuleMyApp::Apache2::HelloWorld<br /># 特定ロケーションにハンドラを設定<br />&lt;Location /index&gt;<br />SetHandlermodperl<br />PerlResponseHandlerMyApp::Apache2::HelloWorld<br />&lt;/Location&gt;<br />cgi-script ハンドラ + ModPerl::Registry<br />LoadModuleperl_modulemodules/mod_perl.so<br />&lt;Location “/index.cgi”&gt;<br /> # perl-scriptセットハンドラを指定して、<br /> # PerlResponseHandlerにModPer::Registryを指定する<br />SetHandlerperl-script<br />PerlResponseHandlerModPerl::Registry<br />&lt;/Location&gt;<br />4<br />Copyright 2009  Fractalist inc. All rights reserved.<br />
  5. 5. Apache2のHTTPリクエストライフサイクル<br />デフォルトのハンドラを「上書きする」ハンドラをモジュールとして提供する<br />※ http://perl.apache.org/docs/2.0/user/handlers/http.html より引用<br />5<br />Copyright 2009  Fractalist inc. All rights reserved.<br />
  6. 6. 何が作れるの?<br />レスポンスハンドラ(PerlResponseHandler)<br />パラメータに応じたレスポンス<br />(通常のWebアプリケーション)<br />プロトコルハンドラ<br />カスタム認証ハンドラ(PerlAuthzHandler)<br />カスタムログ出力(PerlLogHandler)<br />Input/Output Filterハンドラ<br />全てのリクエストに対し一定の処理をかける(PerlInputFilterHandler)<br />全てのレスポンスに対し事後的に一定の処理をかける(PerlOutputFilterHandler)<br />6<br />Copyright 2009  Fractalist inc. All rights reserved.<br />
  7. 7. ソースはどんな感じ?<br />#file:/somewhere/perl/lib/MyApp/Apache2/HelloWorld.pm<br />#----------------------<br />package MyApp::Apache2::HelloWorld;<br />use strict;<br />use warnings;<br />use Apache2::RequestRec ();<br />use Apache2::RequestIO ();<br /># 定数の宣言<br />use Apache2::Const -compile =&gt; qw(OK);<br /># ハンドラメソッドの宣言<br /># これだけ!<br />sub handler {<br /> my $r = shift; # Apache2::RequestRecObjectが引数に入ってくる<br /> $r-&gt;content_type(‘text/plain’); # HTTPヘッダの格納<br /> $r-&gt;print( “Hello World! ” ); # 出力結果の格納<br /> return Apache2::Const::OK;<br />}<br />1;<br />7<br />Copyright 2009  Fractalist inc. All rights reserved.<br />クラスメソッドとして定義することもできる<br />継承などが利用できるので開発効率大<br />開発用のオートリロードも可能<br />
  8. 8. 特徴1:高速+軽快!<br />Apache起動時に実行イメージをロードする<br />PHPでは基本的にインタプリタのみロード<br />必要最小限のモジュールのみ使用するようにできるので、実行イメージが小さくなる<br />必ずしも大きなWAFに頼る必要はない<br />Ruby on RailsやCakePHPでは原則オールインワンで利用せざるを得ない<br />ハンドラだけ定義できるので場合によっては限定的な影響範囲にのみ適用できる<br />8<br />Copyright 2009  Fractalist inc. All rights reserved.<br />
  9. 9. 特徴2:高い開発効率<br />C言語でなくPerlで記述できる<br />リソースの垣根が低い<br />枯れた技術/モジュール等資産の再活用<br />多彩なCPANモジュールを利用できる<br />CGI<br />URI<br />Encode<br />Log::Log4perl<br />HTTP::MobileAgent<br />etc…<br />ミドルウェアとの連携も容易<br />memcached<br />DBI<br />9<br />Copyright 2009  Fractalist inc. All rights reserved.<br />
  10. 10. 特徴3:変数ライフサイクル<br />Apache親プロセスと子プロセスでファイルロードタイミングなどを意識できる<br />10<br />Copyright 2009  Fractalist inc. All rights reserved.<br />Apache<br />親プロセス<br />リクエスト<br />Apache<br />子プロセス<br />fork(2)<br />レスポンス<br />Apache<br />子プロセス<br />Apache<br />子プロセス<br />Apache<br />子プロセス<br />Apache<br />子プロセス<br />Apacheのpreforkモデルのイメージ<br />
  11. 11. まとめ<br />利用シチュエーション<br />広告配信<br />カスタムログ収集<br />その他小さいアプリケーションを短期間で開発したい場合<br />まとめ<br />11<br />Copyright 2009  Fractalist inc. All rights reserved.<br />Webアプリケーションの開発要件に応じて<br />様々な形態から採用検討することが重要<br />
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×