分12Plack─⁠─PSGIユーティリティPSGIのおかげで,フレームワークはCGIやFastCGI,mod_perlといった環境の差異を吸収するためのコードを書く必要はなくなり,PSGIのインタフェースだけを実行すればよくなりました。実際に多くのフレームワークがすでにPSGIをサポートしていますが,さて,そうしたアプリケーションをどうやって動かせばよいのでしょうか。Apacheなど既存のWebサーバでPSGIアプリケーションを動かすには,CGI,FastCGI,mod_perlなどのインタフェースをPSGIに変換する必要があります。PSGIをネイティブで実行できるPerlベースのHTTPサーバもほしいところです。Plackはそうした要件を満たすためのユーティリティで,リファレンス実装としてのPSGIサーバやそれらへのアダプタ,周辺ライブラリや後述するミドルウェアが含まれています。plackupコマンドPlackには非常に高速かつ簡単に起動できるスタンドアロンのPSGIサーバ(HTTP::Server::PSGI)とコマンドラインツールが付属しています。Worldアプリケーションをhello.psgiというファイルにリネームし,plackupというコマンドを使用して起動してみましょう。athttp://0:5000/先ほど記述したアプリケーションがスタンドアロンアプリケーションとして起動しました。World」と表示されたはずです。hello.psgiのようにします。すると,/tmp/fastcgi.sockをUNIXドメインソケットとしてFastCGIデーモンが起動します。あとはApache,lighttpd,nginxなどでFastCGIに接続するための設定を行えばよいでしょう。--portオプションを利用することでTCP/IPで通信することもできます。CGIやmod_perlについてはスタンドアロンで起動するのではなく,Webサーバから呼び出される形になるためplackupは利用できませんが,.psgiのパスをWebサーバから設定したり,.cgiファイルから呼び出す,といった形で簡単に再利用できます。スタックトレースとアクセスログplackupにはアプリケーションがエラーを起こしたらそのスタックトレースを表示する機能が含まれています。}'としてみましょう。-eオプションはperlと同様,指定されたコードをevalするオプションです。これを実行してブラウザを開くと図3のようなHTMLが表示されます。エラーの起こった個所を,実際のコードを見ながら順に追えて非常に便利です。スタックトレースの表示また,Apacheと同様の形式のアクセスログがターミナルに表示されます。これも開発時にデフォルトで有効になっている機能です。スタックトレースとアクセスログを無効にするには,-Eオプションでdevelopment以外の値を指定します。app.psgiそのほかのオプションそのほかにも,アプリケーションが変更されたら自動で再起動する-rオプションなど,便利なオプションが用意されています。詳しくはplackup--helpと実行してください。Plack::App─⁠─便利なアプリケーション群Plackに付属しているツールでちょっと便利なのが,Plack::Appに含まれているアプリケーション群です。スタティックファイルの配信,既存CGIスクリプトをPSGI化して実行,といったアプリケーションが含まれていて,plackupツールなどから簡単に利用できます。'Plack::App::Directory->new->to_app'のようにすると,カレントディレクトリをドキュメントルートとしたスタティックなWebサーバが起動します。Plackをインストールするだけで,ほかのWebサーバをインストールすることなく利用可能なので,これだけでも開発環境などで便利に利用できます。したPlack::Appに含まれるモジュールは,ユーザが開発するアプリケーションに組み込むことも容易にできるようになっています。PSGIミドルウェアPSGIアプリケーションはコードリファレンスであり,サーバはHTTPリクエストを$envの形に変換してコードに渡し,アプリケーションは受け取ったハッシュ($env)を利用してリクエストを処理し,レスポンスを配列リファレンスにして返します。このようなシンプルな仕様であることのメリットには,実装が簡単であり,特定のモジュールに依存しないということのほかに,実行時にアプリケーションや環境,レスポンスを(外側から)動的に書き換えるためのプロキシ的なコードを差し込むことが可能である,ということが挙げられます。このしくみを「PSGIミドルウェア」と呼び,図示すると図4のようになります。PSGIミドルウェアリスト2はHTTPクライアントのIPアドレスをREMOTE_ADDRから取得して表示するシンプルなアプリケーションですが,これをリスト3のようにしてみるとどうでしょう。$appは先ほどと同様のコードですが,$mwでは$envを受け取り,そのREMOTE_ADDRをランダムに2分の1の確率で1.2.3.4に変更して,もとの$appを実行しています。...のように1.2.3.4と書き換わっているのがわかります。実際にはあまり役に立たない例ですが,このように既存のアプリケーションに手を入れることなく,実行の前後にリクエストやレスポンスの中身をフックできるのがわかると思います。この例ではラップされるPSGIアプリケーションをインライン($app)で記述していますが,こうしたミドルウェアはPSGIを実装したすべてのフレームワークで利用できます。Catalystなどのフレームワークでは多くの機能がプラグインやアクションといった拡張として用意されていますが,これらはCatalystでしか利用できませんでした。WebサーバのApacheに用意されている多くのmod_*モジュールも同様です。PSGIの仕様に沿ったミドルウェアでこうした拡張機能を記述すれば,PSGIを利用したサーバ,フレームワークで共有できます。Plackには多くのミドルウェアが実装され,Plack::Middlewareという名前空間の下にバンドルされています。その使い方については後述します。Architectとして開発などに携わる。ニュースコンテンツの再配信サービス「Bulknews」やフィードアグリゲータ「Plagger」の作者であり,日本を代表するPerlハッカーの一人。カンファレンスでの発表だけでなくイベントも数多く運営するなど,精力的に活動している。個人ブログはhttp://blog.bulknews.net/mt/など。2019」を開催しました。DAY1・DAY2の様子を注目セッションとともにお伝えします。LINEのエンジニア3名がイベントに先駆けて見どころを紹介します。コードの安全性・安定性を高める開発サイクル~テスト管理の効率を上げ,脆弱性診断を自動で行う~本連載では,連載「業務を改善する情報共有の仕掛け」を受けつつ,安全性・安定性を加えた開発サイクルについて考えていきます。若者世代から圧倒的な人気を誇るライブ配信&動画投稿コミュニティアプリ「MixChannel」(ミクチャ)の裏側(レコメンドシステムやサーバサイド開発など)について解説していきます。その他の連載CSS3アニメーションでつくるインターフェイス表現CSS3によるアニメーション表現を紹介していきます。その中でも,幅広い読者に応用してもらえるだろうインターフェイスを主なお題とします。MySQL道普請便り本連載では,MySQLを使ったアプリ開発・運用に関するノウハウをご紹介していきます。RecipeUbuntuの強力なデスクトップ機能を活用するための,いろいろなレシピをお届けします。JavaScriptセキュリティの基礎知識JavaScriptに関するセキュリティ上の問題はどこで発生し,どうすれば防ぐことができるのか?について解説していきます。〜システムをきちんと運用するための基礎知識システムは「作って終わり」ではなく,運用の中でさまざまな問題が発生します。問題の発生に備えて事前にどのような対応をしておくべきなのか,問題発生時に何をしなければならないのか,ポイントを解説していきます。きたみりゅうじの聞かせて珍プレーソフトウェア開発の現場で体験したトホホな失敗,思わずうなる珍プレーをきたみりゅうじ氏が四コママンガで紹介。Linuxのメンテナンスの傍ら,Linuxやオープンソースソフトと日々を過ごす著者が,その魅力とつきあい方を,エッセイ風味でお届けします。PRESS特別編集部員,さわやか笑顔のスーパーハカーはまちちゃんとネット大好き14歳わかばちゃんが,毎号,読者の皆さんから寄せられたおたよりを紹介します。皆さんの日頃の悩みにも答えちゃいますよ。]メールでのお知らせメールで次の案内をお送りしております。メールの配信を希望する方は,利用したい項目をチェックしてメールアドレスを入力し,[登録]ボタンをクリックしてください。UPDATES[ほぼ週間に1回]新刊メールマガジン[ほぼ週間に1回]電脳会議の各号案内[ほぼ1ヵ月半に1回]※変更する場合や停止する場合は,登録情報変更ページをご覧ください。※登録いただいたメールアドレスには,そのお知らせ以外,配信いたしません。Ltd.ページ内容の全部あるいは一部を無断で利用することを禁止します。個別にライセンスが設定されている記事等はそのライセンスに従います。