SlideShare une entreprise Scribd logo
1  sur  58
2014/06/28 shin1x1
PHPカンファレンス関西2014
PHPコードではなく
PHPコードの「書き方」を知る
魚を与えれば、
その日をしのぐことはできる。
!
魚の釣り方を教えれば、
一生食べていくことができる。
PHPコードを知れば、
その場をしのぐことはできる。
!
PHPコードの書き方を知れば、
一生食べていくことができる。
PHPコードを知れば、
その場をしのぐことはできる。
!
PHPコードの書き方を知れば、
5年?食べていくことができる。
PHPコードの書き方を知ろう
PHPコードの書き方を知ろう
その前に!
$ php -v!
• 黒い画面で使うPHP
• PHP コマンド打つだけ( php ) で動く
• 余計なものが無いので、PHP言語を学ぶには良い
• 今後、検証にも使うので、実行できる環境を用意
(c) 2014 Masashi Shinbara @shin1x1
コマンドライン版PHP
(c) 2014 Masashi Shinbara @shin1x1
コマンドライン版PHP
!
$ php file.php!
• PHPファイル実行
!
$ php -r 'echo "Hellon";'!
• PHPスクリプト実行
• 最近の OSX には、PHP が標準添付
• OSX 10.9 = PHP 5.4.24
• ターミナルから実行
(c) 2014 Masashi Shinbara @shin1x1
Mac
!
$ /usr/bin/php -v
!
PHP 5.4.24 (cli) (built: Jan 19 2014 21:32:15)
Copyright (c) 1997-2013 The PHP Group
Zend Engine v2.4.0, Copyright (c) 1998-2013 Zend Technologies
• windows.php.net からダウンロード
• Zip ファイルを展開する
• コマンドプロンプトで実行
(c) 2014 Masashi Shinbara @shin1x1
Windows
(c) 2014 Masashi Shinbara @shin1x1
今日のコード
http://bit.ly/phpkansai2014_B4
Are you
readey?
FizzBuzzに見る
PHPコードの書き方
(c) 2014 Masashi Shinbara @shin1x1
FizzBuzz とは
1から20までの整数を出力します。!
!
ただし、3で割り切れる場合は「Fizz」、5で割り切
れる場合は「Buzz」、3でも5でも割り切れる場合は
「FizzBuzz」を出力します。!
!
各項目を出力する際は改行コードを入れて下さい。
<?php!
for ($i = 1; $i <= 20; $i++) {!
if ($i % 3 === 0 && $i % 5 === 0) {!
echo 'FizzBuzz' . PHP_EOL;!
} else if ($i % 3 === 0) {!
echo 'Fizz' . PHP_EOL;!
} else if ($i % 5 === 0) {!
echo 'Buzz' . PHP_EOL;!
} else {!
echo $i . PHP_EOL;!
}!
}
Sample1
$ php fizzbuzz.php!
1!
2!
Fizz!
4!
Buzz!
Fizz!
7!
8!
Fizz!
Buzz!
11!
Fizz!
13!
14!
FizzBuzz!
16!
17!
Fizz!
19!
Buzz!
(c) 2014 Masashi Shinbara @shin1x1
問題を分解してみる
1から20
(c) 2014 Masashi Shinbara @shin1x1
問題を分解してみる
1から20
FizzBuzz
処理
(c) 2014 Masashi Shinbara @shin1x1
問題を分解してみる
1から20
FizzBuzz
処理
1
2
Fizz
…
(c) 2014 Masashi Shinbara @shin1x1
問題を分解してみる
1から20
FizzBuzz
処理
1
2
Fizz
…
入力 出力処理
(c) 2014 Masashi Shinbara @shin1x1
入力・処理・出力が混在
<?php!
for ($i = 1; $i <= 20; $i++) {!
if ($i % 3 === 0 && $i % 5 === 0) {!
echo 'FizzBuzz' . PHP_EOL;!
} else if ($i % 3 === 0) {!
echo 'Fizz' . PHP_EOL;!
} else if ($i % 5 === 0) {!
echo 'Buzz' . PHP_EOL;!
} else {!
echo $i . PHP_EOL;!
}!
}
(c) 2014 Masashi Shinbara @shin1x1
関数にする
• 処理 = evaluate()

FizzBuzz を返す
• 出力 = render()

改行付きで出力
<?php!
function evaluate($i) {!
if ($i % 3 === 0 && $i % 5 === 0) {!
return 'FizzBuzz';!
} else if ($i % 3 === 0) {!
return 'Fizz';!
} else if ($i % 5 === 0) {!
return 'Buzz';!
} else {!
return $i;!
}!
}!
!
function render($output) {!
echo $output . PHP_EOL;!
}!
!
for ($i = 1; $i <= 20; $i++) {!
$fizzbuzz = evaluate($i);!
render($fizzbuzz);!
}!
Sample2
<?php!
function evaluate($i) {!
if ($i % 3 === 0 && $i % 5 === 0) {!
return 'FizzBuzz';!
} else if ($i % 3 === 0) {!
return 'Fizz';!
} else if ($i % 5 === 0) {!
return 'Buzz';!
} else {!
return $i;!
}!
}!
!
function render($output) {!
echo $output . PHP_EOL;!
}!
!
for ($i = 1; $i <= 20; $i++) {!
$fizzbuzz = evaluate($i);!
render($fizzbuzz);!
}!
(c) 2014 Masashi Shinbara @shin1x1
自動テストで検証
• 目で行うチェックは間違う
• プログラムでプログラムをチェック
• 正確無比(残酷なまでに)
• 何度でも実行できる
$ php fizzbuzz.php!
1!
2!
Fizz!
4!
Buzz!
Fizz!
7!
8!
Fizz!
Buzz!
11!
Fizz!
13!
14!
Fizz!
16!
17!
Fizz!
19!
Buzz!
$ php fizzbuzz.php!
1!
2!
Fizz!
4!
Buzz!
Fizz!
7!
8!
Fizz!
Buzz!
11!
Fizz!
13!
14!
Fizz!
16!
17!
Fizz!
19!
Buzz!
15 = FizzBuzz
(c) 2014 Masashi Shinbara @shin1x1
PHPUnit
(c) 2014 Masashi Shinbara @shin1x1
PHPUnit
• PHPコードでテストを書ける
• デファクトスタンダード
• Composer でインストール
(c) 2014 Masashi Shinbara @shin1x1
PHPUnit
http://phpunit.de/manual/current/ja/installation.html
<?php!
class SampleTest extends PHPUnit_Framework_TestCase!
{!
/**!
* @test!
*/!
public function render()!
{!
$this->assertEquals('1', something());!
}!
}!
テストコード
something()の
戻り値が 1 か?
$ phpunit test/!
!
!
!
!
!
!
!
OK の時は、緑
$ phpunit test/!
!
!
!
!
!
!
!
!
!
!
!
!
!
NG の時は、赤
(c) 2014 Masashi Shinbara @shin1x1
FizzBuzzのテストを書く
• test/FizzBuzzTest.php
•fizzbuzz.php の出力をテスト
• expectedOutput()
<?php!
class FizzBuzzTest extends PHPUnit_Framework_TestCase!
{!
/**!
* @test!
*/!
public function render()!
{!
$expected = <<<EOT!
1!
2!
Fizz!
…!
Buzz!
!
EOT;!
!
$this->expectOutputString($expected);!
include __DIR__ . '/../fizzbuzz.php';!
}!
}!
出力をテスト
$ phpunit test/!
!
!
!
!
!
!
!
(c) 2014 Masashi Shinbara @shin1x1
クラスにする
• FizzBuzz クラス
• 関数をFizzBuzzクラスへ
• クラスファイルは別ファイルにする
<?php!
class FizzBuzz!
{!
public function evaluate($i)!
{!
if ($i % 3 === 0 && $i % 5 === 0) {!
return 'FizzBuzz';!
} else if ($i % 3 === 0) {!
return 'Fizz';!
} else if ($i % 5 === 0) {!
return 'Buzz';!
} else {!
return $i;!
}!
}!
!
public function render($outout)!
{!
echo $outout . PHP_EOL;!
}!
}!
<?php!
class FizzBuzz!
{!
public function evaluate($i)!
{!
if ($i % 3 === 0 && $i % 5 === 0) {!
return 'FizzBuzz';!
} else if ($i % 3 === 0) {!
return 'Fizz';!
} else if ($i % 5 === 0) {!
return 'Buzz';!
} else {!
return $i;!
}!
}!
!
public function render($outout)!
{!
echo $outout . PHP_EOL;!
}!
}!
<?php!
require_once __DIR__ . '/class/FizzBuzz.php';!
!
$obj = new FizzBuzz();!
!
for ($i = 1; $i <= 20; $i++) {!
$fizzbuzz = $obj->evaluate($i);!
$obj->render($fizzbuzz);!
}
FizzBuzz
クラスは
別ファイルに
$ phpunit test/!
!
!
!
!
!
!
!
(c) 2014 Masashi Shinbara @shin1x1
さらにクラスにまとめる
• publish() = FizzBuzz を出力
• 入力値をコンストラクタで渡す
<?php!
class FizzBuzz!
{!
protected $start;!
protected $end;!
!
public function __construct($start, $end)!
{!
$this->start = $start;!
$this->end = $end;!
}!
!
public function publish() {!
for ($i = $this->start ; $i <= $this->end ; $i++) {!
$fizzbuzz = $this->evaluate($i);!
$this->render($fizzbuzz);!
}!
}
Sample3
<?php!
class FizzBuzz!
{!
protected $start;!
protected $end;!
!
public function __construct($start, $end)!
{!
$this->start = $start;!
$this->end = $end;!
}!
!
public function publish() {!
for ($i = $this->start ; $i <= $this->end ; $i++) {!
$fizzbuzz = $this->evaluate($i);!
$this->render($fizzbuzz);!
}!
}!
!
protected function evaluate($i)!
{!
if ($i % 3 === 0 && $i % 5 === 0) {!
return 'FizzBuzz';!
} else if ($i % 3 === 0) {!
return 'Fizz';!
} else if ($i % 5 === 0) {!
return 'Buzz';!
} else {!
return $i;!
}!
}!
!
protected function render($outout)!
{!
echo $outout . PHP_EOL;!
}!
}!
<?php!
require_once __DIR__ . '/class/FizzBuzz.php';!
!
$obj = new FizzBuzz(1, 20);!
$obj->publish();!
シンプルなコードに
$ phpunit test/!
!
!
!
!
!
!
!
おさらい
(c) 2014 Masashi Shinbara @shin1x1
FizzBuzz とは
1から20までの整数を出力します。!
!
ただし、3で割り切れる場合は「Fizz」、5で割り切
れる場合は「Buzz」、3でも5でも割り切れる場合は
「FizzBuzz」を出力します。!
!
各項目を出力する際は改行コードを入れて下さい。
(c) 2014 Masashi Shinbara @shin1x1
問題を分解
1から20
FizzBuzz
処理
1
2
Fizz
…
入力 出力処理
<?php!
for ($i = 1; $i <= 20; $i++) {!
if ($i % 3 === 0 && $i % 5 === 0) {!
echo 'FizzBuzz' . PHP_EOL;!
} else if ($i % 3 === 0) {!
echo 'Fizz' . PHP_EOL;!
} else if ($i % 5 === 0) {!
echo 'Buzz' . PHP_EOL;!
} else {!
echo $i . PHP_EOL;!
}!
}
混然一体となったコード
<?php!
class FizzBuzz!
{!
protected $start;!
protected $end;!
!
public function __construct($start, $end)!
{!
$this->start = $start;!
$this->end = $end;!
}!
!
public function execute() {!
for ($i = $this->start ; $i <= $this->end ; $i++) {!
$fizzbuzz = $this->evaluate($i);!
$this->render($fizzbuzz);!
}!
}!
!
protected function evaluate($i)!
{!
if ($i % 3 === 0 && $i % 5 === 0) {!
return 'FizzBuzz';!
} else if ($i % 3 === 0) {!
return 'Fizz';!
} else if ($i % 5 === 0) {!
return 'Buzz';!
} else {!
return $i;!
}!
}!
!
protected function render($outout)!
{!
echo $outout . PHP_EOL;!
}!
}!
処理を分離
<?php!
require_once __DIR__ . '/class/FizzBuzz.php';!
!
$obj = new FizzBuzz(1, 20);!
$obj->publish();!
1から20のFizzBuzzを出力
$ phpunit test/!
!
!
!
!
!
!
!
まとめ
(c) 2014 Masashi Shinbara @shin1x1
(c) 2014 Masashi Shinbara @shin1x1
まとめ
• 問題を分割して、小さく実装
• 関数やクラスでグループ化
• 自動テストは強い味方
(c) 2014 Masashi Shinbara @shin1x1
分割は容量と用法を守って
@shin1x1
(c) 2014 Masashi Shinbara @shin1x1

Contenu connexe

Tendances

Twilio API を PHP で触ってみよう
Twilio API を PHP で触ってみようTwilio API を PHP で触ってみよう
Twilio API を PHP で触ってみようMasashi Shinbara
 
SQLによるDynamoDBの操作
SQLによるDynamoDBの操作SQLによるDynamoDBの操作
SQLによるDynamoDBの操作Sugawara Genki
 
Elixir Meetup #1 Loggerの構造と拡張
Elixir Meetup #1 Loggerの構造と拡張Elixir Meetup #1 Loggerの構造と拡張
Elixir Meetup #1 Loggerの構造と拡張Sugawara Genki
 
サバカン屋のサバ缶はre:Inventで通用したのか&すぐに使える!最新運用ネタ #re:Port2016
サバカン屋のサバ缶はre:Inventで通用したのか&すぐに使える!最新運用ネタ #re:Port2016サバカン屋のサバ缶はre:Inventで通用したのか&すぐに使える!最新運用ネタ #re:Port2016
サバカン屋のサバ缶はre:Inventで通用したのか&すぐに使える!最新運用ネタ #re:Port2016Kohei Hoshi
 
JavaScriptCore.framework の普通な使い方 #cocoa_kansai
JavaScriptCore.framework の普通な使い方 #cocoa_kansaiJavaScriptCore.framework の普通な使い方 #cocoa_kansai
JavaScriptCore.framework の普通な使い方 #cocoa_kansaiTomohiro Kumagai
 
serverless framework + AWS Lambda with Python
serverless framework + AWS Lambda with Pythonserverless framework + AWS Lambda with Python
serverless framework + AWS Lambda with Pythonmasahitojp
 
Ansible 入門 #01 (初心者向け)
Ansible 入門 #01 (初心者向け)Ansible 入門 #01 (初心者向け)
Ansible 入門 #01 (初心者向け)Taro Hirose
 
毎秒2000Requestを捌くPerl製CMSの内部構造(Debianサーバ1台にて)
毎秒2000Requestを捌くPerl製CMSの内部構造(Debianサーバ1台にて)毎秒2000Requestを捌くPerl製CMSの内部構造(Debianサーバ1台にて)
毎秒2000Requestを捌くPerl製CMSの内部構造(Debianサーバ1台にて)nabe-abk
 
Cinnamon - simple deploy tool
Cinnamon - simple deploy toolCinnamon - simple deploy tool
Cinnamon - simple deploy toolYuki Shibazaki
 
AngularFireで楽々バックエンド
AngularFireで楽々バックエンドAngularFireで楽々バックエンド
AngularFireで楽々バックエンドYosuke Onoue
 
How Smalltalker Works
How Smalltalker WorksHow Smalltalker Works
How Smalltalker WorksSho Yoshida
 
javascript を Xcode でテスト
javascript を Xcode でテストjavascript を Xcode でテスト
javascript を Xcode でテストYoichiro Sakurai
 
Java EE勉強会 開発合宿 成果発表
Java EE勉強会 開発合宿 成果発表Java EE勉強会 開発合宿 成果発表
Java EE勉強会 開発合宿 成果発表Akihiro Harai
 
OSSから学ぶSwift実践テクニック
OSSから学ぶSwift実践テクニックOSSから学ぶSwift実践テクニック
OSSから学ぶSwift実践テクニック庸介 高橋
 
これからのJavaScriptー関数型プログラミングとECMAScript6
これからのJavaScriptー関数型プログラミングとECMAScript6これからのJavaScriptー関数型プログラミングとECMAScript6
これからのJavaScriptー関数型プログラミングとECMAScript6TanUkkii
 
SmartPhone development guide with CoffeeScript + Node + HTML5 Technology, for...
SmartPhone development guide with CoffeeScript + Node + HTML5 Technology, for...SmartPhone development guide with CoffeeScript + Node + HTML5 Technology, for...
SmartPhone development guide with CoffeeScript + Node + HTML5 Technology, for...Naoya Ito
 
Lambdaによるクラウド型言語の実装
Lambdaによるクラウド型言語の実装Lambdaによるクラウド型言語の実装
Lambdaによるクラウド型言語の実装Sugawara Genki
 

Tendances (20)

Twilio API を PHP で触ってみよう
Twilio API を PHP で触ってみようTwilio API を PHP で触ってみよう
Twilio API を PHP で触ってみよう
 
Scala on Hadoop
Scala on HadoopScala on Hadoop
Scala on Hadoop
 
SQLによるDynamoDBの操作
SQLによるDynamoDBの操作SQLによるDynamoDBの操作
SQLによるDynamoDBの操作
 
Elixir Meetup #1 Loggerの構造と拡張
Elixir Meetup #1 Loggerの構造と拡張Elixir Meetup #1 Loggerの構造と拡張
Elixir Meetup #1 Loggerの構造と拡張
 
サバカン屋のサバ缶はre:Inventで通用したのか&すぐに使える!最新運用ネタ #re:Port2016
サバカン屋のサバ缶はre:Inventで通用したのか&すぐに使える!最新運用ネタ #re:Port2016サバカン屋のサバ缶はre:Inventで通用したのか&すぐに使える!最新運用ネタ #re:Port2016
サバカン屋のサバ缶はre:Inventで通用したのか&すぐに使える!最新運用ネタ #re:Port2016
 
JavaScriptCore.framework の普通な使い方 #cocoa_kansai
JavaScriptCore.framework の普通な使い方 #cocoa_kansaiJavaScriptCore.framework の普通な使い方 #cocoa_kansai
JavaScriptCore.framework の普通な使い方 #cocoa_kansai
 
serverless framework + AWS Lambda with Python
serverless framework + AWS Lambda with Pythonserverless framework + AWS Lambda with Python
serverless framework + AWS Lambda with Python
 
Ansible 入門 #01 (初心者向け)
Ansible 入門 #01 (初心者向け)Ansible 入門 #01 (初心者向け)
Ansible 入門 #01 (初心者向け)
 
毎秒2000Requestを捌くPerl製CMSの内部構造(Debianサーバ1台にて)
毎秒2000Requestを捌くPerl製CMSの内部構造(Debianサーバ1台にて)毎秒2000Requestを捌くPerl製CMSの内部構造(Debianサーバ1台にて)
毎秒2000Requestを捌くPerl製CMSの内部構造(Debianサーバ1台にて)
 
Yesod勉強会
Yesod勉強会Yesod勉強会
Yesod勉強会
 
Cinnamon - simple deploy tool
Cinnamon - simple deploy toolCinnamon - simple deploy tool
Cinnamon - simple deploy tool
 
Ansible入門
Ansible入門Ansible入門
Ansible入門
 
AngularFireで楽々バックエンド
AngularFireで楽々バックエンドAngularFireで楽々バックエンド
AngularFireで楽々バックエンド
 
How Smalltalker Works
How Smalltalker WorksHow Smalltalker Works
How Smalltalker Works
 
javascript を Xcode でテスト
javascript を Xcode でテストjavascript を Xcode でテスト
javascript を Xcode でテスト
 
Java EE勉強会 開発合宿 成果発表
Java EE勉強会 開発合宿 成果発表Java EE勉強会 開発合宿 成果発表
Java EE勉強会 開発合宿 成果発表
 
OSSから学ぶSwift実践テクニック
OSSから学ぶSwift実践テクニックOSSから学ぶSwift実践テクニック
OSSから学ぶSwift実践テクニック
 
これからのJavaScriptー関数型プログラミングとECMAScript6
これからのJavaScriptー関数型プログラミングとECMAScript6これからのJavaScriptー関数型プログラミングとECMAScript6
これからのJavaScriptー関数型プログラミングとECMAScript6
 
SmartPhone development guide with CoffeeScript + Node + HTML5 Technology, for...
SmartPhone development guide with CoffeeScript + Node + HTML5 Technology, for...SmartPhone development guide with CoffeeScript + Node + HTML5 Technology, for...
SmartPhone development guide with CoffeeScript + Node + HTML5 Technology, for...
 
Lambdaによるクラウド型言語の実装
Lambdaによるクラウド型言語の実装Lambdaによるクラウド型言語の実装
Lambdaによるクラウド型言語の実装
 

En vedette

Ansible ではじめるサーバ作業の自動化
Ansible ではじめるサーバ作業の自動化Ansible ではじめるサーバ作業の自動化
Ansible ではじめるサーバ作業の自動化Masashi Shinbara
 
VagrantユーザのためのDocker入門
VagrantユーザのためのDocker入門VagrantユーザのためのDocker入門
VagrantユーザのためのDocker入門Masashi Shinbara
 
ビルドサーバで使うDocker
ビルドサーバで使うDockerビルドサーバで使うDocker
ビルドサーバで使うDockerMasashi Shinbara
 
認証機能で学ぶ Laravel 5 アプリケーション
認証機能で学ぶ Laravel 5 アプリケーション認証機能で学ぶ Laravel 5 アプリケーション
認証機能で学ぶ Laravel 5 アプリケーションMasashi Shinbara
 
レイヤードアーキテクチャを意識した PHPアプリケーションの構築 ver2
レイヤードアーキテクチャを意識した PHPアプリケーションの構築 ver2レイヤードアーキテクチャを意識した PHPアプリケーションの構築 ver2
レイヤードアーキテクチャを意識した PHPアプリケーションの構築 ver2Masashi Shinbara
 
レイヤードアーキテクチャを意識したPHPアプリケーションの構築
レイヤードアーキテクチャを意識したPHPアプリケーションの構築レイヤードアーキテクチャを意識したPHPアプリケーションの構築
レイヤードアーキテクチャを意識したPHPアプリケーションの構築Masashi Shinbara
 
Docker introduction
Docker introductionDocker introduction
Docker introductiondotCloud
 
もう XAMPP / MAMP はいらない!
Vagrant で作る PHP 開発環境
もう XAMPP / MAMP はいらない!
Vagrant で作る PHP 開発環境もう XAMPP / MAMP はいらない!
Vagrant で作る PHP 開発環境
もう XAMPP / MAMP はいらない!
Vagrant で作る PHP 開発環境Masashi Shinbara
 
Twilio を使えば簡単にできる アプリケーションと電話/SMS連携
Twilio を使えば簡単にできる アプリケーションと電話/SMS連携Twilio を使えば簡単にできる アプリケーションと電話/SMS連携
Twilio を使えば簡単にできる アプリケーションと電話/SMS連携Masashi Shinbara
 
先取り!PHP 7 と WordPress
先取り!PHP 7 と WordPress先取り!PHP 7 と WordPress
先取り!PHP 7 と WordPressMasashi Shinbara
 
ドメイン駆動設計 基本を理解する
ドメイン駆動設計 基本を理解するドメイン駆動設計 基本を理解する
ドメイン駆動設計 基本を理解する増田 亨
 
キャラ立ちしたエンジニアになる!
キャラ立ちしたエンジニアになる!キャラ立ちしたエンジニアになる!
キャラ立ちしたエンジニアになる!Masashi Shinbara
 
レガシーコードを改善した先にあるもの、それは継続的インテグレーション
レガシーコードを改善した先にあるもの、それは継続的インテグレーションレガシーコードを改善した先にあるもの、それは継続的インテグレーション
レガシーコードを改善した先にあるもの、それは継続的インテグレーションMasanori Satoh
 
全自動Zabbix2.2&2.4
全自動Zabbix2.2&2.4全自動Zabbix2.2&2.4
全自動Zabbix2.2&2.4真乙 九龍
 
8時間耐久PHPUnitの教室
8時間耐久PHPUnitの教室8時間耐久PHPUnitの教室
8時間耐久PHPUnitの教室Yusuke Ando
 
超高速WordPress ~ PHP7 vs HHVM vs PHP5.6
超高速WordPress ~ PHP7 vs HHVM vs PHP5.6超高速WordPress ~ PHP7 vs HHVM vs PHP5.6
超高速WordPress ~ PHP7 vs HHVM vs PHP5.6Kengyu Nakamura
 
Vagrant で作る PHP 開発環境 [実践編]
Vagrant で作る PHP 開発環境 [実践編]Vagrant で作る PHP 開発環境 [実践編]
Vagrant で作る PHP 開発環境 [実践編]Masashi Shinbara
 
PHPによるユニットテスト入門
PHPによるユニットテスト入門PHPによるユニットテスト入門
PHPによるユニットテスト入門Hiromu Shioya
 
AWS初心者向けWebinar AWSクラウドでのWindowsの実行
AWS初心者向けWebinar AWSクラウドでのWindowsの実行AWS初心者向けWebinar AWSクラウドでのWindowsの実行
AWS初心者向けWebinar AWSクラウドでのWindowsの実行Amazon Web Services Japan
 

En vedette (20)

Ansible ではじめるサーバ作業の自動化
Ansible ではじめるサーバ作業の自動化Ansible ではじめるサーバ作業の自動化
Ansible ではじめるサーバ作業の自動化
 
VagrantユーザのためのDocker入門
VagrantユーザのためのDocker入門VagrantユーザのためのDocker入門
VagrantユーザのためのDocker入門
 
ビルドサーバで使うDocker
ビルドサーバで使うDockerビルドサーバで使うDocker
ビルドサーバで使うDocker
 
認証機能で学ぶ Laravel 5 アプリケーション
認証機能で学ぶ Laravel 5 アプリケーション認証機能で学ぶ Laravel 5 アプリケーション
認証機能で学ぶ Laravel 5 アプリケーション
 
レイヤードアーキテクチャを意識した PHPアプリケーションの構築 ver2
レイヤードアーキテクチャを意識した PHPアプリケーションの構築 ver2レイヤードアーキテクチャを意識した PHPアプリケーションの構築 ver2
レイヤードアーキテクチャを意識した PHPアプリケーションの構築 ver2
 
レイヤードアーキテクチャを意識したPHPアプリケーションの構築
レイヤードアーキテクチャを意識したPHPアプリケーションの構築レイヤードアーキテクチャを意識したPHPアプリケーションの構築
レイヤードアーキテクチャを意識したPHPアプリケーションの構築
 
Docker introduction
Docker introductionDocker introduction
Docker introduction
 
もう XAMPP / MAMP はいらない!
Vagrant で作る PHP 開発環境
もう XAMPP / MAMP はいらない!
Vagrant で作る PHP 開発環境もう XAMPP / MAMP はいらない!
Vagrant で作る PHP 開発環境
もう XAMPP / MAMP はいらない!
Vagrant で作る PHP 開発環境
 
Twilio を使えば簡単にできる アプリケーションと電話/SMS連携
Twilio を使えば簡単にできる アプリケーションと電話/SMS連携Twilio を使えば簡単にできる アプリケーションと電話/SMS連携
Twilio を使えば簡単にできる アプリケーションと電話/SMS連携
 
先取り!PHP 7 と WordPress
先取り!PHP 7 と WordPress先取り!PHP 7 と WordPress
先取り!PHP 7 と WordPress
 
ドメイン駆動設計 基本を理解する
ドメイン駆動設計 基本を理解するドメイン駆動設計 基本を理解する
ドメイン駆動設計 基本を理解する
 
キャラ立ちしたエンジニアになる!
キャラ立ちしたエンジニアになる!キャラ立ちしたエンジニアになる!
キャラ立ちしたエンジニアになる!
 
Composer 再入門
Composer 再入門Composer 再入門
Composer 再入門
 
レガシーコードを改善した先にあるもの、それは継続的インテグレーション
レガシーコードを改善した先にあるもの、それは継続的インテグレーションレガシーコードを改善した先にあるもの、それは継続的インテグレーション
レガシーコードを改善した先にあるもの、それは継続的インテグレーション
 
全自動Zabbix2.2&2.4
全自動Zabbix2.2&2.4全自動Zabbix2.2&2.4
全自動Zabbix2.2&2.4
 
8時間耐久PHPUnitの教室
8時間耐久PHPUnitの教室8時間耐久PHPUnitの教室
8時間耐久PHPUnitの教室
 
超高速WordPress ~ PHP7 vs HHVM vs PHP5.6
超高速WordPress ~ PHP7 vs HHVM vs PHP5.6超高速WordPress ~ PHP7 vs HHVM vs PHP5.6
超高速WordPress ~ PHP7 vs HHVM vs PHP5.6
 
Vagrant で作る PHP 開発環境 [実践編]
Vagrant で作る PHP 開発環境 [実践編]Vagrant で作る PHP 開発環境 [実践編]
Vagrant で作る PHP 開発環境 [実践編]
 
PHPによるユニットテスト入門
PHPによるユニットテスト入門PHPによるユニットテスト入門
PHPによるユニットテスト入門
 
AWS初心者向けWebinar AWSクラウドでのWindowsの実行
AWS初心者向けWebinar AWSクラウドでのWindowsの実行AWS初心者向けWebinar AWSクラウドでのWindowsの実行
AWS初心者向けWebinar AWSクラウドでのWindowsの実行
 

Similaire à PHPコードではなく PHPコードの「書き方」を知る

Modern PHP Programming @ PFI Seminar
Modern PHP Programming @ PFI SeminarModern PHP Programming @ PFI Seminar
Modern PHP Programming @ PFI SeminarSotaro Karasawa
 
よいことも悪いこともぜんぶPHPが教えてくれた
よいことも悪いこともぜんぶPHPが教えてくれたよいことも悪いこともぜんぶPHPが教えてくれた
よいことも悪いこともぜんぶPHPが教えてくれたMoriyoshi Koizumi
 
GMO TECHNOLOGY BOOT CAMP2015(PHP編)
GMO TECHNOLOGY BOOT CAMP2015(PHP編)GMO TECHNOLOGY BOOT CAMP2015(PHP編)
GMO TECHNOLOGY BOOT CAMP2015(PHP編)Arata Fujimura
 
「スピード」と「品質」を実現するPHP開発チームの取り組み~AngularJS+FuelPHP+AspectMock~
「スピード」と「品質」を実現するPHP開発チームの取り組み~AngularJS+FuelPHP+AspectMock~「スピード」と「品質」を実現するPHP開発チームの取り組み~AngularJS+FuelPHP+AspectMock~
「スピード」と「品質」を実現するPHP開発チームの取り組み~AngularJS+FuelPHP+AspectMock~leverages_event
 
Local php-100828 2
Local php-100828 2Local php-100828 2
Local php-100828 2Akio Ishida
 
PHPBLT#6 PHPの未来に入るかもしれない機能の紹介
PHPBLT#6 PHPの未来に入るかもしれない機能の紹介PHPBLT#6 PHPの未来に入るかもしれない機能の紹介
PHPBLT#6 PHPの未来に入るかもしれない機能の紹介sters
 
知ってるようで意外と知らないPHPの便利関数
知ってるようで意外と知らないPHPの便利関数知ってるようで意外と知らないPHPの便利関数
知ってるようで意外と知らないPHPの便利関数Wataru Terada
 
Mojoliciousをウェブ制作現場で使ってみてる
Mojoliciousをウェブ制作現場で使ってみてるMojoliciousをウェブ制作現場で使ってみてる
Mojoliciousをウェブ制作現場で使ってみてるjamadam
 
最近の PHP の話
最近の PHP の話最近の PHP の話
最近の PHP の話y-uti
 
Symfony2 How to create your Bundle
Symfony2 How to create your BundleSymfony2 How to create your Bundle
Symfony2 How to create your Bundlechobi e
 
プログラマ進化論
プログラマ進化論プログラマ進化論
プログラマ進化論Sotaro Omura
 
Perl 非同期プログラミング
Perl 非同期プログラミングPerl 非同期プログラミング
Perl 非同期プログラミングlestrrat
 
Hack/HHVM 入門
Hack/HHVM 入門Hack/HHVM 入門
Hack/HHVM 入門y-uti
 
WPerのWPerによるWPerのためのPHP入門
WPerのWPerによるWPerのためのPHP入門WPerのWPerによるWPerのためのPHP入門
WPerのWPerによるWPerのためのPHP入門Muyuu Fujita
 

Similaire à PHPコードではなく PHPコードの「書き方」を知る (20)

Modern PHP Programming @ PFI Seminar
Modern PHP Programming @ PFI SeminarModern PHP Programming @ PFI Seminar
Modern PHP Programming @ PFI Seminar
 
よいことも悪いこともぜんぶPHPが教えてくれた
よいことも悪いこともぜんぶPHPが教えてくれたよいことも悪いこともぜんぶPHPが教えてくれた
よいことも悪いこともぜんぶPHPが教えてくれた
 
GMO TECHNOLOGY BOOT CAMP2015(PHP編)
GMO TECHNOLOGY BOOT CAMP2015(PHP編)GMO TECHNOLOGY BOOT CAMP2015(PHP編)
GMO TECHNOLOGY BOOT CAMP2015(PHP編)
 
「スピード」と「品質」を実現するPHP開発チームの取り組み~AngularJS+FuelPHP+AspectMock~
「スピード」と「品質」を実現するPHP開発チームの取り組み~AngularJS+FuelPHP+AspectMock~「スピード」と「品質」を実現するPHP開発チームの取り組み~AngularJS+FuelPHP+AspectMock~
「スピード」と「品質」を実現するPHP開発チームの取り組み~AngularJS+FuelPHP+AspectMock~
 
Local php-100828 2
Local php-100828 2Local php-100828 2
Local php-100828 2
 
PHPBLT#6 PHPの未来に入るかもしれない機能の紹介
PHPBLT#6 PHPの未来に入るかもしれない機能の紹介PHPBLT#6 PHPの未来に入るかもしれない機能の紹介
PHPBLT#6 PHPの未来に入るかもしれない機能の紹介
 
php.js
php.jsphp.js
php.js
 
知ってるようで意外と知らないPHPの便利関数
知ってるようで意外と知らないPHPの便利関数知ってるようで意外と知らないPHPの便利関数
知ってるようで意外と知らないPHPの便利関数
 
Mojoliciousをウェブ制作現場で使ってみてる
Mojoliciousをウェブ制作現場で使ってみてるMojoliciousをウェブ制作現場で使ってみてる
Mojoliciousをウェブ制作現場で使ってみてる
 
最近の PHP の話
最近の PHP の話最近の PHP の話
最近の PHP の話
 
Symfony2 How to create your Bundle
Symfony2 How to create your BundleSymfony2 How to create your Bundle
Symfony2 How to create your Bundle
 
PHP7を魔改造した話
PHP7を魔改造した話PHP7を魔改造した話
PHP7を魔改造した話
 
プログラマ進化論
プログラマ進化論プログラマ進化論
プログラマ進化論
 
Cakephp api
Cakephp apiCakephp api
Cakephp api
 
Perl 非同期プログラミング
Perl 非同期プログラミングPerl 非同期プログラミング
Perl 非同期プログラミング
 
WCO2012「PHP教室」
WCO2012「PHP教室」WCO2012「PHP教室」
WCO2012「PHP教室」
 
Okinawapm #1
Okinawapm #1Okinawapm #1
Okinawapm #1
 
Hack/HHVM 入門
Hack/HHVM 入門Hack/HHVM 入門
Hack/HHVM 入門
 
Silex入門
Silex入門Silex入門
Silex入門
 
WPerのWPerによるWPerのためのPHP入門
WPerのWPerによるWPerのためのPHP入門WPerのWPerによるWPerのためのPHP入門
WPerのWPerによるWPerのためのPHP入門
 

Plus de Masashi Shinbara

日本語消えたスライド
日本語消えたスライド日本語消えたスライド
日本語消えたスライドMasashi Shinbara
 
Twilio入門 -Web アプリ編-
Twilio入門 -Web アプリ編-Twilio入門 -Web アプリ編-
Twilio入門 -Web アプリ編-Masashi Shinbara
 
いまどきのPHP開発現場 -2015年秋-
いまどきのPHP開発現場 -2015年秋-いまどきのPHP開発現場 -2015年秋-
いまどきのPHP開発現場 -2015年秋-Masashi Shinbara
 
How to learn Laravel5 application from Authentication
How to learn Laravel5 application from AuthenticationHow to learn Laravel5 application from Authentication
How to learn Laravel5 application from AuthenticationMasashi Shinbara
 
Vagrant で PHP 開発環境を作る ハンズオン
Vagrant で PHP 開発環境を作る ハンズオンVagrant で PHP 開発環境を作る ハンズオン
Vagrant で PHP 開発環境を作る ハンズオンMasashi Shinbara
 
Vagrant を Web開発環境に使う
Vagrant を Web開発環境に使うVagrant を Web開発環境に使う
Vagrant を Web開発環境に使うMasashi Shinbara
 
Kansai PHP Users Group 2012年活動報告
Kansai PHP Users Group 2012年活動報告 Kansai PHP Users Group 2012年活動報告
Kansai PHP Users Group 2012年活動報告 Masashi Shinbara
 
10分で分かる最近のCakePHP
10分で分かる最近のCakePHP10分で分かる最近のCakePHP
10分で分かる最近のCakePHPMasashi Shinbara
 

Plus de Masashi Shinbara (10)

日本語消えたスライド
日本語消えたスライド日本語消えたスライド
日本語消えたスライド
 
Twilio入門 -Web アプリ編-
Twilio入門 -Web アプリ編-Twilio入門 -Web アプリ編-
Twilio入門 -Web アプリ編-
 
いまどきのPHP開発現場 -2015年秋-
いまどきのPHP開発現場 -2015年秋-いまどきのPHP開発現場 -2015年秋-
いまどきのPHP開発現場 -2015年秋-
 
How to learn Laravel5 application from Authentication
How to learn Laravel5 application from AuthenticationHow to learn Laravel5 application from Authentication
How to learn Laravel5 application from Authentication
 
Vagrant で PHP 開発環境を作る ハンズオン
Vagrant で PHP 開発環境を作る ハンズオンVagrant で PHP 開発環境を作る ハンズオン
Vagrant で PHP 開発環境を作る ハンズオン
 
Vagrant を Web開発環境に使う
Vagrant を Web開発環境に使うVagrant を Web開発環境に使う
Vagrant を Web開発環境に使う
 
PHP 5.5 Zend OPcache
PHP 5.5 Zend OPcachePHP 5.5 Zend OPcache
PHP 5.5 Zend OPcache
 
サーバの防災訓練
サーバの防災訓練サーバの防災訓練
サーバの防災訓練
 
Kansai PHP Users Group 2012年活動報告
Kansai PHP Users Group 2012年活動報告 Kansai PHP Users Group 2012年活動報告
Kansai PHP Users Group 2012年活動報告
 
10分で分かる最近のCakePHP
10分で分かる最近のCakePHP10分で分かる最近のCakePHP
10分で分かる最近のCakePHP
 

PHPコードではなく PHPコードの「書き方」を知る