SlideShare a Scribd company logo
1 of 49
Download to read offline
CPANモジュールを
          PHPに移植してみた話



12年8月18日土曜日
自己紹介



12年8月18日土曜日
自己紹介




12年8月18日土曜日
自己紹介
    •    HN: memememomo




12年8月18日土曜日
自己紹介
    •    HN: memememomo
        •     はてなブログ(id: memememomo)




12年8月18日土曜日
自己紹介
    •    HN: memememomo
        •     はてなブログ(id: memememomo)
        •     Twitter(@memememomo)




12年8月18日土曜日
自己紹介
    •    HN: memememomo
        •     はてなブログ(id: memememomo)
        •     Twitter(@memememomo)
        •     github(memememomo)




12年8月18日土曜日
自己紹介
    •    HN: memememomo
        •     はてなブログ(id: memememomo)
        •     Twitter(@memememomo)
        •     github(memememomo)




12年8月18日土曜日
自己紹介
    •    HN: memememomo
        •     はてなブログ(id: memememomo)
        •     Twitter(@memememomo)
        •     github(memememomo)


    •    京都でエンジニアをやってる




12年8月18日土曜日
自己紹介
    •    HN: memememomo
        •     はてなブログ(id: memememomo)
        •     Twitter(@memememomo)
        •     github(memememomo)


    •    京都でエンジニアをやってる
    •    普段使ってる言語は Perl と PHP




12年8月18日土曜日
本題



12年8月18日土曜日
PHPに移植した背景と動機




12年8月18日土曜日
PHPに移植した背景と動機
    •    仕事でPHPを書かなければならない




12年8月18日土曜日
PHPに移植した背景と動機
    •    仕事でPHPを書かなければならない
    •    PHPでも使いたいCPANモジュールが出てくる




12年8月18日土曜日
PHPに移植した背景と動機
    •    仕事でPHPを書かなければならない
    •    PHPでも使いたいCPANモジュールが出てくる
    •    ググっても同じようなものがない




12年8月18日土曜日
PHPに移植した背景と動機
    •    仕事でPHPを書かなければならない
    •    PHPでも使いたいCPANモジュールが出てくる
    •    ググっても同じようなものがない




12年8月18日土曜日
PHPに移植した背景と動機
    •    仕事でPHPを書かなければならない
    •    PHPでも使いたいCPANモジュールが出てくる
    •    ググっても同じようなものがない


    •    PHPの練習になりそう




12年8月18日土曜日
PHPに移植した背景と動機
    •    仕事でPHPを書かなければならない
    •    PHPでも使いたいCPANモジュールが出てくる
    •    ググっても同じようなものがない


    •    PHPの練習になりそう
    •    Perlの勉強にもなりそうなので、モチベーションが保
         てる




12年8月18日土曜日
移植してみたもの




12年8月18日土曜日
移植してみたもの
    •    SQL::Maker




12年8月18日土曜日
移植してみたもの
    •    SQL::Maker
        •  ハッシュなどで組み立てたデータから、SQL文とバ
           インドの値リストを作成するモジュール




12年8月18日土曜日
移植してみたもの
    •    SQL::Maker
        •  ハッシュなどで組み立てたデータから、SQL文とバ
           インドの値リストを作成するモジュール
        •     O/Rマッパーのないプロジェクトに導入しやすい




12年8月18日土曜日
移植してみたもの
    •    SQL::Maker
        •  ハッシュなどで組み立てたデータから、SQL文とバ
           インドの値リストを作成するモジュール
        •     O/Rマッパーのないプロジェクトに導入しやすい
        •     バッチ処理を書くときに使いやすい




12年8月18日土曜日
移植してみたもの
    •    SQL::Maker
        •  ハッシュなどで組み立てたデータから、SQL文とバ
           インドの値リストを作成するモジュール
        •     O/Rマッパーのないプロジェクトに導入しやすい
        •     バッチ処理を書くときに使いやすい
    •    Test::mysqld




12年8月18日土曜日
移植してみたもの
    •    SQL::Maker
        •  ハッシュなどで組み立てたデータから、SQL文とバ
           インドの値リストを作成するモジュール
        •     O/Rマッパーのないプロジェクトに導入しやすい
        •     バッチ処理を書くときに使いやすい
    •    Test::mysqld
        •  テスト用に一時的にmysqlのインスタンスを作成する
           モジュール




12年8月18日土曜日
SQL_Maker
   // オブジェクト生成
   $builder = new SQL_Maker(array('driver' => 'mysql'));

   // 設定
   $table_name = 'pokedex';
   $columns    = array('*');
   $where      = array(
                      'name'     => 'Pikachu',
                      'legendry' => null,
                      'area'     => array('ish', 'joto'),
                      'base_hp'  => array('<=' => 40)),
                      'type'     => array('like' => '%electric%')),
                      'id'       => SQL_Maker::scalar( array('= (? - 0)', 25) )
                   );
   $opts       = array('limit' => 1);




   // SQL文とbindsを生成
   list($sql, $binds) = $builder->select($table_name, $columns, $where, $opts);




12年8月18日土曜日
SQL::Makerを移植してみて




12年8月18日土曜日
SQL::Makerを移植してみて
    •    Perlでは、シジル($@%)やカッコ(()[]{})でデータ
         構造を表せるのは良い




12年8月18日土曜日
SQL::Makerを移植してみて
    •    Perlでは、シジル($@%)やカッコ(()[]{})でデータ
         構造を表せるのは良い

        •     PHPに移植したらarray関数だらけに




12年8月18日土曜日
SQL::Makerを移植してみて
    •    Perlでは、シジル($@%)やカッコ(()[]{})でデータ
         構造を表せるのは良い

        •     PHPに移植したらarray関数だらけに

    •    PHPUnitの練習になった




12年8月18日土曜日
TODO




12年8月18日土曜日
TODO
    •    プラグイン機能がまだ移植できていない




12年8月18日土曜日
TODO
    •    プラグイン機能がまだ移植できていない
        •     動的にメソッドを追加する方法がよく分からない...




12年8月18日土曜日
Test_mysqld




12年8月18日土曜日
Test_mysqld
    •    @taiyohさんが移植してる途中だったものを進めた




12年8月18日土曜日
Test_mysqld
    •    @taiyohさんが移植してる途中だったものを進めた
    •    PHPをコンパイルする時に--enable-pcntlオプションをつ
         ける必要がある




12年8月18日土曜日
// my.cnfの内容
  $my_cnf = array('skip-networking' => '');

  // Test_mysqldの設定
  $opts = array();



  // オブジェクト生成(MySQLのプロセスが出来上がる)
  $mysqld = new Test_mysqld($my_cnf, $opts);

  // DSN取得
  $dsn = $mysqld->dsn();

  // DSNを使ってDBに接続
  $dsn = new PDO($dsn);



  // do something




12年8月18日土曜日
Test_mysqldを移植してみて




12年8月18日土曜日
Test_mysqldを移植してみて
    •    マルチプロセス処理のプログラムの勉強になった




12年8月18日土曜日
Test_mysqldを移植してみて
    •    マルチプロセス処理のプログラムの勉強になった
        •     普通にPHPをやっていると使わない機能




12年8月18日土曜日
Test_mysqldを移植してみて
    •    マルチプロセス処理のプログラムの勉強になった
        •     普通にPHPをやっていると使わない機能
              •   pcntl_fork() / pcntl_exec() / pcntl_waitpid()




12年8月18日土曜日
まとめ



12年8月18日土曜日
まとめ




12年8月18日土曜日
まとめ
    •    CPANモジュールをPHPに移植してみると




12年8月18日土曜日
まとめ
    •    CPANモジュールをPHPに移植してみると
        •     PHPの練習になる




12年8月18日土曜日
まとめ
    •    CPANモジュールをPHPに移植してみると
        •     PHPの練習になる
        •     Perlの勉強にもなる




12年8月18日土曜日
まとめ
    •    CPANモジュールをPHPに移植してみると
        •     PHPの練習になる
        •     Perlの勉強にもなる
        •     PHPでCPANモジュールが使えるようになる




12年8月18日土曜日
ご清聴
          ありがとうございました



12年8月18日土曜日
参照
    •    SQL_Maker
        •  https://github.com/memememomo/php-SQL-Maker

    •    Test_mysqld
        •  https://github.com/taiyoh/Test_mysqld-php




12年8月18日土曜日

More Related Content

Similar to CPANモジュールをPHPに移植してみた話

徹底攻略!PHP5.4
徹底攻略!PHP5.4徹底攻略!PHP5.4
徹底攻略!PHP5.4Takuya Sato
 
OCamlでWebアプリケーションを作るn個の方法
OCamlでWebアプリケーションを作るn個の方法OCamlでWebアプリケーションを作るn個の方法
OCamlでWebアプリケーションを作るn個の方法Hiroki Mizuno
 
FukuokaPHP 3
FukuokaPHP 3FukuokaPHP 3
FukuokaPHP 3ichikaway
 
pythonでオフィス快適化計画
pythonでオフィス快適化計画pythonでオフィス快適化計画
pythonでオフィス快適化計画Kazufumi Ohkawa
 
いまどきのPHP開発現場 -2015年秋-
いまどきのPHP開発現場 -2015年秋-いまどきのPHP開発現場 -2015年秋-
いまどきのPHP開発現場 -2015年秋-Masashi Shinbara
 
PHPで時間旅行をする方法
PHPで時間旅行をする方法PHPで時間旅行をする方法
PHPで時間旅行をする方法Yoshio Hanawa
 
mbed+Haskellどうでしょう
mbed+Haskellどうでしょうmbed+Haskellどうでしょう
mbed+HaskellどうでしょうKiwamu Okabe
 
Useful Django 1.4
Useful Django 1.4Useful Django 1.4
Useful Django 1.4hirokiky
 
Hyper → Highspeed → Development
Hyper → Highspeed → DevelopmentHyper → Highspeed → Development
Hyper → Highspeed → Developmentaktsk
 
ReVIEWとLibreOfficeとOMakeで本を書きましょう!
ReVIEWとLibreOfficeとOMakeで本を書きましょう!ReVIEWとLibreOfficeとOMakeで本を書きましょう!
ReVIEWとLibreOfficeとOMakeで本を書きましょう!Kiwamu Okabe
 
concrete5 テーマ作成ハンズオン (Ver5.6 まで)
concrete5 テーマ作成ハンズオン (Ver5.6 まで)concrete5 テーマ作成ハンズオン (Ver5.6 まで)
concrete5 テーマ作成ハンズオン (Ver5.6 まで)Katz Ueno
 
Scala超入門 - 2014/12/13 Scala関西勉強会
Scala超入門 - 2014/12/13 Scala関西勉強会Scala超入門 - 2014/12/13 Scala関西勉強会
Scala超入門 - 2014/12/13 Scala関西勉強会Asami Abe
 
Sinatraでwebアプリケーション開発を学ぶ
Sinatraでwebアプリケーション開発を学ぶSinatraでwebアプリケーション開発を学ぶ
Sinatraでwebアプリケーション開発を学ぶHiroshi Oyamada
 
mbedではじめる組み込みHaskellプログラミング
mbedではじめる組み込みHaskellプログラミングmbedではじめる組み込みHaskellプログラミング
mbedではじめる組み込みHaskellプログラミングKiwamu Okabe
 
CPANの依存モジュールをもう少し正しく検出したい
CPANの依存モジュールをもう少し正しく検出したいCPANの依存モジュールをもう少し正しく検出したい
CPANの依存モジュールをもう少し正しく検出したいcharsbar
 
Apacheの展望とmod_perlの超絶技巧 #yapcasia
Apacheの展望とmod_perlの超絶技巧 #yapcasiaApacheの展望とmod_perlの超絶技巧 #yapcasia
Apacheの展望とmod_perlの超絶技巧 #yapcasia鉄次 尾形
 
Prophecyを使ったユニットテスト
Prophecyを使ったユニットテスト Prophecyを使ったユニットテスト
Prophecyを使ったユニットテスト Akio Ishida
 
意図を表現するプログラミング
意図を表現するプログラミング意図を表現するプログラミング
意図を表現するプログラミングAtsuhiro Kubo
 
Mojoliciousをウェブ制作現場で使ってみてる
Mojoliciousをウェブ制作現場で使ってみてるMojoliciousをウェブ制作現場で使ってみてる
Mojoliciousをウェブ制作現場で使ってみてるjamadam
 

Similar to CPANモジュールをPHPに移植してみた話 (20)

徹底攻略!PHP5.4
徹底攻略!PHP5.4徹底攻略!PHP5.4
徹底攻略!PHP5.4
 
OCamlでWebアプリケーションを作るn個の方法
OCamlでWebアプリケーションを作るn個の方法OCamlでWebアプリケーションを作るn個の方法
OCamlでWebアプリケーションを作るn個の方法
 
FukuokaPHP 3
FukuokaPHP 3FukuokaPHP 3
FukuokaPHP 3
 
pythonでオフィス快適化計画
pythonでオフィス快適化計画pythonでオフィス快適化計画
pythonでオフィス快適化計画
 
いまどきのPHP開発現場 -2015年秋-
いまどきのPHP開発現場 -2015年秋-いまどきのPHP開発現場 -2015年秋-
いまどきのPHP開発現場 -2015年秋-
 
PHPで時間旅行をする方法
PHPで時間旅行をする方法PHPで時間旅行をする方法
PHPで時間旅行をする方法
 
mbed+Haskellどうでしょう
mbed+Haskellどうでしょうmbed+Haskellどうでしょう
mbed+Haskellどうでしょう
 
Useful Django 1.4
Useful Django 1.4Useful Django 1.4
Useful Django 1.4
 
Hyper → Highspeed → Development
Hyper → Highspeed → DevelopmentHyper → Highspeed → Development
Hyper → Highspeed → Development
 
WCO2012「PHP教室」
WCO2012「PHP教室」WCO2012「PHP教室」
WCO2012「PHP教室」
 
ReVIEWとLibreOfficeとOMakeで本を書きましょう!
ReVIEWとLibreOfficeとOMakeで本を書きましょう!ReVIEWとLibreOfficeとOMakeで本を書きましょう!
ReVIEWとLibreOfficeとOMakeで本を書きましょう!
 
concrete5 テーマ作成ハンズオン (Ver5.6 まで)
concrete5 テーマ作成ハンズオン (Ver5.6 まで)concrete5 テーマ作成ハンズオン (Ver5.6 まで)
concrete5 テーマ作成ハンズオン (Ver5.6 まで)
 
Scala超入門 - 2014/12/13 Scala関西勉強会
Scala超入門 - 2014/12/13 Scala関西勉強会Scala超入門 - 2014/12/13 Scala関西勉強会
Scala超入門 - 2014/12/13 Scala関西勉強会
 
Sinatraでwebアプリケーション開発を学ぶ
Sinatraでwebアプリケーション開発を学ぶSinatraでwebアプリケーション開発を学ぶ
Sinatraでwebアプリケーション開発を学ぶ
 
mbedではじめる組み込みHaskellプログラミング
mbedではじめる組み込みHaskellプログラミングmbedではじめる組み込みHaskellプログラミング
mbedではじめる組み込みHaskellプログラミング
 
CPANの依存モジュールをもう少し正しく検出したい
CPANの依存モジュールをもう少し正しく検出したいCPANの依存モジュールをもう少し正しく検出したい
CPANの依存モジュールをもう少し正しく検出したい
 
Apacheの展望とmod_perlの超絶技巧 #yapcasia
Apacheの展望とmod_perlの超絶技巧 #yapcasiaApacheの展望とmod_perlの超絶技巧 #yapcasia
Apacheの展望とmod_perlの超絶技巧 #yapcasia
 
Prophecyを使ったユニットテスト
Prophecyを使ったユニットテスト Prophecyを使ったユニットテスト
Prophecyを使ったユニットテスト
 
意図を表現するプログラミング
意図を表現するプログラミング意図を表現するプログラミング
意図を表現するプログラミング
 
Mojoliciousをウェブ制作現場で使ってみてる
Mojoliciousをウェブ制作現場で使ってみてるMojoliciousをウェブ制作現場で使ってみてる
Mojoliciousをウェブ制作現場で使ってみてる
 

CPANモジュールをPHPに移植してみた話

  • 1. CPANモジュールを PHPに移植してみた話 12年8月18日土曜日
  • 4. 自己紹介 • HN: memememomo 12年8月18日土曜日
  • 5. 自己紹介 • HN: memememomo • はてなブログ(id: memememomo) 12年8月18日土曜日
  • 6. 自己紹介 • HN: memememomo • はてなブログ(id: memememomo) • Twitter(@memememomo) 12年8月18日土曜日
  • 7. 自己紹介 • HN: memememomo • はてなブログ(id: memememomo) • Twitter(@memememomo) • github(memememomo) 12年8月18日土曜日
  • 8. 自己紹介 • HN: memememomo • はてなブログ(id: memememomo) • Twitter(@memememomo) • github(memememomo) 12年8月18日土曜日
  • 9. 自己紹介 • HN: memememomo • はてなブログ(id: memememomo) • Twitter(@memememomo) • github(memememomo) • 京都でエンジニアをやってる 12年8月18日土曜日
  • 10. 自己紹介 • HN: memememomo • はてなブログ(id: memememomo) • Twitter(@memememomo) • github(memememomo) • 京都でエンジニアをやってる • 普段使ってる言語は Perl と PHP 12年8月18日土曜日
  • 13. PHPに移植した背景と動機 • 仕事でPHPを書かなければならない 12年8月18日土曜日
  • 14. PHPに移植した背景と動機 • 仕事でPHPを書かなければならない • PHPでも使いたいCPANモジュールが出てくる 12年8月18日土曜日
  • 15. PHPに移植した背景と動機 • 仕事でPHPを書かなければならない • PHPでも使いたいCPANモジュールが出てくる • ググっても同じようなものがない 12年8月18日土曜日
  • 16. PHPに移植した背景と動機 • 仕事でPHPを書かなければならない • PHPでも使いたいCPANモジュールが出てくる • ググっても同じようなものがない 12年8月18日土曜日
  • 17. PHPに移植した背景と動機 • 仕事でPHPを書かなければならない • PHPでも使いたいCPANモジュールが出てくる • ググっても同じようなものがない • PHPの練習になりそう 12年8月18日土曜日
  • 18. PHPに移植した背景と動機 • 仕事でPHPを書かなければならない • PHPでも使いたいCPANモジュールが出てくる • ググっても同じようなものがない • PHPの練習になりそう • Perlの勉強にもなりそうなので、モチベーションが保 てる 12年8月18日土曜日
  • 20. 移植してみたもの • SQL::Maker 12年8月18日土曜日
  • 21. 移植してみたもの • SQL::Maker • ハッシュなどで組み立てたデータから、SQL文とバ インドの値リストを作成するモジュール 12年8月18日土曜日
  • 22. 移植してみたもの • SQL::Maker • ハッシュなどで組み立てたデータから、SQL文とバ インドの値リストを作成するモジュール • O/Rマッパーのないプロジェクトに導入しやすい 12年8月18日土曜日
  • 23. 移植してみたもの • SQL::Maker • ハッシュなどで組み立てたデータから、SQL文とバ インドの値リストを作成するモジュール • O/Rマッパーのないプロジェクトに導入しやすい • バッチ処理を書くときに使いやすい 12年8月18日土曜日
  • 24. 移植してみたもの • SQL::Maker • ハッシュなどで組み立てたデータから、SQL文とバ インドの値リストを作成するモジュール • O/Rマッパーのないプロジェクトに導入しやすい • バッチ処理を書くときに使いやすい • Test::mysqld 12年8月18日土曜日
  • 25. 移植してみたもの • SQL::Maker • ハッシュなどで組み立てたデータから、SQL文とバ インドの値リストを作成するモジュール • O/Rマッパーのないプロジェクトに導入しやすい • バッチ処理を書くときに使いやすい • Test::mysqld • テスト用に一時的にmysqlのインスタンスを作成する モジュール 12年8月18日土曜日
  • 26. SQL_Maker // オブジェクト生成 $builder = new SQL_Maker(array('driver' => 'mysql')); // 設定 $table_name = 'pokedex'; $columns = array('*'); $where = array( 'name' => 'Pikachu', 'legendry' => null, 'area' => array('ish', 'joto'), 'base_hp' => array('<=' => 40)), 'type' => array('like' => '%electric%')), 'id' => SQL_Maker::scalar( array('= (? - 0)', 25) ) ); $opts = array('limit' => 1); // SQL文とbindsを生成 list($sql, $binds) = $builder->select($table_name, $columns, $where, $opts); 12年8月18日土曜日
  • 28. SQL::Makerを移植してみて • Perlでは、シジル($@%)やカッコ(()[]{})でデータ 構造を表せるのは良い 12年8月18日土曜日
  • 29. SQL::Makerを移植してみて • Perlでは、シジル($@%)やカッコ(()[]{})でデータ 構造を表せるのは良い • PHPに移植したらarray関数だらけに 12年8月18日土曜日
  • 30. SQL::Makerを移植してみて • Perlでは、シジル($@%)やカッコ(()[]{})でデータ 構造を表せるのは良い • PHPに移植したらarray関数だらけに • PHPUnitの練習になった 12年8月18日土曜日
  • 32. TODO • プラグイン機能がまだ移植できていない 12年8月18日土曜日
  • 33. TODO • プラグイン機能がまだ移植できていない • 動的にメソッドを追加する方法がよく分からない... 12年8月18日土曜日
  • 35. Test_mysqld • @taiyohさんが移植してる途中だったものを進めた 12年8月18日土曜日
  • 36. Test_mysqld • @taiyohさんが移植してる途中だったものを進めた • PHPをコンパイルする時に--enable-pcntlオプションをつ ける必要がある 12年8月18日土曜日
  • 37. // my.cnfの内容 $my_cnf = array('skip-networking' => ''); // Test_mysqldの設定 $opts = array(); // オブジェクト生成(MySQLのプロセスが出来上がる) $mysqld = new Test_mysqld($my_cnf, $opts); // DSN取得 $dsn = $mysqld->dsn(); // DSNを使ってDBに接続 $dsn = new PDO($dsn); // do something 12年8月18日土曜日
  • 39. Test_mysqldを移植してみて • マルチプロセス処理のプログラムの勉強になった 12年8月18日土曜日
  • 40. Test_mysqldを移植してみて • マルチプロセス処理のプログラムの勉強になった • 普通にPHPをやっていると使わない機能 12年8月18日土曜日
  • 41. Test_mysqldを移植してみて • マルチプロセス処理のプログラムの勉強になった • 普通にPHPをやっていると使わない機能 • pcntl_fork() / pcntl_exec() / pcntl_waitpid() 12年8月18日土曜日
  • 44. まとめ • CPANモジュールをPHPに移植してみると 12年8月18日土曜日
  • 45. まとめ • CPANモジュールをPHPに移植してみると • PHPの練習になる 12年8月18日土曜日
  • 46. まとめ • CPANモジュールをPHPに移植してみると • PHPの練習になる • Perlの勉強にもなる 12年8月18日土曜日
  • 47. まとめ • CPANモジュールをPHPに移植してみると • PHPの練習になる • Perlの勉強にもなる • PHPでCPANモジュールが使えるようになる 12年8月18日土曜日
  • 48. ご清聴 ありがとうございました 12年8月18日土曜日
  • 49. 参照 • SQL_Maker • https://github.com/memememomo/php-SQL-Maker • Test_mysqld • https://github.com/taiyoh/Test_mysqld-php 12年8月18日土曜日