C   o   d    e   I g   n   i t e   r で   開   発   

            2011.05.14
CodeIgniter東京勉強会




        ネコネットデザイン事務所 宮川 貴子(NEKOGET)
自己紹介
Self-introduction

   NAME
   宮川 貴子 (みやがわ たかこ)

   Twitter/Blog
   NEKOGET
   http://pneskin2.nekoget.com/press/

   WORK
   ネコネットデザイン事務所
   WEBのお仕事10年目。
   イラスト、デザイン、HTML、Javascript、PHP
   フロントエンドなお仕事をしています。
今日の話題
Table of contents

   1.開発の流れ
   2.役立つ外部ライブラリ
   3.Form_validationの拡張
   4.まとめ
開発の流れ
Workflow

  1.設計
  2.デザイン
+
HTML作成
  3.実装
  4.総合テスト
受け入れテスト
  5.完成
→
運用開始(リリース)
開発の流れ
Workflow




実際にブログっぽいものを
作ってみたので、それを元に話を
したいと思います。
開発の流れ
Workflow

  サ イ ト の 目 的 と 欲 し い   機   能   
  
     ● 現在運営しているブログの引っ越し先にしたい。

     ● 日本語の記事とそれを英語にしたページが欲しい。
開発の流れ
Workflow

  設計
    ● 画面の流れを考える
    ● 表示する内容を決める
    ● 必要な機能を把握する
開発の流れ
Workflow

  設計 : 目に見える資料にする。
    ● 画面の流れ→画面遷移図
    ● 表示する内容→画面構成図
    ● 機能一覧→機能一覧表
開発の流れ
Workflow

  設計 : 画面遷移図
    作 成 ツ ー ル : A d o b e F ir e w o r k s C S 5
    Fireworksでデータを作成すると、    データはpngファイルで保存さ
    れます。 ファイルそのものは画像データとして扱えます。
    redmineやwiki等に生データをUPしただけで画像として、
    プラウザからデータを見ることができます。
    またそれをダウンロードしたものをそのまま編集する事も出来て、
    とても便利です。
    (ただの画像データに比べるとデータサイズは大きめ)


     ★私の周囲のエンジニアから聞いたところ、エクセルで作ると答えて
     くれた人が多いようです。
開発の流れ
Workflow

  設計 : 画面遷移図
開発の流れ
Workflow

  設計 : 画面遷移図から画面一覧
         画面に名前と住所を決める
    作 成 ツ ー ル   : エ ク セ ル (表 計 算 ソ フ ト )

    ( 1 ) 作 成 し た 画 面 遷 移 図 上 の 画 面 に 、番 号 を 書 く 。

    ( 2 ) 番 号 と 画 面 の 名 前 を 拾 い だ し 、一 覧 に す る

    (3 ) 一 覧 に し た そ れ の U R L を 考 え る 。
        URLが決まると、Contrller名メソッド名が決まります。
開発の流れ
Workflow

  設計 : 画面遷移図から画面一覧
         画面に名前とURLを決める




  URLが決まると、
  クラス名、メソッド名が自然と決まります。
開発の流れ
Workflow

  設計 : 画面構成図
     作 成 ツ ー ル : A d o b e F ir e w o r k s C S 5
     画面に表示をする項目と、    その設置場所を図に起こします。
     デザインを起こしやすくするため、      画面幅、   フォントサイズについては
     デザインと同じぐらいのサイズで作成しています。


     ツールを使わずに手書きで済ましてしまう場合も
     ありますが、その場合は、大体のサイズを
     画面に書き込むようにしています。
開発の流れ
Workflow

  設計 : 画面構成図からデータ一覧
       データの設計をする
    表 示 す る 情 報 の 項 目 を 拾 い だ し 、

    項 目 を 表 示 す る 為 に 必 要 な 情 報 を ま と め て 、

    一 覧 表 に し ま す 。→ D B 設 計 

    

    使 用 ツ ー ル 
:
p h p M y A d m in 
    定義書は、 phpMyAdminのデータ辞書をプラウザからpdfにしています。   
    MySQLWorkbench挑戦中ですが、      まだ使いこなせていません。
開発の流れ
Workflow

  設計 : 画面構成図からデータ一覧
       データの設計をする
開発の流れ
Workflow

  設計 : 機能一覧を作る
    全体像を把握。
開発の流れ
Workflow

  デザイン + HTML作成
    (1)画面構成図を元に、   デザインデータを作成
    (2)デザインデータと画面構成図を元に
     
HTML設計(マークアップ作業)  
    (3)
HTML
+
CSSの作成
開発の流れ
Workflow

  デ ザ イン + H TM L作 成 :
     (1) 画面構成図を元に、デザインデータを作成

    使 用 ツ ー ル : A d o b e F ir e w o r k s C S 5
    Photoshop,illustratorを使用するデザイナーさんが大多数です。
    Fireworksはおそらく小数派
開発の流れ
Workflow

  デ ザ イン + H TM L作 成 :
    (2)デザインデータと画面構成図を元に
     HTML設計(マークアップ作業)

    使 用 ツ ー ル : 紙と 4色 ボ ー ル ペ ン
    私は紙とボールペンで手書きです。
    いきなり Adobe Dreamweaverで(3)HTMLを書き始めるのと、
    紙に手書きで設計メモを作るのとでは、     メモを作る方が作業が早く、
    品質が高いです。  設計ができていると、   後々の変更や追加も楽です。
開発の流れ
Workflow

  デ ザ イン + H TM L作 成 :
     (3) HTML + CSSの作成

    使 用 ツ ー ル : A d o b e D re a m w e a v e r C S 5
    PHPでプログラムを書く前にHTML+ CSSを作ります。
    今年のPHPカンファレンス関西でLT発表させていただいた時に
    会場の方へ質問をさせていただいた結果、         約8割以上が同時並行で
    PHPノコーディングとHTMLのコーディングを行っていると答えました。
    びっくりしました。
    きちんと設計ができている、     HTML + CSSを先に書いてしまったほうが、
    書かない場合に比べて、    3割ぐらい開発スピードは早いと私は思ってます。
開発の流れ
Workflow

  実   装    :

      C o d e I g n it e r 2 .0 で 実 装 を し ま し た 。
      作業中使用した外部ライブラリや拡張については後ほど.....


  使 用 ツ ー ル :

          PHPエディタ: Adobe Dreamweaver CS5
          MySQL管理 : phpMyAdmin
          タスク管理 :   Redmine
          ソースコード管理 :        Mercurial (gitやsubversion等)
          Mercuralクライアント : MacHg
          ローカルでの動作環境:       MAMP
開発の流れ
Workflow

  テ ス ト と バ グ            の   修   正    


  
   (1 )
動 作 テ ス ト 
+ 
動 作 結 果 を 記 録 

  
   ( 2 ) 
 動 作 不 良( バ グ )の 修 正 

  
   (3 )
動 作 不 良 の 解 消 を 確 認 


  使 用 ツ ー ル :R e d m in e 
  redmineやtrac等のバグ管理ツールで管理。   
  バグは、  URL、画面キャプチャ、   発生した条件をチケットに登録するように
  しています。  総合テスト、  受け入れテスト等詳しい情報は
  以下のサイトが参考になると思います。        
  
※アプリケーションテストについての参考URL
   http://www.jacic.or.jp/feature/program/018test/e_test_1.htm
開発の流れ
Workflow

  運   用   開   始( リ リ ー ス   )

  マ ニ ュ ア ル 等 の 作 成 を し て 、運 用 サ ー バ へ 設 置 。

  ブ ロ グ 公 開 。
役立つ外部ライブラリ
A favorite library Class

   M    o d u l a r          E x t e n s i o n s              - H M       V C
   https://bitbucket.org/wiredesignz/codeigniter-modular-extensions-hmvc/wiki/Home

   C o d e Ig n it e r の M V C の 構 造 を 階 層 化 M V C 構 造 に し て く れ る ラ イ ブ ラ リ




   Q d m       a i l
   http://hal456.net/qdmail/
   Q d m a ilと は 、P H P の マ ル チ バ イ ト 環 境 特 に 日 本 語 ) て 、 文 字 化 け し な い 」
                                         (           に  「
   「 簡 単 に ” デ コメ デ コメ ー ル ) や H T M Lメ ー ル 等 の 電 子 メ ー ル を 送 信 す る こ と
                 (          ”
   が で き る 」メ ー ル ク ラ ス ラ イ ブ ラ リ で す 。
   文 字 化 け 完 全 制 覇 を目 指 し て い ま す 。


   CodeIgniter2.0本体のEmailクラスを、2.0正式リリース前に試しました。  コードを書き換えてみたり
   しましたが、   一部メールクライアントでタイトルの文字化けの解消ができなかった為、        本体のEmailクラス
   は使用しませんでした。     今回作成したアプリではqdmailを、 helperとして設置し、使用しています。
   必要ないかもとは思いましたが、      英語のリプライメールはUTF8で送信するように実装しています。
Form_validationの拡張
Expand the library

   作業の流れ
   (1)
どういう結果が欲しいか決める
   (2)
拡張前の本体のコードを調べる
   (3)
実現方法を検討する
   (4)
実装する
   (5)
Unit
Testする
Form_validationの拡張
Expand the library

   ( 5       )   U   n       i t     T       e   s   t す   る


   ( 4       )   実       装       す       る




   T     D       D   の       場       合       は       、 先   に   ( 4   ) テ   ス   ト   。
   後 で 何 度 も き ち ん と 動 い て い る か を 確 認 す る に 違 い な い!
   確 認 作 業 は U R L を 叩 く だ け に し て お くと 、作 業 時 間 短 縮 に な り ま す ♪


   参考資料 gihyo.jp:和田卓人のTDD講座
   http://gihyo.jp/dev/serial/01/tdd
Form_validationの拡張
Expand the library

   拡   張   前   の   問   題    点   
   c o n f ig / c o n f ig .p h p で 設 定 し た 言 語 
   $ c o n f ig [ ’la n g u a g e ’] 
   = 
‘j a p a n e s e ’;
   表 示 を 英 語 に 切 り 替 え た 場 合 に 、
   バ リ デ ー シ ョ ン エ ラ ー が 日 本 語 が 表 示 さ れ る 。
   

   希   望   す る 動       作   
   英 語 の 表 示 に 切り 替 え た 場 合 は 
   バ リ デ ー シ ョ ン エ ラ ー も 英 語 で 表 示 さ れ る べ き 。
Form_validationの拡張
Expand the library

   本 体 コ ー ド を 調 べ て み た 結 果 
   $this->form_validation->run();の中で
   言語ファイルが呼び出されている部分
form_validation.php
320行目付近
   
   //
Load
the
language
file
containing
error
messages

   $th is-> C I-> la n g -> lo a d (’fo rm _v a lid a tio n ’);
   
   ファイルは指定されているが、              言語の指定が省略されている。                   
   
   $th is-> C I-> la n g -> lo a d (’fo rm _v a lid a tio n ’,’言 語 の 指 定 ’);
   言語の指定さえここでされていれば、                   言語が切り替えられる。             
   form_validationクラスの中で、           言語が設定できさせすれば、                国際化対応が
   できる。
Form_validationの拡張
Expand the library

   ネ イ テ ィ ブ ラ イ ブ ラ リ の 拡 張 (継 承 )
   http://codeigniter.jp/user_guide_ja/general/creating_libraries.html
   
   ユーザガイドより抜粋:
   既存の関数に何かの機能を追加する

   -
おそらく一つか二つのメソッド追加

   -
だけでよいのであれば、              ライブラリの全部をユーザバージョンに置き換えて
   しまうのはやり過ぎです。               
   このようなケースでは、              クラスを単に拡張(継承)するのが適しています。                     
   クラスの拡張はクラスの置き換えと次の2点を除いてよく似ています:
   
   



*
クラス宣言では親クラスを継承する必要があります。                              
   



*
新しいクラスの名前とファイル名には、                     MY_
というプリフィックス
   
 (この項目は変更できます。                 このページの下の方をご覧ください)を付ける
   
 必要があります。
Form_validationの拡張
Expand the library

   M      Y       _    f   o     r   m        _    v    a   l i d        a   t   i o   n    . p    h   p   

   
   c la s s 
M Y _ F o r m _ v a lid a t io n 
e x t e n d s 
C I _ F o r m _ v a lid a t io n 
   {
   
      v a r 
$ la n g _ id 
= 
“ ” ;
/ / 言 語 を 保 存 す る と こ ろ を 用 意 
   
   
      f u n c t io n 
_ _ c o n s t r u c t ( ) 
   
      {
   
      
       $ t h is - > C I 
= & 
g e t _ in s t a n c e ( ) ;
   
      
       $ t h is - > s e t _ la n g ( ) ;
/ / c o n f ig で 設 定 さ れ て い る 言 語 で 設 定 を す る 
   
      }
   
   
      ......
中略
   }
Form_validationの拡張
Expand the library

   M   Y _ f o r m          _ v a l i d a t i o n . p h p 
   
   class
MY_Form_validation
extends
CI_Form_validation
   {
   
   .....中略.....
   
   /*
   
   
*
文字コードの設定
                           文字コードが
   
   */
                                    指定されていない場合は
   
   function
set_lang($lang_id=””)
   
   {
                                     config.phpで設定されている言語
   
   
     if($lang_id)
                    を設定する。      
   
   
     {
   
   
     
    $this->lang_id
=
$lang_id;
   
   
     }
   
   
     else
   
   
     {
   
   
     
    $this->lang_id
=
$this->CI->config->item(”language”);
   
   
     }
   
   }
   
   .....中略.....
   }
Form_validationの拡張
Expand the library

   M   Y _ f o r m           _ v a l i d a t i o n . p h p 
   
   class
MY_Form_validation
extends
CI_Form_validation
   {
   
   .....中略.....
   
   function
run($group
=
‘’)

{
   
   
     .....中略.....
 
   
   
     //
Load
the
language
file
containing
error
messages
   

  
     $this->CI->lang->load(’form_validation’
,
$this->lang_id);
   
   
     .....中略.....
   
   }
   
   .....中略.....
   }



   82行目付近、form_validation用言語ファイルの読み込み時に、
   言語を指定するよう変更
Form_validationの拡張
Expand the library

   U n i t _ t e s t         C l a s s を        使 っ て          単   体         テ    ス     ト
   http://codeigniter.jp/user_guide_ja/libraries/unit_testing.html



   テ ス ト し た          い   内    容   。

   $ t h is -> f o r m _ v a lid a t io n -> s e t _ la n g (” 言                   語    ” );

   を 実     行 し た と き の             動   作


   (1 )$ t h is -> f o r m _ v a lid a t io n -> la n g _ id の 値 が 、
      上 記 で 指 定し た 言 語 に な ること ;


   (2 )$ t h is -> f o r m _ v a lid a t io n -> r u n ();を 実 行 し バ リ デ ー シ ョ ン エ ラ ー
     が 発 生 し た 場 合 、指 定 し た 言 語 で エ ラ ー 文 を h e lp e r で 取 り 出 せ る 。
Form_validationの拡張
Expand the library

   U n it _ t e s t C la s s を 使 っ て 単 体                             テ   ス ト
   http://codeigniter.jp/user_guide_ja/libraries/unit_testing.html


   ● テ ストを 書く場 所 に つ い て

       (1)Modular Extensions - HMVC を利用している場合は、   テスト用の
         モジュールを用意し、     本体コードとテストコードを分離する。
       (2)上記を利用していない場合は、        テスト用のControllerクラスを用意し、
          本体コードとテストコードを分離する。


   1.7系からModular Extensions - HMVCを利用しているため、
   私はテスト用にモジュールを用意することにしています。
   テストの結果もブラウザ上から確認しています。
Form_validationの拡張
Expand the library

   U n it _ t e s t C la s s を 使 っ て 単 体                             テ   ス ト
   http://codeigniter.jp/user_guide_ja/libraries/unit_testing.html

   ---中略---
   $this->load->library(”form_validation”);
   $ck = $this->form_validation->lang_id;
   $ans = $this->config->item(”language”);
   echo $this->unit->run(
       $ck,
       $ans,
       “言語に初期設定の言語がはいっている”,
       “configの設定は japanese 変更前と変わらない挙動を確認”
       );
   ---中略---
Form_validationの拡張
Expand the library

   U n it _ t e s t C la s sを 使 っ て 単 体 テ ス ト
   ht :/ cdigit r / sr gid_ / r r suit t sin.hm
    tp / oe n e.jpue_ u ejalibaie/ n _et g t l

   結果の表示
Form_validationの拡張
Expand the library

   U n it _ t e s t C la s s を 使 っ て 単 体                             テ   ス ト
   http://codeigniter.jp/user_guide_ja/libraries/unit_testing.html

   ---中略---
   $this->load->library(”form_validation”);
   $this->form_validation->set_lang(”english”);
   $ck = $this->form_validation->lang_id;
   $ans = “english”;
   echo $this->unit->run(
       $ck,
       $ans,
       “言語設定は、   englishにかわる。 //テストのタイトル
                                ”,
       “configの設定は japanese。    設定した値はenglish” //メモ
       );
   ---中略---
Form_validationの拡張
Expand the library

   U n it _ t e s t C la s sを 使 っ て 単 体 テ ス ト
   ht :/ cdigit r / sr gid_ / r r suit t sin.hm
    tp / oe n e.jpue_ u ejalibaie/ n _et g t l

   結果の表示
Form_validationの拡張
Expand the library

   U n it _ t e s t C la s sを 使 っ て 単 体 テ ス ト
   ht :/ cdigit r / sr gid_ / r r suit t sin.hm
    tp / oe n e.jpue_ u ejalibaie/ n _et g t l

   テストモジュールで
   の結果表示
   メモもかねているので、
   だらだらと出力結果は長いです...


   ライブラリの拡張は、    
   unit
testを書いてしまうまでが
   が拡張ですよね?
まとめ
Important thing

   ★ コードを書き始める前に準備をきちんとしておく
    と、迷いが少なく綺麗に作れる気がします。
   ★ 画面にURL(住所)を決めてあげると、
    Controllerを書くところが自然に決まります。
   ★ テストを書くまでが拡張です   !
   ★ ライブラリもヘルパーも、   テストを書いておくと、
     後で動作確認が楽です。
     その拡張ファイル、使うの今回だけじゃないよね?
まとめ
Important thing

   CodeIgniter大好きです♥
おわり
Ending




    ご清聴ありがとうございました。
おしらせ
Infomation



    C o d e Ig n it e r日 本 ユ ー ザ 会 に は 
    メ ー リ ン グ リ ス ト が あ りま す よ !
    http://codeigniter.jp/mailinglist
参考資料
Reference materials
■ CodeIgniter                   ■ Adobe Dreamweaver
http://codeigniter.com/         http://www.adobe.com/jp/products/dreamweaver.html
■ CodeIgniter日本ユーザー会            ■ Adobe Fireworks
http://codeigniter.jp/          http://www.adobe.com/jp/products/fireworks.html
■ NEKOGET’ Report               ■ gihyo.jp:和田卓人のTDD講座
http://press.nekoget.com/       http://gihyo.jp/dev/serial/01/tdd
■ Redmine
http://redmine.jp/
http://www.redmine.org/
■ Mercurial
http://ja.wikipedia.org/wiki/Mercurial
http://mercurial.selenic.com/
■ MacHg
http://jasonfharris.com/machg/mweaver.html
■ Modular Extensions - HMVC
https://bitbucket.org/wiredesignz/codeigniter-modular-extensions-hmvc/wiki/Home

CodeIgniter東京勉強会 2011.05.14

  • 1.
    C o d e I g n i t e r で 開 発 2011.05.14 CodeIgniter東京勉強会 ネコネットデザイン事務所 宮川 貴子(NEKOGET)
  • 2.
    自己紹介 Self-introduction NAME 宮川 貴子 (みやがわ たかこ) Twitter/Blog NEKOGET http://pneskin2.nekoget.com/press/ WORK ネコネットデザイン事務所 WEBのお仕事10年目。 イラスト、デザイン、HTML、Javascript、PHP フロントエンドなお仕事をしています。
  • 3.
    今日の話題 Table of contents 1.開発の流れ 2.役立つ外部ライブラリ 3.Form_validationの拡張 4.まとめ
  • 4.
    開発の流れ Workflow 1.設計 2.デザイン + HTML作成 3.実装 4.総合テスト 受け入れテスト 5.完成 → 運用開始(リリース)
  • 5.
  • 6.
    開発の流れ Workflow サイ ト の 目 的 と 欲 し い 機 能 ● 現在運営しているブログの引っ越し先にしたい。 ● 日本語の記事とそれを英語にしたページが欲しい。
  • 7.
    開発の流れ Workflow 設計 ● 画面の流れを考える ● 表示する内容を決める ● 必要な機能を把握する
  • 8.
    開発の流れ Workflow 設計: 目に見える資料にする。 ● 画面の流れ→画面遷移図 ● 表示する内容→画面構成図 ● 機能一覧→機能一覧表
  • 9.
    開発の流れ Workflow 設計: 画面遷移図 作 成 ツ ー ル : A d o b e F ir e w o r k s C S 5 Fireworksでデータを作成すると、 データはpngファイルで保存さ れます。 ファイルそのものは画像データとして扱えます。 redmineやwiki等に生データをUPしただけで画像として、 プラウザからデータを見ることができます。 またそれをダウンロードしたものをそのまま編集する事も出来て、 とても便利です。 (ただの画像データに比べるとデータサイズは大きめ) ★私の周囲のエンジニアから聞いたところ、エクセルで作ると答えて くれた人が多いようです。
  • 10.
  • 11.
    開発の流れ Workflow 設計: 画面遷移図から画面一覧    画面に名前と住所を決める 作 成 ツ ー ル : エ ク セ ル (表 計 算 ソ フ ト ) ( 1 ) 作 成 し た 画 面 遷 移 図 上 の 画 面 に 、番 号 を 書 く 。 ( 2 ) 番 号 と 画 面 の 名 前 を 拾 い だ し 、一 覧 に す る (3 ) 一 覧 に し た そ れ の U R L を 考 え る 。 URLが決まると、Contrller名メソッド名が決まります。
  • 12.
    開発の流れ Workflow 設計: 画面遷移図から画面一覧    画面に名前とURLを決める URLが決まると、 クラス名、メソッド名が自然と決まります。
  • 13.
    開発の流れ Workflow 設計: 画面構成図 作 成 ツ ー ル : A d o b e F ir e w o r k s C S 5 画面に表示をする項目と、 その設置場所を図に起こします。 デザインを起こしやすくするため、 画面幅、 フォントサイズについては デザインと同じぐらいのサイズで作成しています。 ツールを使わずに手書きで済ましてしまう場合も ありますが、その場合は、大体のサイズを 画面に書き込むようにしています。
  • 14.
    開発の流れ Workflow 設計: 画面構成図からデータ一覧     データの設計をする 表 示 す る 情 報 の 項 目 を 拾 い だ し 、 項 目 を 表 示 す る 為 に 必 要 な 情 報 を ま と め て 、 一 覧 表 に し ま す 。→ D B 設 計 使 用 ツ ー ル : p h p M y A d m in 定義書は、 phpMyAdminのデータ辞書をプラウザからpdfにしています。 MySQLWorkbench挑戦中ですが、 まだ使いこなせていません。
  • 15.
    開発の流れ Workflow 設計: 画面構成図からデータ一覧     データの設計をする
  • 16.
    開発の流れ Workflow 設計: 機能一覧を作る 全体像を把握。
  • 17.
    開発の流れ Workflow デザイン+ HTML作成 (1)画面構成図を元に、 デザインデータを作成 (2)デザインデータと画面構成図を元に   HTML設計(マークアップ作業) (3) HTML + CSSの作成
  • 18.
    開発の流れ Workflow デザ イン + H TM L作 成 : (1) 画面構成図を元に、デザインデータを作成 使 用 ツ ー ル : A d o b e F ir e w o r k s C S 5 Photoshop,illustratorを使用するデザイナーさんが大多数です。 Fireworksはおそらく小数派
  • 19.
    開発の流れ Workflow デザ イン + H TM L作 成 : (2)デザインデータと画面構成図を元に    HTML設計(マークアップ作業) 使 用 ツ ー ル : 紙と 4色 ボ ー ル ペ ン 私は紙とボールペンで手書きです。 いきなり Adobe Dreamweaverで(3)HTMLを書き始めるのと、 紙に手書きで設計メモを作るのとでは、 メモを作る方が作業が早く、 品質が高いです。 設計ができていると、 後々の変更や追加も楽です。
  • 20.
    開発の流れ Workflow デザ イン + H TM L作 成 : (3) HTML + CSSの作成 使 用 ツ ー ル : A d o b e D re a m w e a v e r C S 5 PHPでプログラムを書く前にHTML+ CSSを作ります。 今年のPHPカンファレンス関西でLT発表させていただいた時に 会場の方へ質問をさせていただいた結果、 約8割以上が同時並行で PHPノコーディングとHTMLのコーディングを行っていると答えました。 びっくりしました。 きちんと設計ができている、 HTML + CSSを先に書いてしまったほうが、 書かない場合に比べて、 3割ぐらい開発スピードは早いと私は思ってます。
  • 21.
    開発の流れ Workflow 実 装 : C o d e I g n it e r 2 .0 で 実 装 を し ま し た 。 作業中使用した外部ライブラリや拡張については後ほど..... 使 用 ツ ー ル : PHPエディタ: Adobe Dreamweaver CS5 MySQL管理 : phpMyAdmin タスク管理 : Redmine ソースコード管理 : Mercurial (gitやsubversion等) Mercuralクライアント : MacHg ローカルでの動作環境: MAMP
  • 22.
    開発の流れ Workflow テス ト と バ グ の 修 正 (1 ) 動 作 テ ス ト + 動 作 結 果 を 記 録 ( 2 ) 動 作 不 良( バ グ )の 修 正 (3 ) 動 作 不 良 の 解 消 を 確 認 使 用 ツ ー ル :R e d m in e redmineやtrac等のバグ管理ツールで管理。 バグは、 URL、画面キャプチャ、 発生した条件をチケットに登録するように しています。 総合テスト、 受け入れテスト等詳しい情報は 以下のサイトが参考になると思います。 ※アプリケーションテストについての参考URL  http://www.jacic.or.jp/feature/program/018test/e_test_1.htm
  • 23.
    開発の流れ Workflow 運 用 開 始( リ リ ー ス ) マ ニ ュ ア ル 等 の 作 成 を し て 、運 用 サ ー バ へ 設 置 。 ブ ロ グ 公 開 。
  • 24.
    役立つ外部ライブラリ A favorite libraryClass M o d u l a r E x t e n s i o n s - H M V C https://bitbucket.org/wiredesignz/codeigniter-modular-extensions-hmvc/wiki/Home C o d e Ig n it e r の M V C の 構 造 を 階 層 化 M V C 構 造 に し て く れ る ラ イ ブ ラ リ Q d m a i l http://hal456.net/qdmail/ Q d m a ilと は 、P H P の マ ル チ バ イ ト 環 境 特 に 日 本 語 ) て 、 文 字 化 け し な い 」 ( に 「 「 簡 単 に ” デ コメ デ コメ ー ル ) や H T M Lメ ー ル 等 の 電 子 メ ー ル を 送 信 す る こ と ( ” が で き る 」メ ー ル ク ラ ス ラ イ ブ ラ リ で す 。 文 字 化 け 完 全 制 覇 を目 指 し て い ま す 。 CodeIgniter2.0本体のEmailクラスを、2.0正式リリース前に試しました。 コードを書き換えてみたり しましたが、 一部メールクライアントでタイトルの文字化けの解消ができなかった為、 本体のEmailクラス は使用しませんでした。 今回作成したアプリではqdmailを、 helperとして設置し、使用しています。 必要ないかもとは思いましたが、 英語のリプライメールはUTF8で送信するように実装しています。
  • 25.
    Form_validationの拡張 Expand the library 作業の流れ (1) どういう結果が欲しいか決める (2) 拡張前の本体のコードを調べる (3) 実現方法を検討する (4) 実装する (5) Unit Testする
  • 26.
    Form_validationの拡張 Expand the library ( 5 ) U n i t T e s t す る ( 4 ) 実 装 す る T D D の 場 合 は 、 先 に ( 4 ) テ ス ト 。 後 で 何 度 も き ち ん と 動 い て い る か を 確 認 す る に 違 い な い! 確 認 作 業 は U R L を 叩 く だ け に し て お くと 、作 業 時 間 短 縮 に な り ま す ♪ 参考資料 gihyo.jp:和田卓人のTDD講座 http://gihyo.jp/dev/serial/01/tdd
  • 27.
    Form_validationの拡張 Expand the library 拡 張 前 の 問 題 点 c o n f ig / c o n f ig .p h p で 設 定 し た 言 語 $ c o n f ig [ ’la n g u a g e ’] = ‘j a p a n e s e ’; 表 示 を 英 語 に 切 り 替 え た 場 合 に 、 バ リ デ ー シ ョ ン エ ラ ー が 日 本 語 が 表 示 さ れ る 。 希 望 す る 動 作 英 語 の 表 示 に 切り 替 え た 場 合 は バ リ デ ー シ ョ ン エ ラ ー も 英 語 で 表 示 さ れ る べ き 。
  • 28.
    Form_validationの拡張 Expand the library 本 体 コ ー ド を 調 べ て み た 結 果 $this->form_validation->run();の中で 言語ファイルが呼び出されている部分 form_validation.php 320行目付近 // Load the language file containing error messages $th is-> C I-> la n g -> lo a d (’fo rm _v a lid a tio n ’); ファイルは指定されているが、 言語の指定が省略されている。 $th is-> C I-> la n g -> lo a d (’fo rm _v a lid a tio n ’,’言 語 の 指 定 ’); 言語の指定さえここでされていれば、 言語が切り替えられる。 form_validationクラスの中で、 言語が設定できさせすれば、 国際化対応が できる。
  • 29.
    Form_validationの拡張 Expand the library ネ イ テ ィ ブ ラ イ ブ ラ リ の 拡 張 (継 承 ) http://codeigniter.jp/user_guide_ja/general/creating_libraries.html ユーザガイドより抜粋: 既存の関数に何かの機能を追加する - おそらく一つか二つのメソッド追加 - だけでよいのであれば、 ライブラリの全部をユーザバージョンに置き換えて しまうのはやり過ぎです。 このようなケースでは、 クラスを単に拡張(継承)するのが適しています。 クラスの拡張はクラスの置き換えと次の2点を除いてよく似ています: * クラス宣言では親クラスを継承する必要があります。 * 新しいクラスの名前とファイル名には、 MY_ というプリフィックス (この項目は変更できます。 このページの下の方をご覧ください)を付ける 必要があります。
  • 30.
    Form_validationの拡張 Expand the library M Y _ f o r m _ v a l i d a t i o n . p h p c la s s M Y _ F o r m _ v a lid a t io n e x t e n d s C I _ F o r m _ v a lid a t io n { v a r $ la n g _ id = “ ” ; / / 言 語 を 保 存 す る と こ ろ を 用 意 f u n c t io n _ _ c o n s t r u c t ( ) { $ t h is - > C I = & g e t _ in s t a n c e ( ) ; $ t h is - > s e t _ la n g ( ) ; / / c o n f ig で 設 定 さ れ て い る 言 語 で 設 定 を す る } ...... 中略 }
  • 31.
    Form_validationの拡張 Expand the library M Y _ f o r m _ v a l i d a t i o n . p h p class MY_Form_validation extends CI_Form_validation { .....中略..... /* * 文字コードの設定 文字コードが */ 指定されていない場合は function set_lang($lang_id=””) { config.phpで設定されている言語 if($lang_id) を設定する。 { $this->lang_id = $lang_id; } else { $this->lang_id = $this->CI->config->item(”language”); } } .....中略..... }
  • 32.
    Form_validationの拡張 Expand the library M Y _ f o r m _ v a l i d a t i o n . p h p class MY_Form_validation extends CI_Form_validation { .....中略..... function run($group = ‘’) { .....中略..... // Load the language file containing error messages $this->CI->lang->load(’form_validation’ , $this->lang_id); .....中略..... } .....中略..... } 82行目付近、form_validation用言語ファイルの読み込み時に、 言語を指定するよう変更
  • 33.
    Form_validationの拡張 Expand the library U n i t _ t e s t C l a s s を 使 っ て 単 体 テ ス ト http://codeigniter.jp/user_guide_ja/libraries/unit_testing.html テ ス ト し た い 内 容 。 $ t h is -> f o r m _ v a lid a t io n -> s e t _ la n g (” 言 語 ” ); を 実 行 し た と き の 動 作 (1 )$ t h is -> f o r m _ v a lid a t io n -> la n g _ id の 値 が 、 上 記 で 指 定し た 言 語 に な ること ; (2 )$ t h is -> f o r m _ v a lid a t io n -> r u n ();を 実 行 し バ リ デ ー シ ョ ン エ ラ ー が 発 生 し た 場 合 、指 定 し た 言 語 で エ ラ ー 文 を h e lp e r で 取 り 出 せ る 。
  • 34.
    Form_validationの拡張 Expand the library U n it _ t e s t C la s s を 使 っ て 単 体 テ ス ト http://codeigniter.jp/user_guide_ja/libraries/unit_testing.html ● テ ストを 書く場 所 に つ い て (1)Modular Extensions - HMVC を利用している場合は、 テスト用の モジュールを用意し、 本体コードとテストコードを分離する。 (2)上記を利用していない場合は、 テスト用のControllerクラスを用意し、 本体コードとテストコードを分離する。 1.7系からModular Extensions - HMVCを利用しているため、 私はテスト用にモジュールを用意することにしています。 テストの結果もブラウザ上から確認しています。
  • 35.
    Form_validationの拡張 Expand the library U n it _ t e s t C la s s を 使 っ て 単 体 テ ス ト http://codeigniter.jp/user_guide_ja/libraries/unit_testing.html ---中略--- $this->load->library(”form_validation”); $ck = $this->form_validation->lang_id; $ans = $this->config->item(”language”); echo $this->unit->run( $ck, $ans, “言語に初期設定の言語がはいっている”, “configの設定は japanese 変更前と変わらない挙動を確認” ); ---中略---
  • 36.
    Form_validationの拡張 Expand the library U n it _ t e s t C la s sを 使 っ て 単 体 テ ス ト ht :/ cdigit r / sr gid_ / r r suit t sin.hm tp / oe n e.jpue_ u ejalibaie/ n _et g t l 結果の表示
  • 37.
    Form_validationの拡張 Expand the library U n it _ t e s t C la s s を 使 っ て 単 体 テ ス ト http://codeigniter.jp/user_guide_ja/libraries/unit_testing.html ---中略--- $this->load->library(”form_validation”); $this->form_validation->set_lang(”english”); $ck = $this->form_validation->lang_id; $ans = “english”; echo $this->unit->run( $ck, $ans, “言語設定は、 englishにかわる。 //テストのタイトル ”, “configの設定は japanese。 設定した値はenglish” //メモ ); ---中略---
  • 38.
    Form_validationの拡張 Expand the library U n it _ t e s t C la s sを 使 っ て 単 体 テ ス ト ht :/ cdigit r / sr gid_ / r r suit t sin.hm tp / oe n e.jpue_ u ejalibaie/ n _et g t l 結果の表示
  • 39.
    Form_validationの拡張 Expand the library U n it _ t e s t C la s sを 使 っ て 単 体 テ ス ト ht :/ cdigit r / sr gid_ / r r suit t sin.hm tp / oe n e.jpue_ u ejalibaie/ n _et g t l テストモジュールで の結果表示 メモもかねているので、 だらだらと出力結果は長いです... ライブラリの拡張は、 unit testを書いてしまうまでが が拡張ですよね?
  • 40.
    まとめ Important thing ★ コードを書き始める前に準備をきちんとしておく  と、迷いが少なく綺麗に作れる気がします。 ★ 画面にURL(住所)を決めてあげると、  Controllerを書くところが自然に決まります。 ★ テストを書くまでが拡張です ! ★ ライブラリもヘルパーも、 テストを書いておくと、   後で動作確認が楽です。   その拡張ファイル、使うの今回だけじゃないよね?
  • 41.
    まとめ Important thing CodeIgniter大好きです♥
  • 42.
    おわり Ending ご清聴ありがとうございました。
  • 43.
    おしらせ Infomation C o d e Ig n it e r日 本 ユ ー ザ 会 に は メ ー リ ン グ リ ス ト が あ りま す よ ! http://codeigniter.jp/mailinglist
  • 44.
    参考資料 Reference materials ■ CodeIgniter ■ Adobe Dreamweaver http://codeigniter.com/ http://www.adobe.com/jp/products/dreamweaver.html ■ CodeIgniter日本ユーザー会 ■ Adobe Fireworks http://codeigniter.jp/ http://www.adobe.com/jp/products/fireworks.html ■ NEKOGET’ Report ■ gihyo.jp:和田卓人のTDD講座 http://press.nekoget.com/ http://gihyo.jp/dev/serial/01/tdd ■ Redmine http://redmine.jp/ http://www.redmine.org/ ■ Mercurial http://ja.wikipedia.org/wiki/Mercurial http://mercurial.selenic.com/ ■ MacHg http://jasonfharris.com/machg/mweaver.html ■ Modular Extensions - HMVC https://bitbucket.org/wiredesignz/codeigniter-modular-extensions-hmvc/wiki/Home