SlideShare une entreprise Scribd logo
1  sur  88
Télécharger pour lire hors ligne
8時間耐久
PHPUnitの教室

 8時間耐久PHP classのクラス / Yusuke Ando (@yando)
  8時間耐久PHPUnitの教室 / Yusuke Ando (@yando)
テキスト




8時間耐久PHPUnitの教室 / Yusuke Ando (@yando)
http://tech.a-listers.jp/
8時間耐久PHPUnitの教室 / Yusuke Ando (@yando)
http://blog.livedoor.jp/goroyasu/archives/4196098.html

       8時間耐久PHPUnitの教室 / Yusuke Ando (@yando)
本日の対象者
  PHPを使っている
関数やクラスでコーディング
 コードの修正が最近辛い
子育てブログ ころぐの作者



8時間耐久PHPUnitの教室 / Yusuke Ando (@yando)
PHPUnitを
 使った開発を
実践の基礎知識を
  学びます
8時間耐久PHPUnitの教室 / Yusuke Ando (@yando)
本日のメニュー

 PHPUnitの無い開発
  PHPUnitの基礎
 テストしづらいコード
   より快適な手法

8時間耐久PHPUnitの教室 / Yusuke Ando (@yando)
PHPUnitの無い開発
8時間耐久PHPUnitの教室 / Yusuke Ando (@yando)
原始的な開発の流れ

    1.コードを書く
 2.ブラウザで動作確認
    3.コードを直す
       2に戻る


8時間耐久PHPUnitの教室 / Yusuke Ando (@yando)
書いて




8時間耐久PHPUnitの教室 / Yusuke Ando (@yando)
動かす




8時間耐久PHPUnitの教室 / Yusuke Ando (@yando)
書いて




8時間耐久PHPUnitの教室 / Yusuke Ando (@yando)
動かす




8時間耐久PHPUnitの教室 / Yusuke Ando (@yando)
原始的な開発の流れ

コードの記述と動作確認
 のループを繰り返す



   ごく自然な行為
8時間耐久PHPUnitの教室 / Yusuke Ando (@yando)
しかし

8時間耐久PHPUnitの教室 / Yusuke Ando (@yando)
プログラム
  は
複雑化する
8時間耐久PHPUnitの教室 / Yusuke Ando (@yando)
ライブラリ化
                                   ページ




                                 ライブラリ




8時間耐久PHPUnitの教室 / Yusuke Ando (@yando)
原始的な開発の流れ

                       修正 修正
    ページ                ライブラリ
                            修正
                      修正 修正


   動作確認

修正ファイルと確認対象が
  一致しなくなる
8時間耐久PHPUnitの教室 / Yusuke Ando (@yando)
複数ページから共用
                                   ページ




                                 ライブラリ



8時間耐久PHPUnitの教室 / Yusuke Ando (@yando)
きつくなってきた
       ページ
動作確認
                            修正 修正
       ページ                  ライブラリ
                                 修正
動作確認                       修正 修正

       ページ
動作確認

        確認対象が増える
  8時間耐久PHPUnitの教室 / Yusuke Ando (@yando)
ページも複雑化
        入力
動作確認
                            修正 修正
        確認                  ライブラリ
                                 修正
動作確認                       修正 修正

       登録完了
動作確認


  ステップに手間がかかる
  8時間耐久PHPUnitの教室 / Yusuke Ando (@yando)
ライブラリが複雑化
                              修正  修正
                               ライブラリ
                                    修正
                             修正 修正


        ページ                     ライブラリ
動作確認




       直感的でない結びつき
   8時間耐久PHPUnitの教室 / Yusuke Ando (@yando)
開発中だったら?
                              修正  修正
                               ライブラリ
                                    修正
                             修正 修正


        ページ                       未完成
動作確認




         動作確認できない
   8時間耐久PHPUnitの教室 / Yusuke Ando (@yando)
複雑化したプログラム

   コードの記述と
 ブラウザでの動作確認



       手間の増大
8時間耐久PHPUnitの教室 / Yusuke Ando (@yando)
それなら


     動作確認しないで
     ひたすら開発?



8時間耐久PHPUnitの教室 / Yusuke Ando (@yando)
それは


ヤバイ
8時間耐久PHPUnitの教室 / Yusuke Ando (@yando)
テストの種類
•ユニットテスト(単体テスト)
 クラスや関数を単体のテスト
•結合テスト
 クラスや関数を組み合わせたテスト
•ファンクショナルテスト(機能テスト)
 システムの機能の動作のテスト

ブラウザでの動作確認は機能テスト

 8時間耐久PHPUnitの教室 / Yusuke Ando (@yando)
ユニットテスト




  ユニットテストツールを学ぶ事で
複雑なプログラムを快適にテストできる

 8時間耐久PHPUnitの教室 / Yusuke Ando (@yando)
PHPUnitの基礎
8時間耐久PHPUnitの教室 / Yusuke Ando (@yando)
PHPUnit

定番ユニットテストツール
Sebastian Bergman氏作
   圧倒的な多機能さ
   各種OSSも利用中
PHPならこれで間違い無し

8時間耐久PHPUnitの教室 / Yusuke Ando (@yando)
PHPUnitの基礎


   インストール
テストケース作成・実行
ケース内でのテクニック



8時間耐久PHPUnitの教室 / Yusuke Ando (@yando)
インストール
8時間耐久PHPUnitの教室 / Yusuke Ando (@yando)
インストール

  PEAR形式で提供
コマンドラインからのイン
   ストールが必要

pear config-set auto_discover 1
pear install pear.phpunit.de/PHPUnit


  8時間耐久PHPUnitの教室 / Yusuke Ando (@yando)
PEAR?
PEAR(PHP Extension and Application Repository)
はPHPで利用する事ができるライブラリ(パッケージ)を
提供しているサービス。 PEARはPHPで書かれたライ
ブラリを提供しているが、C言語で書かれた拡張ライブ
ラリ(extension)を提供するPECLというサービスも存
在する。
インストールが完了すると、pearという同名のコマン
ドが利用できるようになっている。



    8時間耐久PHPUnitの教室 / Yusuke Ando (@yando)
PEARのインストール先
•通常のインストール
 /usr/lib/php/PHPUnit
•個人用 (要Pyrus)
 /home/ユーザ名/ 内
•プロジェクト用 (要Pyrus)
 プロジェクト内/vendor/ 内

通常のインストールは複数共存に問題
 8時間耐久PHPUnitの教室 / Yusuke Ando (@yando)
これからはPyrus




pyrus.pharをプロジェクト内に配置
 (約10MBあるので時間かかる)

8時間耐久PHPUnitの教室 / Yusuke Ando (@yando)
Pyrusでのセットアップ例



                                    適宜変更




通常のインストールは複数共存に問題

 8時間耐久PHPUnitの教室 / Yusuke Ando (@yando)
準備OK




8時間耐久PHPUnitの教室 / Yusuke Ando (@yando)
テストケース作成・実行
 8時間耐久PHPUnitの教室 / Yusuke Ando (@yando)
テストケース
•テストを行う場合に書くプログラム
•テスト対象のコードを実行
•実行結果をアサートメソッドで確認
•場合分けに応じてアサートを追加
•phpunitコマンドで実行される

PHPUnitを使う=テストケースを書く

 8時間耐久PHPUnitの教室 / Yusuke Ando (@yando)
テストケースの例
                             PHPUnitのクラスを継承




                           テストはtest○○という名前




                              テスト対象を実行




                           結果が想定と等しいかを検査


8時間耐久PHPUnitの教室 / Yusuke Ando (@yando)
テストケースの実行


./vendor/bin/phpunit [テストケース名]
        又は
./vendor/bin/phpunit [ディレクトリ名]

ディレクトリを指定すると配下のテスト
    ケースを全て実行する

   8時間耐久PHPUnitの教室 / Yusuke Ando (@yando)
テストケースの実行

                               .が1つのテスト




                            テスト項目を文字で表示



                            x がOKの意味(英語的)



8時間耐久PHPUnitの教室 / Yusuke Ando (@yando)
エラーがある場合
                            Fがエラー




                         失敗した検査の内容




8時間耐久PHPUnitの教室 / Yusuke Ando (@yando)
--colors で色つき




8時間耐久PHPUnitの教室 / Yusuke Ando (@yando)
PHPUnitのイメージ
          テストケース

                                修正 修正
          テストケース                ライブラリ
                                     修正
phpunit                        修正 修正
          テストケース


  ライブラリをコマンド1つで
   高速にテストを実行可能
      8時間耐久PHPUnitの教室 / Yusuke Ando (@yando)
練習

•Tankiyoクラスのテスト
•テストケースを作成
 tests/TankiyoTest.php
•各メソッドへテストを記述
•テストを実行
 8時間耐久PHPUnitの教室 / Yusuke Ando (@yando)
補足
各テストケースはテスト対象
のコードをrequireする必要
がある
autoload機構を使わない場
合は適宜 require_once

8時間耐久PHPUnitの教室 / Yusuke Ando (@yando)
テストの重要点

•テストケースは幅広く
•テストはこまめに実行
•テスト成功なら
 同条件での挙動は同一
•思い切ったコード変更へ!
 8時間耐久PHPUnitの教室 / Yusuke Ando (@yando)
ケース内でのテクニック
 8時間耐久PHPUnitの教室 / Yusuke Ando (@yando)
setUp / tearDown

•テストメソッドの前後に実
行される処理を記述できる
•前処理や後始末が必要な場
合に利用する
•各テストの共通部分を統合
8時間耐久PHPUnitの教室 / Yusuke Ando (@yando)
setUp / tearDownの例


                              重複した初期化処理




8時間耐久PHPUnitの教室 / Yusuke Ando (@yando)
setUp / tearDownの例


                           テストメソッドの前後に実
                            行される処理になる




8時間耐久PHPUnitの教室 / Yusuke Ando (@yando)
アサーション

•実行結果を検査する
assertEquals()だけでかな
り生きていける
•他のメソッドは応用的
•種類は増え続けている
 8時間耐久PHPUnitの教室 / Yusuke Ando (@yando)
超豊富なアサーション
assertArrayHasKey()                  assertLessThanOrEqual()
assertClassHasAttribute()            assertNull()
assertClassHasStaticAttribute()      assertObjectHasAttribute()
assertContains()                     assertRegExp()
assertContainsOnly()                 assertStringMatchesFormat()
assertCount()                        assertStringMatchesFormatFile()
assertEmpty()                        assertSame()
assertEqualXMLStructure()            assertSelectCount()
assertEquals()                       assertSelectEquals()
assertFalse()                        assertSelectRegExp()
assertFileEquals()                   assertStringEndsWith()
assertFileExists()                   assertStringEqualsFile()
assertGreaterThan()                  assertStringStartsWith()
assertGreaterThanOrEqual()           assertTag()
assertInstanceOf()                   assertThat()
assertInternalType()                 assertTrue()
assertJsonFileEqualsJsonFile()       assertXmlFileEqualsXmlFile()
assertJsonStringEqualsJsonFile()     assertXmlStringEqualsXmlFile()
assertJsonStringEqualsJsonString()   assertXmlStringEqualsXmlString()
assertLessThan()


        8時間耐久PHPUnitの教室 / Yusuke Ando (@yando)
assertEquals($a,$b)

•$aがあるべき値
•$bに実際の実行結果
•一致しない場合はエラー
(エラー時のメッセージを
第3引数に渡せる)

8時間耐久PHPUnitの教室 / Yusuke Ando (@yando)
assertCount($num,$a)

•$aが$num件かどうかを検
査する
•一致しない場合はエラー
(エラー時のメッセージを
第2引数に渡せる)

 8時間耐久PHPUnitの教室 / Yusuke Ando (@yando)
assertTrue($a)
    assertFalse($a)
    assertEmpty($a)
     assertNull($a)

•$aがtrue false 空 nullかど
うかを検査する

 8時間耐久PHPUnitの教室 / Yusuke Ando (@yando)
assertRegExp($reg,$a)

•$aが$regの正規表現に
マッチするかどうかを検査
する




 8時間耐久PHPUnitの教室 / Yusuke Ando (@yando)
アノテーション

•特殊なコメントを記述
•テストケースの実行時にさ
まざまなオプション設定
•作者、依存、グループ等
•種類は増え続けている
 8時間耐久PHPUnitの教室 / Yusuke Ando (@yando)
アノテーションの例




8時間耐久PHPUnitの教室 / Yusuke Ando (@yando)
アノテーションの例




8時間耐久PHPUnitの教室 / Yusuke Ando (@yando)
テストケース生成

•クラスからケースを生成
•ケースからクラスを生成
•あくまでひな形なのでテス
ト自体は自力で記述する
•既存のコードの移行に便利
8時間耐久PHPUnitの教室 / Yusuke Ando (@yando)
SkeletonGenerator
 インストール
 php pyrus.phar install phpunit/PHPUnit_SkeletonGenerator




 対象のクラス名とファイル名を指定
 ./vendor/bin/phpunit-skelgen --test -- Kid ./lib/Kid.php




テストの出力先やrequireが足り
  ない点を補う必要がある
     8時間耐久PHPUnitの教室 / Yusuke Ando (@yando)
練習 Kid / HtmlKid

•コマンドからケースを生成
•適切な場所にケースを移動
•require を補う
•テストが実行できるか確認

 8時間耐久PHPUnitの教室 / Yusuke Ando (@yando)
テストファースト

•テストケースを先に記述し
てコードの挙動を決定
•記述したテストケースを通
過できるように開発
•テスト駆動開発の典型例
8時間耐久PHPUnitの教室 / Yusuke Ando (@yando)
テストしづらいコード
8時間耐久PHPUnitの教室 / Yusuke Ando (@yando)
テストしづらい?

•実際に開発を進めると発生
•テストが書けない例が出る
•テストの実行時間が長い
•結果が不安定
コードをテストしやすく修正しないと
  テストできない場合がある
 8時間耐久PHPUnitの教室 / Yusuke Ando (@yando)
テストしづらい例



                            処理が外部のWebに依存




8時間耐久PHPUnitの教室 / Yusuke Ando (@yando)
テストしづらいコード

•機能が外部に依存している
(各種WebAPI)
•データベースに存在してい
るデータに依存している
•処理に時間がかかる部分
8時間耐久PHPUnitの教室 / Yusuke Ando (@yando)
外部に依存
                                           DB
          テストケース


          テストケース                 ライブラリ
phpunit
          テストケース
                                           API


  実質、結合テストになっている
      8時間耐久PHPUnitの教室 / Yusuke Ando (@yando)
モック

•コードの中で外部に依存す
る部分をテスト時に別のもの
に置き換える手法




8時間耐久PHPUnitの教室 / Yusuke Ando (@yando)
モックできない


                         Getterを直接newして使う
                        必ずGetterのgetを呼んでしまう




8時間耐久PHPUnitの教室 / Yusuke Ando (@yando)
モックできる!

                         処理に使うオブジェクトを注入




                       渡されたオブジェクトのgetを使う
                      渡ってくるのはGetterのオブジェクト
                           とは限らない!




8時間耐久PHPUnitの教室 / Yusuke Ando (@yando)
モック用のクラス

•自力でスタブを作成
•PHPUnitの機能で生成も可




 8時間耐久PHPUnitの教室 / Yusuke Ando (@yando)
モック利用例


                              スタブの生成




                       スタブの振る舞いを設定する部分
                         (すごい記述だが動く)




8時間耐久PHPUnitの教室 / Yusuke Ando (@yando)
練習モックの利用

•まずは元の状態のRecent
クラスをテストしてみる
•遅さを確認
•モックを使ったテスト
•実物を使ったテスト
 8時間耐久PHPUnitの教室 / Yusuke Ando (@yando)
DBUnit

•テスト用のDBを毎回生成
•テスト後に全削除
•データの状態に左右されず
にデータベースを使ったテ
ストを行う

8時間耐久PHPUnitの教室 / Yusuke Ando (@yando)
さらに効率良いテスト
8時間耐久PHPUnitの教室 / Yusuke Ando (@yando)
phpunit.xml

•phpunitコマンドのオプ
ションを記述しておく事で
テスト実行が簡略化される
•コマンドの引数と併用もで
きる

 8時間耐久PHPUnitの教室 / Yusuke Ando (@yando)
phpunit.xml




8時間耐久PHPUnitの教室 / Yusuke Ando (@yando)
カバレッジレポート

•テストがコードのどの部分
を実行したかをレポート
•xDebug拡張を導入する必
要がある
phpunit --coverage-html=/path/to/report



  8時間耐久PHPUnitの教室 / Yusuke Ando (@yando)
カバレッジレポート




8時間耐久PHPUnitの教室 / Yusuke Ando (@yando)
カバレッジレポート




8時間耐久PHPUnitの教室 / Yusuke Ando (@yando)
継続ビルド(CI)




コードをコミットする度に自動でテスト実
  行、レポート出力、アラート送信
  8時間耐久PHPUnitの教室 / Yusuke Ando (@yando)
まとめ
8時間耐久PHPUnitの教室 / Yusuke Ando (@yando)
テストとCI

•モダンな開発の定番
 •フレームワーク
 •Gitによるコード管理
 •ユニットテスト
 •継続ビルド
 8時間耐久PHPUnitの教室 / Yusuke Ando (@yando)
PHPUnit

•かなり抽象的なツール
•進化も早いが一度覚えれば
そのまま使い続けられる
•不毛な動作確認とバグから
逃れる希望

 8時間耐久PHPUnitの教室 / Yusuke Ando (@yando)

Contenu connexe

Tendances

Code igniter + ci phpunit-test
Code igniter + ci phpunit-testCode igniter + ci phpunit-test
Code igniter + ci phpunit-testME iBotch
 
【Unite Tokyo 2019】Understanding C# Struct All Things
【Unite Tokyo 2019】Understanding C# Struct All Things【Unite Tokyo 2019】Understanding C# Struct All Things
【Unite Tokyo 2019】Understanding C# Struct All ThingsUnityTechnologiesJapan002
 
今日からできる!簡単 .NET 高速化 Tips
今日からできる!簡単 .NET 高速化 Tips今日からできる!簡単 .NET 高速化 Tips
今日からできる!簡単 .NET 高速化 TipsTakaaki Suzuki
 
WebRTC と Native とそれから、それから。
WebRTC と Native とそれから、それから。 WebRTC と Native とそれから、それから。
WebRTC と Native とそれから、それから。 tnoho
 
世界一わかりやすいClean Architecture
世界一わかりやすいClean Architecture世界一わかりやすいClean Architecture
世界一わかりやすいClean ArchitectureAtsushi Nakamura
 
PlaySQLAlchemy: SQLAlchemy入門
PlaySQLAlchemy: SQLAlchemy入門PlaySQLAlchemy: SQLAlchemy入門
PlaySQLAlchemy: SQLAlchemy入門泰 増田
 
ゲーム開発者のための C++11/C++14
ゲーム開発者のための C++11/C++14ゲーム開発者のための C++11/C++14
ゲーム開発者のための C++11/C++14Ryo Suzuki
 
EMTEを使って自動化の費用対効果をわかりやすく表現する
EMTEを使って自動化の費用対効果をわかりやすく表現するEMTEを使って自動化の費用対効果をわかりやすく表現する
EMTEを使って自動化の費用対効果をわかりやすく表現するJYERUEY
 
良い?悪い?コードコメントの書き方
良い?悪い?コードコメントの書き方良い?悪い?コードコメントの書き方
良い?悪い?コードコメントの書き方Shigenori Sagawa
 
第1回UE4勉強会 in 大阪 - エンジン改造ってどうなの?
第1回UE4勉強会 in 大阪 - エンジン改造ってどうなの?第1回UE4勉強会 in 大阪 - エンジン改造ってどうなの?
第1回UE4勉強会 in 大阪 - エンジン改造ってどうなの?com044
 
導入から 10 年、PHP の trait は滅びるべきなのか その適切な使いどころと弱点、将来について
導入から 10 年、PHP の trait は滅びるべきなのか その適切な使いどころと弱点、将来について導入から 10 年、PHP の trait は滅びるべきなのか その適切な使いどころと弱点、将来について
導入から 10 年、PHP の trait は滅びるべきなのか その適切な使いどころと弱点、将来についてshinjiigarashi
 
CEDEC2021 ダウンロード時間を大幅減!~大量のアセットをさばく高速な実装と運用事例の共有~
CEDEC2021 ダウンロード時間を大幅減!~大量のアセットをさばく高速な実装と運用事例の共有~ CEDEC2021 ダウンロード時間を大幅減!~大量のアセットをさばく高速な実装と運用事例の共有~
CEDEC2021 ダウンロード時間を大幅減!~大量のアセットをさばく高速な実装と運用事例の共有~ SEGADevTech
 
WkWebViewのキャッシュについて調べた
WkWebViewのキャッシュについて調べたWkWebViewのキャッシュについて調べた
WkWebViewのキャッシュについて調べたfirewood
 
5分で出来る!イケてるconfluenceページ
5分で出来る!イケてるconfluenceページ5分で出来る!イケてるconfluenceページ
5分で出来る!イケてるconfluenceページCLARA ONLINE, Inc.
 
ヒストリア HelixCore(Perforce) 運用レギュレーションドキュメント
ヒストリア HelixCore(Perforce) 運用レギュレーションドキュメントヒストリア HelixCore(Perforce) 運用レギュレーションドキュメント
ヒストリア HelixCore(Perforce) 運用レギュレーションドキュメントhistoria_Inc
 
Java開発の強力な相棒として今すぐ使えるGroovy
Java開発の強力な相棒として今すぐ使えるGroovyJava開発の強力な相棒として今すぐ使えるGroovy
Java開発の強力な相棒として今すぐ使えるGroovyYasuharu Nakano
 

Tendances (20)

Code igniter + ci phpunit-test
Code igniter + ci phpunit-testCode igniter + ci phpunit-test
Code igniter + ci phpunit-test
 
【Unite Tokyo 2019】Understanding C# Struct All Things
【Unite Tokyo 2019】Understanding C# Struct All Things【Unite Tokyo 2019】Understanding C# Struct All Things
【Unite Tokyo 2019】Understanding C# Struct All Things
 
WebSocket / WebRTCの技術紹介
WebSocket / WebRTCの技術紹介WebSocket / WebRTCの技術紹介
WebSocket / WebRTCの技術紹介
 
今日からできる!簡単 .NET 高速化 Tips
今日からできる!簡単 .NET 高速化 Tips今日からできる!簡単 .NET 高速化 Tips
今日からできる!簡単 .NET 高速化 Tips
 
WebRTC と Native とそれから、それから。
WebRTC と Native とそれから、それから。 WebRTC と Native とそれから、それから。
WebRTC と Native とそれから、それから。
 
世界一わかりやすいClean Architecture
世界一わかりやすいClean Architecture世界一わかりやすいClean Architecture
世界一わかりやすいClean Architecture
 
PlaySQLAlchemy: SQLAlchemy入門
PlaySQLAlchemy: SQLAlchemy入門PlaySQLAlchemy: SQLAlchemy入門
PlaySQLAlchemy: SQLAlchemy入門
 
ゲーム開発者のための C++11/C++14
ゲーム開発者のための C++11/C++14ゲーム開発者のための C++11/C++14
ゲーム開発者のための C++11/C++14
 
EMTEを使って自動化の費用対効果をわかりやすく表現する
EMTEを使って自動化の費用対効果をわかりやすく表現するEMTEを使って自動化の費用対効果をわかりやすく表現する
EMTEを使って自動化の費用対効果をわかりやすく表現する
 
良い?悪い?コードコメントの書き方
良い?悪い?コードコメントの書き方良い?悪い?コードコメントの書き方
良い?悪い?コードコメントの書き方
 
第1回UE4勉強会 in 大阪 - エンジン改造ってどうなの?
第1回UE4勉強会 in 大阪 - エンジン改造ってどうなの?第1回UE4勉強会 in 大阪 - エンジン改造ってどうなの?
第1回UE4勉強会 in 大阪 - エンジン改造ってどうなの?
 
導入から 10 年、PHP の trait は滅びるべきなのか その適切な使いどころと弱点、将来について
導入から 10 年、PHP の trait は滅びるべきなのか その適切な使いどころと弱点、将来について導入から 10 年、PHP の trait は滅びるべきなのか その適切な使いどころと弱点、将来について
導入から 10 年、PHP の trait は滅びるべきなのか その適切な使いどころと弱点、将来について
 
猫でも分かるUE4のポストプロセスを使った演出・絵作り
猫でも分かるUE4のポストプロセスを使った演出・絵作り猫でも分かるUE4のポストプロセスを使った演出・絵作り
猫でも分かるUE4のポストプロセスを使った演出・絵作り
 
【BS4】時は来たれり。今こそ .NET 6 へ移行する時。
【BS4】時は来たれり。今こそ .NET 6 へ移行する時。 【BS4】時は来たれり。今こそ .NET 6 へ移行する時。
【BS4】時は来たれり。今こそ .NET 6 へ移行する時。
 
CEDEC2021 ダウンロード時間を大幅減!~大量のアセットをさばく高速な実装と運用事例の共有~
CEDEC2021 ダウンロード時間を大幅減!~大量のアセットをさばく高速な実装と運用事例の共有~ CEDEC2021 ダウンロード時間を大幅減!~大量のアセットをさばく高速な実装と運用事例の共有~
CEDEC2021 ダウンロード時間を大幅減!~大量のアセットをさばく高速な実装と運用事例の共有~
 
WkWebViewのキャッシュについて調べた
WkWebViewのキャッシュについて調べたWkWebViewのキャッシュについて調べた
WkWebViewのキャッシュについて調べた
 
5分で出来る!イケてるconfluenceページ
5分で出来る!イケてるconfluenceページ5分で出来る!イケてるconfluenceページ
5分で出来る!イケてるconfluenceページ
 
ヒストリア HelixCore(Perforce) 運用レギュレーションドキュメント
ヒストリア HelixCore(Perforce) 運用レギュレーションドキュメントヒストリア HelixCore(Perforce) 運用レギュレーションドキュメント
ヒストリア HelixCore(Perforce) 運用レギュレーションドキュメント
 
Java開発の強力な相棒として今すぐ使えるGroovy
Java開発の強力な相棒として今すぐ使えるGroovyJava開発の強力な相棒として今すぐ使えるGroovy
Java開発の強力な相棒として今すぐ使えるGroovy
 
C# 9.0 / .NET 5.0
C# 9.0 / .NET 5.0C# 9.0 / .NET 5.0
C# 9.0 / .NET 5.0
 

Similaire à 8時間耐久PHPUnitの教室

8時間耐久 PHP構築の教室
8時間耐久 PHP構築の教室8時間耐久 PHP構築の教室
8時間耐久 PHP構築の教室Yusuke Ando
 
PHPUnit でテスト駆動開発を始めよう
PHPUnit でテスト駆動開発を始めようPHPUnit でテスト駆動開発を始めよう
PHPUnit でテスト駆動開発を始めようYuya Takeyama
 
SPL fukuokaphp_1
SPL fukuokaphp_1SPL fukuokaphp_1
SPL fukuokaphp_1ichikaway
 
Getting Started with Testing using PHPUnit
Getting Started with Testing using PHPUnitGetting Started with Testing using PHPUnit
Getting Started with Testing using PHPUnitAtsuhiro Kubo
 
Good Parts of PHP and the UNIX Philosophy
Good Parts of PHP and the UNIX PhilosophyGood Parts of PHP and the UNIX Philosophy
Good Parts of PHP and the UNIX PhilosophyYuya Takeyama
 
Introduction to Continuous Test Runner MakeGood
Introduction to Continuous Test Runner MakeGoodIntroduction to Continuous Test Runner MakeGood
Introduction to Continuous Test Runner MakeGoodAtsuhiro Kubo
 
90分間濃縮 PHPエラーの教室
90分間濃縮 PHPエラーの教室90分間濃縮 PHPエラーの教室
90分間濃縮 PHPエラーの教室Yusuke Ando
 
【C++BUILDER STARTER チュートリアルシリーズ】シーズン2 C++Builderの部 第6回 ‟文字列とオブジェクト„
【C++BUILDER STARTER チュートリアルシリーズ】シーズン2 C++Builderの部 第6回 ‟文字列とオブジェクト„【C++BUILDER STARTER チュートリアルシリーズ】シーズン2 C++Builderの部 第6回 ‟文字列とオブジェクト„
【C++BUILDER STARTER チュートリアルシリーズ】シーズン2 C++Builderの部 第6回 ‟文字列とオブジェクト„和弘 井之上
 
4時間耐久 PHP on Heroku
4時間耐久 PHP on Heroku4時間耐久 PHP on Heroku
4時間耐久 PHP on HerokuYusuke Ando
 
Behat Driven Development
Behat Driven DevelopmentBehat Driven Development
Behat Driven DevelopmentRyo Tomidokoro
 
Laravel_オープンソースカンファレンスhokkaido_JP_2014
Laravel_オープンソースカンファレンスhokkaido_JP_2014Laravel_オープンソースカンファレンスhokkaido_JP_2014
Laravel_オープンソースカンファレンスhokkaido_JP_2014Yuuki Takezawa
 
群馬勉強会 未完成
群馬勉強会 未完成群馬勉強会 未完成
群馬勉強会 未完成Hatori Kouiti
 
群馬勉強会 未完成
群馬勉強会 未完成群馬勉強会 未完成
群馬勉強会 未完成Hatori Kouiti
 
Pythonを含む多くのプログラミング言語を扱う処理フレームワークとパターン、鷲崎弘宜、PyConJP 2016 招待講演
Pythonを含む多くのプログラミング言語を扱う処理フレームワークとパターン、鷲崎弘宜、PyConJP 2016 招待講演Pythonを含む多くのプログラミング言語を扱う処理フレームワークとパターン、鷲崎弘宜、PyConJP 2016 招待講演
Pythonを含む多くのプログラミング言語を扱う処理フレームワークとパターン、鷲崎弘宜、PyConJP 2016 招待講演Hironori Washizaki
 
PHPUnitTest勉強会スライド
PHPUnitTest勉強会スライドPHPUnitTest勉強会スライド
PHPUnitTest勉強会スライドssuser7a9029
 
PHPUnitTest勉強会スライド
PHPUnitTest勉強会スライドPHPUnitTest勉強会スライド
PHPUnitTest勉強会スライドssuser7a9029
 
Pythonista も ls を読むべきか?
Pythonista も ls を読むべきか?Pythonista も ls を読むべきか?
Pythonista も ls を読むべきか?Katsunori FUJIWARA
 

Similaire à 8時間耐久PHPUnitの教室 (20)

8時間耐久 PHP構築の教室
8時間耐久 PHP構築の教室8時間耐久 PHP構築の教室
8時間耐久 PHP構築の教室
 
PHPUnit でテスト駆動開発を始めよう
PHPUnit でテスト駆動開発を始めようPHPUnit でテスト駆動開発を始めよう
PHPUnit でテスト駆動開発を始めよう
 
SPL fukuokaphp_1
SPL fukuokaphp_1SPL fukuokaphp_1
SPL fukuokaphp_1
 
Getting Started with Testing using PHPUnit
Getting Started with Testing using PHPUnitGetting Started with Testing using PHPUnit
Getting Started with Testing using PHPUnit
 
Good Parts of PHP and the UNIX Philosophy
Good Parts of PHP and the UNIX PhilosophyGood Parts of PHP and the UNIX Philosophy
Good Parts of PHP and the UNIX Philosophy
 
Introduction to Continuous Test Runner MakeGood
Introduction to Continuous Test Runner MakeGoodIntroduction to Continuous Test Runner MakeGood
Introduction to Continuous Test Runner MakeGood
 
90分間濃縮 PHPエラーの教室
90分間濃縮 PHPエラーの教室90分間濃縮 PHPエラーの教室
90分間濃縮 PHPエラーの教室
 
Twitter4Jとテスト
Twitter4JとテストTwitter4Jとテスト
Twitter4Jとテスト
 
【C++BUILDER STARTER チュートリアルシリーズ】シーズン2 C++Builderの部 第6回 ‟文字列とオブジェクト„
【C++BUILDER STARTER チュートリアルシリーズ】シーズン2 C++Builderの部 第6回 ‟文字列とオブジェクト„【C++BUILDER STARTER チュートリアルシリーズ】シーズン2 C++Builderの部 第6回 ‟文字列とオブジェクト„
【C++BUILDER STARTER チュートリアルシリーズ】シーズン2 C++Builderの部 第6回 ‟文字列とオブジェクト„
 
4時間耐久 PHP on Heroku
4時間耐久 PHP on Heroku4時間耐久 PHP on Heroku
4時間耐久 PHP on Heroku
 
Behat Driven Development
Behat Driven DevelopmentBehat Driven Development
Behat Driven Development
 
Laravel_オープンソースカンファレンスhokkaido_JP_2014
Laravel_オープンソースカンファレンスhokkaido_JP_2014Laravel_オープンソースカンファレンスhokkaido_JP_2014
Laravel_オープンソースカンファレンスhokkaido_JP_2014
 
群馬勉強会 未完成
群馬勉強会 未完成群馬勉強会 未完成
群馬勉強会 未完成
 
群馬勉強会 未完成
群馬勉強会 未完成群馬勉強会 未完成
群馬勉強会 未完成
 
Pythonを含む多くのプログラミング言語を扱う処理フレームワークとパターン、鷲崎弘宜、PyConJP 2016 招待講演
Pythonを含む多くのプログラミング言語を扱う処理フレームワークとパターン、鷲崎弘宜、PyConJP 2016 招待講演Pythonを含む多くのプログラミング言語を扱う処理フレームワークとパターン、鷲崎弘宜、PyConJP 2016 招待講演
Pythonを含む多くのプログラミング言語を扱う処理フレームワークとパターン、鷲崎弘宜、PyConJP 2016 招待講演
 
PHPUnitTest勉強会スライド
PHPUnitTest勉強会スライドPHPUnitTest勉強会スライド
PHPUnitTest勉強会スライド
 
PHPUnitTest勉強会スライド
PHPUnitTest勉強会スライドPHPUnitTest勉強会スライド
PHPUnitTest勉強会スライド
 
Pythonista も ls を読むべきか?
Pythonista も ls を読むべきか?Pythonista も ls を読むべきか?
Pythonista も ls を読むべきか?
 
実"戦"CakePHP Plugin
実"戦"CakePHP Plugin実"戦"CakePHP Plugin
実"戦"CakePHP Plugin
 
Pythonのユニットテスト
PythonのユニットテストPythonのユニットテスト
Pythonのユニットテスト
 

Plus de Yusuke Ando

ダイナミック広告の改善と拡大
ダイナミック広告の改善と拡大ダイナミック広告の改善と拡大
ダイナミック広告の改善と拡大Yusuke Ando
 
DevOpsを実現するChef活用テクニック
DevOpsを実現するChef活用テクニックDevOpsを実現するChef活用テクニック
DevOpsを実現するChef活用テクニック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 CIYusuke 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
 
Engine Yardで作る NetCommons3のクラウド環境
Engine Yardで作る NetCommons3のクラウド環境Engine Yardで作る NetCommons3のクラウド環境
Engine Yardで作る NetCommons3のクラウド環境Yusuke Ando
 
Engine Yard Cloud
Engine Yard CloudEngine Yard Cloud
Engine Yard CloudYusuke Ando
 
最近のCandyCane - PHP版Redmineでタスク管理を始めよう
最近のCandyCane - PHP版Redmineでタスク管理を始めよう最近のCandyCane - PHP版Redmineでタスク管理を始めよう
最近のCandyCane - PHP版Redmineでタスク管理を始めようYusuke Ando
 
PHPの教室「foreachを極める」
PHPの教室「foreachを極める」PHPの教室「foreachを極める」
PHPの教室「foreachを極める」Yusuke Ando
 

Plus de 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を極める」
 

Dernier

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

Dernier (9)

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

8時間耐久PHPUnitの教室