CodeIgniter Con Tokyo 2011 資料

3,827 views
3,772 views

Published on

CodeIgniterカンファレンス東京で発表した資料です。

Published in: Technology
0 Comments
6 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
3,827
On SlideShare
0
From Embeds
0
Number of Embeds
1,149
Actions
Shares
0
Downloads
0
Comments
0
Likes
6
Embeds 0
No embeds

No notes for slide

CodeIgniter Con Tokyo 2011 資料

  1. 1. CodeIgniter 2.0からはじめる HMVC構造のコーディング とUnit_testクラスの活用 ネコネットデザイン事務所 宮川 貴子(NEKOGET)
  2. 2. 自己紹介Self-introduction
  3. 3. CodeIgniter WORK 初めてのバージョンは1.6.3 フロントエンドエンジニア?CodeIgniter徹底入門の 個人事務所です。お世話になりました! HTMLマークアップ去年1年のPHPで開発案件は PHPでプログラムを書いたり9割CodeIgniterです。 デザインをしたり、 WEBのお仕事10年目。 自己紹介 Self-introduction OTHER PHP 出会った頃はすでに4でした今回、スポンサー初体験!普段お世話になっている はじめての言語はPerlCodeIgniterの普及と改善に Perlで書いたCGIをPHPに少しでも協力したいです。 書き直すところからスタート DreamweaverでPHP!
  4. 4. CodeIgniter WORK 初めてのバージョンは1.6.3 フロントエンドエンジニア?CodeIgniter徹底入門の 個人事務所です。お世話になりました! HTMLマークアップ去年1年のPHPで開発案件は PHPでプログラムを書いたり9割CodeIgniterです。 デザインをしたり、 WEBのお仕事10年目。 自己紹介 Self-introduction OTHER PHP 出会った頃はすでに4でした今回、スポンサー初体験!普段お世話になっている はじめての言語はPerlCodeIgniterの普及と改善に Perlで書いたCGIをPHPに少しでも協力したいです。 書き直すところからスタート DreamweaverでPHP!
  5. 5. CodeIgniter WORK 初めてのバージョンは1.6.3 フロントエンドエンジニア?CodeIgniter徹底入門の 個人事務所です。お世話になりました! HTMLマークアップ去年1年のPHPで開発案件は PHPでプログラムを書いたり9割CodeIgniterです。 デザインをしたり、 WEBのお仕事10年目。 自己紹介 Self-introduction OTHER PHP 出会った頃はすでに4でした今回、スポンサー初体験!普段お世話になっている はじめての言語はPerlCodeIgniterの普及と改善に Perlで書いたCGIをPHPに少しでも協力したいです。 書き直すところからスタート DreamweaverでPHP!
  6. 6. CodeIgniter WORK初めてのバージョンは1.6.3 フロントエンドエンジニア?CodeIgniter徹底入門の 個人事務所です。お世話になりました! HTMLマークアップ去年1年のPHPで開発案件は PHPでプログラムを書いたり9割CodeIgniterです。 デザインをしたり、 WEBのお仕事10年目。 自己紹介 Self-introduction THANKS PHP ☆感謝☆ PHP4から使い始めした。ありがとうございます! はじめての言語はPerl今回、スポンサー初体験 Perlで書いたCGIをPHPにさせていただきました☆ 書き直すところからスタート DreamweaverでPHP!
  7. 7. *祝*CodeIgniter2.02011.1.28 Released
  8. 8. 早速HMVC構造化Modular Extensions - HMVCHMVCモジュール化ライブラリ
  9. 9. その前にHMVCとは? MVCとはなんだろう?
  10. 10. Model-View-Controller(モデル・ビュー・コントローラ;MVC)は、コンピュータ内部のデータをユーザに提示し、それに対してユーザが何らかの指示を出すタイプの、独自のユーザーインタフェースをもつアプリケーションソフトウェアを、以下に述べるようなmodel・view・controllerの3つの部分に分割して設計・実装するという技法、又はそのような構造をいう。 wikipediaより
  11. 11. HMVC = 階層化されたMVC参考:http://techportal.ibuildings.com/2010/02/22/scaling-web-applications-with-hmvc/
  12. 12. CodeIgniter通常の状態 実際にコードをapplication PHP PHP 書くエリア。 Controllers PHP Views PHP PHP PHP model PHP PHP PHP helper PHP PHP PHP
  13. 13. Vie w s PH P PHP mode l PHP PH PCodeIgniter P HP he lper PHP PH P P HPHMVC化された状態 application PH P P HP C ont r oller s PH P Vie w s PH P PH P PHPapplication PHP PHP Controllers PHP mode l PHP PH P P HP he lper PHP PH P P HP Views PHP PHP PHP application PH P P HP C ont r oller s PH P modules Vie w s PH P PH P PHP PHP model PHP PHP mode l PHP PH P P HP he lper PHP PH P P HP helper PHP PHP PHP application PH P P HP C ont r oller s PH P
  14. 14. CodeIgniter2.0を HMVC構造化 してくれる便利なライブラリModular Extensions - HMVCHMVCモジュール化ライブラリ
  15. 15. CodeIgniter2.0へ組み込み方Modular Extensions - HMVC
  16. 16. 10ステップ設置手順
  17. 17. CodeIgniter2.0(1)CodeIgniter2.0を設置
  18. 18. Modular Extensions - HMVChttps://bitbucket.org/wiredesignz/codeigniter-modular-extensions-hmvc/ このあたりに Dowload wiredesignzさんが作っています。 以前はGoogle Codeで公開 されていましたが、今は本家と同じ bitbucketで公開されています。 入手方法 (1)Mercurialでチェックアウト まーきゅりある (2)圧縮ファイルをダウンロード zip,gz,bz2で ダウンロードできます。 https://bitbucket.org/wiredesignz/codeigniter-modular-extensions-hmvc/downloads
  19. 19. Modular Extensions - HMVChttps://bitbucket.org/wiredesignz/codeigniter-modular-extensions-hmvc/downloads このあたりに zip,gz,bz2 (2)ファイルをダウンロード。
  20. 20. Modular Extensions - HMVChttps://bitbucket.org/wiredesignz/codeigniter-modular-extensions-hmvc/downloads(3)ダウンロードしたファイルを解凍 codeigniter-modular-extensions-hmvc 解答すると フォルダが2つ third_party core
  21. 21. Modular Extensions - HMVChttps://bitbucket.org/wiredesignz/codeigniter-modular-extensions-hmvc/downloads(4)third_partyフォルダの中身を  application/third_partyに設置 application codeigniter-modular-extensions-hmvc third_party third_party core core config
  22. 22. Modular Extensions - HMVChttps://bitbucket.org/wiredesignz/codeigniter-modular-extensions-hmvc/downloads(5)coreフォルダの中身を  application/core/の中に設置 application codeigniter-modular-extensions-hmvc third_party third_party core core config
  23. 23. Modular Extensions - HMVChttps://bitbucket.org/wiredesignz/codeigniter-modular-extensions-hmvc/downloads(6)application/config/config.php$config[’base_url’]の設定 $config[’base_url’] = ‘http://localhost/’;
  24. 24. (7)設置場所にアクセス。Welcomeページが表示される事を確認
  25. 25. (8)modulesフォルダを作成。modules/welcomeフォルダを作成(welcomeモジュールの作成)application/controllers/welcome.phpをapplication/modules/welcome/controllers/welcome.phpへ移動 welcome application PH P P HP modules C ont r oller s PH P Vie w s PH P PH P PHP mode l PHP PH P P HP he lper PHP PH P P HP
  26. 26. (8)modulesフォルダを作成。modules/welcomeフォルダを作成(welcomeモジュールの作成)Controllerファイルはmodules/以下を、Viewファイルはapplication/views/welcome_message.php読み込んで動作している状態 welcome application PH P P HP modules C ont r oller s PH P Vie w s PH P PH P PHP mode l PHP PH P P HP he lper PHP PH P P HP
  27. 27. (9)views/welcome_message.phpmodules/welcome/viewsに移動(welcomeモジュールの中に作成)ControllerファイルもViewファイルもmodules/welcomeの中のファイルを読み込んでいる状態 welcome application PH P P HP modules C ont r oller s PH P PH P Vie w s PH P PH P PHP mode l PHP PH P P HP he lper PHP PH P P HP
  28. 28. (10)設置場所にアクセス。Welcomeページが表示される事を確認
  29. 29. 設置完了組み込んで動作確認まで終わった状態
  30. 30. 足りないものは 上の階層が 助けてくれる 仕組みになる。複数のモジュールを跨いで使われる共通機能を上の階層に置くことができる
  31. 31. 違うモジュールのの機能を呼び出せる。他のモジュール上に設置されている、helperやmodel,view,library,controllerまでも呼び出すことができる。
  32. 32. HMVC構造にするとちょっと自由になる開発手順。 (例)
  33. 33. Aさんがapplication/models/model_users.phpmodel_usersクラスを作成Bさんがmodel_users.phpの中のmodel_usersクラスのメソッドの情報から一覧表示用の機能を作成。Cさんがmodel_users.phpの中のmodel_usersクラスのメソッドの情報から詳細情報の表示機能を作成。
  34. 34. Aさんがapplication/models/model_users.phpmodel_usersクラスを作成Bさんがmodel_users.phpの中のmodel_usersクラスのメソッドの情報から一覧表示用の機能を作成。Cさんがmodel_users.phpの中のmodel_usersクラスのメソッドの情報から詳細情報の表示機能を作成。
  35. 35. Aさんがapplication/models/model_users.phpmodel_usersクラスを作成Bさんがmodel_users.phpの中のmodel_usersクラスのメソッドの情報から一覧表示用の機能を作成。Cさんがmodel_users.phpの中のmodel_usersクラスのメソッドの情報から詳細情報の表示機能を作成。
  36. 36. Vie w s PH P Aさんの場合 PHP 作業 mode l PHP PH P P HP Aさん作業用モジュール の中でmodel_user.phpを作成 he lper PHP PH P P HP 完成したら上の階層へ設置 application PH P P HP C ont r oller s PH P Vie w s PH P PH P PHP application PHP PHP Controllers PHP mode l PHP PH P P HP he lper PHP PH P P HP Views PHP PHP完成したら PHP上階層に設置 application C ont r oller s PH P P HP PH P modules Vie w s PH P PH P PHP PHP model PHP PHP mode l PHP PH P P HP he lper PHP PH P P HP helper PHP PHP PHP application PH P P HP C ont r oller s PH P
  37. 37. Vie w s PH P PHP Bさんの場合 mode l PHP PH P P HP リスト表示をさせる機能を実装する he lper PHP PH P P HP モジュールに、model_user.php のモックを設置。 モックからデータを受け取り、 application PH P P HP C ont r oller s PH P Controllerファイルと ここで作業 Vie w s PH P PH P PHP viewファイルを作成 PHP application Controllers PHP PHP mode l PHP PH P P HP he lper PHP PH P P HP Views PHP PHP PHP application PH P P HP C ont r oller s PH P modules Vie w s PH P PH P PHP PHPAさん未完成 model PHP PHP mode l PHPなので、まだ PH P P HPファイルはない。 he lper PHP PH P P HP helper PHP PHP PHP application PH P P HP C ont r oller s PH P
  38. 38. Vie w s PH P PHP Cさんの場合 mode l PHP PH P P HP 詳細情報を表示する機能を実装する he lper PHP PH P P HP モジュールに、model_user.php のモックを設置。 モックからデータを受け取り、 application PH P P HP C ont r oller s PH P Controllerファイルと Vie w s PH P PH P PHP viewファイルを作成 PHP application Controllers PHP PHP mode l PHP PH P P HP he lper PHP PH P P HP Views PHP PHP PHP application PH P P HP C ont r oller s PH P modules ここで作業 Vie w s PH P PH P PHP PHPAさん未完成 model PHP PHP mode l PHPなので、まだ PH P P HPファイルはない。 he lper PHP PH P P HP helper PHP PHP PHP application PH P P HP C ont r oller s PH P
  39. 39. Vie w s PH P PHP BさんとCさん モックを mode l PHP PH P P HP 削除 モックの状態の he lper PHP PH P P HP モジュール内の models/model_users.phpを削除。 application C ont r oller s PH P P HP PH P 上階層のmodels/model_users.php Vie w s PH P を読み込み動作させる。 PH P PHP application PHP PHP Controllers PHP モックを mode l PHP PH P 削除 P HP he lper PHP PH P P HP Views PHP PHP PHP application PH P P HP C ont r oller s PH P modules Vie w s PH P PH P PHP PHPAさん完成 models PHP PHP mode l PHPファイルを設置。 PH P P HP he lper PHP PH P P HP helper PHP PHP PHP application PH P P HP C ont r oller s PH P
  40. 40. 共通部分のコード、機能特有のコードを無理なく分業ができる仕組みmodelもhelperもlibraryもviewもモックをつくって共通部品の完成を待たずに作業をすすめる。
  41. 41. さらに効率よく分業するために欲しくなるモノ。
  42. 42. 正しく動いている確証と安心。
  43. 43. Unit testing Class $this->load->library(’unit_test’);
  44. 44. Unit testing Class テストと解答を見比べて 答え合わせをした 結果をお知らせしてくれる 役割。$test = 1 + 1;$expected_result = 2;$test_name = ‘Adds one plus one’;$this->unit->run($test, $expected_result, $test_name);echo echo $this->unit->report(); ユーザーガイドより
  45. 45. テストは どこに書くべき?という疑問 ?テストの実行を実行させないための機能が用意されている。$this->unit->active(FALSE); テストをON,OFFしたい場面ってどこだろう?
  46. 46. (1)テストの結果が表示されても大丈夫な場所(2)modelもviewもlibraryもhelperも呼び出しやすい場所(3)実装コード上にデバッグコードや  テスト結果をechoするのは  ちょっと怖い
  47. 47. テストを実行するための場所があればいいじゃない?
  48. 48. 過去の遺産1.7.3で作ったテスト用モジュールを動かしてみました。 以前にphp勉強会にて発表させていただいた 1.7.3用に書いたテストです。
  49. 49. CodeIgniter2.0Unit_testクラスの1.7.3から良くなった点
  50. 50. unit_testを使ったテストの書き方は1.7.3も2.0も同じ同じ挙動をしてくれることを確認 unit_testクラスをどうテストするか?に一瞬悩んだ訳ですが、 ここは実際に動かして目確認しました。 そのうち動作テストをするコードを書いてみたいと思います。
  51. 51. notes!!!内容をメモできる場所ができてる!!!
  52. 52. notes!!!内容をメモできる場所ができてる!!! CodeIgniter2.0ユーザガイド(β版より) CodeIgniter日本語化プロジェクトでは メンバー募集中です。
  53. 53. 1.7.3用につくったモジュールを2.0で動かしてみた。class Test_sample extends Controller { ...class Test_sample extends CI_Controller { ... コレぐらいの変更でそのまま動きました。
  54. 54. 動作確認もうこれがないと仕事ができなくなっちゃうよと言える大事なコードたち。
  55. 55. 結果10勝2敗10ファイル中2つのファイルにエラーを発見
  56. 56. エラーの発生箇所はテスト結果が教えてくれる!エラー内容も教えてくれる!
  57. 57. テストを順番に実行。テスト結果を目確認
  58. 58. エラー箇所を修正 →テストを実行エラー箇所を修正 →テストを実行エラー箇所を修正 →テストを実行
  59. 59. ALL PASSED1時間かからなかった!テスト書いててよかった!
  60. 60. コードを書く時間 +テストを書く時間時間的なコストと目の前の納期
  61. 61. 1.7.3から2.0へのバージョンアップを機会にUnit_testクラスを使ってみた方が良いです。
  62. 62. 体感と事実あれ?テストを書くという余計に発生してると思ってた 時間(コスト)今、すごい勢いで取り返しちゃった???
  63. 63. 2.0から2.0.1への移行。2.0.1から次のバージョンへの移行その次のバージョンから次のバージョンへの.... これから先ずっとあるバージョンアップと現行コードの移行作業。
  64. 64. きっと動くだろう?は動くに決まってんでしょ!に変えるべき。
  65. 65. よく使うファイルぐらいはテストを書いておくと幸せになれますよというお話でした。
  66. 66. 余談
  67. 67. 余談unit_testクラスを利用する意外のCodeIgniterのテスト
  68. 68. CIUnitphpUnitをCodeIgniterで使う為のソケットライブラリ https://bitbucket.org/rafsoaken/ciunitやはりbitbucketにありました。今CodeIgniter関連のコードはbitbucketで探すのが早いと思われます。2.0で動くかどうかは、調べていません......
  69. 69. Simple TESThttp://www.google.co.jp/search?q=CodeIgniter+simple+test&hl=ja&client=firefox-a&hs=sOy&rls=org.mozilla:ja-JP-mac:official&prmd=ivns&lr=lang_ja&sa=X&ei=9S9fTfjnGYTwvwOp-PSMAg&ved=0CBcQuAEGoogle検索結果 約 61,200 件 結構情報ありそうです。
  70. 70. MacintoshでMercurial MacHg http://jasonfharris.com/machg/ 便利です。わかりやすい!
  71. 71. ご清聴ありがとうございました

×