SlideShare a Scribd company logo
1 of 51
新標準PSRに学ぶ
 きれいなPHP

  Fukuoka.php / Yusuke Ando (@yando)
Fukuoka.php / Yusuke Ando (@yando)
福岡でのボランティア急募!
  Fukuoka.php / Yusuke Ando (@yando)
Fukuoka.php / Yusuke Ando (@yando)
こんな経験はありませんか?




  Fukuoka.php / Yusuke Ando (@yando)
同僚のコードが読みづらい

  Fukuoka.php / Yusuke Ando (@yando)
タブ派とスペース派の凄惨な勢力争い

    Fukuoka.php / Yusuke Ando (@yando)
ネーミングでもめる

 Fukuoka.php / Yusuke Ando (@yando)
コーディング規約が必要!




 Fukuoka.php / Yusuke Ando (@yando)
Fukuoka.php / Yusuke Ando (@yando)
PEAR                      Zend


                俺々

Symfony                     CakePHP




   Fukuoka.php / Yusuke Ando (@yando)
たくさんあって
どれがいいかわからない



 Fukuoka.php / Yusuke Ando (@yando)
PSR




Fukuoka.php / Yusuke Ando (@yando)
PSRはPHP figが策定した
    今風なPHPの
  コーディング規約!


  Fukuoka.php / Yusuke Ando (@yando)
www.php-fig.org




Fukuoka.php / Yusuke Ando (@yando)
豪華なメンバー陣
Nate Abele: Lithium                      Robert Lemke: FLOW3
Nils Adermann: phpBB                     Larry Masters: CakePHP, CakePHP 2
Brett Bieber: PEAR, PEAR2                Ryan Parman: Amazon Web Services
Guilherme Blanco: Doctrine, Doctrine2,   SDK
et al.                                   Evert Pot: SabreDAV
Jordi Boggiano: Composer, Packagist      Fabien Potencier: Symfony, Symfony2
Karma Dordrak: Zikula                    Andre Romcke: eZ Publish
Paul Dragoonis: PPI, PPI2                Paul Scott: Chisimba, C4
William Durand: Propel, Propel 2         Phil Sturgeon: PyroCMS
Andrew Eddie: Joomla                     Kris Wallsmith: Assetic, Buzz
Cal Evans: the community at large        Matthew Weier O'Phinney: Zend
Larry Garfield: Drupal                    Framework, Zend Framework 2
Paul M. Jones: Solar Framework, Aura     David Zülke: Agavi
Project



                  Fukuoka.php / Yusuke Ando (@yando)
PSRとは?

•Proposing a Standards Recommendation
 (標準勧告提案)
•PSR-0
 オートロードの為のファイル名とクラス名の規約
•PSR-1
 共有コードの高レベルな連携性を目的にした規約
•PSR-2
 標準化されたコードを目指すスタイルガイド

      内容毎にレベル分けがされている
          Fukuoka.php / Yusuke Ando (@yando)
PSR-0
オートロードの為のファイルとクラスの規約



    Fukuoka.php / Yusuke Ando (@yando)
PSR-0

•名前空間はベンダー名から必ず始める
•名前空間の区切りはディレクトリ階層になる
•クラス名内のアンダースコアはディレクトリ階層になる
•名前空間とクラス名に.phpをつけてファイル名とする
•名前空間とクラス名の大文字小文字については不問



  PHP5.3と名前空間にスマートに対応

     Fukuoka.php / Yusuke Ando (@yando)
PSR-0の例




対象は名前空間、クラス名、ファイル名のみ

    Fukuoka.php / Yusuke Ando (@yando)
autoloadの実装例




require_once地獄とさようなら
  Fukuoka.php / Yusuke Ando (@yando)
PSR-1
相互に機能を連携させる為の規約



 Fukuoka.php / Yusuke Ando (@yando)
File

•PHPコードは長い <?php ?> タグか <?= ?> を使わなけれ
ばならない。それ以外のタグを使ってはならない
•PHPコードはBOMなしUTF-8を使う
•ファイルはクラスや関数などの定義を行いその他の副作用
があってはならない。または副作用のある処理を行うが定
義と処理を同時に行なってはならない




        Fukuoka.php / Yusuke Ando (@yando)
副作用のダメな例




Fukuoka.php / Yusuke Ando (@yando)
副作用のセーフな例




Fukuoka.php / Yusuke Ando (@yando)
名前空間とクラス

•PSR-0に準拠する
•クラス名はStudlyCapsで宣言する
•PHP5.3以降では必ず名前空間を使う



•PHP5.2以前の場合は擬似名前空間を使う



       Fukuoka.php / Yusuke Ando (@yando)
定数、プロパティ、メソッド
•定数は全て大文字記述しアンダースコアで単語を区切る




•プロパティについては敢えて言及していない
 StudlyCaps camelCase under_score など
•メソッドは camelCaseで宣言する



          Fukuoka.php / Yusuke Ando (@yando)
PSR-2
標準化されたPHPコードの為の規約



  Fukuoka.php / Yusuke Ando (@yando)
基本

•PSR-1に準拠
•全てのPHPファイルは改行にLFを使わなければならない
•ファイルの末尾は一行の空行で終わらなければならない
•ファイルがPHPのみの場合 ?> は省略せねばならない




      Fukuoka.php / Yusuke Ando (@yando)
Line

•ハードリミットは設けない
•ソフトリミットは120文字で、警告の対象
•行は80文字以内であるべき、越える場合は複数行に分割
•行の末尾に空白を付けてはならない
•可読性の為に空行を加えてもよい
•1行に複数のステートメントがあってはならない




      Fukuoka.php / Yusuke Ando (@yando)
インデント



•インデントはスペース4つ、タブを使ってはならない




      Fukuoka.php / Yusuke Ando (@yando)
キーワード



•キーワードは小文字で記述しなければならない
•true false null は小文字で記述しなければならない




        Fukuoka.php / Yusuke Ando (@yando)
名前空間
•名前空間の定義の後には空行を1行置く
•use宣言は名前空間宣言の後に置く
•宣言ごとに1つづつのuseを使う
•useのブロックの後に空行を1行置く




     Fukuoka.php / Yusuke Ando (@yando)
クラス
•extendsとimplementsはクラス定義と同じ行
•開きブレースは単独の行に、閉じブレースは内容の次の行




      Fukuoka.php / Yusuke Ando (@yando)
プロパティ
•全てのプロパティにアクセス権を設定
•varキーワードは使ってはならない
•1ステートメントに複数のプロパティを含めない
•アンダースコアを前置してアクセス権を表現しない




      Fukuoka.php / Yusuke Ando (@yando)
メソッド
•全てのメソッドにアクセス権を設定
•アンダースコアを前置してアクセス権を表現しない
•メソッド名宣言の後に空白を置かない、括弧の前後にス
ペースを置かない、ブレースは独立した行にする




     Fukuoka.php / Yusuke Ando (@yando)
メソッドの引数
•引数リストのカンマの前に空白を置かない
•カンマの後には空白を1つ置く
•デフォルトのある引数はリストの最後に置く




     Fukuoka.php / Yusuke Ando (@yando)
メソッドの引数2
•引数リストを複数行にしてインデントしてもよい
•その場合は閉じ括弧と開きブレースを同じ行に




      Fukuoka.php / Yusuke Ando (@yando)
abstract final static
•abstract finalアクセス権の前に置く
•staticはアクセス権の後に置く




        Fukuoka.php / Yusuke Ando (@yando)
メソッドと関数の呼出
•メソッド名と括弧の間に空白を置かない
•括弧の後に空白を置かない
•カンマの前に空白を置かない カンマの後に空白を置く
•引数リストを複数行にインデントして分割もできる




     Fukuoka.php / Yusuke Ando (@yando)
制御構造
•キーワードの後に空白を1つ置く
•開き括弧の後と閉じ括弧の前に空白を置かない
•閉じ括弧と開きブレースの間には空白を1つ置く
•メインのブロックは1レベルインデントする
•閉じブレースはメインのブロックの直後




      Fukuoka.php / Yusuke Ando (@yando)
if elseif else
•else elseif とブレースは同じ行
•else ifではなく elseif を使うべき




         Fukuoka.php / Yusuke Ando (@yando)
switch case
•caseはswitchからインデント 内容やbreakもインデント
•意図的に何もしないcaseにはコメント




       Fukuoka.php / Yusuke Ando (@yando)
while do while
•特筆事項なし




      Fukuoka.php / Yusuke Ando (@yando)
for foreach
•特筆事項なし




      Fukuoka.php / Yusuke Ando (@yando)
try catch
•特筆事項なし




      Fukuoka.php / Yusuke Ando (@yando)
クロージャ
•function の後に空白を1つ置く useの前後に空白
•開き括弧の後、閉じ括弧の前に空白を置かない
•カンマの前に空白を置かない、カンマの後に空白を置く




      Fukuoka.php / Yusuke Ando (@yando)
クロージャ2
•引数、変数のリストを複数行にしてもよい




      Fukuoka.php / Yusuke Ando (@yando)
その他
•下記の点についてはPSRー2はあえて言及していない
 •グローバル変数と定数の定義
 •関数の定義
 •演算と代入
 •間の行の配置
 •コメントとドキュメントブロック
 •クラスのプリフィクスとサフィックス
 •ベストプラクティス



      Fukuoka.php / Yusuke Ando (@yando)
おまけ
•PSR-2では著名なプロジェクトへの統計調査が行われた




      Fukuoka.php / Yusuke Ando (@yando)
質問?




Fukuoka.php / Yusuke Ando (@yando)

More Related Content

What's hot

オブジェクト指向できていますか?
オブジェクト指向できていますか?オブジェクト指向できていますか?
オブジェクト指向できていますか?
Moriharu Ohzu
 
メタプログラミングって何だろう
メタプログラミングって何だろうメタプログラミングって何だろう
メタプログラミングって何だろう
Kota Mizushima
 
オブジェクト指向エクササイズのススメ
オブジェクト指向エクササイズのススメオブジェクト指向エクササイズのススメ
オブジェクト指向エクササイズのススメ
Yoji Kanno
 
ジェネリクスの基礎と クラス設計への応用
ジェネリクスの基礎とクラス設計への応用ジェネリクスの基礎とクラス設計への応用
ジェネリクスの基礎と クラス設計への応用
nagise
 
LogbackからLog4j 2への移行によるアプリケーションのスループット改善 ( JJUG CCC 2021 Fall )
LogbackからLog4j 2への移行によるアプリケーションのスループット改善 ( JJUG CCC 2021 Fall ) LogbackからLog4j 2への移行によるアプリケーションのスループット改善 ( JJUG CCC 2021 Fall )
LogbackからLog4j 2への移行によるアプリケーションのスループット改善 ( JJUG CCC 2021 Fall )
Hironobu Isoda
 

What's hot (20)

Codeigniter4の比較と検証
Codeigniter4の比較と検証Codeigniter4の比較と検証
Codeigniter4の比較と検証
 
オブジェクト指向できていますか?
オブジェクト指向できていますか?オブジェクト指向できていますか?
オブジェクト指向できていますか?
 
Pythonとパッケージングと私
Pythonとパッケージングと私Pythonとパッケージングと私
Pythonとパッケージングと私
 
メタプログラミングって何だろう
メタプログラミングって何だろうメタプログラミングって何だろう
メタプログラミングって何だろう
 
PlaySQLAlchemy: SQLAlchemy入門
PlaySQLAlchemy: SQLAlchemy入門PlaySQLAlchemy: SQLAlchemy入門
PlaySQLAlchemy: SQLAlchemy入門
 
クラウド環境下におけるAPIリトライ設計
クラウド環境下におけるAPIリトライ設計クラウド環境下におけるAPIリトライ設計
クラウド環境下におけるAPIリトライ設計
 
関数型プログラミングのデザインパターンひとめぐり
関数型プログラミングのデザインパターンひとめぐり関数型プログラミングのデザインパターンひとめぐり
関数型プログラミングのデザインパターンひとめぐり
 
レイヤードアーキテクチャを意識したPHPアプリケーションの構築
レイヤードアーキテクチャを意識したPHPアプリケーションの構築レイヤードアーキテクチャを意識したPHPアプリケーションの構築
レイヤードアーキテクチャを意識したPHPアプリケーションの構築
 
オブジェクト指向エクササイズのススメ
オブジェクト指向エクササイズのススメオブジェクト指向エクササイズのススメ
オブジェクト指向エクササイズのススメ
 
導入から 10 年、PHP の trait は滅びるべきなのか その適切な使いどころと弱点、将来について
導入から 10 年、PHP の trait は滅びるべきなのか その適切な使いどころと弱点、将来について導入から 10 年、PHP の trait は滅びるべきなのか その適切な使いどころと弱点、将来について
導入から 10 年、PHP の trait は滅びるべきなのか その適切な使いどころと弱点、将来について
 
Visual C++で使えるC++11
Visual C++で使えるC++11Visual C++で使えるC++11
Visual C++で使えるC++11
 
関数プログラミング入門
関数プログラミング入門関数プログラミング入門
関数プログラミング入門
 
ドメイン駆動設計のための Spring の上手な使い方
ドメイン駆動設計のための Spring の上手な使い方ドメイン駆動設計のための Spring の上手な使い方
ドメイン駆動設計のための Spring の上手な使い方
 
ゲーム開発者のための C++11/C++14
ゲーム開発者のための C++11/C++14ゲーム開発者のための C++11/C++14
ゲーム開発者のための C++11/C++14
 
SpringBootTest入門
SpringBootTest入門SpringBootTest入門
SpringBootTest入門
 
yieldとreturnの話
yieldとreturnの話yieldとreturnの話
yieldとreturnの話
 
モダン PHP テクニック 12 選 ―PsalmとPHP 8.1で今はこんなこともできる!―
モダン PHP テクニック 12 選 ―PsalmとPHP 8.1で今はこんなこともできる!―モダン PHP テクニック 12 選 ―PsalmとPHP 8.1で今はこんなこともできる!―
モダン PHP テクニック 12 選 ―PsalmとPHP 8.1で今はこんなこともできる!―
 
ジェネリクスの基礎と クラス設計への応用
ジェネリクスの基礎とクラス設計への応用ジェネリクスの基礎とクラス設計への応用
ジェネリクスの基礎と クラス設計への応用
 
F#入門 ~関数プログラミングとは何か~
F#入門 ~関数プログラミングとは何か~F#入門 ~関数プログラミングとは何か~
F#入門 ~関数プログラミングとは何か~
 
LogbackからLog4j 2への移行によるアプリケーションのスループット改善 ( JJUG CCC 2021 Fall )
LogbackからLog4j 2への移行によるアプリケーションのスループット改善 ( JJUG CCC 2021 Fall ) LogbackからLog4j 2への移行によるアプリケーションのスループット改善 ( JJUG CCC 2021 Fall )
LogbackからLog4j 2への移行によるアプリケーションのスループット改善 ( JJUG CCC 2021 Fall )
 

Viewers also liked

Composer による依存管理 と Packagist によるライブラリの公開
Composer による依存管理 と Packagist によるライブラリの公開Composer による依存管理 と Packagist によるライブラリの公開
Composer による依存管理 と Packagist によるライブラリの公開
Shogo Kawahara
 
第7回こども病院移転計画調査委員会資料
第7回こども病院移転計画調査委員会資料第7回こども病院移転計画調査委員会資料
第7回こども病院移転計画調査委員会資料
f_kodomo
 
Twilio を使えば簡単にできる アプリケーションと電話/SMS連携
Twilio を使えば簡単にできる アプリケーションと電話/SMS連携Twilio を使えば簡単にできる アプリケーションと電話/SMS連携
Twilio を使えば簡単にできる アプリケーションと電話/SMS連携
Masashi Shinbara
 
レイヤードアーキテクチャを意識した PHPアプリケーションの構築 ver2
レイヤードアーキテクチャを意識した PHPアプリケーションの構築 ver2レイヤードアーキテクチャを意識した PHPアプリケーションの構築 ver2
レイヤードアーキテクチャを意識した PHPアプリケーションの構築 ver2
Masashi Shinbara
 

Viewers also liked (19)

PSR-1 と PSR-2 を 5分でざっくり理解する
PSR-1 と PSR-2 を5分でざっくり理解するPSR-1 と PSR-2 を5分でざっくり理解する
PSR-1 と PSR-2 を 5分でざっくり理解する
 
Composer による依存管理 と Packagist によるライブラリの公開
Composer による依存管理 と Packagist によるライブラリの公開Composer による依存管理 と Packagist によるライブラリの公開
Composer による依存管理 と Packagist によるライブラリの公開
 
先取り!PHP 7 と WordPress
先取り!PHP 7 と WordPress先取り!PHP 7 と WordPress
先取り!PHP 7 と WordPress
 
第7回こども病院移転計画調査委員会資料
第7回こども病院移転計画調査委員会資料第7回こども病院移転計画調査委員会資料
第7回こども病院移転計画調査委員会資料
 
東京から沖縄に移住したからこそわかるクラウドとコミュニティの有り難み 〜人はもっと自由になれる〜
東京から沖縄に移住したからこそわかるクラウドとコミュニティの有り難み 〜人はもっと自由になれる〜東京から沖縄に移住したからこそわかるクラウドとコミュニティの有り難み 〜人はもっと自由になれる〜
東京から沖縄に移住したからこそわかるクラウドとコミュニティの有り難み 〜人はもっと自由になれる〜
 
【ハンズオン】初めてのUnityで作る「3D野球盤」_"8a1"20150204発表資料
【ハンズオン】初めてのUnityで作る「3D野球盤」_"8a1"20150204発表資料【ハンズオン】初めてのUnityで作る「3D野球盤」_"8a1"20150204発表資料
【ハンズオン】初めてのUnityで作る「3D野球盤」_"8a1"20150204発表資料
 
Play jjug2012spring
Play jjug2012springPlay jjug2012spring
Play jjug2012spring
 
Laravelのeloquent だけ入れた話
Laravelのeloquent だけ入れた話Laravelのeloquent だけ入れた話
Laravelのeloquent だけ入れた話
 
Twilio を使えば簡単にできる アプリケーションと電話/SMS連携
Twilio を使えば簡単にできる アプリケーションと電話/SMS連携Twilio を使えば簡単にできる アプリケーションと電話/SMS連携
Twilio を使えば簡単にできる アプリケーションと電話/SMS連携
 
traitを使って楽したい話
traitを使って楽したい話traitを使って楽したい話
traitを使って楽したい話
 
NetBeans、FuelPHP と過ごしたこの 2 ヶ月
NetBeans、FuelPHP と過ごしたこの 2 ヶ月NetBeans、FuelPHP と過ごしたこの 2 ヶ月
NetBeans、FuelPHP と過ごしたこの 2 ヶ月
 
はじめて作ったアプリが10,000ダウンロード達成したから自慢する
はじめて作ったアプリが10,000ダウンロード達成したから自慢するはじめて作ったアプリが10,000ダウンロード達成したから自慢する
はじめて作ったアプリが10,000ダウンロード達成したから自慢する
 
SwiftとReactNativeで似たようなUIを作った際の記録
SwiftとReactNativeで似たようなUIを作った際の記録SwiftとReactNativeで似たようなUIを作った際の記録
SwiftとReactNativeで似たようなUIを作った際の記録
 
DMMの闇に触れた話
DMMの闇に触れた話DMMの闇に触れた話
DMMの闇に触れた話
 
Electronで社内ツールを作ったお話
Electronで社内ツールを作ったお話Electronで社内ツールを作ったお話
Electronで社内ツールを作ったお話
 
Trait とは? その使い道を考えてみる
Trait とは? その使い道を考えてみるTrait とは? その使い道を考えてみる
Trait とは? その使い道を考えてみる
 
レイヤードアーキテクチャを意識した PHPアプリケーションの構築 ver2
レイヤードアーキテクチャを意識した PHPアプリケーションの構築 ver2レイヤードアーキテクチャを意識した PHPアプリケーションの構築 ver2
レイヤードアーキテクチャを意識した PHPアプリケーションの構築 ver2
 
Docker ComposeでMastodonが必要なものを梱包する話
Docker ComposeでMastodonが必要なものを梱包する話Docker ComposeでMastodonが必要なものを梱包する話
Docker ComposeでMastodonが必要なものを梱包する話
 
コンテンツ作りの三原則
コンテンツ作りの三原則コンテンツ作りの三原則
コンテンツ作りの三原則
 

More from Yusuke Ando

DevOpsを実現する為のChef実践テクニック Chef12対応版
DevOpsを実現する為のChef実践テクニック Chef12対応版DevOpsを実現する為のChef実践テクニック Chef12対応版
DevOpsを実現する為のChef実践テクニック Chef12対応版
Yusuke Ando
 
Testing your app with Selenium on Travis CI
Testing your app with Selenium on Travis CITesting your app with Selenium on Travis CI
Testing your app with Selenium on Travis CI
Yusuke Ando
 
Travis CIで実現するPHPアプリの自動テスト
Travis CIで実現するPHPアプリの自動テストTravis CIで実現するPHPアプリの自動テスト
Travis CIで実現するPHPアプリの自動テスト
Yusuke Ando
 
Shimokita.Unity Detonatorで爆発
Shimokita.Unity Detonatorで爆発Shimokita.Unity Detonatorで爆発
Shimokita.Unity Detonatorで爆発
Yusuke Ando
 
Shimokita.Unity RigidbodyとColliderで衝突
Shimokita.Unity RigidbodyとColliderで衝突Shimokita.Unity RigidbodyとColliderで衝突
Shimokita.Unity RigidbodyとColliderで衝突
Yusuke Ando
 
Webプログラマの為のUnity入門
Webプログラマの為のUnity入門Webプログラマの為のUnity入門
Webプログラマの為のUnity入門
Yusuke Ando
 
ゴールデンウィークに最適な学習コンテンツ
ゴールデンウィークに最適な学習コンテンツゴールデンウィークに最適な学習コンテンツ
ゴールデンウィークに最適な学習コンテンツ
Yusuke Ando
 
Travis CIですぐに始める継続的インテグレーション
Travis CIですぐに始める継続的インテグレーションTravis CIですぐに始める継続的インテグレーション
Travis CIですぐに始める継続的インテグレーション
Yusuke Ando
 
ブログやサイトのJekyllへの移行
ブログやサイトのJekyllへの移行ブログやサイトのJekyllへの移行
ブログやサイトのJekyllへの移行
Yusuke Ando
 
PHPとTravis CIでブラウザテスト
PHPとTravis CIでブラウザテストPHPとTravis CIでブラウザテスト
PHPとTravis CIでブラウザテスト
Yusuke Ando
 
Shimokita.Unity パリの街をユニティちゃんが駆ける
Shimokita.Unity パリの街をユニティちゃんが駆けるShimokita.Unity パリの街をユニティちゃんが駆ける
Shimokita.Unity パリの街をユニティちゃんが駆ける
Yusuke Ando
 
最近のCandyCane - PHP版Redmineでタスク管理を始めよう
最近のCandyCane - PHP版Redmineでタスク管理を始めよう最近のCandyCane - PHP版Redmineでタスク管理を始めよう
最近のCandyCane - PHP版Redmineでタスク管理を始めよう
Yusuke Ando
 

More from Yusuke Ando (20)

ダイナミック広告の改善と拡大
ダイナミック広告の改善と拡大ダイナミック広告の改善と拡大
ダイナミック広告の改善と拡大
 
DevOpsを実現するChef活用テクニック
DevOpsを実現するChef活用テクニックDevOpsを実現するChef活用テクニック
DevOpsを実現するChef活用テクニック
 
DevOpsを実現する為のChef実践テクニック Chef12対応版
DevOpsを実現する為のChef実践テクニック Chef12対応版DevOpsを実現する為のChef実践テクニック Chef12対応版
DevOpsを実現する為のChef実践テクニック Chef12対応版
 
Testing your app with Selenium on Travis CI
Testing your app with Selenium on Travis CITesting your app with Selenium on Travis CI
Testing your app with Selenium on Travis CI
 
Travis CIで実現するPHPアプリの自動テスト
Travis CIで実現するPHPアプリの自動テストTravis CIで実現するPHPアプリの自動テスト
Travis CIで実現するPHPアプリの自動テスト
 
Shimokita.Unity Detonatorで爆発
Shimokita.Unity Detonatorで爆発Shimokita.Unity Detonatorで爆発
Shimokita.Unity Detonatorで爆発
 
Shimokita.Unity RigidbodyとColliderで衝突
Shimokita.Unity RigidbodyとColliderで衝突Shimokita.Unity RigidbodyとColliderで衝突
Shimokita.Unity RigidbodyとColliderで衝突
 
Webプログラマの為のUnity入門
Webプログラマの為のUnity入門Webプログラマの為のUnity入門
Webプログラマの為のUnity入門
 
ゴールデンウィークに最適な学習コンテンツ
ゴールデンウィークに最適な学習コンテンツゴールデンウィークに最適な学習コンテンツ
ゴールデンウィークに最適な学習コンテンツ
 
Travis CIですぐに始める継続的インテグレーション
Travis CIですぐに始める継続的インテグレーションTravis CIですぐに始める継続的インテグレーション
Travis CIですぐに始める継続的インテグレーション
 
ブログやサイトのJekyllへの移行
ブログやサイトのJekyllへの移行ブログやサイトのJekyllへの移行
ブログやサイトのJekyllへの移行
 
PHPとTravis CIでブラウザテスト
PHPとTravis CIでブラウザテストPHPとTravis CIでブラウザテスト
PHPとTravis CIでブラウザテスト
 
Shimokita.Unity パリの街をユニティちゃんが駆ける
Shimokita.Unity パリの街をユニティちゃんが駆けるShimokita.Unity パリの街をユニティちゃんが駆ける
Shimokita.Unity パリの街をユニティちゃんが駆ける
 
Dev opschef
Dev opschefDev opschef
Dev opschef
 
Paa s and oss
Paa s and ossPaa s and oss
Paa s and oss
 
New relic
New relicNew relic
New relic
 
Engine Yardで作る NetCommons3のクラウド環境
Engine Yardで作る NetCommons3のクラウド環境Engine Yardで作る NetCommons3のクラウド環境
Engine Yardで作る NetCommons3のクラウド環境
 
Engine Yard Cloud
Engine Yard CloudEngine Yard Cloud
Engine Yard Cloud
 
最近のCandyCane - PHP版Redmineでタスク管理を始めよう
最近のCandyCane - PHP版Redmineでタスク管理を始めよう最近のCandyCane - PHP版Redmineでタスク管理を始めよう
最近のCandyCane - PHP版Redmineでタスク管理を始めよう
 
PHPの教室「foreachを極める」
PHPの教室「foreachを極める」PHPの教室「foreachを極める」
PHPの教室「foreachを極める」
 

新標準PSRに学ぶきれいなPHP