SlideShare a Scribd company logo
CodeIgniter 入門
      Aug. 13, 2011
  第20回 オープンラボ岡山



          sho <sho@codeigniter.jp>
本発表の主な対象者

• PHP で何かつくったことがある

• フレームワークを使ったことがない
 – 学習しようとしたが挫折した
 – 自作の“それっぽい何か”を使っている

• オブジェクト指向をある程度理解していると better
  – Class
  – インスタンス
  – オーバーライド etc.
                                1
お品書き

• CodeIgniter とは?
  – なにがそんなにいいの?
  – まだこんなコードを書きますか?
• Hello World
  – Controller
  – View
• データベースアクセス
  – Active Record
  – Model
                      2
CodeIgniter とは?

• [kóud ig・nít・er]
• igniter: [名] 点火装置

•   PHP 用のフレームワーク
•   無料,オープンソース
•   最初の公開は 2006年 2月
•   現時点での最新バージョンは 2.0.2 (en)
•   EllisLab, Inc. が開発
* CodeIgniter and its logo are property of ElisLab Inc.

                                                          3
聞いたことないんだけど…



               4
覚えて帰りましょう

• Google トレンド
   ■CodeIgniter,■CakePHP,■symfony,■zend




                                          5
いま世界で最も注目されている!

• Google トレンド (拡大図)




                      6
さらに…

• 利用実績 (ユーザ会のサイトより)




                      7
岡山でも注目されている!

• 利用実績 (ユーザ会のサイトより)

               ・ 山陽新聞WEBNEWS
               ・ さんようタウンナビ
               ・ 岡山医療ガイド




                               8
意外と人口多いですよ

• ユーザ会の活動が活発
 – CodeIgniter カンファレンス 2011
 – ユーザガイド翻訳
 – メーリングリスト


• Web 上にも Tips がゴロゴロ
 – Yahoo! ブログ検索
   「CodeIgniter」 約465件


                              9
なにがそんなにいいの?



              10
「高速」 「軽量」 「低い学習コスト」

• 高速
 – 他のフレームワークと比較しても圧倒的
 – CodeIgniter ベンチマーク 検索

• 軽量
 – ソースの容量は約 1.2MByte

• 低い学習コスト
 – 規約,覚えることが少ない


                           11
CodeIgniter の特徴

• 日本語のユーザガイドが完備




                  12
CodeIgniter の特徴

• コマンドライン操作が不要

• レンタルサーバでも幅広く動作
 – System は原則,外部ライブラリを不使用
 – PHP のバージョンや環境設定の違いを吸収

• ほとんど設定が不要
 – とりあえず DB の接続情報を設定すれば動作



                            13
CodeIgniter の特徴

• 自分好みに
  – コアクラスを書き換えられる (extends)

• Smarty も使える

• IDE との相性も良い
  – Eclipse, NetBeans etc.




                              14
CodeIgniter の特徴

• ライブラリが充実
 例)
 – Form Validation
    • フォームから送信された値を検査

 – ページネーション
    • 前のページ,次のページ… のようなリンクを生成

 – Active Record
    • 最小限のコードでデータベースにアクセス

                                15
利用者の声

• S. Y. さん (26歳 男性)


                      僕のcodeに火がつきました




                                       16
IDE で楽々開発

• 私の開発環境:
 – Mac OS 10.7
 – MAMP 2.0
   • Apache 2.0
   • MySQL 5.1
   • PHP 5.3
 – NetBeans 7.0
 – Subversion


                  17
まだこんなコード書きますか?



                 18
まだこんなコードを書きますか?

• 煩雑な入力チェック
 if (empty($_POST*‘name’+))
         error(‘お名前が未入力です。’);

 if (!preg_match(‘/^*a-z0-9¥-_¥.]@[a-z0-9¥-¥.]$/i’,$_POST*‘mail’+))
          error(‘E-Mail を正しく入力してください。’);

 if (!(strlen($_POST*‘tel’+) >= 10 && strlen($_POST*‘tel’+) <= 13))
            error(‘電話番号を正しく入力してください。’);



                                                                      19
まだこんなコードを書きますか?

• ロジックとデザインがごちゃまぜ
 <html><body>
 <table>
 <?php
 require_once('conf.inc.php');
 $db = DB::connect('mysql://'.DB_USER.':'.DB_PASS.'@'.DB_HOST.'/'.DB_NAME);
 $stt = $db->prepare(’SELECT * FROM users ORDER BY user_id ASC;');
 $rs = $db->execute($stt);
 while ($row = $rs->fetchRow(DB_FETCHMODE_ASSOC)) {
 ?>
   <tr>
      <th><?= $row*‘id’+ ?></th><td><?= htmlspecialchars($row*‘name’+) ?></td>
   </tr>
 <?php } ?>
 </table>
 </body></html>
                                                                                 20
CodeIgniter なら…



                  21
スパゲティコードとはもうお別れ

• Smart なフォーム検証
 – 入力必須,文字数,文字種 etc.




• MVC にだいたい準拠

                       22
フォーム検証



         23
フォーム検証

• 検証ルールをセット
 – $this->form_validation->set_rules(
           ‘name 属性の値’,
           ‘表示名’,
           ‘検証ルール’
   );


• 検証                               成功: TRUE / 失敗: FALSE

 – $this->form_validation->run()

                                                          24
フォーム検証

• 検証ルールの一例
  ルール名            用途
  required        何か値が入力されているか
  matches[hoge]   他のフィールドと一致するか
                  (例: E-mailの確認入力)
  max_length[n]   文字数が指定の長さ以内か
  alpha_numeric   半角英数字で入力されているか
  valid_email     E-mail アドレスとして正しい書式か

 – 複数指定するときはパイプ | で区切る
 – 自前のルールを定義することも可能
                                         25
フォーム検証

• 実際のコードの例:
        :                         検証ルールをセット
     $this->_set_validation();
     if ($this->form_validation->run() !== TRUE) {
           // 検証失敗
     } else {
                                    検証実行
           // 検証成功
     }
 }

 function _set_validation() {
     $this->form_validation->set_rules('mail', 'E-Mail',
          'required|valid_email|max_length[100]');
     $this->form_validation->set_rules('birth', '生年月日',
          'required|is_natural|exact_length[8]');
 }                                                         26
フォーム検証

• ユーザにエラーを表示 (検証失敗時)
  – set_value() で入力値を取得
  – form_error() でエラー内容を取得


• 例)
       <tr>
            <th>E-Mail</th>
            <td><input type="text" name="mail" size="30"
                    value="<?php echo set_value('mail'); ?>" />
                <?php echo form_error('mail'); ?></td>
       </tr>

                                                                  27
MVC



      28
MVC

• ソフトウェアを次の3つの構造に分割する手法
 – Model
    • 表示する内容を表現する
      例) データベースアクセス

 – View
    • データをユーザに表示する
      例) HTML 出力

 – Controller
    • Model と View を制御し,ユーザの入力に応答する

                                      29
MVC

• イメージ

                    Controller



             View                   Model

      HTML



                             File     データベース


                                               30
MVC のメリット

     • 独立性を確保
            – 機能ごとの役割分担が明確に

     • 依存性の抑制
            – 他の部分の変更による影響を受けにくく
            – 部品の再利用性が向上

     • 保守性の向上
            – デザインとビジネスロジックの切り分け


参考: http://www.atmarkit.co.jp/fjava/javafaq/j2ee/j2e07.html   31
Hello World!



               32
使いはじめるまでの流れ
1. ファイル一式をダウンロードしてきて設置
2. (Unix系) 一部ディレクトリのパーミッションを変更
3. とりあえず index.php にアクセス




4. 設定ファイルで DB の接続情報を設定
5. Controller, View, Model の作成
                                 33
ディレクトリ構成 (の一部)

• index.php ………… フロントコントローラ
• application/
  – config/ ……………     設定ファイル
  – controllers/ ……   Controller
  – helpers/ …………     自作の関数
  – libraries/ ………    自作のクラス
  – models/ …………      Model
  – views/ ……………      View
• system/   …………… いじらない
                                   34
CodeIgniter の URL
 http://example.jp/hoge/index.php/fuga/piyo/foo
   – fuga: クラス名 (default: welcome)
   – piyo: メソッド名 (default: index)
   – foo: 引数 (複数可,省略可)
         class Fuga extends CI_Controller {
               (中略)
             function piyo($foo, $bar = ‘test’) ,
                 …
             }
         }
※ “index.php/” は mod_rewrite で取り除くことも可能

                                                    35
Hello World!

• Controller (application/controllers/hello.php)

                 1文字目は               CI_Controller
       <?php      大文字                   を継承

       class Hello extends CI_Controller {
               (中略)
            function index() {
                $data*‘str’+ = 'Hello World!';
                $this->load->view(’greet', $data);
           }
       }                       View を呼び出す


                                                     36
Hello World!

• View (application/views/greet.php)

      <html>
      <head>
      <title>Hello World!</title>
      </head>                  変数の値を出力
      <body>
      <h1><?php echo($str); ?></h1>
      </body>
      </html>


※ 必要に応じて値のエスケープを
※ テンプレートパーサも利用可
                                         37
Hello World!

• ブラウザでアクセス
  – http://example.jp/hoge/index.php/hello




                                             38
データベースアクセス



             39
データベースアクセス

• 対応 DBMS
 – MySQL,MS SQL,Postgres,Oracle,SQLite etc.

• 接続情報の設定
 – application/config/database.php
    $db['default']['hostname'] = 'localhost';
    $db*‘default’+*‘username’+ = ‘dbuser';
    $db['default']['password'] = 'sHFm2F7h';
    $db['default']['database'] = ‘mydb';
    $db['default']['dbdriver'] = 'mysql';

                                                40
データベースアクセス
• Active Record
  – 取得や挿入,更新を最小限のコードで
  – 各 DBMS 間の SQL 構文の違いを吸収
  – 値を自動的にエスケープ処理
※ もちろん自分で SQL 文を書くことも可能




                             41
Active Record の使用法 (の一部)

• 取得: get()
  – $query = $this->db->get(‘mytable’, 10, 20);
      SELECT * FROM mytable LIMIT 20, 10;

• 条件を指定: where()
  – $this->db->where(array(‘id’ => 123));
    $query = $this->db->get(‘mytable’);

      SELECT * FROM mytable WHERE id=123;

                                                  42
Active Record の使用法 (の一部)

• 挿入: insert()
  – $data = array(
        ‘title’ => ‘My title’ ,
        ‘name’ => ‘My Name’ ,
        ‘date’ => ‘My date‘
    );
    $this->db->insert(’mytable’, $data);
      INSERT INTO mytable (title, name, date)
        VALUES ('My Title', 'My Name', 'My Date');


                                                     43
Model の作成

• 例) application/models/users_model.php
                                                CI_Model
      class Users_model extends CI_Model {       を継承
              (中略)
          function get_user($user_id) {
              $this->db->where('user_id', $user_id);
              $query = $this->db->get('users');            クエリを組立
              $result = $query->result();

               return $result[0];   結果を取得
          }
      }

※ Model 名とテーブル名は同じにするのがおすすめ
※ 実際には引数や結果の検査,例外処理をするべき

                                                                    44
Controller から Model をロード

• 例) application/controllers/user.php

      class User extends CI_Controller {
            (中略)                           Model を load
           function show($user_id) {
               $this->load->model(‘Users_model’);    結果を取得
               $data*‘userinfo’+ =
                    $this->Users_model->get_user($user_id);
               $this->load->view(’showuser', $data);
          }
      }                            View に渡す




                                                              45
以上,駆け足でしたが
一通りご説明しました


             46
次回予告 (あるかな?)

• ライブラリ,ヘルパ関数の活用
• 開発テクニック
• 開発事例 etc.




                   47
ご清聴ありがとうございました



                 48

More Related Content

What's hot (20)

PPTX
Microsoft word - teaching slides
Miss-Short
 
PPT
Database Relationships
Forrester High School
 
PPTX
Types of databases
Md Showrov Ahmed
 
PDF
Ms excel tutorial
beethoven jon ocubillo
 
PPTX
MS Excel formula tab slides
Muhammad Zaman
 
PPTX
SQL Data types and Constarints.pptx
jaba kumar
 
PPTX
The Relational Database Model
Shishir Aryal
 
PPTX
Access lesson 04 Creating and Modifying Forms
Aram SE
 
PPTX
Ms access 2007
Ramesh Pant
 
PPTX
A Quick Simple MS Excel Macro
Pranav Ghode
 
PPTX
Macros in ms word
ahmreenmalik
 
PPT
Word processing
N.S.patel arts college Anand
 
PPTX
Ms access 2010
Alsufaacademy
 
PPTX
Access lesson 03 Creating Queries
Aram SE
 
PPTX
Ms word shortcut keys
DalbirAntil
 
PPTX
Html and CSS: Chapter 02
Steve Guinan
 
PPTX
Word processing
Sania Khalid
 
PPTX
Creating a table in ms access
Arunoday Katiyar
 
PPTX
8_MS.pptx
DRPOONAMDRPOONAM1
 
PPTX
Computer Lessons for Kids: Keyboard Shortcuts
RobinAge: Weekly Children's Newspaper
 
Microsoft word - teaching slides
Miss-Short
 
Database Relationships
Forrester High School
 
Types of databases
Md Showrov Ahmed
 
Ms excel tutorial
beethoven jon ocubillo
 
MS Excel formula tab slides
Muhammad Zaman
 
SQL Data types and Constarints.pptx
jaba kumar
 
The Relational Database Model
Shishir Aryal
 
Access lesson 04 Creating and Modifying Forms
Aram SE
 
Ms access 2007
Ramesh Pant
 
A Quick Simple MS Excel Macro
Pranav Ghode
 
Macros in ms word
ahmreenmalik
 
Ms access 2010
Alsufaacademy
 
Access lesson 03 Creating Queries
Aram SE
 
Ms word shortcut keys
DalbirAntil
 
Html and CSS: Chapter 02
Steve Guinan
 
Word processing
Sania Khalid
 
Creating a table in ms access
Arunoday Katiyar
 
Computer Lessons for Kids: Keyboard Shortcuts
RobinAge: Weekly Children's Newspaper
 

Similar to CodeIgniter入門 (20)

PDF
PHPフレームワーク入門
Sho A
 
PDF
はじめてのCodeIgniter
Yuya Matsushima
 
PDF
データマイニング+WEB勉強会資料第6回
Naoyuki Yamada
 
PDF
WTM53 phpフレームワーク いまさらcodeigniter
Masanori Oobayashi
 
PDF
20091030cakephphandson 01
Yusuke Ando
 
PDF
CodeIgniter 〜 2008年大躍進のPHPフレームワーク
kenjis
 
PDF
Azure でサーバーレス、 Infrastructure as Code どうしてますか?
Kazumi OHIRA
 
PDF
Windows PowerShell 2.0 の基礎知識
shigeya
 
PDF
スマートフォン向けサービスにおけるサーバサイド設計入門
Hisashi HATAKEYAMA
 
PDF
IT Pro のための PowerShell スクリプティング
Kazuki Takai
 
PPTX
エンタープライズ分野での実践AngularJS
Ayumi Goto
 
PDF
scala+liftで遊ぼう
youku
 
PPT
Apexコアデベロッパーセミナー(Apexコード)071010
stomita
 
PDF
企業におけるSpring@日本springユーザー会20090624
Yusuke Suzuki
 
KEY
XPages 開発 Tips 百連発
Mitsuru Katoh
 
PDF
基礎から見直す ASP.NET MVC の単体テスト自動化方法 ~ Windows Azure 関連もあるかも~
normalian
 
PDF
Software Development with Symfony
Atsuhiro Kubo
 
PDF
Groovyで楽にSQLを実行してみよう
Akira Shimosako
 
PDF
10分でわかるFuelPHP @ 2011/12
kenjis
 
PDF
PHP 2大 web フレームワークの徹底比較!
Shohei Okada
 
PHPフレームワーク入門
Sho A
 
はじめてのCodeIgniter
Yuya Matsushima
 
データマイニング+WEB勉強会資料第6回
Naoyuki Yamada
 
WTM53 phpフレームワーク いまさらcodeigniter
Masanori Oobayashi
 
20091030cakephphandson 01
Yusuke Ando
 
CodeIgniter 〜 2008年大躍進のPHPフレームワーク
kenjis
 
Azure でサーバーレス、 Infrastructure as Code どうしてますか?
Kazumi OHIRA
 
Windows PowerShell 2.0 の基礎知識
shigeya
 
スマートフォン向けサービスにおけるサーバサイド設計入門
Hisashi HATAKEYAMA
 
IT Pro のための PowerShell スクリプティング
Kazuki Takai
 
エンタープライズ分野での実践AngularJS
Ayumi Goto
 
scala+liftで遊ぼう
youku
 
Apexコアデベロッパーセミナー(Apexコード)071010
stomita
 
企業におけるSpring@日本springユーザー会20090624
Yusuke Suzuki
 
XPages 開発 Tips 百連発
Mitsuru Katoh
 
基礎から見直す ASP.NET MVC の単体テスト自動化方法 ~ Windows Azure 関連もあるかも~
normalian
 
Software Development with Symfony
Atsuhiro Kubo
 
Groovyで楽にSQLを実行してみよう
Akira Shimosako
 
10分でわかるFuelPHP @ 2011/12
kenjis
 
PHP 2大 web フレームワークの徹底比較!
Shohei Okada
 
Ad

More from Sho A (9)

PDF
HTTP入門
Sho A
 
PDF
ドメイン名入門
Sho A
 
PPTX
Ansible ではじめるインフラのコード化入門
Sho A
 
PDF
DNS 入門
Sho A
 
PDF
Unix コマンド入門
Sho A
 
PDF
Unix 基礎
Sho A
 
PDF
Let’s translate FuelPHP docs! [RELOADED]
Sho A
 
PDF
Let’s translate FuelPHP docs!
Sho A
 
PDF
はじめての FuelPHP
Sho A
 
HTTP入門
Sho A
 
ドメイン名入門
Sho A
 
Ansible ではじめるインフラのコード化入門
Sho A
 
DNS 入門
Sho A
 
Unix コマンド入門
Sho A
 
Unix 基礎
Sho A
 
Let’s translate FuelPHP docs! [RELOADED]
Sho A
 
Let’s translate FuelPHP docs!
Sho A
 
はじめての FuelPHP
Sho A
 
Ad

Recently uploaded (9)

PDF
MahiroYoshida_セリフに着目したキャラクタロール推定に関する基礎検討_sigcc12th2025
Matsushita Laboratory
 
PPTX
baserCMS『カスタムコンテンツ』徹底活用術〜あなただけの管理画面を自由自在に〜
Ryuji Egashira
 
PPTX
2025_7_25_吉祥寺_設計ナイト_ADR運用におけるデータ利活用の考え方.pptx
ssuserfcafd1
 
PDF
20250726_Devinで変えるエンプラシステム開発の未来
Masaki Yamakawa
 
PDF
【学会聴講報告】CVPR2025からみるVision最先端トレンド / CVPR2025 report
Sony - Neural Network Libraries
 
PDF
TaketoFujikawa_ComicComputing12th_inKumamoto
Matsushita Laboratory
 
PDF
LoRaWAN ウェザーステーションキット v3 -WSC3-L 日本語ユーザーマニュアル
CRI Japan, Inc.
 
PDF
VMUG Japan book vsan 20250515 CPU/Memory vSAN
Kazuhiro Sota
 
PDF
第三世代 ウェザーステーションキット v3 ー WSC3-L 日本語カタログ
CRI Japan, Inc.
 
MahiroYoshida_セリフに着目したキャラクタロール推定に関する基礎検討_sigcc12th2025
Matsushita Laboratory
 
baserCMS『カスタムコンテンツ』徹底活用術〜あなただけの管理画面を自由自在に〜
Ryuji Egashira
 
2025_7_25_吉祥寺_設計ナイト_ADR運用におけるデータ利活用の考え方.pptx
ssuserfcafd1
 
20250726_Devinで変えるエンプラシステム開発の未来
Masaki Yamakawa
 
【学会聴講報告】CVPR2025からみるVision最先端トレンド / CVPR2025 report
Sony - Neural Network Libraries
 
TaketoFujikawa_ComicComputing12th_inKumamoto
Matsushita Laboratory
 
LoRaWAN ウェザーステーションキット v3 -WSC3-L 日本語ユーザーマニュアル
CRI Japan, Inc.
 
VMUG Japan book vsan 20250515 CPU/Memory vSAN
Kazuhiro Sota
 
第三世代 ウェザーステーションキット v3 ー WSC3-L 日本語カタログ
CRI Japan, Inc.
 

CodeIgniter入門