SlideShare uma empresa Scribd logo
1 de 21
Baixar para ler offline
PSGIへの誘い
~CGIと比較して利便性を実感~
  Perl Beginners #2 Lightning Talk
            @ytnobody
対象とねらい



 これからCGIについて学ぼうとしている方
いまCGIについて学んでいる方に言いたい。

「ぜひPSGIを触ってみてくれ!」と。
PSGIとは?
●   Webサーバレイヤを抽象化するための仕様。
    ●   http://d.hatena.ne.jp/keyword/PSGI
●   Plack
    ●   PerlでのPSGIリファレンス実装
●   類似品(というか大体は兄貴分みたいなの)
    ●   Ruby
        –   Rack
    ●   Python
        –   WSGI
よくわかんねえw
要するにPSGIというのは

     CGIと同じように

webページを動的に生成する技術です
シンプルなCGI
#!/usr/bin/env perl

use strict;

### HTTPレスポンスヘッダ
print “Content-type: text/htmlnn”;

### HTTPレスポンスボディ
print <<EOF;
<html>
<body>
 <h1>Hello, world!</h1>
</body>
</html>
EOF
CGI.pmをつかってみる
#!/usr/bin/env perl

use strict;
use CGI;

### CGIインスタンス生成
my $cgi = CGI->new;

### HTTPレスポンスヘッダ
print $cgi->header( -type => 'text/html' );

### HTTPレスポンスボディ
print <<EOF;
<html>
<body>
 <h1>Hello, world!</h1>
</body>
</html>
EOF
PSGIならこうなる
●   下記ファイルをapp.psgiとして保存。
use strict;

my $body = <<EOF;
<html>
<body>
 <h1>Hello, world!</h1>
</body>
</html>
EOF

sub {
   [
     200,
     [ 'Content-Type' => 'text/html' ],
     [ $body ]
   ]
};
PSGI-appの基本
use strict; ← shebang(#!/usr/bin/env perl)は無し。

my $body = <<EOF;
<html>
<body>
 <h1>Hello, world!</h1>
</body>
</html>
EOF

sub {
   [
     200,
     [ 'Content-Type' => 'text/html' ],
     [ $body ]
   ]
};
PSGI-appの基本
use strict;

my $body = <<EOF;
<html>
<body>
 <h1>Hello, world!</h1>
</body>
</html>
EOF

sub {
  [
     200,
     [ 'Content-Type' => 'text/html' ],
     [ $body ]
  ]
};← PSGI-appは、コードリファレンス(sub {...})を返す。
PSGI-appの基本
use strict;

my $body = <<EOF;
<html>
<body>
 <h1>Hello, world!</h1>
</body>
</html>
EOF

sub {
   [
      200,
      [ 'Content-Type' => 'text/html' ],
      [ $body ]
   ] ← コードリファレンスは、配列リファレンスを返す。
};
PSGI-appの基本
use strict;

my $body = <<EOF;
<html>
<body>
 <h1>Hello, world!</h1>
</body>
</html>
EOF

sub {
   [
     200, ← レスポンスコード。
     [ 'Content-Type' => 'text/html' ], ← HTTPレスポンスヘッダ
     [ $body ] ← HTTPボディ
   ]
};
CGIのデプロイ(?)
●   httpデーモン(Apacheとか)側での設定
    ●   特定のパス以下にリクエストが来た場合にCGIを実行
        する指定
    ●   上記で指定されたパスに相当するディレクトリにプログ
        ラムを設置
    ●   プログラムに実行権限を与える(パーミッションの設定)
PSGI-appのデプロイ
●   あらかじめサーバにPlackをインストールしておく
    ●   cpanm Plack
●   plackupコマンドでアプリケーションサーバを起動
    ●   plackup ./app.psgi
デプロイの相違点
●   app.psgiに実行権限を与える必要はない
●   apacheなどのhttpデーモンを必要としない
DEMO
PSGI-appのライブコーディング
          &
        デプロイ
PSGIを導入できる条件
●   SSHなどでシェルを実行できる環境であること
    –   いわゆるレンタルwebスペースだと、この点はクリアできない
●
    プロセスを常駐させても怒られないこと
    –   いわゆるレンタルwebスペースだと(ry
●   (必須じゃないけど推奨)perlbrew+cpanmが使えること
    –   いわゆるレン(ry
オススメのデプロイ先
●   VPS
    ●   さくらVPS
    ●   WebARENA
    ●
        などなど。。。
●   お手持ちのMac
●
    自宅サーバ
    ●   各種LinuxやBSDなど
●   PaaS
    ●   DotCloud
        –   但しデプロイ方法が独特。慣れると楽。
まとめ
●   PSGIは難しくない
    ●   CGIより簡単
●   デプロイするにはそれなりの環境が必要。
    ●   CGIみたいにレンタルスペースじゃ動かせない
    ●   VPS/自宅サーバ/MacBookあたりがあれば楽々。
●   今から学習するなら、断然PSGI
    ●   CGIについて学習するのがダメなんじゃなくて、先に
        PSGIを触っておいたほうが、動くものを手早く作れる。
    ●   PSGIならWAFも色々あるよ!
    ●   まずは恐れずにPSGIを触ろうよ!
さいごに


     Twitterで #perl 付けて

    「教えてください」っていうと、

意外と教えてくれる人がいるかもしれないので

 やってみるといいんじゃないでしょうか。
ご清聴

ありがとうございました

Mais conteúdo relacionado

Mais procurados

Re: WebServer BenchMarking
Re: WebServer BenchMarkingRe: WebServer BenchMarking
Re: WebServer BenchMarkingRyo Tomidokoro
 
Zend OPcacheの速さの秘密を探る
Zend OPcacheの速さの秘密を探るZend OPcacheの速さの秘密を探る
Zend OPcacheの速さの秘密を探るYoshio Hanawa
 
JIT for PHP を試した
JIT for PHP を試したJIT for PHP を試した
JIT for PHP を試したy-uti
 
php-buildがいかに便利かを力説する
php-buildがいかに便利かを力説するphp-buildがいかに便利かを力説する
php-buildがいかに便利かを力説するYoshio Hanawa
 
node-gypを使ったネイティブモジュールの作成
node-gypを使ったネイティブモジュールの作成node-gypを使ったネイティブモジュールの作成
node-gypを使ったネイティブモジュールの作成shigeki_ohtsu
 
Windows で PHP をビルドしてみた
Windows で PHP をビルドしてみたWindows で PHP をビルドしてみた
Windows で PHP をビルドしてみたy-uti
 
apachehereというPHPのBuiltin Serverっぽいやつをつくった
apachehereというPHPのBuiltin ServerっぽいやつをつくったapachehereというPHPのBuiltin Serverっぽいやつをつくった
apachehereというPHPのBuiltin ServerっぽいやつをつくったJunichi Ishida
 
PHPの今とこれから2015
PHPの今とこれから2015PHPの今とこれから2015
PHPの今とこれから2015Rui Hirokawa
 
VSCodeで始めるAzure Static Web Apps開発
VSCodeで始めるAzure Static Web Apps開発VSCodeで始めるAzure Static Web Apps開発
VSCodeで始めるAzure Static Web Apps開発Yuta Matsumura
 
PhpStormを使おう --高槻からは快速急行が早くなります #jbugj
PhpStormを使おう --高槻からは快速急行が早くなります #jbugjPhpStormを使おう --高槻からは快速急行が早くなります #jbugj
PhpStormを使おう --高槻からは快速急行が早くなります #jbugjHisateru Tanaka
 
PHP カンファレンス福岡 参加報告
PHP カンファレンス福岡 参加報告PHP カンファレンス福岡 参加報告
PHP カンファレンス福岡 参加報告y-uti
 
Hashicorpツールズ
HashicorpツールズHashicorpツールズ
HashicorpツールズUchio Kondo
 
RFC: "var" Deprecation
RFC: "var" DeprecationRFC: "var" Deprecation
RFC: "var" Deprecationy-uti
 
Consul は 全自動オーケストレーションの 夢を見るか?
Consul は 全自動オーケストレーションの 夢を見るか?Consul は 全自動オーケストレーションの 夢を見るか?
Consul は 全自動オーケストレーションの 夢を見るか?Uchio Kondo
 
PHPエクステンションの開発tips
PHPエクステンションの開発tipsPHPエクステンションの開発tips
PHPエクステンションの開発tipsYoshio Hanawa
 
PHP7の内部実装から学ぶ性能改善テクニック
PHP7の内部実装から学ぶ性能改善テクニックPHP7の内部実装から学ぶ性能改善テクニック
PHP7の内部実装から学ぶ性能改善テクニックYoshio Hanawa
 
PHP7の拡張モジュール事情
PHP7の拡張モジュール事情PHP7の拡張モジュール事情
PHP7の拡張モジュール事情Yoshio Hanawa
 
gulp + Slim テンプレートエンジンで HTML を効率よく書き出そう
gulp + Slim テンプレートエンジンで HTML を効率よく書き出そうgulp + Slim テンプレートエンジンで HTML を効率よく書き出そう
gulp + Slim テンプレートエンジンで HTML を効率よく書き出そうToshimichi Suekane
 
Pinoco phptal-phpcon-kansai
Pinoco phptal-phpcon-kansaiPinoco phptal-phpcon-kansai
Pinoco phptal-phpcon-kansaiHisateru Tanaka
 

Mais procurados (20)

Re: WebServer BenchMarking
Re: WebServer BenchMarkingRe: WebServer BenchMarking
Re: WebServer BenchMarking
 
Zend OPcacheの速さの秘密を探る
Zend OPcacheの速さの秘密を探るZend OPcacheの速さの秘密を探る
Zend OPcacheの速さの秘密を探る
 
JIT for PHP を試した
JIT for PHP を試したJIT for PHP を試した
JIT for PHP を試した
 
php-buildがいかに便利かを力説する
php-buildがいかに便利かを力説するphp-buildがいかに便利かを力説する
php-buildがいかに便利かを力説する
 
node-gypを使ったネイティブモジュールの作成
node-gypを使ったネイティブモジュールの作成node-gypを使ったネイティブモジュールの作成
node-gypを使ったネイティブモジュールの作成
 
Windows で PHP をビルドしてみた
Windows で PHP をビルドしてみたWindows で PHP をビルドしてみた
Windows で PHP をビルドしてみた
 
apachehereというPHPのBuiltin Serverっぽいやつをつくった
apachehereというPHPのBuiltin ServerっぽいやつをつくったapachehereというPHPのBuiltin Serverっぽいやつをつくった
apachehereというPHPのBuiltin Serverっぽいやつをつくった
 
WordPress on HHVM + Hack
WordPress on HHVM + HackWordPress on HHVM + Hack
WordPress on HHVM + Hack
 
PHPの今とこれから2015
PHPの今とこれから2015PHPの今とこれから2015
PHPの今とこれから2015
 
VSCodeで始めるAzure Static Web Apps開発
VSCodeで始めるAzure Static Web Apps開発VSCodeで始めるAzure Static Web Apps開発
VSCodeで始めるAzure Static Web Apps開発
 
PhpStormを使おう --高槻からは快速急行が早くなります #jbugj
PhpStormを使おう --高槻からは快速急行が早くなります #jbugjPhpStormを使おう --高槻からは快速急行が早くなります #jbugj
PhpStormを使おう --高槻からは快速急行が早くなります #jbugj
 
PHP カンファレンス福岡 参加報告
PHP カンファレンス福岡 参加報告PHP カンファレンス福岡 参加報告
PHP カンファレンス福岡 参加報告
 
Hashicorpツールズ
HashicorpツールズHashicorpツールズ
Hashicorpツールズ
 
RFC: "var" Deprecation
RFC: "var" DeprecationRFC: "var" Deprecation
RFC: "var" Deprecation
 
Consul は 全自動オーケストレーションの 夢を見るか?
Consul は 全自動オーケストレーションの 夢を見るか?Consul は 全自動オーケストレーションの 夢を見るか?
Consul は 全自動オーケストレーションの 夢を見るか?
 
PHPエクステンションの開発tips
PHPエクステンションの開発tipsPHPエクステンションの開発tips
PHPエクステンションの開発tips
 
PHP7の内部実装から学ぶ性能改善テクニック
PHP7の内部実装から学ぶ性能改善テクニックPHP7の内部実装から学ぶ性能改善テクニック
PHP7の内部実装から学ぶ性能改善テクニック
 
PHP7の拡張モジュール事情
PHP7の拡張モジュール事情PHP7の拡張モジュール事情
PHP7の拡張モジュール事情
 
gulp + Slim テンプレートエンジンで HTML を効率よく書き出そう
gulp + Slim テンプレートエンジンで HTML を効率よく書き出そうgulp + Slim テンプレートエンジンで HTML を効率よく書き出そう
gulp + Slim テンプレートエンジンで HTML を効率よく書き出そう
 
Pinoco phptal-phpcon-kansai
Pinoco phptal-phpcon-kansaiPinoco phptal-phpcon-kansai
Pinoco phptal-phpcon-kansai
 

Destaque

Movable Type のサステナビリティと今後の戦略について
Movable Type のサステナビリティと今後の戦略についてMovable Type のサステナビリティと今後の戦略について
Movable Type のサステナビリティと今後の戦略についてSix Apart KK
 
『How to build a High Performance PSGI/Plack Server』のその後と ISUCON3を受けての話題
『How to build a High Performance PSGI/Plack Server』のその後と ISUCON3を受けての話題『How to build a High Performance PSGI/Plack Server』のその後と ISUCON3を受けての話題
『How to build a High Performance PSGI/Plack Server』のその後と ISUCON3を受けての話題Masahiro Nagano
 
A jensen-shannon
A    jensen-shannonA    jensen-shannon
A jensen-shannonUnirio
 
Lectionline xiv domenica del t o 6 luglio
Lectionline xiv domenica del t o 6 luglioLectionline xiv domenica del t o 6 luglio
Lectionline xiv domenica del t o 6 luglioMaike Loes
 
印刷に耐えられる品質のQRCodeをPerlで生成したよ! - Mishima.pm #1
印刷に耐えられる品質のQRCodeをPerlで生成したよ! - Mishima.pm #1印刷に耐えられる品質のQRCodeをPerlで生成したよ! - Mishima.pm #1
印刷に耐えられる品質のQRCodeをPerlで生成したよ! - Mishima.pm #1azuma satoshi
 
[STP]비타500
[STP]비타500[STP]비타500
[STP]비타500hyunjung89
 
Anexo3 cómics eu
Anexo3 cómics euAnexo3 cómics eu
Anexo3 cómics euKatalogador
 
Triduo Mons. Giuseppe Fagnano_2° giorno
Triduo Mons. Giuseppe Fagnano_2° giorno Triduo Mons. Giuseppe Fagnano_2° giorno
Triduo Mons. Giuseppe Fagnano_2° giorno Maike Loes
 
Lectionline xxvii domenica del t o anno a_5 ottobre 2014
Lectionline xxvii domenica del t o  anno a_5 ottobre 2014Lectionline xxvii domenica del t o  anno a_5 ottobre 2014
Lectionline xxvii domenica del t o anno a_5 ottobre 2014Maike Loes
 
Continuous Delivery via Docker (in Chinese)
Continuous Delivery via Docker (in Chinese)Continuous Delivery via Docker (in Chinese)
Continuous Delivery via Docker (in Chinese)Yi Yang
 
Triduo Sr Angela Vallese_3 giorno eng
Triduo Sr Angela Vallese_3 giorno engTriduo Sr Angela Vallese_3 giorno eng
Triduo Sr Angela Vallese_3 giorno engMaike Loes
 
Los Hernandez at Making Believe
Los Hernandez at Making BelieveLos Hernandez at Making Believe
Los Hernandez at Making BelieveEvangelina Guerra
 
Global commercial opportunities derived from glyphosate industry
Global commercial opportunities derived from glyphosate industryGlobal commercial opportunities derived from glyphosate industry
Global commercial opportunities derived from glyphosate industryMartin lau
 
Kozma Szilárd: Az emberek az ítélkezői felületességükön keresztül tévesztik m...
Kozma Szilárd: Az emberek az ítélkezői felületességükön keresztül tévesztik m...Kozma Szilárd: Az emberek az ítélkezői felületességükön keresztül tévesztik m...
Kozma Szilárd: Az emberek az ítélkezői felületességükön keresztül tévesztik m...Violetta Joó
 
Giornata Missionaria Mondiale 2013
Giornata Missionaria Mondiale 2013Giornata Missionaria Mondiale 2013
Giornata Missionaria Mondiale 2013Maike Loes
 

Destaque (20)

Movable Type のサステナビリティと今後の戦略について
Movable Type のサステナビリティと今後の戦略についてMovable Type のサステナビリティと今後の戦略について
Movable Type のサステナビリティと今後の戦略について
 
『How to build a High Performance PSGI/Plack Server』のその後と ISUCON3を受けての話題
『How to build a High Performance PSGI/Plack Server』のその後と ISUCON3を受けての話題『How to build a High Performance PSGI/Plack Server』のその後と ISUCON3を受けての話題
『How to build a High Performance PSGI/Plack Server』のその後と ISUCON3を受けての話題
 
A jensen-shannon
A    jensen-shannonA    jensen-shannon
A jensen-shannon
 
Lectionline xiv domenica del t o 6 luglio
Lectionline xiv domenica del t o 6 luglioLectionline xiv domenica del t o 6 luglio
Lectionline xiv domenica del t o 6 luglio
 
印刷に耐えられる品質のQRCodeをPerlで生成したよ! - Mishima.pm #1
印刷に耐えられる品質のQRCodeをPerlで生成したよ! - Mishima.pm #1印刷に耐えられる品質のQRCodeをPerlで生成したよ! - Mishima.pm #1
印刷に耐えられる品質のQRCodeをPerlで生成したよ! - Mishima.pm #1
 
Monthly highlights
Monthly highlightsMonthly highlights
Monthly highlights
 
[STP]비타500
[STP]비타500[STP]비타500
[STP]비타500
 
Anexo3 cómics eu
Anexo3 cómics euAnexo3 cómics eu
Anexo3 cómics eu
 
Kindergarten registration key points 2012 v_jan20
Kindergarten registration key points 2012 v_jan20Kindergarten registration key points 2012 v_jan20
Kindergarten registration key points 2012 v_jan20
 
Triduo Mons. Giuseppe Fagnano_2° giorno
Triduo Mons. Giuseppe Fagnano_2° giorno Triduo Mons. Giuseppe Fagnano_2° giorno
Triduo Mons. Giuseppe Fagnano_2° giorno
 
Lectionline xxvii domenica del t o anno a_5 ottobre 2014
Lectionline xxvii domenica del t o  anno a_5 ottobre 2014Lectionline xxvii domenica del t o  anno a_5 ottobre 2014
Lectionline xxvii domenica del t o anno a_5 ottobre 2014
 
Sunshine Coast Library, 3rd place IFLA BibLibre Marketing award 2016
Sunshine Coast Library, 3rd place IFLA BibLibre Marketing award 2016Sunshine Coast Library, 3rd place IFLA BibLibre Marketing award 2016
Sunshine Coast Library, 3rd place IFLA BibLibre Marketing award 2016
 
Continuous Delivery via Docker (in Chinese)
Continuous Delivery via Docker (in Chinese)Continuous Delivery via Docker (in Chinese)
Continuous Delivery via Docker (in Chinese)
 
Triduo Sr Angela Vallese_3 giorno eng
Triduo Sr Angela Vallese_3 giorno engTriduo Sr Angela Vallese_3 giorno eng
Triduo Sr Angela Vallese_3 giorno eng
 
Los Hernandez at Making Believe
Los Hernandez at Making BelieveLos Hernandez at Making Believe
Los Hernandez at Making Believe
 
Global commercial opportunities derived from glyphosate industry
Global commercial opportunities derived from glyphosate industryGlobal commercial opportunities derived from glyphosate industry
Global commercial opportunities derived from glyphosate industry
 
Kozma Szilárd: Az emberek az ítélkezői felületességükön keresztül tévesztik m...
Kozma Szilárd: Az emberek az ítélkezői felületességükön keresztül tévesztik m...Kozma Szilárd: Az emberek az ítélkezői felületességükön keresztül tévesztik m...
Kozma Szilárd: Az emberek az ítélkezői felületességükön keresztül tévesztik m...
 
Scuola dante alighieri
Scuola dante alighieriScuola dante alighieri
Scuola dante alighieri
 
Giornata Missionaria Mondiale 2013
Giornata Missionaria Mondiale 2013Giornata Missionaria Mondiale 2013
Giornata Missionaria Mondiale 2013
 
Farewell (Mae, batch 2011)
Farewell (Mae, batch 2011)Farewell (Mae, batch 2011)
Farewell (Mae, batch 2011)
 

Semelhante a PSGIへの誘い

WTM53 phpフレームワーク いまさらcodeigniter
WTM53 phpフレームワーク いまさらcodeigniterWTM53 phpフレームワーク いまさらcodeigniter
WTM53 phpフレームワーク いまさらcodeigniterMasanori Oobayashi
 
Start python with fastapi
Start python with fastapiStart python with fastapi
Start python with fastapiku_taka
 
配布用Cacti running with cherokee
配布用Cacti running with cherokee配布用Cacti running with cherokee
配布用Cacti running with cherokeeyut148atgmaildotcom
 
PHP と SAPI と ZendEngine3 と
PHP と SAPI と ZendEngine3 とPHP と SAPI と ZendEngine3 と
PHP と SAPI と ZendEngine3 とdo_aki
 
Inside mobage platform
Inside mobage platformInside mobage platform
Inside mobage platformToru Yamaguchi
 
Php in ruby
Php in rubyPhp in ruby
Php in rubydo_aki
 
まっつんチャレンジ OSC出張編 45分でわかる PHP+Eclipseによるテスト駆動開発環境の構築
まっつんチャレンジ OSC出張編 45分でわかる PHP+Eclipseによるテスト駆動開発環境の構築まっつんチャレンジ OSC出張編 45分でわかる PHP+Eclipseによるテスト駆動開発環境の構築
まっつんチャレンジ OSC出張編 45分でわかる PHP+Eclipseによるテスト駆動開発環境の構築Hideharu MATSUFUJI
 
php-src の歩き方
php-src の歩き方php-src の歩き方
php-src の歩き方do_aki
 
あなたの安心を高速に守る Container-based CI
あなたの安心を高速に守る Container-based CIあなたの安心を高速に守る Container-based CI
あなたの安心を高速に守る Container-based CIWataru MIYAGUNI
 
WebAPIではじめるphp入門
WebAPIではじめるphp入門WebAPIではじめるphp入門
WebAPIではじめるphp入門Hiroaki Murayama
 
Apacheの展望とmod_perlの超絶技巧 #yapcasia
Apacheの展望とmod_perlの超絶技巧 #yapcasiaApacheの展望とmod_perlの超絶技巧 #yapcasia
Apacheの展望とmod_perlの超絶技巧 #yapcasia鉄次 尾形
 
Ansible quickstart
Ansible quickstartAnsible quickstart
Ansible quickstartHideki Saito
 
Power shell で DSL
Power shell で DSLPower shell で DSL
Power shell で DSLurasandesu
 
PHP7を実際に動かしてみた@第96回PHP勉強会 #phpstudy
PHP7を実際に動かしてみた@第96回PHP勉強会 #phpstudyPHP7を実際に動かしてみた@第96回PHP勉強会 #phpstudy
PHP7を実際に動かしてみた@第96回PHP勉強会 #phpstudyHikari Fukasawa
 
静的サイトどこにする?
静的サイトどこにする?静的サイトどこにする?
静的サイトどこにする?ogawatti
 
成長を加速する minne の技術基盤戦略
成長を加速する minne の技術基盤戦略成長を加速する minne の技術基盤戦略
成長を加速する minne の技術基盤戦略Hiroshi SHIBATA
 
NPAPIを使ったandroid標準ブラウザの拡張方法
NPAPIを使ったandroid標準ブラウザの拡張方法NPAPIを使ったandroid標準ブラウザの拡張方法
NPAPIを使ったandroid標準ブラウザの拡張方法Naruto TAKAHASHI
 

Semelhante a PSGIへの誘い (20)

WTM53 phpフレームワーク いまさらcodeigniter
WTM53 phpフレームワーク いまさらcodeigniterWTM53 phpフレームワーク いまさらcodeigniter
WTM53 phpフレームワーク いまさらcodeigniter
 
Start python with fastapi
Start python with fastapiStart python with fastapi
Start python with fastapi
 
配布用Cacti running with cherokee
配布用Cacti running with cherokee配布用Cacti running with cherokee
配布用Cacti running with cherokee
 
PHP と SAPI と ZendEngine3 と
PHP と SAPI と ZendEngine3 とPHP と SAPI と ZendEngine3 と
PHP と SAPI と ZendEngine3 と
 
Inside mobage platform
Inside mobage platformInside mobage platform
Inside mobage platform
 
Php in ruby
Php in rubyPhp in ruby
Php in ruby
 
まっつんチャレンジ OSC出張編 45分でわかる PHP+Eclipseによるテスト駆動開発環境の構築
まっつんチャレンジ OSC出張編 45分でわかる PHP+Eclipseによるテスト駆動開発環境の構築まっつんチャレンジ OSC出張編 45分でわかる PHP+Eclipseによるテスト駆動開発環境の構築
まっつんチャレンジ OSC出張編 45分でわかる PHP+Eclipseによるテスト駆動開発環境の構築
 
Niigata.pm #1
Niigata.pm #1Niigata.pm #1
Niigata.pm #1
 
How to run P4 BMv2
How to run P4 BMv2How to run P4 BMv2
How to run P4 BMv2
 
Clack meetup #1 lt
Clack meetup #1 ltClack meetup #1 lt
Clack meetup #1 lt
 
php-src の歩き方
php-src の歩き方php-src の歩き方
php-src の歩き方
 
あなたの安心を高速に守る Container-based CI
あなたの安心を高速に守る Container-based CIあなたの安心を高速に守る Container-based CI
あなたの安心を高速に守る Container-based CI
 
WebAPIではじめるphp入門
WebAPIではじめるphp入門WebAPIではじめるphp入門
WebAPIではじめるphp入門
 
Apacheの展望とmod_perlの超絶技巧 #yapcasia
Apacheの展望とmod_perlの超絶技巧 #yapcasiaApacheの展望とmod_perlの超絶技巧 #yapcasia
Apacheの展望とmod_perlの超絶技巧 #yapcasia
 
Ansible quickstart
Ansible quickstartAnsible quickstart
Ansible quickstart
 
Power shell で DSL
Power shell で DSLPower shell で DSL
Power shell で DSL
 
PHP7を実際に動かしてみた@第96回PHP勉強会 #phpstudy
PHP7を実際に動かしてみた@第96回PHP勉強会 #phpstudyPHP7を実際に動かしてみた@第96回PHP勉強会 #phpstudy
PHP7を実際に動かしてみた@第96回PHP勉強会 #phpstudy
 
静的サイトどこにする?
静的サイトどこにする?静的サイトどこにする?
静的サイトどこにする?
 
成長を加速する minne の技術基盤戦略
成長を加速する minne の技術基盤戦略成長を加速する minne の技術基盤戦略
成長を加速する minne の技術基盤戦略
 
NPAPIを使ったandroid標準ブラウザの拡張方法
NPAPIを使ったandroid標準ブラウザの拡張方法NPAPIを使ったandroid標準ブラウザの拡張方法
NPAPIを使ったandroid標準ブラウザの拡張方法
 

Mais de azuma satoshi

finally (not finally)
finally (not finally)finally (not finally)
finally (not finally)azuma satoshi
 
時を駆けるINSERT.pptx
時を駆けるINSERT.pptx時を駆けるINSERT.pptx
時を駆けるINSERT.pptxazuma satoshi
 
できる!サーバレスアーキテクチャ
できる!サーバレスアーキテクチャできる!サーバレスアーキテクチャ
できる!サーバレスアーキテクチャazuma satoshi
 
Perlbeginnes 9 lt_ytnobody
Perlbeginnes 9 lt_ytnobodyPerlbeginnes 9 lt_ytnobody
Perlbeginnes 9 lt_ytnobodyazuma satoshi
 
Perlbeginnes 9 opening
Perlbeginnes 9 openingPerlbeginnes 9 opening
Perlbeginnes 9 openingazuma satoshi
 
Perlbeginners proposal
Perlbeginners proposalPerlbeginners proposal
Perlbeginners proposalazuma satoshi
 
入れ子構造を分解する
入れ子構造を分解する入れ子構造を分解する
入れ子構造を分解するazuma satoshi
 
YAPC::Asia 2012 CPANに恩返ししよう
YAPC::Asia 2012 CPANに恩返ししようYAPC::Asia 2012 CPANに恩返ししよう
YAPC::Asia 2012 CPANに恩返ししようazuma satoshi
 
ライブコーディング(?)で学ぶPerlオブジェクト指向
ライブコーディング(?)で学ぶPerlオブジェクト指向ライブコーディング(?)で学ぶPerlオブジェクト指向
ライブコーディング(?)で学ぶPerlオブジェクト指向azuma satoshi
 
Perlbeginnes 4 keynote
Perlbeginnes 4 keynotePerlbeginnes 4 keynote
Perlbeginnes 4 keynoteazuma satoshi
 
Perl暦およそ10年(?)の僕がデータベースを使えるようになるまでの昔話
Perl暦およそ10年(?)の僕がデータベースを使えるようになるまでの昔話Perl暦およそ10年(?)の僕がデータベースを使えるようになるまでの昔話
Perl暦およそ10年(?)の僕がデータベースを使えるようになるまでの昔話azuma satoshi
 
Perlbeginners 3 opening talk
Perlbeginners 3 opening talkPerlbeginners 3 opening talk
Perlbeginners 3 opening talkazuma satoshi
 
Perlbeginnes 2 keynote
Perlbeginnes 2 keynotePerlbeginnes 2 keynote
Perlbeginnes 2 keynoteazuma satoshi
 
Perl Beginners #1 keynote
Perl Beginners #1 keynotePerl Beginners #1 keynote
Perl Beginners #1 keynoteazuma satoshi
 
大ざっぱにオブジェクト指向
大ざっぱにオブジェクト指向大ざっぱにオブジェクト指向
大ざっぱにオブジェクト指向azuma satoshi
 
Alluren of prototype-based OOP
Alluren of prototype-based OOPAlluren of prototype-based OOP
Alluren of prototype-based OOPazuma satoshi
 

Mais de azuma satoshi (20)

finally (not finally)
finally (not finally)finally (not finally)
finally (not finally)
 
時を駆けるINSERT.pptx
時を駆けるINSERT.pptx時を駆けるINSERT.pptx
時を駆けるINSERT.pptx
 
できる!サーバレスアーキテクチャ
できる!サーバレスアーキテクチャできる!サーバレスアーキテクチャ
できる!サーバレスアーキテクチャ
 
L tthon
L tthonL tthon
L tthon
 
Perlbeginnes 9 lt_ytnobody
Perlbeginnes 9 lt_ytnobodyPerlbeginnes 9 lt_ytnobody
Perlbeginnes 9 lt_ytnobody
 
Perlbeginnes 9 opening
Perlbeginnes 9 openingPerlbeginnes 9 opening
Perlbeginnes 9 opening
 
Perlbeginners proposal
Perlbeginners proposalPerlbeginners proposal
Perlbeginners proposal
 
Chibapm01 lt
Chibapm01 ltChibapm01 lt
Chibapm01 lt
 
入れ子構造を分解する
入れ子構造を分解する入れ子構造を分解する
入れ子構造を分解する
 
YAPC::Asia 2012 CPANに恩返ししよう
YAPC::Asia 2012 CPANに恩返ししようYAPC::Asia 2012 CPANに恩返ししよう
YAPC::Asia 2012 CPANに恩返ししよう
 
ライブコーディング(?)で学ぶPerlオブジェクト指向
ライブコーディング(?)で学ぶPerlオブジェクト指向ライブコーディング(?)で学ぶPerlオブジェクト指向
ライブコーディング(?)で学ぶPerlオブジェクト指向
 
Perlbeginnes 4 keynote
Perlbeginnes 4 keynotePerlbeginnes 4 keynote
Perlbeginnes 4 keynote
 
Perl暦およそ10年(?)の僕がデータベースを使えるようになるまでの昔話
Perl暦およそ10年(?)の僕がデータベースを使えるようになるまでの昔話Perl暦およそ10年(?)の僕がデータベースを使えるようになるまでの昔話
Perl暦およそ10年(?)の僕がデータベースを使えるようになるまでの昔話
 
Perlbeginners 3 opening talk
Perlbeginners 3 opening talkPerlbeginners 3 opening talk
Perlbeginners 3 opening talk
 
Perlbeginnes 2 keynote
Perlbeginnes 2 keynotePerlbeginnes 2 keynote
Perlbeginnes 2 keynote
 
Hachiojipm 14 LT
Hachiojipm 14 LTHachiojipm 14 LT
Hachiojipm 14 LT
 
Perl Beginners #1 keynote
Perl Beginners #1 keynotePerl Beginners #1 keynote
Perl Beginners #1 keynote
 
大ざっぱにオブジェクト指向
大ざっぱにオブジェクト指向大ざっぱにオブジェクト指向
大ざっぱにオブジェクト指向
 
Hachioji.pm #13 LT
Hachioji.pm #13 LTHachioji.pm #13 LT
Hachioji.pm #13 LT
 
Alluren of prototype-based OOP
Alluren of prototype-based OOPAlluren of prototype-based OOP
Alluren of prototype-based OOP
 

Último

論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNetToru Tamaki
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略Ryo Sasaki
 
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A surveyToru Tamaki
 
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものですiPride Co., Ltd.
 
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...Toru Tamaki
 
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdfTSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdftaisei2219
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムsugiuralab
 
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Yuma Ohgami
 
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)Hiroki Ichikura
 

Último (9)

論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
 
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey
 
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものです
 
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
 
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdfTSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdf
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システム
 
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
 
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
 

PSGIへの誘い

  • 1. PSGIへの誘い ~CGIと比較して利便性を実感~ Perl Beginners #2 Lightning Talk @ytnobody
  • 3. PSGIとは? ● Webサーバレイヤを抽象化するための仕様。 ● http://d.hatena.ne.jp/keyword/PSGI ● Plack ● PerlでのPSGIリファレンス実装 ● 類似品(というか大体は兄貴分みたいなの) ● Ruby – Rack ● Python – WSGI
  • 5. 要するにPSGIというのは CGIと同じように webページを動的に生成する技術です
  • 6. シンプルなCGI #!/usr/bin/env perl use strict; ### HTTPレスポンスヘッダ print “Content-type: text/htmlnn”; ### HTTPレスポンスボディ print <<EOF; <html> <body> <h1>Hello, world!</h1> </body> </html> EOF
  • 7. CGI.pmをつかってみる #!/usr/bin/env perl use strict; use CGI; ### CGIインスタンス生成 my $cgi = CGI->new; ### HTTPレスポンスヘッダ print $cgi->header( -type => 'text/html' ); ### HTTPレスポンスボディ print <<EOF; <html> <body> <h1>Hello, world!</h1> </body> </html> EOF
  • 8. PSGIならこうなる ● 下記ファイルをapp.psgiとして保存。 use strict; my $body = <<EOF; <html> <body> <h1>Hello, world!</h1> </body> </html> EOF sub { [ 200, [ 'Content-Type' => 'text/html' ], [ $body ] ] };
  • 9. PSGI-appの基本 use strict; ← shebang(#!/usr/bin/env perl)は無し。 my $body = <<EOF; <html> <body> <h1>Hello, world!</h1> </body> </html> EOF sub { [ 200, [ 'Content-Type' => 'text/html' ], [ $body ] ] };
  • 10. PSGI-appの基本 use strict; my $body = <<EOF; <html> <body> <h1>Hello, world!</h1> </body> </html> EOF sub { [ 200, [ 'Content-Type' => 'text/html' ], [ $body ] ] };← PSGI-appは、コードリファレンス(sub {...})を返す。
  • 11. PSGI-appの基本 use strict; my $body = <<EOF; <html> <body> <h1>Hello, world!</h1> </body> </html> EOF sub { [ 200, [ 'Content-Type' => 'text/html' ], [ $body ] ] ← コードリファレンスは、配列リファレンスを返す。 };
  • 12. PSGI-appの基本 use strict; my $body = <<EOF; <html> <body> <h1>Hello, world!</h1> </body> </html> EOF sub { [ 200, ← レスポンスコード。 [ 'Content-Type' => 'text/html' ], ← HTTPレスポンスヘッダ [ $body ] ← HTTPボディ ] };
  • 13. CGIのデプロイ(?) ● httpデーモン(Apacheとか)側での設定 ● 特定のパス以下にリクエストが来た場合にCGIを実行 する指定 ● 上記で指定されたパスに相当するディレクトリにプログ ラムを設置 ● プログラムに実行権限を与える(パーミッションの設定)
  • 14. PSGI-appのデプロイ ● あらかじめサーバにPlackをインストールしておく ● cpanm Plack ● plackupコマンドでアプリケーションサーバを起動 ● plackup ./app.psgi
  • 15. デプロイの相違点 ● app.psgiに実行権限を与える必要はない ● apacheなどのhttpデーモンを必要としない
  • 17. PSGIを導入できる条件 ● SSHなどでシェルを実行できる環境であること – いわゆるレンタルwebスペースだと、この点はクリアできない ● プロセスを常駐させても怒られないこと – いわゆるレンタルwebスペースだと(ry ● (必須じゃないけど推奨)perlbrew+cpanmが使えること – いわゆるレン(ry
  • 18. オススメのデプロイ先 ● VPS ● さくらVPS ● WebARENA ● などなど。。。 ● お手持ちのMac ● 自宅サーバ ● 各種LinuxやBSDなど ● PaaS ● DotCloud – 但しデプロイ方法が独特。慣れると楽。
  • 19. まとめ ● PSGIは難しくない ● CGIより簡単 ● デプロイするにはそれなりの環境が必要。 ● CGIみたいにレンタルスペースじゃ動かせない ● VPS/自宅サーバ/MacBookあたりがあれば楽々。 ● 今から学習するなら、断然PSGI ● CGIについて学習するのがダメなんじゃなくて、先に PSGIを触っておいたほうが、動くものを手早く作れる。 ● PSGIならWAFも色々あるよ! ● まずは恐れずにPSGIを触ろうよ!
  • 20. さいごに Twitterで #perl 付けて 「教えてください」っていうと、 意外と教えてくれる人がいるかもしれないので やってみるといいんじゃないでしょうか。