SlideShare ist ein Scribd-Unternehmen logo
1 von 21
Downloaden Sie, um offline zu lesen
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 付けて

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

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

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

ありがとうございました

Weitere ähnliche Inhalte

Was ist angesagt?

Zend OPcacheの速さの秘密を探る
Zend OPcacheの速さの秘密を探るZend OPcacheの速さの秘密を探る
Zend OPcacheの速さの秘密を探る
Yoshio Hanawa
 
PHPエクステンションの開発tips
PHPエクステンションの開発tipsPHPエクステンションの開発tips
PHPエクステンションの開発tips
Yoshio Hanawa
 

Was ist angesagt? (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
 

Andere mochten auch

『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-shannon
Unirio
 
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
Maike Loes
 
印刷に耐えられる品質のQRCodeをPerlで生成したよ! - Mishima.pm #1
印刷に耐えられる品質のQRCodeをPerlで生成したよ! - Mishima.pm #1印刷に耐えられる品質のQRCodeをPerlで生成したよ! - Mishima.pm #1
印刷に耐えられる品質のQRCodeをPerlで生成したよ! - Mishima.pm #1
azuma satoshi
 
Anexo3 cómics eu
Anexo3 cómics euAnexo3 cómics eu
Anexo3 cómics eu
Katalogador
 
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
Maike Loes
 
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
Maike Loes
 
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
Martin lau
 
Giornata Missionaria Mondiale 2013
Giornata Missionaria Mondiale 2013Giornata Missionaria Mondiale 2013
Giornata Missionaria Mondiale 2013
Maike Loes
 

Andere mochten auch (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)
 

Ähnlich wie PSGIへの誘い

WTM53 phpフレームワーク いまさらcodeigniter
WTM53 phpフレームワーク いまさらcodeigniterWTM53 phpフレームワーク いまさらcodeigniter
WTM53 phpフレームワーク いまさらcodeigniter
Masanori Oobayashi
 
Php in ruby
Php in rubyPhp in ruby
Php in ruby
do_aki
 
まっつんチャレンジ OSC出張編 45分でわかる PHP+Eclipseによるテスト駆動開発環境の構築
まっつんチャレンジ OSC出張編 45分でわかる PHP+Eclipseによるテスト駆動開発環境の構築まっつんチャレンジ OSC出張編 45分でわかる PHP+Eclipseによるテスト駆動開発環境の構築
まっつんチャレンジ OSC出張編 45分でわかる PHP+Eclipseによるテスト駆動開発環境の構築
Hideharu MATSUFUJI
 
WebAPIではじめるphp入門
WebAPIではじめるphp入門WebAPIではじめるphp入門
WebAPIではじめるphp入門
Hiroaki Murayama
 
Power shell で DSL
Power shell で DSLPower shell で DSL
Power shell で DSL
urasandesu
 
NPAPIを使ったandroid標準ブラウザの拡張方法
NPAPIを使ったandroid標準ブラウザの拡張方法NPAPIを使ったandroid標準ブラウザの拡張方法
NPAPIを使ったandroid標準ブラウザの拡張方法
Naruto TAKAHASHI
 

Ähnlich wie 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標準ブラウザの拡張方法
 

Mehr von azuma satoshi

Perlbeginnes 9 lt_ytnobody
Perlbeginnes 9 lt_ytnobodyPerlbeginnes 9 lt_ytnobody
Perlbeginnes 9 lt_ytnobody
azuma satoshi
 
Perlbeginnes 9 opening
Perlbeginnes 9 openingPerlbeginnes 9 opening
Perlbeginnes 9 opening
azuma satoshi
 
Perlbeginners proposal
Perlbeginners proposalPerlbeginners proposal
Perlbeginners proposal
azuma satoshi
 
ライブコーディング(?)で学ぶPerlオブジェクト指向
ライブコーディング(?)で学ぶPerlオブジェクト指向ライブコーディング(?)で学ぶPerlオブジェクト指向
ライブコーディング(?)で学ぶPerlオブジェクト指向
azuma satoshi
 
Perlbeginnes 4 keynote
Perlbeginnes 4 keynotePerlbeginnes 4 keynote
Perlbeginnes 4 keynote
azuma 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 talk
azuma satoshi
 
Perlbeginnes 2 keynote
Perlbeginnes 2 keynotePerlbeginnes 2 keynote
Perlbeginnes 2 keynote
azuma satoshi
 
Perl Beginners #1 keynote
Perl Beginners #1 keynotePerl Beginners #1 keynote
Perl Beginners #1 keynote
azuma satoshi
 
Alluren of prototype-based OOP
Alluren of prototype-based OOPAlluren of prototype-based OOP
Alluren of prototype-based OOP
azuma satoshi
 

Mehr von 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
 

Kürzlich hochgeladen

Kürzlich hochgeladen (10)

論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
 
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
 
Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsUtilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native Integrations
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
 

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 付けて 「教えてください」っていうと、 意外と教えてくれる人がいるかもしれないので やってみるといいんじゃないでしょうか。