SlideShare une entreprise Scribd logo
1  sur  130
Télécharger pour lire hors ligne
Dive into the Cloud with our buddy,
lovely PHP!
関西PHP勉強会 #9 in JAWS FESTA Kansai 2013
September 26th, 2013
Sotaro OMURA
@omoon
#jawsfesta
About Me
#jawsfesta
About Me
•Sotaro OMURA
#jawsfesta
About Me
•Sotaro OMURA
•株式会社タップ
#jawsfesta
About Me
•Sotaro OMURA
•株式会社タップ
•PHP歴は12年ほど(最近はFuelPHPとか)
#jawsfesta
About Me
•Sotaro OMURA
•株式会社タップ
•PHP歴は12年ほど(最近はFuelPHPとか)
•love noodles
#jawsfesta
About Me
•Sotaro OMURA
•株式会社タップ
•PHP歴は12年ほど(最近はFuelPHPとか)
•love noodles
•omoon.org
#jawsfesta
About Me
•Sotaro OMURA
•株式会社タップ
•PHP歴は12年ほど(最近はFuelPHPとか)
•love noodles
•omoon.org
•@omoon
#jawsfesta
About Me
•Sotaro OMURA
•株式会社タップ
•PHP歴は12年ほど(最近はFuelPHPとか)
•love noodles
•omoon.org
•@omoon
#jawsfesta
京セラドームと聞いて
#jawsfesta
#jawsfesta
安心しました
#jawsfesta
今日話すこと
#jawsfesta
今日話すこと
•クラウドにまつわる言葉の整理
#jawsfesta
今日話すこと
•クラウドにまつわる言葉の整理
•代表的クラウド紹介
#jawsfesta
今日話すこと
•クラウドにまつわる言葉の整理
•代表的クラウド紹介
•実際にクラウドでPHPアプリケーションを公開する場合の具体的手順
#jawsfesta
ところで
#jawsfesta
About Me
#jawsfesta
About Me
#jawsfesta
#jawsfesta
#jawsfesta
About Me
#jawsfesta
About Me
#jawsfesta
#jawsfesta
クラウドとは
#jawsfesta
クラウド3つの分類
#jawsfesta
クラウド3つの分類
•IaaS (Infrastructure as a Service)
#jawsfesta
クラウド3つの分類
•IaaS (Infrastructure as a Service)
•PaaS (Platform as a Service)
#jawsfesta
クラウド3つの分類
•IaaS (Infrastructure as a Service)
•PaaS (Platform as a Service)
•SaaS (Software as a Service)
#jawsfesta
IaaS
#jawsfesta
IaaS(あいあーす)
#jawsfesta
IaaS(いあーす)
#jawsfesta
IaaS
#jawsfesta
IaaS
•Amazon Web Services(http://aws.amazon.com/jp/)
#jawsfesta
IaaS
•Amazon Web Services(http://aws.amazon.com/jp/)
•さくらのクラウド(http://cloud.sakura.ad.jp/)
#jawsfesta
IaaS
•Amazon Web Services(http://aws.amazon.com/jp/)
•さくらのクラウド(http://cloud.sakura.ad.jp/)
•NIFTY Cloud(http://cloud.nifty.com/)
#jawsfesta
IaaS
•Amazon Web Services(http://aws.amazon.com/jp/)
•さくらのクラウド(http://cloud.sakura.ad.jp/)
•NIFTY Cloud(http://cloud.nifty.com/)
•Windows Azure(http://www.windowsazure.com/ja-jp/)
#jawsfesta
PaaS
#jawsfesta
PaaS(ぱあす)
#jawsfesta
PaaS
#jawsfesta
PaaS
• AppFog(https://www.appfog.com)
#jawsfesta
PaaS
• AppFog(https://www.appfog.com)
• AWS Elastic Beanstalk(http://aws.amazon.com/jp/elasticbeanstalk/)
#jawsfesta
PaaS
• AppFog(https://www.appfog.com)
• AWS Elastic Beanstalk(http://aws.amazon.com/jp/elasticbeanstalk/)
• cloudControl(https://www.cloudcontrol.com)
#jawsfesta
PaaS
• AppFog(https://www.appfog.com)
• AWS Elastic Beanstalk(http://aws.amazon.com/jp/elasticbeanstalk/)
• cloudControl(https://www.cloudcontrol.com)
• DotCloud(https://www.dotcloud.com)
#jawsfesta
PaaS
• AppFog(https://www.appfog.com)
• AWS Elastic Beanstalk(http://aws.amazon.com/jp/elasticbeanstalk/)
• cloudControl(https://www.cloudcontrol.com)
• DotCloud(https://www.dotcloud.com)
• Engine Yard(http://www.engineyard.co.jp)
#jawsfesta
PaaS
• AppFog(https://www.appfog.com)
• AWS Elastic Beanstalk(http://aws.amazon.com/jp/elasticbeanstalk/)
• cloudControl(https://www.cloudcontrol.com)
• DotCloud(https://www.dotcloud.com)
• Engine Yard(http://www.engineyard.co.jp)
• Google App Engine(https://developers.google.com/appengine/)
#jawsfesta
PaaS
• AppFog(https://www.appfog.com)
• AWS Elastic Beanstalk(http://aws.amazon.com/jp/elasticbeanstalk/)
• cloudControl(https://www.cloudcontrol.com)
• DotCloud(https://www.dotcloud.com)
• Engine Yard(http://www.engineyard.co.jp)
• Google App Engine(https://developers.google.com/appengine/)
• Pagoda Box(http://pagodabox.com)
#jawsfesta
SaaS(さあす)
#jawsfesta
SaaS
#jawsfesta
SaaS
•Gmail
#jawsfesta
SaaS
•Gmail
•GitHub / Bitbucket
#jawsfesta
SaaS
•Gmail
•GitHub / Bitbucket
•サイボウズLive (https://live.cybozu.co.jp)
#jawsfesta
SaaS
•Gmail
•GitHub / Bitbucket
•サイボウズLive (https://live.cybozu.co.jp)
•SendGrid (http://sendgrid.com)
#jawsfesta
SaaS
•Gmail
•GitHub / Bitbucket
•サイボウズLive (https://live.cybozu.co.jp)
•SendGrid (http://sendgrid.com)
•New Relic (http://newrelic.com)
#jawsfesta
本には書けなかったはなし
#jawsfesta
SaaS
#jawsfesta
SaaS
•API経由で利用
#jawsfesta
SaaS
•API経由で利用
•SDKが用意されている場合が結構ある
#jawsfesta
#jawsfesta
#jawsfesta
#jawsfesta
#jawsfesta
#jawsfesta
クラウド3つの分類のはなしでした
#jawsfesta
クラウド3つの分類のはなしでした
•IaaS (Infrastructure as a Service)
#jawsfesta
クラウド3つの分類のはなしでした
•IaaS (Infrastructure as a Service)
•PaaS (Platform as a Service)
#jawsfesta
クラウド3つの分類のはなしでした
•IaaS (Infrastructure as a Service)
•PaaS (Platform as a Service)
•SaaS (Software as a Service)
#jawsfesta
ええの?わるいの?
#jawsfesta
時と場合による
#jawsfesta
考えられるメリット(かなり大雑把)
#jawsfesta
考えられるメリット(かなり大雑把)
•すぐできる
#jawsfesta
考えられるメリット(かなり大雑把)
•すぐできる
•なかったことにできる
#jawsfesta
考えられるメリット(かなり大雑把)
•すぐできる
•なかったことにできる
•コスト
#jawsfesta
考えられるデメリット(かなり大雑把)
#jawsfesta
考えられるデメリット(かなり大雑把)
•最後のところで融通がきかない
#jawsfesta
考えられるデメリット(かなり大雑把)
•最後のところで融通がきかない
•英語!
#jawsfesta
考えられるデメリット(かなり大雑把)
•最後のところで融通がきかない
•英語!
•コスト
#jawsfesta
時と場合による
#jawsfesta
まずはためしてみましょう
#jawsfesta
#jawsfesta
#jawsfesta
About Me
#jawsfesta
About Me
#jawsfesta
ためしてみるにあたって
#jawsfesta
知っておくべき周辺技術
#jawsfesta
ssh
#jawsfesta
%	
  ssh	
  root@xxx.xxx.xxx.xxx	
  	
  	
  
root@xxx.xxx.xxx.xxx's	
  
password:
#jawsfesta
%	
  ssh	
  root@xxx.xxx.xxx.xxx	
  	
  	
  
root@xxx.xxx.xxx.xxx's	
  
password:
#jawsfesta
ssh
#jawsfesta
ssh
•パスワードは使わずに
#jawsfesta
ssh
•パスワードは使わずに
•鍵のペアをつくり
#jawsfesta
ssh
•パスワードは使わずに
•鍵のペアをつくり
•ひとつは秘密
#jawsfesta
ssh
•パスワードは使わずに
•鍵のペアをつくり
•ひとつは秘密
•ひとつは相手に渡す
#jawsfesta
ssh
•パスワードは使わずに
•鍵のペアをつくり
•ひとつは秘密
•ひとつは相手に渡す
•やりとりするときに照合して
#jawsfesta
ssh
•パスワードは使わずに
•鍵のペアをつくり
•ひとつは秘密
•ひとつは相手に渡す
•やりとりするときに照合して
•アクセスしていいよ∼
#jawsfesta
#jawsfesta
#jawsfesta
#jawsfesta
#jawsfesta
コードのデプロイの1案(AWS)
#jawsfesta
コードのデプロイの1案(AWS)
•Git のリモートリポジトリを作る
#jawsfesta
コードのデプロイの1案(AWS)
•Git のリモートリポジトリを作る
•サーバとの通信はキーペアを使ったssh
#jawsfesta
コードのデプロイの1案(AWS)
•Git のリモートリポジトリを作る
•サーバとの通信はキーペアを使ったssh
•サーバ側で git pull
#jawsfesta
コードのデプロイの1案(AWS)
•Git のリモートリポジトリを作る
•サーバとの通信はキーペアを使ったssh
•サーバ側で git pull
•composer install など
#jawsfesta
コードのデプロイの1案(Pagoda Box)
#jawsfesta
コードのデプロイの1案(Pagoda Box)
•Git のリモートリポジトリを作る
#jawsfesta
コードのデプロイの1案(Pagoda Box)
•Git のリモートリポジトリを作る
•手元に git clone
#jawsfesta
コードのデプロイの1案(Pagoda Box)
•Git のリモートリポジトリを作る
•手元に git clone
•Pagoda Boxのリポジトリを git remote add
#jawsfesta
コードのデプロイの1案(Pagoda Box)
•Git のリモートリポジトリを作る
•手元に git clone
•Pagoda Boxのリポジトリを git remote add
•サーバとの通信はキーペアを使ったssh
#jawsfesta
コードのデプロイの1案(Pagoda Box)
•Git のリモートリポジトリを作る
•手元に git clone
•Pagoda Boxのリポジトリを git remote add
•サーバとの通信はキーペアを使ったssh
•サーバ側に git push
#jawsfesta
コードのデプロイの1案(Pagoda Box)
•Git のリモートリポジトリを作る
•手元に git clone
•Pagoda Boxのリポジトリを git remote add
•サーバとの通信はキーペアを使ったssh
•サーバ側に git push
•composer install など
#jawsfesta
サンプルコード
#jawsfesta
サンプルコード
•https://github.com/PHP-Engineers-Training-Book/
php_mook_sample
#jawsfesta
サンプルコード
•https://github.com/PHP-Engineers-Training-Book/
php_mook_sample
•デモします
#jawsfesta
git clone
%	
  git	
  clone	
  git@github.com:PHP-­‐Engineers-­‐Training-­‐Book/php_mook_sample.git
Cloning	
  into	
  'php_mook_sample'...
remote:	
  Counting	
  objects:	
  37,	
  done.
remote:	
  Compressing	
  objects:	
  100%	
  (33/33),	
  done.
remote:	
  Total	
  37	
  (delta	
  0),	
  reused	
  37	
  (delta	
  0)
Receiving	
  objects:	
  100%	
  (37/37),	
  1.02	
  MiB	
  |	
  491	
  KiB/s,	
  done.
#jawsfesta
#jawsfesta
▾	
  php_mook_sample/
	
  	
  ▾	
  bin/
	
  	
  	
  	
  	
  	
  phpmig*	
  -­‐>	
  /Users/omoon/Documents/php_mook_sample/vendor/davedevelopment/phpmig/bin/phpmig
	
  	
  ▾	
  config/
	
  	
  	
  	
  	
  	
  development.php
	
  	
  	
  	
  	
  	
  pagoda.php
	
  	
  ▸	
  logs/
	
  	
  ▾	
  migrations/
	
  	
  	
  	
  	
  	
  20130711105053_CreateInitialTables.php*
	
  	
  ▾	
  public/
	
  	
  	
  	
  ▸	
  assets/
	
  	
  	
  	
  	
  	
  index.php
	
  	
  ▾	
  vendor/
	
  	
  	
  	
  ▸	
  composer/
	
  	
  	
  	
  ▸	
  davedevelopment/
	
  	
  	
  	
  ▸	
  doctrine/
	
  	
  	
  	
  ▸	
  pimple/
	
  	
  	
  	
  ▸	
  psr/
	
  	
  	
  	
  ▸	
  silex/
	
  	
  	
  	
  ▸	
  symfony/
	
  	
  	
  	
  ▸	
  twig/
	
  	
  	
  	
  	
  	
  autoload.php
	
  	
  ▾	
  views/
	
  	
  	
  	
  	
  	
  index.twig
	
  	
  	
  	
  Boxfile
	
  	
  	
  	
  composer.json
	
  	
  	
  	
  composer.lock
	
  	
  	
  	
  composer.phar*
	
  	
  	
  	
  phpmig.php
#jawsfesta
	
  1	
  {
	
  2	
  	
  	
  	
  	
  "require":	
  {
	
  3	
  	
  	
  	
  	
  	
  	
  	
  	
  "silex/silex":	
  "1.*",
	
  4	
  	
  	
  	
  	
  	
  	
  	
  	
  "doctrine/dbal":	
  "2.2.*",
	
  5	
  	
  	
  	
  	
  	
  	
  	
  	
  "twig/twig":	
  "~1.8",
	
  6	
  	
  	
  	
  	
  	
  	
  	
  	
  "davedevelopment/phpmig":	
  "*"
	
  7	
  	
  	
  	
  	
  },
	
  8	
  	
  	
  	
  	
  "config":	
  {
	
  9	
  	
  	
  	
  	
  	
  	
  	
  	
  "bin-­‐dir":	
  "bin/"
10	
  	
  	
  	
  	
  }
11	
  }
#jawsfesta
composer install (1)
$	
  curl	
  -­‐s	
  http://getcomposer.org/installer	
  |	
  php
#!/usr/bin/env	
  php
All	
  settings	
  correct	
  for	
  using	
  Composer
Downloading...
Composer	
  successfully	
  installed	
  to:	
  /Users/omoon/Documents/php_mook_sample/
composer.phar
Use	
  it:	
  php	
  composer.phar
#jawsfesta
composer install (2)
%	
  php	
  composer.phar	
  install
Loading	
  composer	
  repositories	
  with	
  package	
  information
...
(略)
...
symfony/event-­‐dispatcher	
  suggests	
  installing	
  symfony/dependency-­‐injection	
  ()
symfony/http-­‐kernel	
  suggests	
  installing	
  symfony/browser-­‐kit	
  ()
symfony/http-­‐kernel	
  suggests	
  installing	
  symfony/dependency-­‐injection	
  ()
symfony/http-­‐kernel	
  suggests	
  installing	
  symfony/finder	
  ()
silex/silex	
  suggests	
  installing	
  symfony/browser-­‐kit	
  (>=2.3,<2.4-­‐dev)
silex/silex	
  suggests	
  installing	
  symfony/css-­‐selector	
  (>=2.3,<2.4-­‐dev)
silex/silex	
  suggests	
  installing	
  symfony/dom-­‐crawler	
  (>=2.3,<2.4-­‐dev)
silex/silex	
  suggests	
  installing	
  symfony/form	
  (>=2.3,<2.4-­‐dev)
Generating	
  autoload	
  files
#jawsfesta	
  1	
  <?php
	
  2	
  require	
  __DIR__	
  .	
  '/../vendor/autoload.php';
	
  3	
  
	
  4	
  $app	
  =	
  new	
  SilexApplication();
	
  5	
  
	
  6	
  $app-­‐>register(new	
  SilexProviderTwigServiceProvider(),	
  array(
	
  7	
  	
  	
  	
  	
  'twig.path'	
  =>	
  __DIR__.'/../views',
	
  8	
  ));
	
  9	
  
10	
  //	
  データベース接続情報の読込
11	
  $env	
  =	
  getenv('APP_ENV')	
  ?:	
  'development';
12	
  $config	
  =	
  require	
  __DIR__	
  .	
  "/../config/$env.php";
13	
  $app-­‐>register(new	
  SilexProviderDoctrineServiceProvider(),	
  array(
14	
  	
  	
  	
  	
  'db.options'	
  =>	
  $config['db'],
15	
  ));
16	
  
17	
  //	
  トップ画面
18	
  $app-­‐>get('/',	
  function(SilexApplication	
  $app)	
  {
19	
  	
  	
  	
  	
  $posts	
  =	
  $app['db']-­‐>fetchAll('
20	
  	
  	
  	
  	
  	
  	
  	
  	
  SELECT	
  name,	
  message,	
  unix_timestamp(created)	
  as	
  created
21	
  	
  	
  	
  	
  	
  	
  	
  	
  FROM	
  posts	
  ORDER	
  BY	
  created	
  DESC	
  LIMIT	
  5
22	
  	
  	
  	
  	
  ');
23	
  	
  	
  	
  	
  return	
  $app['twig']-­‐>render('index.twig',	
  array(
24	
  	
  	
  	
  	
  	
  	
  	
  	
  'posts'	
  =>	
  $posts,
25	
  	
  	
  	
  	
  ));
26	
  });
27	
  
28	
  //	
  投稿処理
29	
  $app-­‐>post('/speak',	
  function(SilexApplication	
  $app)	
  {
30	
  	
  	
  	
  	
  $name	
  =	
  $app['request']-­‐>get('name');
31	
  	
  	
  	
  	
  $message	
  =	
  $app['request']-­‐>get('message');
32	
  	
  	
  	
  	
  if	
  ($name	
  &&	
  $message)	
  {
33	
  	
  	
  	
  	
  	
  	
  	
  	
  $app['db']-­‐>insert('posts',	
  array('name'	
  =>	
  $name,	
  'message'	
  =>	
  $message));
34	
  	
  	
  	
  	
  }
35	
  	
  	
  	
  	
  return	
  $app-­‐>redirect('/');
36	
  });
37	
  
38	
  $app-­‐>run();
#jawsfesta	
  1	
  <?php
	
  2	
  require	
  __DIR__	
  .	
  '/../vendor/autoload.php';
	
  3	
  
	
  4	
  $app	
  =	
  new	
  SilexApplication();
	
  5	
  
	
  6	
  $app-­‐>register(new	
  SilexProviderTwigServiceProvider(),	
  array(
	
  7	
  	
  	
  	
  	
  'twig.path'	
  =>	
  __DIR__.'/../views',
	
  8	
  ));
	
  9	
  
10	
  //	
  データベース接続情報の読込
11	
  $env	
  =	
  getenv('APP_ENV')	
  ?:	
  'development';
12	
  $config	
  =	
  require	
  __DIR__	
  .	
  "/../config/$env.php";
13	
  $app-­‐>register(new	
  SilexProviderDoctrineServiceProvider(),	
  array(
14	
  	
  	
  	
  	
  'db.options'	
  =>	
  $config['db'],
15	
  ));
16	
  
17	
  //	
  トップ画面
18	
  $app-­‐>get('/',	
  function(SilexApplication	
  $app)	
  {
19	
  	
  	
  	
  	
  $posts	
  =	
  $app['db']-­‐>fetchAll('
20	
  	
  	
  	
  	
  	
  	
  	
  	
  SELECT	
  name,	
  message,	
  unix_timestamp(created)	
  as	
  created
21	
  	
  	
  	
  	
  	
  	
  	
  	
  FROM	
  posts	
  ORDER	
  BY	
  created	
  DESC	
  LIMIT	
  5
22	
  	
  	
  	
  	
  ');
23	
  	
  	
  	
  	
  return	
  $app['twig']-­‐>render('index.twig',	
  array(
24	
  	
  	
  	
  	
  	
  	
  	
  	
  'posts'	
  =>	
  $posts,
25	
  	
  	
  	
  	
  ));
26	
  });
27	
  
28	
  //	
  投稿処理
29	
  $app-­‐>post('/speak',	
  function(SilexApplication	
  $app)	
  {
30	
  	
  	
  	
  	
  $name	
  =	
  $app['request']-­‐>get('name');
31	
  	
  	
  	
  	
  $message	
  =	
  $app['request']-­‐>get('message');
32	
  	
  	
  	
  	
  if	
  ($name	
  &&	
  $message)	
  {
33	
  	
  	
  	
  	
  	
  	
  	
  	
  $app['db']-­‐>insert('posts',	
  array('name'	
  =>	
  $name,	
  'message'	
  =>	
  $message));
34	
  	
  	
  	
  	
  }
35	
  	
  	
  	
  	
  return	
  $app-­‐>redirect('/');
36	
  });
37	
  
38	
  $app-­‐>run();
#jawsfesta
	
  1	
  <?php
	
  2	
  require	
  __DIR__	
  .	
  '/../vendor/autoload.php';
	
  3	
  
	
  4	
  $app	
  =	
  new	
  SilexApplication();
	
  5	
  
	
  6	
  $app-­‐>register(new	
  SilexProviderTwigServiceProvider(),	
  array(
	
  7	
  	
  	
  	
  	
  'twig.path'	
  =>	
  __DIR__.'/../views',
	
  8	
  ));
#jawsfesta
10	
  //	
  データベース接続情報の読込
11	
  $env	
  =	
  getenv('APP_ENV')	
  ?:	
  'development';
12	
  $config	
  =	
  require	
  __DIR__	
  .	
  "/../config/$env.php";
13	
  $app-­‐>register(new	
  SilexProviderDoctrineServiceProvider(),	
  array(
14	
  	
  	
  	
  	
  'db.options'	
  =>	
  $config['db'],
15	
  ));
#jawsfesta
17	
  //	
  トップ画面
18	
  $app-­‐>get('/',	
  function(SilexApplication	
  $app)	
  {
19	
  	
  	
  	
  	
  $posts	
  =	
  $app['db']-­‐>fetchAll('
20	
  	
  	
  	
  	
  	
  	
  	
  	
  SELECT	
  name,	
  message,	
  unix_timestamp(created)	
  as	
  created
21	
  	
  	
  	
  	
  	
  	
  	
  	
  FROM	
  posts	
  ORDER	
  BY	
  created	
  DESC	
  LIMIT	
  5
22	
  	
  	
  	
  	
  ');
23	
  	
  	
  	
  	
  return	
  $app['twig']-­‐>render('index.twig',	
  array(
24	
  	
  	
  	
  	
  	
  	
  	
  	
  'posts'	
  =>	
  $posts,
25	
  	
  	
  	
  	
  ));
26	
  });
#jawsfesta
	
  1	
  {
	
  2	
  	
  	
  	
  	
  "require":	
  {
	
  3	
  	
  	
  	
  	
  	
  	
  	
  	
  "silex/silex":	
  "1.*",
	
  4	
  	
  	
  	
  	
  	
  	
  	
  	
  "doctrine/dbal":	
  "2.2.*",
	
  5	
  	
  	
  	
  	
  	
  	
  	
  	
  "twig/twig":	
  "~1.8",
	
  6	
  	
  	
  	
  	
  	
  	
  	
  	
  "davedevelopment/phpmig":	
  "*"
	
  7	
  	
  	
  	
  	
  },
	
  8	
  	
  	
  	
  	
  "config":	
  {
	
  9	
  	
  	
  	
  	
  	
  	
  	
  	
  "bin-­‐dir":	
  "bin/"
10	
  	
  	
  	
  	
  }
11	
  }
#jawsfesta
28	
  //	
  投稿処理
29	
  $app-­‐>post('/speak',	
  function(SilexApplication	
  $app)	
  {
30	
  	
  	
  	
  	
  $name	
  =	
  $app['request']-­‐>get('name');
31	
  	
  	
  	
  	
  $message	
  =	
  $app['request']-­‐>get('message');
32	
  	
  	
  	
  	
  if	
  ($name	
  &&	
  $message)	
  {
33	
  	
  	
  	
  	
  	
  	
  	
  	
  $app['db']-­‐>insert('posts',	
  array('name'	
  =>	
  $name,	
  'message'	
  =>	
  $message));
34	
  	
  	
  	
  	
  }
35	
  	
  	
  	
  	
  return	
  $app-­‐>redirect('/');
36	
  });
#jawsfesta
38	
  $app-­‐>run();
#jawsfesta
とにかくためしてみましょう
#jawsfesta
ありがとうございました

Contenu connexe

En vedette (6)

Crm 12 2010
Crm 12 2010Crm 12 2010
Crm 12 2010
 
Calend mendoza 2011meses
Calend mendoza 2011mesesCalend mendoza 2011meses
Calend mendoza 2011meses
 
PHPで文字コードとエラーメッセージをコントロールする
PHPで文字コードとエラーメッセージをコントロールするPHPで文字コードとエラーメッセージをコントロールする
PHPで文字コードとエラーメッセージをコントロールする
 
Pengantar pesawat sinar-X
Pengantar pesawat sinar-XPengantar pesawat sinar-X
Pengantar pesawat sinar-X
 
Crm 12 2010
Crm 12 2010Crm 12 2010
Crm 12 2010
 
Pesawat sinar x fluoroskopi
Pesawat sinar x fluoroskopiPesawat sinar x fluoroskopi
Pesawat sinar x fluoroskopi
 

Similaire à Dive into the Cloud with our buddy, lovely PHP!

Chiba pm#1 - ArangoDB for Perl
Chiba pm#1 - ArangoDB for PerlChiba pm#1 - ArangoDB for Perl
Chiba pm#1 - ArangoDB for Perl
Hideaki Ohno
 
ホームディレクトリに埋もれた便利なコードをさがせ!
ホームディレクトリに埋もれた便利なコードをさがせ!ホームディレクトリに埋もれた便利なコードをさがせ!
ホームディレクトリに埋もれた便利なコードをさがせ!
Yohei Fushii
 

Similaire à Dive into the Cloud with our buddy, lovely PHP! (20)

10分で作るScala開発環境 using vim
10分で作るScala開発環境 using vim10分で作るScala開発環境 using vim
10分で作るScala開発環境 using vim
 
ocamloptの全体像
ocamloptの全体像ocamloptの全体像
ocamloptの全体像
 
mbedではじめる組み込みHaskellプログラミング
mbedではじめる組み込みHaskellプログラミングmbedではじめる組み込みHaskellプログラミング
mbedではじめる組み込みHaskellプログラミング
 
明日から使えるコーディングツール
明日から使えるコーディングツール明日から使えるコーディングツール
明日から使えるコーディングツール
 
もう XAMPP / MAMP はいらない!
Vagrant で作る PHP 開発環境
もう XAMPP / MAMP はいらない!
Vagrant で作る PHP 開発環境もう XAMPP / MAMP はいらない!
Vagrant で作る PHP 開発環境
もう XAMPP / MAMP はいらない!
Vagrant で作る PHP 開発環境
 
Composer 再入門
Composer 再入門Composer 再入門
Composer 再入門
 
「Python言語」はじめの一歩 / First step of Python
「Python言語」はじめの一歩 / First step of Python「Python言語」はじめの一歩 / First step of Python
「Python言語」はじめの一歩 / First step of Python
 
Firefox Add-on SDK 入門
Firefox Add-on SDK 入門Firefox Add-on SDK 入門
Firefox Add-on SDK 入門
 
Haikara
HaikaraHaikara
Haikara
 
Chiba pm#1 - ArangoDB for Perl
Chiba pm#1 - ArangoDB for PerlChiba pm#1 - ArangoDB for Perl
Chiba pm#1 - ArangoDB for Perl
 
ホームディレクトリに埋もれた便利なコードをさがせ!
ホームディレクトリに埋もれた便利なコードをさがせ!ホームディレクトリに埋もれた便利なコードをさがせ!
ホームディレクトリに埋もれた便利なコードをさがせ!
 
Translate CakePHP Documents
Translate CakePHP DocumentsTranslate CakePHP Documents
Translate CakePHP Documents
 
PHP から Groonga を使うにはこんなコードになるよ!
PHP から Groonga を使うにはこんなコードになるよ!PHP から Groonga を使うにはこんなコードになるよ!
PHP から Groonga を使うにはこんなコードになるよ!
 
Google container builderと友だちになるまで
Google container builderと友だちになるまでGoogle container builderと友だちになるまで
Google container builderと友だちになるまで
 
使えるDjango1.4
使えるDjango1.4使えるDjango1.4
使えるDjango1.4
 
PlayFramework 2.0 Javaと WebSocketでつくる リアルタイムMVC Webアプリケーション
PlayFramework 2.0 Javaと WebSocketでつくる リアルタイムMVC WebアプリケーションPlayFramework 2.0 Javaと WebSocketでつくる リアルタイムMVC Webアプリケーション
PlayFramework 2.0 Javaと WebSocketでつくる リアルタイムMVC Webアプリケーション
 
Groovy Grails eXchage 2014 報告
Groovy Grails eXchage 2014 報告Groovy Grails eXchage 2014 報告
Groovy Grails eXchage 2014 報告
 
20150317 firefox os勉強会
20150317 firefox os勉強会20150317 firefox os勉強会
20150317 firefox os勉強会
 
Go言語入門者が Webアプリケーション を作ってみた話 #devfest #gdgkyoto
Go言語入門者が Webアプリケーション を作ってみた話 #devfest #gdgkyotoGo言語入門者が Webアプリケーション を作ってみた話 #devfest #gdgkyoto
Go言語入門者が Webアプリケーション を作ってみた話 #devfest #gdgkyoto
 
Firefox with HTML+CSS
Firefox with HTML+CSSFirefox with HTML+CSS
Firefox with HTML+CSS
 

Plus de Sotaro Omura (7)

RubyMotion もくもく会 in Osaka 活動報告
RubyMotion もくもく会 in Osaka 活動報告RubyMotion もくもく会 in Osaka 活動報告
RubyMotion もくもく会 in Osaka 活動報告
 
omoon.org の裏側 〜FuelPHP の task 活用例〜
omoon.org の裏側 〜FuelPHP の task 活用例〜omoon.org の裏側 〜FuelPHP の task 活用例〜
omoon.org の裏側 〜FuelPHP の task 活用例〜
 
プログラマ進化論
プログラマ進化論プログラマ進化論
プログラマ進化論
 
CakePHP vs FuelPHP
CakePHP vs FuelPHPCakePHP vs FuelPHP
CakePHP vs FuelPHP
 
FuelPHP + Pagoda Box
FuelPHP + Pagoda BoxFuelPHP + Pagoda Box
FuelPHP + Pagoda Box
 
FuelPHPをさわってみて
FuelPHPをさわってみてFuelPHPをさわってみて
FuelPHPをさわってみて
 
seleniumをPHPで使う
seleniumをPHPで使うseleniumをPHPで使う
seleniumをPHPで使う
 

Dernier

Dernier (12)

知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
 
論文紹介: 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
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsUtilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native Integrations
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
論文紹介: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
 
論文紹介: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...
 

Dive into the Cloud with our buddy, lovely PHP!