SlideShare ist ein Scribd-Unternehmen logo
1 von 130
Downloaden Sie, um offline zu lesen
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
ありがとうございました

Weitere ähnliche Inhalte

Andere mochten auch

PHPで文字コードとエラーメッセージをコントロールする
PHPで文字コードとエラーメッセージをコントロールするPHPで文字コードとエラーメッセージをコントロールする
PHPで文字コードとエラーメッセージをコントロールするSotaro Omura
 
Pengantar pesawat sinar-X
Pengantar pesawat sinar-XPengantar pesawat sinar-X
Pengantar pesawat sinar-Xsunarya afaf
 
Pesawat sinar x fluoroskopi
Pesawat sinar x fluoroskopiPesawat sinar x fluoroskopi
Pesawat sinar x fluoroskopisunarya afaf
 

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

Ähnlich wie Dive into the Cloud with our buddy, lovely PHP!

10分で作るScala開発環境 using vim
10分で作るScala開発環境 using vim10分で作るScala開発環境 using vim
10分で作るScala開発環境 using vimGeorge Okada
 
ocamloptの全体像
ocamloptの全体像ocamloptの全体像
ocamloptの全体像Kiwamu Okabe
 
mbedではじめる組み込みHaskellプログラミング
mbedではじめる組み込みHaskellプログラミングmbedではじめる組み込みHaskellプログラミング
mbedではじめる組み込みHaskellプログラミングKiwamu Okabe
 
明日から使えるコーディングツール
明日から使えるコーディングツール明日から使えるコーディングツール
明日から使えるコーディングツールTomokazu Kiyohara
 
もう XAMPP / MAMP はいらない!
Vagrant で作る PHP 開発環境
もう XAMPP / MAMP はいらない!
Vagrant で作る PHP 開発環境もう XAMPP / MAMP はいらない!
Vagrant で作る PHP 開発環境
もう XAMPP / MAMP はいらない!
Vagrant で作る PHP 開発環境Masashi Shinbara
 
「Python言語」はじめの一歩 / First step of Python
「Python言語」はじめの一歩 / First step of Python「Python言語」はじめの一歩 / First step of Python
「Python言語」はじめの一歩 / First step of PythonTakanori Suzuki
 
Firefox Add-on SDK 入門
Firefox Add-on SDK 入門Firefox Add-on SDK 入門
Firefox Add-on SDK 入門Shoot Morii
 
Chiba pm#1 - ArangoDB for Perl
Chiba pm#1 - ArangoDB for PerlChiba pm#1 - ArangoDB for Perl
Chiba pm#1 - ArangoDB for PerlHideaki Ohno
 
ホームディレクトリに埋もれた便利なコードをさがせ!
ホームディレクトリに埋もれた便利なコードをさがせ!ホームディレクトリに埋もれた便利なコードをさがせ!
ホームディレクトリに埋もれた便利なコードをさがせ!Yohei Fushii
 
Translate CakePHP Documents
Translate CakePHP DocumentsTranslate CakePHP Documents
Translate CakePHP DocumentsNorio Suzuki
 
PHP から Groonga を使うにはこんなコードになるよ!
PHP から Groonga を使うにはこんなコードになるよ!PHP から Groonga を使うにはこんなコードになるよ!
PHP から Groonga を使うにはこんなコードになるよ!do_aki
 
Google container builderと友だちになるまで
Google container builderと友だちになるまでGoogle container builderと友だちになるまで
Google container builderと友だちになるまでlestrrat
 
使えるDjango1.4
使えるDjango1.4使えるDjango1.4
使えるDjango1.4hirokiky
 
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アプリケーションKazuhiro Hara
 
Groovy Grails eXchage 2014 報告
Groovy Grails eXchage 2014 報告Groovy Grails eXchage 2014 報告
Groovy Grails eXchage 2014 報告Tsuyoshi Yamamoto
 
20150317 firefox os勉強会
20150317 firefox os勉強会20150317 firefox os勉強会
20150317 firefox os勉強会Naoki Sekiguchi
 
Go言語入門者が Webアプリケーション を作ってみた話 #devfest #gdgkyoto
Go言語入門者が Webアプリケーション を作ってみた話 #devfest #gdgkyotoGo言語入門者が Webアプリケーション を作ってみた話 #devfest #gdgkyoto
Go言語入門者が Webアプリケーション を作ってみた話 #devfest #gdgkyotoShoot Morii
 
Firefox with HTML+CSS
Firefox with HTML+CSSFirefox with HTML+CSS
Firefox with HTML+CSSdynamis
 

Ähnlich wie 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
 

Mehr von Sotaro Omura

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

Mehr von 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で使う
 

Kürzlich hochgeladen

クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfクラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfFumieNakayama
 
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?akihisamiyanaga1
 
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineerYuki Kikuchi
 
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfAWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfFumieNakayama
 
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)UEHARA, Tetsutaro
 
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案sugiuralab
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)Hiroshi Tomioka
 
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...博三 太田
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NTT DATA Technology & Innovation
 

Kürzlich hochgeladen (9)

クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfクラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
 
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
 
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
 
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfAWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
 
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
 
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
 
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
 

Dive into the Cloud with our buddy, lovely PHP!