SlideShare una empresa de Scribd logo
1 de 38
Descargar para leer sin conexión
オブジェクト指向抜きで
   TDDしたいなら
 Limeを使うといいよ

 @tanakahisateru
自己紹介

                  タナカヒサテル
                  @tanakahisateru



PHPのフレームワークを開発しています

Pinoco
 https://github.com/tanakahisateru/pinoco
Lime Testing Framework
し…Symfonyだと!!
大丈夫、Limeは単独で使えるから。
        しかも…
超簡単
ダウンロード
http://trac.symfony-project.org/wiki/LimeTestingFramework
ファイル1個だけ
こんな感じ
テストと実装を足すとこんな感じ
テストの記述
<?php
require_once('lime.php');
require_once('utils.php'); // これからテストするソース

$lime = new lime_test();

$zenkaku_tel = "06−6543−9876";
$hankaku_tel = to_alphanum($zenkaku_tel);

$lime->is($hankaku_tel,"06-6543-9876");


utils-test.php

●単体ファイルをrequire_onceするだけで使えるようになる。
●テストケースにclassもfunctionも書かなくていい。

●assertEquals → is (短い)
テストを実行
$ php utils-test.php

1..2
PHP Fatal error: Call to undefined function to_alphanum()
in /Users/tanakahisateru/Desktop/limetest/utils-test.php on
line 8




コマンドラインからutils-test.phpスクリプトを実行すると、失敗。
to_alphnumメソッドが実装されていないことがわかる。

PHPでは「関数がない」とか「シンタックスエラーがある」
という、コンパイラを通る言語なら普通起こらないような
ミスが起こる。

すべてのソースをいちどrequireして関数コールを試しておく。
これコンパイルエラーのチェックと同じぐらい大事なこと。
仮の実装
<?php
function utils_to_alphanum($str)
{
    return $str;
}


utils.php
テストの実行
$ php utils-test.php

1..1
not ok 1
#     Failed test (./utils-test.php at line 10)
#             got: '06−6543−9876'
#        expected: '06-6543-9876'
# Looks like you failed 1 tests of 1.


もちろん失敗するよね。
実装する
<?php
function to_alphanum($str)
{
    return str_replace(
       array(
         '0','1','2','3','4','5','6','7','8','9','−'
       ),
       array('0','1','2','3','4','5','6','7','8','9','-'),
       $str
    );
}

utils.php

テスト駆動開発では、
 「テストコードをクリアする最少の実装」
を書くようにする。これポイント。最初から万能な実装を書いてしまうと、
テストを成長させるモチベーションがなくなってしまう。
テストの実行
$ php utils-test.php

1..1
ok 1
# Looks like everything went fine.

$lime->is($hankaku_tel, "06-6543-9876");
というテストが期待通り動いた。
テストケースの追加
<?php
require_once('lime.php');
require_once('utils.php');

$lime = new lime_test();

$zenkaku_tel = "06−6543−9876";
$hankaku_tel = to_alphanum($zenkaku_tel);
$lime->is($hankaku_tel, "06-6543-9876");

$zenkaku_email = "tanakahisateru@gmail.com";
$hankaku_email = to_alphanum($zenkaku_email);
$lime->is($hankaku_email, "tanakahisateru@gmail.com");
テストの実行
$ php utils-test.php

1..1
ok 1
not ok 2
#     Failed test (./utils-test.php at line 13)
#             got: 'tanakahisateru@gmail.com'
#        expected: 'tanakahisateru@gmail.com'
# Looks like you planned 1 tests but ran 1 extra.

# Looks like you failed 1 tests of 2.


もちろん新しく追加したテストは失敗する。
で、実装する…の?
<?php
function to_alphanum($str)
{
    return str_replace(
       array(
         '0','1','2','3','4','5','6','7','8','9','−',
         'a','b','c','d','e','f','g','h','i','j','k',
         'l','m','n','o','p','q','r','s','t','u','v',
         'w','x','y','z','_','.','@'
       ),
       array(
         '0','1','2','3','4','5','6','7','8','9','-',
         'a','b','c','d','e','f','g','h','i','j','k',
         'l','m','n','o','p','q','r','s','t','u','v',
         'w','x','y','z','_','.','@'
       ),
       $str
    );
}

utils.php
まあテストは成功だけど
$ php utils-test.php

ok 1
ok 2
1..2
# Looks like everything went fine.




この調子だと次のテストを書く気が起こらない。
リファクタリングなど
<?php
function to_alphanum($str)
{
    return mb_convert_kana($str, 'a');
}


utils.php

よし、書き換えよう。
たぶんこの関数で同じ変換いけると思う。たぶん…
おっとこれは!!
$ php utils-test.php

not ok 1
#     Failed test (./utils-test.php at line 9)
#             got: '06−6543−9876'
#        expected: '06-6543-9876'
not ok 2
#     Failed test (./utils-test.php at line 13)
#             got: 'tanakahisateru@gmail.com'
#        expected: 'tanakahisateru@gmail.com'
1..2
# Looks like you failed 2 tests of 2.
やばいやばい忘れてた
<?php
function to_alphanum($str, $encoding='utf-8')
{
    return mb_convert_kana($str, 'a', $encoding);
}
テストがあって良かった
$ php utils-test.php

ok 1
ok 2
1..2
# Looks like everything went fine.




機能が劣化したらすぐにわかる。これほんとTDDのおいしさ。
使い方はこちらで

http://www.symfony-project.org/gentle-introduction/1_4/ja/15-Unit-and-Functional-Testing
と、まあこんなやりかたで
PinocoはLimeでTDDしました
Lime単体でTDDやってみて
●
    コマンドラインのスクロール量がたいへん
    ●   テスト項目が20個超え始めるときつい
●
    テストスイートがない
    ●
        回帰テストをまとめて一発でやりたい
●
    汚れたグローバル環境の再浄化が要る
    ●
        実行スコープがグローバル
    ●
        連続して複数のテストを行うと前の状態に依存する
    ●
        続けてやったら単体テスト失敗するなどもってのほ
        か
というわけで作ったもの
●   Lime単体用のテストスイート
●   複数のLimeテストをまとめて実行できる
●   個々のテストは個別のPHPインタプリタで実行
    されるようにする
●   OKの場合はいちいち報告しない
ソースはこれだけ
使い方
実行した様子
/Users/tanakahisateru/Sites/pinoco/test/unit/test_vars.php:
# Pinoco_Vars Test
# toArray test
# import test
1..47
# Looks like everything went fine.


/Users/tanakahisateru/Sites/pinoco/test/unit/test_list.php:
# Pinoco_List Test
# push/pop
# shift/unshift
1..60
# Looks like everything went fine.


/Users/tanakahisateru/Sites/pinoco/test/unit/test_lazy.php:
# Pinoco_LazyValueProxy Test
(略)
それでも残る課題
●
    外部のシステムとの関係
    ●
        =単体テストにある本質的な問題
    ●
        言語ロジック外のシステムに依存すると、純粋な単
        体テストではなくなる。
    ●
        データ保存系のテストは次のテストの環境を書き換
        えてしまう。
    ●
        けれど自分の実装は実行の前提となる環境がないと
        動かせない、こまった。
単体テストで重要な技術
●
    モックオブジェクト
    ●
        本番用と同じインターフェースの偽オブジェクト
    ●
        オブジェクト指向的にいうとポリモーフィズム
    ●
        実際は何も書き換えないバージョンの外部環境
    ●
        テスト可能な設計とは、モックオブジェクトを受け
        入れられるインターフェースだということ
    ●
        はいオブジェクト指向きましたね
まあこういうことですよ




 Symfony2でまさかの乗り換え… orz
でも、
PHP is not for OOP coders only.



そこまで突き詰めなくてもまずはTDDしよう。
ユーザ層の幅広さ、それが「PHPらしさ」でしょ。
詳しくはGitHubのPinocoのソースにて。



    ありがとうございました。

Más contenido relacionado

La actualidad más candente

Ruby初級者向けレッスン 第46回 ─── Test::Unit
Ruby初級者向けレッスン 第46回 ─── Test::UnitRuby初級者向けレッスン 第46回 ─── Test::Unit
Ruby初級者向けレッスン 第46回 ─── Test::Unithigaki
 
OPcache の最適化器の今
OPcache の最適化器の今OPcache の最適化器の今
OPcache の最適化器の今y-uti
 
最近の PHP の話
最近の PHP の話最近の PHP の話
最近の PHP の話y-uti
 
Perlのテストがわからない
PerlのテストがわからないPerlのテストがわからない
PerlのテストがわからないYusuke Hosokoshi
 
effective modern c++ chapeter36
effective modern c++ chapeter36effective modern c++ chapeter36
effective modern c++ chapeter36Tatsuki SHIMIZU
 
C#次世代非同期処理概観 - Task vs Reactive Extensions
C#次世代非同期処理概観 - Task vs Reactive ExtensionsC#次世代非同期処理概観 - Task vs Reactive Extensions
C#次世代非同期処理概観 - Task vs Reactive ExtensionsYoshifumi Kawai
 
T sql の parse と generator
T sql の parse と generatorT sql の parse と generator
T sql の parse と generatorOda Shinsuke
 
PHP の GC の話
PHP の GC の話PHP の GC の話
PHP の GC の話y-uti
 
エキ Py 読書会02 2章後半
エキ Py 読書会02 2章後半エキ Py 読書会02 2章後半
エキ Py 読書会02 2章後半Tetsuya Morimoto
 
Deep Dive async/await in Unity with UniTask(UniRx.Async)
Deep Dive async/await in Unity with UniTask(UniRx.Async)Deep Dive async/await in Unity with UniTask(UniRx.Async)
Deep Dive async/await in Unity with UniTask(UniRx.Async)Yoshifumi Kawai
 
async/await のしくみ
async/await のしくみasync/await のしくみ
async/await のしくみ信之 岩永
 
Open Source System Administration Framework - Func
Open Source System Administration Framework - FuncOpen Source System Administration Framework - Func
Open Source System Administration Framework - FuncGosuke Miyashita
 
Reactive Extensions v2.0
Reactive Extensions v2.0Reactive Extensions v2.0
Reactive Extensions v2.0Yoshifumi Kawai
 
Let s database_testing
Let s database_testingLet s database_testing
Let s database_testingYuji Shimada
 
片手間MySQLチューニング戦略
片手間MySQLチューニング戦略片手間MySQLチューニング戦略
片手間MySQLチューニング戦略yoku0825
 

La actualidad más candente (20)

Ruby初級者向けレッスン 第46回 ─── Test::Unit
Ruby初級者向けレッスン 第46回 ─── Test::UnitRuby初級者向けレッスン 第46回 ─── Test::Unit
Ruby初級者向けレッスン 第46回 ─── Test::Unit
 
OPcache の最適化器の今
OPcache の最適化器の今OPcache の最適化器の今
OPcache の最適化器の今
 
最近の PHP の話
最近の PHP の話最近の PHP の話
最近の PHP の話
 
emc++ chapter32
emc++ chapter32emc++ chapter32
emc++ chapter32
 
Perlのテストがわからない
PerlのテストがわからないPerlのテストがわからない
Perlのテストがわからない
 
Effective modern-c++#9
Effective modern-c++#9Effective modern-c++#9
Effective modern-c++#9
 
effective modern c++ chapeter36
effective modern c++ chapeter36effective modern c++ chapeter36
effective modern c++ chapeter36
 
C#次世代非同期処理概観 - Task vs Reactive Extensions
C#次世代非同期処理概観 - Task vs Reactive ExtensionsC#次世代非同期処理概観 - Task vs Reactive Extensions
C#次世代非同期処理概観 - Task vs Reactive Extensions
 
T sql の parse と generator
T sql の parse と generatorT sql の parse と generator
T sql の parse と generator
 
PHP の GC の話
PHP の GC の話PHP の GC の話
PHP の GC の話
 
Junit4
Junit4Junit4
Junit4
 
エキ Py 読書会02 2章後半
エキ Py 読書会02 2章後半エキ Py 読書会02 2章後半
エキ Py 読書会02 2章後半
 
PHP language update 201211
PHP language update 201211PHP language update 201211
PHP language update 201211
 
pecl-AOPの紹介
pecl-AOPの紹介pecl-AOPの紹介
pecl-AOPの紹介
 
Deep Dive async/await in Unity with UniTask(UniRx.Async)
Deep Dive async/await in Unity with UniTask(UniRx.Async)Deep Dive async/await in Unity with UniTask(UniRx.Async)
Deep Dive async/await in Unity with UniTask(UniRx.Async)
 
async/await のしくみ
async/await のしくみasync/await のしくみ
async/await のしくみ
 
Open Source System Administration Framework - Func
Open Source System Administration Framework - FuncOpen Source System Administration Framework - Func
Open Source System Administration Framework - Func
 
Reactive Extensions v2.0
Reactive Extensions v2.0Reactive Extensions v2.0
Reactive Extensions v2.0
 
Let s database_testing
Let s database_testingLet s database_testing
Let s database_testing
 
片手間MySQLチューニング戦略
片手間MySQLチューニング戦略片手間MySQLチューニング戦略
片手間MySQLチューニング戦略
 

Similar a 関西Php勉強会のlimeの話

タダで始めるテストファースト入門 ~ C# Express + NUnit
タダで始めるテストファースト入門 ~ C# Express + NUnitタダで始めるテストファースト入門 ~ C# Express + NUnit
タダで始めるテストファースト入門 ~ C# Express + NUnitYasuhiko Yamamoto
 
C# から java へのプログラム移植で体験したtddの効果は?
C# から java へのプログラム移植で体験したtddの効果は?C# から java へのプログラム移植で体験したtddの効果は?
C# から java へのプログラム移植で体験したtddの効果は?Shinichi Hirauchi
 
Tokyor14 - R言語でユニットテスト
Tokyor14 - R言語でユニットテストTokyor14 - R言語でユニットテスト
Tokyor14 - R言語でユニットテストYohei Sato
 
あんなテスト、こんなテスト(this and that about testing)
あんなテスト、こんなテスト(this and that about testing)あんなテスト、こんなテスト(this and that about testing)
あんなテスト、こんなテスト(this and that about testing)Takuya Tsuchida
 
EC-CUBE + PHPUnit で 実践テスト駆動開発
EC-CUBE + PHPUnit で 実践テスト駆動開発EC-CUBE + PHPUnit で 実践テスト駆動開発
EC-CUBE + PHPUnit で 実践テスト駆動開発Kentaro Ohkouchi
 
CPANの依存モジュールをもう少し正しく検出したい
CPANの依存モジュールをもう少し正しく検出したいCPANの依存モジュールをもう少し正しく検出したい
CPANの依存モジュールをもう少し正しく検出したいcharsbar
 
おまえらこのライブラリ使ってないの? m9 (2013-07)
おまえらこのライブラリ使ってないの? m9	(2013-07)おまえらこのライブラリ使ってないの? m9	(2013-07)
おまえらこのライブラリ使ってないの? m9 (2013-07)Toru Furukawa
 
第4回勉強会 単体テストのすすめ
第4回勉強会 単体テストのすすめ第4回勉強会 単体テストのすすめ
第4回勉強会 単体テストのすすめhakoika-itwg
 
はこだてIKA 第4回勉強会 単体テスト
はこだてIKA 第4回勉強会 単体テストはこだてIKA 第4回勉強会 単体テスト
はこだてIKA 第4回勉強会 単体テストSeiji KOMATSU
 
Introduction to Continuous Test Runner MakeGood
Introduction to Continuous Test Runner MakeGoodIntroduction to Continuous Test Runner MakeGood
Introduction to Continuous Test Runner MakeGoodAtsuhiro Kubo
 
Javaチョットデキルへの道〜JavaコアSDKに見る真似したいコード10選〜
Javaチョットデキルへの道〜JavaコアSDKに見る真似したいコード10選〜Javaチョットデキルへの道〜JavaコアSDKに見る真似したいコード10選〜
Javaチョットデキルへの道〜JavaコアSDKに見る真似したいコード10選〜JustSystems Corporation
 
React Native GUIDE
React Native GUIDEReact Native GUIDE
React Native GUIDEdcubeio
 
Clojure programming-chapter-2
Clojure programming-chapter-2Clojure programming-chapter-2
Clojure programming-chapter-2Masao Kato
 
モデル検査入門 #wacate
モデル検査入門 #wacateモデル検査入門 #wacate
モデル検査入門 #wacateKinji Akemine
 

Similar a 関西Php勉強会のlimeの話 (20)

タダで始めるテストファースト入門 ~ C# Express + NUnit
タダで始めるテストファースト入門 ~ C# Express + NUnitタダで始めるテストファースト入門 ~ C# Express + NUnit
タダで始めるテストファースト入門 ~ C# Express + NUnit
 
C# から java へのプログラム移植で体験したtddの効果は?
C# から java へのプログラム移植で体験したtddの効果は?C# から java へのプログラム移植で体験したtddの効果は?
C# から java へのプログラム移植で体験したtddの効果は?
 
Tokyor14 - R言語でユニットテスト
Tokyor14 - R言語でユニットテストTokyor14 - R言語でユニットテスト
Tokyor14 - R言語でユニットテスト
 
あんなテスト、こんなテスト(this and that about testing)
あんなテスト、こんなテスト(this and that about testing)あんなテスト、こんなテスト(this and that about testing)
あんなテスト、こんなテスト(this and that about testing)
 
EC-CUBE + PHPUnit で 実践テスト駆動開発
EC-CUBE + PHPUnit で 実践テスト駆動開発EC-CUBE + PHPUnit で 実践テスト駆動開発
EC-CUBE + PHPUnit で 実践テスト駆動開発
 
CPANの依存モジュールをもう少し正しく検出したい
CPANの依存モジュールをもう少し正しく検出したいCPANの依存モジュールをもう少し正しく検出したい
CPANの依存モジュールをもう少し正しく検出したい
 
おまえらこのライブラリ使ってないの? m9 (2013-07)
おまえらこのライブラリ使ってないの? m9	(2013-07)おまえらこのライブラリ使ってないの? m9	(2013-07)
おまえらこのライブラリ使ってないの? m9 (2013-07)
 
第4回勉強会 単体テストのすすめ
第4回勉強会 単体テストのすすめ第4回勉強会 単体テストのすすめ
第4回勉強会 単体テストのすすめ
 
はこだてIKA 第4回勉強会 単体テスト
はこだてIKA 第4回勉強会 単体テストはこだてIKA 第4回勉強会 単体テスト
はこだてIKA 第4回勉強会 単体テスト
 
Introduction to Continuous Test Runner MakeGood
Introduction to Continuous Test Runner MakeGoodIntroduction to Continuous Test Runner MakeGood
Introduction to Continuous Test Runner MakeGood
 
Javaチョットデキルへの道〜JavaコアSDKに見る真似したいコード10選〜
Javaチョットデキルへの道〜JavaコアSDKに見る真似したいコード10選〜Javaチョットデキルへの道〜JavaコアSDKに見る真似したいコード10選〜
Javaチョットデキルへの道〜JavaコアSDKに見る真似したいコード10選〜
 
React Native GUIDE
React Native GUIDEReact Native GUIDE
React Native GUIDE
 
Haikara
HaikaraHaikara
Haikara
 
MoteMote Compiler Plugin
MoteMote Compiler PluginMoteMote Compiler Plugin
MoteMote Compiler Plugin
 
Clojure programming-chapter-2
Clojure programming-chapter-2Clojure programming-chapter-2
Clojure programming-chapter-2
 
Gorinphp0729
Gorinphp0729Gorinphp0729
Gorinphp0729
 
Gorinphp0729
Gorinphp0729Gorinphp0729
Gorinphp0729
 
Spock's world
Spock's worldSpock's world
Spock's world
 
モデル検査入門 #wacate
モデル検査入門 #wacateモデル検査入門 #wacate
モデル検査入門 #wacate
 
Introduction of Python
Introduction of PythonIntroduction of Python
Introduction of Python
 

Más de Hisateru Tanaka

HTMLに学ぶ夫婦円満のコツ
HTMLに学ぶ夫婦円満のコツHTMLに学ぶ夫婦円満のコツ
HTMLに学ぶ夫婦円満のコツHisateru Tanaka
 
とある事業の脱レガシー
とある事業の脱レガシーとある事業の脱レガシー
とある事業の脱レガシーHisateru Tanaka
 
Yii Framework 2.0 いま求められるRAD標準とは #phpkansai
Yii Framework 2.0 いま求められるRAD標準とは #phpkansaiYii Framework 2.0 いま求められるRAD標準とは #phpkansai
Yii Framework 2.0 いま求められるRAD標準とは #phpkansaiHisateru Tanaka
 
第21回関西PHP勉強会 ReactPHPは もっと流行って欲しい #phpkansai
第21回関西PHP勉強会 ReactPHPは もっと流行って欲しい #phpkansai第21回関西PHP勉強会 ReactPHPは もっと流行って欲しい #phpkansai
第21回関西PHP勉強会 ReactPHPは もっと流行って欲しい #phpkansaiHisateru Tanaka
 
ダイクストラの構造化 プログラミングに学ぶ 結婚生活
ダイクストラの構造化 プログラミングに学ぶ 結婚生活ダイクストラの構造化 プログラミングに学ぶ 結婚生活
ダイクストラの構造化 プログラミングに学ぶ 結婚生活Hisateru Tanaka
 
PHPカンファレンス関西2014 Yii Framework 2.0 遅れてきた5番目のフレームワーク
PHPカンファレンス関西2014 Yii Framework 2.0 遅れてきた5番目のフレームワークPHPカンファレンス関西2014 Yii Framework 2.0 遅れてきた5番目のフレームワーク
PHPカンファレンス関西2014 Yii Framework 2.0 遅れてきた5番目のフレームワークHisateru Tanaka
 
Grunt front-osaka-1-lt-tanaka
Grunt front-osaka-1-lt-tanakaGrunt front-osaka-1-lt-tanaka
Grunt front-osaka-1-lt-tanakaHisateru Tanaka
 
Phpstormちょっといい話
Phpstormちょっといい話Phpstormちょっといい話
Phpstormちょっといい話Hisateru Tanaka
 
#phpmatsuri LT大会システムの中身
#phpmatsuri LT大会システムの中身#phpmatsuri LT大会システムの中身
#phpmatsuri LT大会システムの中身Hisateru Tanaka
 
&& || and or まぜるな危険
&& || and or まぜるな危険&& || and or まぜるな危険
&& || and or まぜるな危険Hisateru Tanaka
 
Phpcon kansani-2013-pinoco
Phpcon kansani-2013-pinocoPhpcon kansani-2013-pinoco
Phpcon kansani-2013-pinocoHisateru Tanaka
 
はじめてのGit #gitkyoto
はじめてのGit #gitkyotoはじめてのGit #gitkyoto
はじめてのGit #gitkyotoHisateru Tanaka
 
PhpStormを使おう --高槻からは快速急行が早くなります #jbugj
PhpStormを使おう --高槻からは快速急行が早くなります #jbugjPhpStormを使おう --高槻からは快速急行が早くなります #jbugj
PhpStormを使おう --高槻からは快速急行が早くなります #jbugjHisateru Tanaka
 
いまどきのYiiフレームワーク
いまどきのYiiフレームワークいまどきのYiiフレームワーク
いまどきのYiiフレームワークHisateru Tanaka
 
関西PHP勉強会 php5.4つまみぐい
関西PHP勉強会 php5.4つまみぐい関西PHP勉強会 php5.4つまみぐい
関西PHP勉強会 php5.4つまみぐいHisateru Tanaka
 
Word pressのテーマは firephpでハックすれば 良かったのか
Word pressのテーマは firephpでハックすれば 良かったのかWord pressのテーマは firephpでハックすれば 良かったのか
Word pressのテーマは firephpでハックすれば 良かったのかHisateru Tanaka
 
Pinoco phptal-phpcon-kansai
Pinoco phptal-phpcon-kansaiPinoco phptal-phpcon-kansai
Pinoco phptal-phpcon-kansaiHisateru Tanaka
 
Yiiフレームワークを使ってみた
Yiiフレームワークを使ってみたYiiフレームワークを使ってみた
Yiiフレームワークを使ってみたHisateru Tanaka
 

Más de Hisateru Tanaka (19)

HTMLに学ぶ夫婦円満のコツ
HTMLに学ぶ夫婦円満のコツHTMLに学ぶ夫婦円満のコツ
HTMLに学ぶ夫婦円満のコツ
 
とある事業の脱レガシー
とある事業の脱レガシーとある事業の脱レガシー
とある事業の脱レガシー
 
Yii Framework 2.0 いま求められるRAD標準とは #phpkansai
Yii Framework 2.0 いま求められるRAD標準とは #phpkansaiYii Framework 2.0 いま求められるRAD標準とは #phpkansai
Yii Framework 2.0 いま求められるRAD標準とは #phpkansai
 
第21回関西PHP勉強会 ReactPHPは もっと流行って欲しい #phpkansai
第21回関西PHP勉強会 ReactPHPは もっと流行って欲しい #phpkansai第21回関西PHP勉強会 ReactPHPは もっと流行って欲しい #phpkansai
第21回関西PHP勉強会 ReactPHPは もっと流行って欲しい #phpkansai
 
ダイクストラの構造化 プログラミングに学ぶ 結婚生活
ダイクストラの構造化 プログラミングに学ぶ 結婚生活ダイクストラの構造化 プログラミングに学ぶ 結婚生活
ダイクストラの構造化 プログラミングに学ぶ 結婚生活
 
PHPカンファレンス関西2014 Yii Framework 2.0 遅れてきた5番目のフレームワーク
PHPカンファレンス関西2014 Yii Framework 2.0 遅れてきた5番目のフレームワークPHPカンファレンス関西2014 Yii Framework 2.0 遅れてきた5番目のフレームワーク
PHPカンファレンス関西2014 Yii Framework 2.0 遅れてきた5番目のフレームワーク
 
Grunt front-osaka-1-lt-tanaka
Grunt front-osaka-1-lt-tanakaGrunt front-osaka-1-lt-tanaka
Grunt front-osaka-1-lt-tanaka
 
Phpstormちょっといい話
Phpstormちょっといい話Phpstormちょっといい話
Phpstormちょっといい話
 
#phpmatsuri LT大会システムの中身
#phpmatsuri LT大会システムの中身#phpmatsuri LT大会システムの中身
#phpmatsuri LT大会システムの中身
 
&& || and or まぜるな危険
&& || and or まぜるな危険&& || and or まぜるな危険
&& || and or まぜるな危険
 
Phpcon kansani-2013-pinoco
Phpcon kansani-2013-pinocoPhpcon kansani-2013-pinoco
Phpcon kansani-2013-pinoco
 
はじめてのGit #gitkyoto
はじめてのGit #gitkyotoはじめてのGit #gitkyoto
はじめてのGit #gitkyoto
 
PhpStormを使おう --高槻からは快速急行が早くなります #jbugj
PhpStormを使おう --高槻からは快速急行が早くなります #jbugjPhpStormを使おう --高槻からは快速急行が早くなります #jbugj
PhpStormを使おう --高槻からは快速急行が早くなります #jbugj
 
いまどきのYiiフレームワーク
いまどきのYiiフレームワークいまどきのYiiフレームワーク
いまどきのYiiフレームワーク
 
Kphpug beginners-2
Kphpug beginners-2Kphpug beginners-2
Kphpug beginners-2
 
関西PHP勉強会 php5.4つまみぐい
関西PHP勉強会 php5.4つまみぐい関西PHP勉強会 php5.4つまみぐい
関西PHP勉強会 php5.4つまみぐい
 
Word pressのテーマは firephpでハックすれば 良かったのか
Word pressのテーマは firephpでハックすれば 良かったのかWord pressのテーマは firephpでハックすれば 良かったのか
Word pressのテーマは firephpでハックすれば 良かったのか
 
Pinoco phptal-phpcon-kansai
Pinoco phptal-phpcon-kansaiPinoco phptal-phpcon-kansai
Pinoco phptal-phpcon-kansai
 
Yiiフレームワークを使ってみた
Yiiフレームワークを使ってみたYiiフレームワークを使ってみた
Yiiフレームワークを使ってみた
 

関西Php勉強会のlimeの話