2016年11月3日(祝)、大田区産業プラザPiOにて開催された国内最大のPHPイベント「PHPカンファレンス2016」。レバテックフリーランスでは、カンファレンスセッションの登壇者のひとり・和田卓人氏にインタビューを実施しました。 テスト駆動開発の先駆者として知られる和田氏ですが、今回の講演テーマは「PHP7で堅牢なコードを書く-例外処理、表明プログラミング、契約による設計」。あえてテスト以外のテーマを設定した理由をはじめ、PHPの優位性や今注目している言語、初心者エンジニアへのアドバイスなど、幅広くお話を伺ってきました。 <この記事の要約> 1.PHPの良い点は、ゆるふわな言語に見せかけて堅牢なコードも書けるところ。悪い点は、覚えることが多くて難しいところ。 2. テストを書いていればコードの品質が高いわけではない。また、テストが書けないくらい問題を抱えたコードでも、中から改善してい

2020-07-01 ZOZOTOWNのインハウス広告運用を支援するデータと仕組みの話 BigQuery データ マーケティング 広告本記事では、ZOZOのマーケティング部門の広告運用のインハウス化に伴って、これまで取り組んできた広告データの収集と活用、その仕組みにフォーカスして事例をご紹介します。 ZOZOTOWNのインハウス広告運用を支援するデータと仕組みの話 2020-06-29 【オンラインMeetup イベントレポート】ZOZOテクノロジーズの大規模データ活用 イベントレポートGCP Elasticsearch 検索機械学習 こんにちは、ZOZOテクノロジーズ CTO室の池田(@ikenyal)です。 ZOZOテクノロジーズでは、6/22にZOZOTechnologies Meetup -ZOZOテクノロジーズの大規模データ活用-を開催しました。 zozotech-inc
PHPUnitの設定 続いて、PHPUnitからAspectMockを使うための設定をします。まず、backupGlobalsを必ずfalseにします。phpunit.xml <phpunitbootstrap="bootstrap.php" backupGlobals="false"> そして、tearDown()メソッドで登録したテストダブルを削除するようにします。 TestCase <?php use AspectMock\Test as test; abstract class TestCase extends \PHPUnit_Framework_TestCase { protected function tearDown() { test::clean(); // 登録したテストダブルを削除 } } AspectMockの使い方 それでは、AspectMockの使い方を見て
はじめまして、室内ならTシャツで問題ない技術推進室の篠崎です。 先日、piccaglianiさんのブログでAspectMockを知りました。 ちょうど私が対応しようとしていた課題にぴったしのフレームワークだったので少し書かせていただきます。 昔からあるコード弊社では以下のようなコードがまだまだいらっしゃいます。(実際はこんな少ない行数ではありません) がっつしArticle_Query、Apiクラスに依存している状態です。 私が対応しようとしていた課題は「このような昔からあるテストのないコード、いわゆるレガシーコードに対してユニットテスト(PHPUnit)を作成していく」でした。 ※そしてリファクタリングへ ユニットテストで何を確認したいのか?ユニットテストで確認したいのはSample_ServiceクラスのgetAllArticlesメソッドの処理です。 Article_Query::f
<?php $message = sprintf( "HTTP/%s %s %s", $response->getVersion(), $response->getCode(), $response->getMessage() ); throw new HttpException($message, $response->getCode()); <?php class HttpException extends \Exception { /** * 例外を作成して投げるメソッド * * @param $response HttpResponse * @throws HttpException */ public static function raise(HttpResponse $response) { $message = sprintf( "HTTP/%s %s %s", $resp

PHPなどのさまざまな言語のオープンソースプロジェクトのCI環境として利用されているTravis CIでWebベースのテストを実行してみました。 通常は純粋なコードベースのユニットテストを実行する事が多いかと思いますが、CMSやEコマースエンジンなどオープンソースで配布し、インストールして使うようなソフトウェアではWebブラウザベースでの機能テストを自動化したいというニーズがあるでしょう。Travis CIにはfirefoxがインストールされておりブラウザベースのテストが出来る事は知っていたのですが、今回年末年始の宿題的にテストを実行する為の設定をひと通り行ってみました。 説明を抜きにして動作が見たい方はGitHubとTravis CIへどうぞ yandod/candycane https://github.com/yandod/candycane candycane on Trav

classTwitterClient { public function tweet($message) { return true; } } $hoge = newTwitterClient(); $hoge->tweet('大心なう'); // trueが返る class ClientContainerTest extendsPHPUnit_Framework_TestCase { public function test_モックを書いてみる() { $hoge = $this->getMock('TwitterClient', array('tweet')); $hoge->expects($this->any()) ->method('tweet') ->will($this->returnValue(true)); $hoge->tweet('大心なう'); // true

テスト駆動開発の巨匠・和田卓人さんからの『現在時刻とロケールに依存するテスト』問題をPHPメンターズの後藤秀宣さんが解答してくださいました! この記事は、その後藤さんによる解答コードの公開と解説記事になります!! by CodeIQ運営事務局PHPメンターズの後藤です。 和田卓人さん出題の『現在時刻とロケールに依存するテスト』問題をPHPを使ってオブジェクト指向のアプローチで解答してみました。 ※問題文については、和田卓人さんの解説記事を参照にしてください。 https://codeiq.jp/magazine/2013/11/1475/ 解答例は次の環境で作成しています。PHP 5.5.4PHPUnit 3.7 Composer サンプルコードのリポジトリをGitHubにて公開しています。コミットログなど合わせてご参照ください。(解説中にも各コミットへのリンクを貼ってあります) g


依存性注入 (Dependency Injection) は、クラスを単体テスト可能にするために使われるテクニックです。 これが意識されていないが故に単体テストが全くできないコードを少なからず見かけます。 単体テストの際には必ず必要になる知識なので、共有しておきます。 単体テストができないよくあるケース 例えば以下のメソッドは単体テストケースが書けません。 class Foo { public function play() { $bar = new Bar(); if ($bar->getSomething() === 1) { return true; } return false; } } Foo::play() 内で外部クラス Bar をインスタンス化しています。つまり Foo::play() メソッドは Bar に依存しており、単体テストができません。 試しにテストケースを書くと
ようこそ 時代遅れの情報がウェブ上にあふれている。そんな情報を見たPHP初心者は戸惑ってしまうだろう。そして、まずい手法やまずいコードが広まってしまう。 そんなのはもうやめよう。PHP: The Right Way は気軽に読めるクイックリファレンスだ。PHPの一般的なコーディング規約、 ウェブ上のよくできたチュートリアルへのリンク、そして現時点でのベストプラクティスだと執筆者が考えていることをまとめた。 大事なのは、PHPを使うための正式なお作法など存在しない ってこと。 このサイトの狙いは、はじめてPHP を使うことになった開発者に、いろんなトピックを紹介すること。 経験豊富なプロの人にとっても、これまで深く考えることなく使ってきた内容について、新鮮な見方を伝えられるだろう。 このサイトは、決して「どのツールを使えばいいのか」を教えるものじゃない。 いくつかの選択肢を示して、それぞ
Welcome There’s a lot of outdated information on the Web that leads newPHP users astray, propagating bad practices and insecure code.PHP: The Right Way is an easy-to-read, quick reference forPHP popular coding standards, links to authoritative tutorials around the Web, and what the contributors consider to be best practices at present. There is no canonical way to usePHP. This websiteaims to


はてなグループの終了日を2020年1月31日(金)に決定しました 以下のエントリの通り、今年末を目処にはてなグループを終了予定である旨をお知らせしておりました。 2019年末を目処に、はてなグループの提供を終了する予定です -はてなグループ日記 このたび、正式に終了日を決定いたしましたので、以下の通りご確認ください。 終了日: 2020年1月31日(金) エクスポート希望申請期限:2020年1月31日(金) 終了日以降は、はてなグループの閲覧および投稿は行えません。日記のエクスポートが必要な方は以下の記事にしたがって手続きをしてください。はてなグループに投稿された日記データのエクスポートについて -はてなグループ日記 ご利用のみなさまにはご迷惑をおかけいたしますが、どうぞよろしくお願いいたします。 2020-06-25 追記はてなグループ日記のエクスポートデータは2020年2月28
ついに仕事で触っているPHP のコードがほんの一部のテストとは言え CI に乗った。 正直これは感動ものだ。 今回はここに至るまでの長大な物語をダイジェストでお届けしようと思う。 有史以前PHP 3 で作られた 1 URI : 1 スクリプト + 共通関数 時代 当然のようにPHP とHTML とSQL 混在まともなテスト環境がなかったので似た環境をどうにか作るパスとか絶対で埋め込みまくりなのでとりあえず共通のパス情報の変数に差し替えまくりテスト環境用のコードと本番環境用のコードが違うオール目視 つらかった。 みなさんの予想通りバージョン管理なんてものは存在しなかった。 素朴なPHPを徐々にclassにclass になればphpdoc を書きやすくなるいきなり実行しないようにすればテストしやすくなる これは後から気づいたんだけど、結局フロントはロクに自動テストできてない一時期 p
人間とウェブの未来(旧) 「ウェブの歴史は人類の歴史の繰り返し」という観点から色々勉強しています。2014年までの人間とウェブの未来の旧ブログです。 前回の記事「Apache 2.4.1のスループット評価(旧ApacheとNginxとのベンチマーク比較)」を非常に多くの方に見て頂いており、こういう情報が重要なんだなぁ、としみじみ思った。多くのオープンソースを使わしてもらっているので、こういう形でフィードバックしていけたらよいな。参考にして頂いてありがとうございます。 今回は、前回の記事に続き、個人的にも非常に興味のあるApache2.4.1の「動的コンテンツのスループット」がどの程度なのかを評価したいと思う。 ※いくつかの検証を追加したのと、細かい部分で比較の仕方がよろしくなかったので修正を加えました。 ■ 修正と追記箇所(2012年3月2日) ・PHPのバージョンを5.3.10に統一(思

PHPUnitのテストケースで書き換えた値の復帰について。 テストケースでテストを記述する際に、スーパーグローバルやクラス変数を書き換えることがあるのですが、これらの値を書き換えたまま、別のテストを実行すると書き換えられた状態でテストが実行されるので、それらの値に依存した処理があるとテストが通らないことがあります。PHPUnitでは、そういったテストをまたがって影響を及ぼすであろう値の保存、復帰を自動で行なってくれる機能があります。 スーパーグローバル デフォルトでは、各テストメソッドを実行する前に、スーパーグローバル変数($_ENV, $_POST, $_GET, $_COOKIE, $_SERVER, $_FILES, $_REQUEST)の値をが保存されており、テストメソッド終了後にそれらの値がスーパーグローバル変数へ復帰されます。 これらの処理はsetUp()/tearDown(
PHP5.4 Advent Calendar 2011の7日目です。昨日は@madapajaさんの「PHP5.4+ で開発が行われている BEAR.Sunday フレームワークを動かしてみる」でした。 さてさて皆さん、ユニットテストしてますか?PHPもテストのライブラリが充実してきており、カバレッジ100%に情熱を燃やしている方も多いことでしょう。 ユニットテストで困るのが、private/protectedメソッドです。外から呼べないので、普通の方法ではテストできません。(protectedは適当なダミーのサブクラスを作ってそこからテストできますが、ちょっと面倒です。) まあ当然です。外から呼べないようにprivateにしているので、簡単に呼べたら逆に困るわけです。しかしながら、privateメソッドも外から呼んでテストできた方が開発ははかどるでしょう。この記事ではPHPでprivat


この訳について CakePHPのコアデベロッパーの中心となる、mark storyがCakePHP2.0のテストのフレームワークをSimpleTestからPHPUnitに変更するということについて、経緯とその有用性、移行についての悩みどころについて詳細な記事を書いてくれました。 元記事: http://mark-story.com/posts/view/cakephp-and-phpunit この訳はその記事の対訳にあたります。 注意点 翻訳の記事をブログに掲載する許可は得ています。英語力に不安がある人が翻訳してますので、英語が読める方は元記事を読むことを強く推奨します。 (一応)個人的な記事ということで、ラフな口語訳をしていますが、割とフォーマルな英文だったので失敗してるかもしれません。許して! 対訳 CakePHP 2.0 の開発が進行中であるということについての最近のBakeryの

リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く