Your SlideShare is downloading. ×
フラクタリスト技術知識共有会発表資料 090903
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×

Introducing the official SlideShare app

Stunning, full-screen experience for iPhone and Android

Text the download link to your phone

Standard text messaging rates apply

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

1,702
views

Published on

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

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

Published in: Technology

0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

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

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

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