SlideShare uma empresa Scribd logo
1 de 115
最近、僕がハマった
 FuelPHPの紹介
              2012/7/20
        Fukuoka.php Vol.2
            @mawatarin
自己紹介

•   @mawatarin

•   ウェブプログラマ

•   Perlを4年くらい

•   そのあとPHPを4年くらい

•   ただ最近は専らマネジメントより
セッションを始める前に

•   まず、言い訳から始めさせてください!
セッションを始める前に

•   まず、言い訳から始めさせてください!

•   1週間前に子どもが生まれました!
セッションを始める前に

•   まず、言い訳から始めさせてください!

•   1週間前に子どもが生まれました!

•   そのため、スライドを作る時間がほとんどありません
    でしたっっっ

•   ネタとか仕込む間もなかったので、つまらなかったら
    ごめんなさい
セッションを始める前に

•   事前のヒアリングでFuelPHPに関しては名前は聞いた
    ことあるけど、使ってことがないという人が多かった
    です

•   とりあえず、ざっくりFuelPHPの概要を伝えるスライド
    を作りました
今日のお話
今日のお話
1. FuelPHPに興味を持ったきっかけ

2. FuelPHPとは

3. FuelPHPのインストールとフォルダ構成

4. FuelPHPの使い方(MVCの基本)

5. セキュリティについて

6. その他ざっくりと(デバッグ、プロファイラ、コア
  クラス一覧)
1. FuelPHPに興味を持ったきっかけ
1. FuelPHPに興味を持ったきっかけ

 •   Web API 制作の案件が入った

 •   IDに応じたデータを返すだけの簡単なもの
1. FuelPHPに興味を持ったきっかけ

 •   Web API 制作の案件が入った

 •   IDに応じたデータを返すだけの簡単なもの

 •   たまたま空いてるPGがいなかった
1. FuelPHPに興味を持ったきっかけ

 •   Web API 制作の案件が入った

 •   IDに応じたデータを返すだけの簡単なもの

 •   たまたま空いてるPGがいなかった



 •   自分で作るか
1. FuelPHPに興味を持ったきっかけ

 •   なんかフレームワークを使おう
1. FuelPHPに興味を持ったきっかけ

 •   なんかフレームワークを使おう

 •   最近よく聞くようになったフレームワーク「FuelPHP」

 •   RESTコントローラが簡単っぽい

 •   試しに調べてみよう
1. FuelPHPに興味を持ったきっかけ
例えば、このようなテーブルがあったとして


 CREATE TABLE user (
     id int(11) auto_increment
    ,name varchar(50)
    ,email varchar(255)
 );
1. FuelPHPに興味を持ったきっかけ
こんな風にコントローラを実装


 class Controller_User extends Controller_Rest
 	

 public function get_list()
 	

 {
 	

 	

 $user = Model_User::forge();
 	

 	

 $data = $user->find(Input::get('id'));
 	

 	

 $this->response($data);
 	

 }
 }
 // 実際はもっと作り込みますが……
1. FuelPHPに興味を持ったきっかけ
こんな風にコントローラを実装
※中身は後ほど解説します

 class Controller_User extends Controller_Rest
 	

 public function get_list()
 	

 {
 	

 	

 $user = Model_User::forge();
 	

 	

 $data = $user->find(Input::get('id'));
 	

 	

 $this->response($data);
 	

 }
 }
 // 実際はもっと作り込みますが……
1. FuelPHPに興味を持ったきっかけ
以下のURLにアクセスすると……


 http://localhost/user/list.xml?id=123
1. FuelPHPに興味を持ったきっかけ
以下のURLにアクセスすると……
XMLが返ってくる!

 http://localhost/user/list.xml?id=123


 <xml>
   <id>123</id>
   <name>foo</name>
   <email>foo@example.jp</email>
 </xml>
1. FuelPHPに興味を持ったきっかけ
拡張子をjsonに変更すると……


 http://localhost/user/list.json?id=123
1. FuelPHPに興味を持ったきっかけ
拡張子をjsonに変更すると……
JSON形式で返ってくる!

 http://localhost/user/list.json?id=123


 {
     "id":"123",
     "name":"foo",
     "email":"foo@example.jp"
 }
1. FuelPHPに興味を持ったきっかけ
拡張子をphpに変更すると……
PHP arrayで返ってくる!

 http://localhost/user/list.php?id=123


 array (
    'id' => '123',
    'name' => 'foo',
    'email' => 'foo@example.jp',
 )
1. FuelPHPに興味を持ったきっかけ
何これステキ!
1. RESTコントローラの使い方
1. RESTコントローラの使い方

 •   Controller_Rest クラスを継承します

 •   実装するメソッドには、HTTPメソッドのプレフィック
     スをつけます

 •   URLのメソッド名に続けて、出力フォーマットの拡張子
     を付けます
1. RESTコントローラの解説
Controller_Rest クラスを継承


 class Controller_User extends Controller_Rest
 	

 public function get_list()
 	

 {
 	

 	

 $user = Model_User::forge();
 	

 	

 $data = $user->find(Input::get('id'));
 	

 	

 $this->response($data);
 	

 }
 }
1. RESTコントローラの解説
メソッドのプレフィックスでHTTPメソッドを指定
GET, POST, PUT, DELETE が指定できます

 class Controller_User extends Controller_Rest
 	

 public function get_list()
 	

 {
 	

 	

 $user = Model_User::forge();
 	

 	

 $data = $user->find(Input::get('id'));
 	

 	

 $this->response($data);
 	

 }
 }
1. RESTコントローラの解説
メソッド名に続けて出力フォーマットの拡張子を付けます
拡張子に応じて自動的にフォーマットしてくれます

 class Controller_User extends Controller_Rest
 	

 public function get_list()
 	

 {
 	

 	

 $user = Model_User::forge();
 	

 	

 $data = $user->find(Input::get('id'));
 	

 	

 $this->response($data);
 	

 }
 }

 http://localhost/user/list.xml?id=123
1. RESTコントローラの解説
以下のフォーマットに対応


     拡張子                フォーマット
    xml          XML
    json         JSON
    jsonp        JSONP
    csv          CSVファイル
    php          PHP array
    serialized   シリアライズされたデータ
1. RESTコントローラの解説
FuelPHPとの出会いはそんな感じ
2. FuelPHPとは
2. FuelPHPとは
 公式サイトより
2. FuelPHPとは
 つたない和訳ですが




      FuelPHPは他のフレームワークの
      良いところを参考にし、コミュ
      ニティ駆動で一から開発された
      PHP5.3を対象としたシンプルで
      柔軟なウェブアプリケーション
      フレームワークです。
2. FuelPHPとは

 •   フューエル・ピー・エイチ・ピーと読みます
2. FuelPHPとは

 •   フューエル・ピー・エイチ・ピーと読みます

 •   2011年7月にversion 1.0が出た新しいフレームワーク

 •   その後、2011年12月に1.1、2012年6月に1.2リリース
2. FuelPHPとは

 •   フューエル・ピー・エイチ・ピーと読みます

 •   2011年7月にversion 1.0が出た新しいフレームワーク

 •   その後、2011年12月に1.1、2012年6月に1.2リリース

 •   FuelPHPのコア開発者5名すべてはCodeIgniterの開発に
     関わっている(いた)

 •   他のフレームワークの良い所取りをしたCodeIgniter
     ライクなフレームワーク
2. FuelPHPとは

 •   規約より設定

 •   PHP5.3以上必須

 •   オートローダー

 •   oilコマンド
     •  スキャフォールディング
     •  DBマイグレーション
     •   テスト、タスク

 •   モジュール、パッケージ、HMVC、 ViewModel

 •   MITライセンス
3. FuelPHPのインストール
3. FuelPHPのインストール



 $ curl get.fuelphp.com/oil | sh
 $ oil create /path/to/install_dir/project_name
3. FuelPHPのインストール
2行、それだけで。


 $ curl get.fuelphp.com/oil | sh
 $ oil create /path/to/install_dir/project_name
3. FuelPHPのインストール
インストール完了! ※要Git
3. FuelPHPのインストール
Twitter Bootstrapが取り入れられてるってのもイイ感じ
3. FuelPHPのインストール
ざっくり解説


 $ curl get.fuelphp.com/oil | sh
 $ oil create /path/to/install_dir/project_name
3. FuelPHPのインストール
oilコマンドのインストール


 $ curl get.fuelphp.com/oil | sh
 $ oil create /path/to/install_dir/project_name
3. FuelPHPのインストール
FuelPHPのファイル群を生成


 $ curl get.fuelphp.com/oil | sh
 $ oil create /path/to/install_dir/project_name
3. FuelPHPのインストール
中身はともにGitHubからのgit clone(ざっくり解説)


 $ curl get.fuelphp.com/oil | sh
 $ oil create /path/to/install_dir/project_name
3. FuelPHPのフォルダ構成
3. FuelPHPのフォルダ構成
          アプリケーションファイルを置く場所
          =僕らが書く場所
3. FuelPHPのフォルダ構成
          FuelPHPのコアが置かれた場所
          基本的に触ることはないです
3. FuelPHPのフォルダ構成
          パッケージを置く場所
3. FuelPHPのフォルダ構成
          パッケージを置く場所
          標準で5つのパッケージが
          格納されています
          自作のパッケージもここに格納します
3. FuelPHPのフォルダ構成
          スタティックファイルを置く場所
3. FuelPHPのフォルダ構成
          アプリケーションファイルの中を
          見ていきましょう
3. FuelPHPのフォルダ構成

          Model
3. FuelPHPのフォルダ構成

          View
3. FuelPHPのフォルダ構成

          Controller
3. FuelPHPのフォルダ構成

          ViewModel
          Viewファイルとは違います
3. FuelPHPのフォルダ構成

          ViewModel
          Viewファイルとは違います

          ビューモデルはビューの生成に必要なロジックを含むク
          ラスです。 コントローラがユーザ入力を処理し、必要な
          アクションを処理すると、 ビューモデルにビューに必要
          なデータを取得するように処理を引き継ぎます。
          http://press.nekoget.com/fuelphp_doc_1.2/general/
          viewmodels.html
3. FuelPHPのフォルダ構成
          Config
          必要に応じて設定ファイルをオーバーライドします
          例えば、環境に応じてDBを変えたり、プロファイラを有
          効する等
3. FuelPHPのフォルダ構成
          Config
          必要に応じて設定ファイルをオーバーライドします
          例えば、環境に応じてDBを変えたり、プロファイラを有
          効する等
          core/config
          app/config
          app/config/production or app/config/development

          の順でオーバーライドされます
          productionまたはdevelopmentは、環境に応じて読み込まれ
          ます
3. FuelPHPのフォルダ構成
          Config
          必要に応じて設定ファイルをオーバーライドします
          例えば、環境に応じてDBを変えたり、プロファイラを有
          効する等
          core/config
          app/config
          app/config/production or app/config/development

          の順でオーバーライドされます
          productionまたはdevelopmentは、環境に応じて読み込まれ
          ます
          初期状態でフォルダは存在しませんが、stage, test という
          環境も定義されています
4. FuelPHPの使い方 - Controller
4. FuelPHPの使い方 - Controller

 •   APPPATH/classes/controller以下に配置

 •   ファイル名はコントローラー名で小文字にします

 •   Controllerクラスを継承します

 •   クラス名にはController_プレフィックスをつけます

 •   クラス名の単語の先頭は大文字にします

 •   クラス名の単語の区切りにアンダースコアを使うと
     サブフォルダを意味してしまうので注意が必要です
4. Controllerでのお約束
 ファイル名はすべて小文字


APPPATH/classes/controller/welcome.php

class Controller_Welcome extends Controller
{
	

 public function action_index()
	

 {
	

 	

 return Response::forge(View::forge('welcome/index'));
	

 }
}
4. Controllerでのお約束
 Controllerクラスを継承します


APPPATH/classes/controller/welcome.php

class Controller_Welcome extends Controller
{
	

 public function action_index()
	

 {
	

 	

 return Response::forge(View::forge('welcome/index'));
	

 }
}
4. Controllerでのお約束
 Controller_プレフィックスをつけます


APPPATH/classes/controller/welcome.php

class Controller_Welcome extends Controller
{
	

 public function action_index()
	

 {
	

 	

 return Response::forge(View::forge('welcome/index'));
	

 }
}
4. Controllerでのお約束
 クラス名の単語の先頭は大文字にします


APPPATH/classes/controller/welcome.php

class Controller_Welcome extends Controller
{
	

 public function action_index()
	

 {
	

 	

 return Response::forge(View::forge('welcome/index'));
	

 }
}
4. Controllerでのお約束
 クラス名の単語の区切りにアンダースコアを使うとサブ
 フォルダを意味します

APPPATH/classes/controller/welcome/member.php

class Controller_Welcome_Member extends Controller
{
	

 public function action_index()
	

 {
	

 	

 return Response::forge(View::forge('welcome/index'));
	

 }
}
4. ControllerとURLの関係
 第一セグメントがクラス名


http://localhost/welcome/index

class Controller_Welcome extends Controller
{
	

 public function action_index()
	

 {
	

 	

 return Response::forge(View::forge('welcome/index'));
	

 }
}
4. ControllerとURLの関係
 第二セグメントがメソッド名


http://localhost/welcome/index

class Controller_Welcome extends Controller
{
	

 public function action_index()
	

 {
	

 	

 return Response::forge(View::forge('welcome/index'));
	

 }
}
4. ControllerとURLの関係
 ブラウザから実行されるメソッド(アクションメソッ
 ド)には、action_プレフィックスをつけます

http://localhost/welcome/index

class Controller_Welcome extends Controller
{
	

 public function action_index()
	

 {
	

 	

 return Response::forge(View::forge('welcome/index'));
	

 }
}
4. ControllerとURLの関係
 第三セグメント以降はパラメータ
 受け取りの際はデフォルト値を設定しておいた方が無難

http://localhost/welcome/index/123

class Controller_Welcome extends Controller
{
	

 public function action_index($page = null)
	

 {
	

 	

 return Response::forge(View::forge('welcome/index'));
	

 }
}
4. Controllerの定義済みメソッドとプロパティ
詳しい解説は省略します


  メソッド/プロパティ                 意味
  action_index()   メソッド名を省略されたときに実行される


  before()         アクションメソッドが実行される前に自動実行


  after()          アクションメソッドが実行された後に自動実行


  $request         Requestクラスのオブジェクトを保持


  $response        Responseクラスのオブジェクトを保持
4. Controllerクラスの種類
詳しい解説は省略します


        クラス名                         意味
   Controller            ベースコントローラ


   Controller_Template   ビューでレイアウト機能を使うコントローラ


   Controller_Rest       RESTfulなコントローラ

                         RestコントローラにTemplateコントローラが備
   Controller_Hybrid     わったもの
4. FuelPHPの使い方 - View
4. FuelPHPの使い方 - View

 •   APPPATH/views以下に配置

 •   ファイル名は小文字にします

 •   拡張子.phpをつけます
4.Viewファイル
Viewファイルの中身については、本日は割愛します。
PHPとHTMLで構成されたファイルです。
</head>
<body>
	

   <div id="header">
	

   	

    <div class="row">
	

   	

    	

   <div id="logo"></div>
	

   	

    </div>
	

   </div>
	

   <div class="container">
	

   	

    <div class="row">
	

   	

    	

   <div class="span16">
	

   	

    	

   	

    <h1><?php echo e($title); ?> <small>We can't find that!</small></h1>
	

   	

    	

   	

    <hr>
	

   	

    	

   	

    <p>The controller generating this page is found at <code>APPPATH/classes/controller/welcome.php</
code>.</p>
	

   	

    	

   	

    <p>This view is located at <code>APPPATH/views/welcome/404.php</code>.</p>
	

   	

    	

   </div>
	

   	

    </div>
	

   	

    <footer>
	

   	

    	

   <p class="pull-right">Page rendered in {exec_time}s using {mem_usage}mb of memory.</p>
	

   	

    	

   <p>
	

   	

    	

   	

    <a href="http://fuelphp.com">FuelPHP</a> is released under the MIT license.<br>
	

   	

    	

   	

    <small>Version: <?php echo e(Fuel::VERSION); ?></small>
4.Viewの読み込み
コントローラからView::forge('path/view')として読み込む
APPPATH/views/までのパスは省略します

class Controller_Welcome extends Controller
{
	

 public function action_index()
	

 {
	

 	

 return View::forge('welcome/index');
	

 }
}
4.Viewに値を渡す
連想配列で値を渡す
レンダリング時にextract()されるのでキーが変数名となります

class Controller_Welcome extends Controller
{
	

 public function action_index()
	

 {
	

 	

 $data = array();
	

 	

 $data['name'] = 'foo';
	

 	

 return View::forge('welcome/index', $data);
	

 }
}
4.Viewに値を渡す
他にも
set()メソッドを利用して値を渡す

class Controller_Welcome extends Controller
{
	

 public function action_index()
	

 {
	

 	

 $view = View::forge('welcome/index');
	

 	

 $view->set('name', 'foo');
	

 	

 return $view;
	

 }
}
4.Viewに値を渡す
他にも
プロパティに値をセットする

class Controller_Welcome extends Controller
{
	

 public function action_index()
	

 {
	

 	

 $view = View::forge('welcome/index');
	

 	

 $view->name = 'foo';
	

 	

 return $view;
	

 }
}
4. テンプレートコントローラとView
テンプレートのレイアウトを行いたいときは、
Controller_Templateを継承します

                コンテナ




       メニュー            メイン
4. FuelPHPの使い方 - Model
4. FuelPHPの使い方 - Model

 •   APPPATH/classes/model以下に配置

 •   ファイル名はモデル名で小文字にします

 •   Modelクラスを継承します

 •   クラス名にはModel_プレフィックスをつけます

 •   クラス名の単語の先頭は大文字にします

 •   クラス名の単語の区切りにアンダースコアを使うと
     サブフォルダを意味してしまうので注意が必要です
4. Modelでのお約束

 •
Controllerと基本的には同じなので詳細解説は省略します
   APPPATH/classes/model以下に配置

 •   ファイル名はモデル名で小文字にします

 •   Modelクラスを継承します

 •   クラス名にはModel_プレフィックスをつけます

 •   クラス名の単語の先頭は大文字にします

 •   クラス名の単語の区切りにアンダースコアを使うと
     サブフォルダを意味してしまうので注意が必要です
4. Modelクラスの種類
詳しい解説は省略します


      クラス名                  意味
  Model          ベースモデル


  Model_Crud     CRUD処理をするモデル


  OrmModel      ORMパッケージ
4. oilコマンドでModelを作ってみる
4. oilコマンドでModelを作ってみる
名前とパスワードとemailを持つユーザテーブルを作りた
いとした場合

CREATE TABLE user (
    id int(11) auto_increment
   ,name varchar(50)
   ,password varchar(255)
   ,email varchar(255)
);
4. oilコマンドでModelを作ってみる
oilコマンドだとこんな感じ


$ oil g model user name:varchar[50] password:string email:string
4. oilコマンドでModelを作ってみる
テーブル名


$ oil g model user name:varchar[50] password:string email:string
4. oilコマンドでModelを作ってみる
フィールド名


$ oil g model user name:varchar[50] password:string email:string
4. oilコマンドでModelを作ってみる
フィールドの型


$ oil g model user name:varchar[50] password:string email:string
4. oilコマンドでModelを作ってみる
マイグレーションを実行し、テーブルを作成します


$ oil g model user name:varchar[50] password:string email:string
$ oil refine migrate
4. oilコマンドでModelを作ってみる
 Userモデルができた!
 テーブルもできた!
class Model_User extends OrmModel
{
	

   protected static $_properties = array(
	

   	

  'id',
	

   	

  'name',
	

   	

  'password',
	

   	

  'email',
	

   	

  'created_at',
	

   	

  'updated_at'
	

   );
	

   protected static $_observers = array(
	

   	

   'OrmObserver_CreatedAt' => array(
	

   	

   	

   'events' => array('before_insert'),
	

   	

   	

   'mysql_timestamp' => false,
	

   	

   ),
	

   	

   'OrmObserver_UpdatedAt' => array(
	

   	

   	

   'events' => array('before_save'),
	

   	

   	

   'mysql_timestamp' => false,
	

   	

   ),
	

   );
}
4. oilコマンドでModelを作ってみる
 例えば、こんな風に書いておけば、Fieldsetクラスで自動
 的にフォームを作ってくれたり、バリデートしてくれたり
class Model_User extends OrmModel
{
	

   protected static $_properties = array(
	

   	

  'id',
	

   	

  'name' => array(
	

   	

  	

   'data_type' => 'varchar',
	

   	

  	

   'label'     => 'お名前',
	

   	

    	

   'validation' => array('required'),
	

   	

    	

   'form'       => array('type' => 'text'),
	

   	

    	

   'default'    => '',
	

   	

    ),
	

   	

    'password',
	

   	

    'email',
	

   	

    'created_at',
	

   	

    'updated_at'
	

   );

	

   // 略
4. oilコマンドでModelを作ってみる
 リレーションの設定はこんな感じ


class Model_User extends OrmModel
{
	

   protected static $_properties = array(
	

   	

  'id',
	

   	

  'name',
	

   	

  'password',
	

   	

  'email',
	

   	

  'created_at',
	

   	

  'updated_at'
	

   );
	

	

   protected static $_has_many = array(
	

   	

    comments => array(
	

   	

    	

 'model_to'       => 'Model_Comment',
	

   	

    	

 'key_from'       => 'id',
	

   	

    	

 'key_to'         => 'user_id',
	

   	

    	

 'cascade_save' => false,
	

   	

    	

 'cascade_delete' => true,
	

   ));	

 	

	

   // 略
4. FuelPHPの使い方
説明できてないことの方が多いですが、FuelPHPのざっく
りとした使い方は以上です
5. セキュリティについて
5. セキュリティについて
代表的なウェブアプリケーションのセキュリティリスク
と対応状況

         リスク名        対応状況
                ビューへ渡す値は自動的にエ
  XSS
                スケープされる

                クエリビルダ、ORMパッケー
  SQLインジェクション   ジを使えば、自動的にエス
                ケープされる
                Cookieを使ったトークンを作
  CSRF          るクラスが用意されている。
                手動で利用する
5. セキュリティについて
出力フィルタ、URIフィルタはSecurity::htmlentities()が使わ
れます
5. セキュリティについて
 出力フィルタ、URIフィルタはSecurity::htmlentities()が使わ
 れます
中身
	

   public static function htmlentities($value, $flags = null, $encoding = null, $double_encode = null)
	

   {
	

   	

   static $already_cleaned = array();

	

   	

   is_null($flags) and $flags = Config::get('security.htmlentities_flags', ENT_QUOTES);
	

   	

   is_null($encoding) and $encoding = Fuel::$encoding;
	

   	

   is_null($double_encode) and $double_encode = Config::get('security.htmlentities_double_encode', false);

	

   	

   // 略

	

   	

   if (is_string($value))
	

   	

   {
	

   	

   	

    $value = htmlentities($value, $flags, $encoding, $double_encode);
	

   	

   }

	

   	

   // 略
5. セキュリティについて
5. セキュリティについて

•   ある程度は、自動的に保護してくれる

•   または保護をするクラスが用意されている

•   ただ過信は禁物!

•   ウェブアプリケーション制作に関わる以上、アンテナを
    常に張りセキュリティに関する知識を高めておく必要が
    ある
6. その他ざっくりと
6. 開発補助 - デバッグ
エラーがあった場合は整形して表示してくれます
6. 開発補助 - プロファイラ
config で 'profiling' => true にすることで、プロファイラが
使えます
6. コアクラス一覧
•   Agent        •   Form         •   Package
•   Arr          •   Format       •   Pagination
•   Asset        •   Ftp          •   Profiler
•   Autoloader   •   Fuel         •   Redis
•   Cache        •   Html         •   Request
•   Cli          •   Image        •   Response
•   Config        •   Inflector     •   Router
•   Cookie       •   Input        •   Security
•   Crypt        •   Lang         •   Session
•   Database     •   Log          •   Str
•   Date         •   Markdown     •   Theme
•   Debug        •   Migrate      •   Upload
•   Event        •   Model_Crud   •   Uri
•   Fieldset     •   Module       •   Validation
•   File         •   Mongo_Db     •   View
•   Finder       •   Num
7月1日から20日間FuelPHPを触ってみた感想

 •   必要な機能は大凡そろってるかなー

 •   シンプルで、やりたいことがサクッとできるイメージ

 •   ただ、フィーチャーフォン(いわゆるガラケー)向け
     のウェブアプリを作ったりするのは苦手分野かな?
     (ただ単に調べきれてないとも言う)

 •   その辺は、CakePHPとかの方が一日の長がある感じ

 •   まあ実質1週間くらいしか触ってないけどね!
こんな人にはFuelPHPを勧めてみます

 •   現場から少し離れてたけど、やっぱり自分でもアプリ
     ケーションを作りたい人

 •   WordPress等を通してPHPでのアプリケーション制作に
     興味を持ったけど、何から手を付けたら良いかわから
     ない人

 •   CodeIgniterのライセンス騒動に疲弊した人

 •   このスライドを通して興味を持ったもの皆
参考文献とかウェブページとか
FuelPHP 公式サイト(英語)
http://fuelphp.com/

FuelPHP日本語訳ドキュメント
http://press.nekoget.com/fuelphp_doc/

FuelPHP Google グループ
http://groups.google.com/group/fuelphp_jp
参考文献とかウェブページとか
     FuelPHP 入門
     2012年6月20日 初版 第1刷発行

     ブログ作成を通して、FuelPHPの使い方等を学びます。
     フォーム処理、認証管理、メール送信等。




     はじめてのフレームワークとしての FuelPHP
     2012年7月2日 バージョン0.9.0発行

     フレームワークとはなんぞやという所から始まって、FuelPHPを用いた
     ウェブアプリケーション作成について学びます。テスト手法について
     しっかりと書かれているのが好印象。電子書籍のみの販売。

     達人出版会
     http://tatsu-zine.com/books/fuelphp1st
勉強会のお知らせ




 スイミー
 http://swimmy.me/
勉強会のお知らせ

•   ウェブプログラマ向けの勉強会をやってます

•   PC持ち込んでやる勉強会です

•   月に1∼2回くらいのペースです

•   現在はPHPerも、ちゃんとCIしようってことで、
    Jenkinsの勉強をしています

•   一人で悩んでても仕方ない!がコンセプトなので、
    皆さんもお気軽に、ご参加ください!
さいごに



 このような機会を与えてくださってあ
 りがとうございました。
 おかげで目標を持って勉強することが
 できました。
さいごに




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

Mais conteúdo relacionado

Mais procurados

Node-v0.12の新機能について
Node-v0.12の新機能についてNode-v0.12の新機能について
Node-v0.12の新機能について
shigeki_ohtsu
 
そうだったのか! よくわかる process.nextTick() node.jsのイベントループを理解する
そうだったのか! よくわかる process.nextTick() node.jsのイベントループを理解するそうだったのか! よくわかる process.nextTick() node.jsのイベントループを理解する
そうだったのか! よくわかる process.nextTick() node.jsのイベントループを理解する
shigeki_ohtsu
 

Mais procurados (20)

Elasticsearchを使うときの注意点 公開用スライド
Elasticsearchを使うときの注意点 公開用スライドElasticsearchを使うときの注意点 公開用スライド
Elasticsearchを使うときの注意点 公開用スライド
 
[부스트캠프 Tech Talk] 김봉진_WandB로 Auto ML 뿌수기
[부스트캠프 Tech Talk] 김봉진_WandB로 Auto ML 뿌수기[부스트캠프 Tech Talk] 김봉진_WandB로 Auto ML 뿌수기
[부스트캠프 Tech Talk] 김봉진_WandB로 Auto ML 뿌수기
 
サーバーサイド Kotlin のテストフレームワーク事情
サーバーサイド Kotlin のテストフレームワーク事情サーバーサイド Kotlin のテストフレームワーク事情
サーバーサイド Kotlin のテストフレームワーク事情
 
SQLite の暗号化
SQLite の暗号化SQLite の暗号化
SQLite の暗号化
 
O/Rマッパーによるトラブルを未然に防ぐ
O/Rマッパーによるトラブルを未然に防ぐO/Rマッパーによるトラブルを未然に防ぐ
O/Rマッパーによるトラブルを未然に防ぐ
 
RESTful API 설계
RESTful API 설계RESTful API 설계
RESTful API 설계
 
Node-v0.12の新機能について
Node-v0.12の新機能についてNode-v0.12の新機能について
Node-v0.12の新機能について
 
怖くないSpring Bootのオートコンフィグレーション
怖くないSpring Bootのオートコンフィグレーション怖くないSpring Bootのオートコンフィグレーション
怖くないSpring Bootのオートコンフィグレーション
 
Where狙いのキー、order by狙いのキー
Where狙いのキー、order by狙いのキーWhere狙いのキー、order by狙いのキー
Where狙いのキー、order by狙いのキー
 
Web api開発をするなら ドキュメントは自動生成にしておこう__ph_per_kaigi2021_
Web api開発をするなら ドキュメントは自動生成にしておこう__ph_per_kaigi2021_Web api開発をするなら ドキュメントは自動生成にしておこう__ph_per_kaigi2021_
Web api開発をするなら ドキュメントは自動生成にしておこう__ph_per_kaigi2021_
 
Introduction httpClient on Java11 / Java11時代のHTTPアクセス再入門
Introduction httpClient on Java11 / Java11時代のHTTPアクセス再入門Introduction httpClient on Java11 / Java11時代のHTTPアクセス再入門
Introduction httpClient on Java11 / Java11時代のHTTPアクセス再入門
 
.NET 7 升級教戰手冊_V1.0.pdf
.NET 7 升級教戰手冊_V1.0.pdf.NET 7 升級教戰手冊_V1.0.pdf
.NET 7 升級教戰手冊_V1.0.pdf
 
ReactiveだけじゃないSpring 5 & Spring Boot 2新機能解説
ReactiveだけじゃないSpring 5 & Spring Boot 2新機能解説ReactiveだけじゃないSpring 5 & Spring Boot 2新機能解説
ReactiveだけじゃないSpring 5 & Spring Boot 2新機能解説
 
Hack言語に賭けたチームの話
Hack言語に賭けたチームの話Hack言語に賭けたチームの話
Hack言語に賭けたチームの話
 
モダン PHP テクニック 12 選 ―PsalmとPHP 8.1で今はこんなこともできる!―
モダン PHP テクニック 12 選 ―PsalmとPHP 8.1で今はこんなこともできる!―モダン PHP テクニック 12 選 ―PsalmとPHP 8.1で今はこんなこともできる!―
モダン PHP テクニック 12 選 ―PsalmとPHP 8.1で今はこんなこともできる!―
 
Php internal architecture
Php internal architecturePhp internal architecture
Php internal architecture
 
Jquery Giriş
Jquery GirişJquery Giriş
Jquery Giriş
 
そうだったのか! よくわかる process.nextTick() node.jsのイベントループを理解する
そうだったのか! よくわかる process.nextTick() node.jsのイベントループを理解するそうだったのか! よくわかる process.nextTick() node.jsのイベントループを理解する
そうだったのか! よくわかる process.nextTick() node.jsのイベントループを理解する
 
Git을 조금 더 알아보자!
Git을 조금 더 알아보자!Git을 조금 더 알아보자!
Git을 조금 더 알아보자!
 
SQL Server에서 Django를 추구하면 안 되는 걸까?
SQL Server에서 Django를 추구하면 안 되는 걸까?SQL Server에서 Django를 추구하면 안 되는 걸까?
SQL Server에서 Django를 추구하면 안 되는 걸까?
 

Destaque

CakePHP vs FuelPHP
CakePHP vs FuelPHPCakePHP vs FuelPHP
CakePHP vs FuelPHP
Sotaro Omura
 
はじめての FuelPHP
はじめての FuelPHPはじめての FuelPHP
はじめての FuelPHP
Sho A
 
Fuel php勉強会東京vol2 発表資料_モデル間リレーション
Fuel php勉強会東京vol2 発表資料_モデル間リレーションFuel php勉強会東京vol2 発表資料_モデル間リレーション
Fuel php勉強会東京vol2 発表資料_モデル間リレーション
web2citizen
 
10分でわかるFuelPHP @ 2013/04 FuelPHP入門ハンズオン vol.1
 10分でわかるFuelPHP @ 2013/04 FuelPHP入門ハンズオン vol.1 10分でわかるFuelPHP @ 2013/04 FuelPHP入門ハンズオン vol.1
10分でわかるFuelPHP @ 2013/04 FuelPHP入門ハンズオン vol.1
kenjis
 

Destaque (20)

今、最も勢いのあるWebフレームワーク「fuel php」
今、最も勢いのあるWebフレームワーク「fuel php」今、最も勢いのあるWebフレームワーク「fuel php」
今、最も勢いのあるWebフレームワーク「fuel php」
 
CakePHP vs FuelPHP
CakePHP vs FuelPHPCakePHP vs FuelPHP
CakePHP vs FuelPHP
 
FuelPHPをさわってみて
FuelPHPをさわってみてFuelPHPをさわってみて
FuelPHPをさわってみて
 
はじめての FuelPHP
はじめての FuelPHPはじめての FuelPHP
はじめての FuelPHP
 
FuelPHP + Pagoda Box
FuelPHP + Pagoda BoxFuelPHP + Pagoda Box
FuelPHP + Pagoda Box
 
Fuel php勉強会東京vol2 発表資料_モデル間リレーション
Fuel php勉強会東京vol2 発表資料_モデル間リレーションFuel php勉強会東京vol2 発表資料_モデル間リレーション
Fuel php勉強会東京vol2 発表資料_モデル間リレーション
 
Ospn fuel php
Ospn fuel phpOspn fuel php
Ospn fuel php
 
FuelPHP Osu Nagoya vol.1
FuelPHP Osu Nagoya vol.1FuelPHP Osu Nagoya vol.1
FuelPHP Osu Nagoya vol.1
 
PHPカンファレンス 2012 フレームワークアップデート FuelPHP
PHPカンファレンス 2012 フレームワークアップデート FuelPHPPHPカンファレンス 2012 フレームワークアップデート FuelPHP
PHPカンファレンス 2012 フレームワークアップデート FuelPHP
 
ぺちぱな。 はじまり
ぺちぱな。 はじまりぺちぱな。 はじまり
ぺちぱな。 はじまり
 
あにみた!(PHPカンファレンス用資料)
あにみた!(PHPカンファレンス用資料)あにみた!(PHPカンファレンス用資料)
あにみた!(PHPカンファレンス用資料)
 
Let’s translate FuelPHP docs!
Let’s translate FuelPHP docs!Let’s translate FuelPHP docs!
Let’s translate FuelPHP docs!
 
Fuel php osc tokyo2012
Fuel php osc tokyo2012Fuel php osc tokyo2012
Fuel php osc tokyo2012
 
フレームワーク入門書の決定版が完成
フレームワーク入門書の決定版が完成フレームワーク入門書の決定版が完成
フレームワーク入門書の決定版が完成
 
10分でわかるFuelPHP @ 2013/04 FuelPHP入門ハンズオン vol.1
 10分でわかるFuelPHP @ 2013/04 FuelPHP入門ハンズオン vol.1 10分でわかるFuelPHP @ 2013/04 FuelPHP入門ハンズオン vol.1
10分でわかるFuelPHP @ 2013/04 FuelPHP入門ハンズオン vol.1
 
10分でわかるFuelPHP @ OSC2013 Nagoya
10分でわかるFuelPHP @ OSC2013 Nagoya10分でわかるFuelPHP @ OSC2013 Nagoya
10分でわかるFuelPHP @ OSC2013 Nagoya
 
10分でわかるFuelPHP @ 2012/05 OSC2012 Nagoya
 10分でわかるFuelPHP @ 2012/05 OSC2012 Nagoya 10分でわかるFuelPHP @ 2012/05 OSC2012 Nagoya
10分でわかるFuelPHP @ 2012/05 OSC2012 Nagoya
 
10分でわかるFuelPHP @ 2011/12
10分でわかるFuelPHP @ 2011/1210分でわかるFuelPHP @ 2011/12
10分でわかるFuelPHP @ 2011/12
 
C#の強み、或いは何故PHPから乗り換えるのか
C#の強み、或いは何故PHPから乗り換えるのかC#の強み、或いは何故PHPから乗り換えるのか
C#の強み、或いは何故PHPから乗り換えるのか
 
PHPCON fukuoka 2015 CodeIgniter update
PHPCON fukuoka 2015 CodeIgniter updatePHPCON fukuoka 2015 CodeIgniter update
PHPCON fukuoka 2015 CodeIgniter update
 

Semelhante a 最近、僕がハマったFuelPHPの紹介

Phpunit at excite
Phpunit at excitePhpunit at excite
Phpunit at excite
yuki777
 
WTM53 phpフレームワーク いまさらcodeigniter
WTM53 phpフレームワーク いまさらcodeigniterWTM53 phpフレームワーク いまさらcodeigniter
WTM53 phpフレームワーク いまさらcodeigniter
Masanori Oobayashi
 
20091030cakephphandson 01
20091030cakephphandson 0120091030cakephphandson 01
20091030cakephphandson 01
Yusuke Ando
 

Semelhante a 最近、僕がハマったFuelPHPの紹介 (20)

Osc2014
Osc2014Osc2014
Osc2014
 
FuelPHPにアプリと管理ツールを同居してみる
FuelPHPにアプリと管理ツールを同居してみるFuelPHPにアプリと管理ツールを同居してみる
FuelPHPにアプリと管理ツールを同居してみる
 
Phpunit at excite
Phpunit at excitePhpunit at excite
Phpunit at excite
 
最新PHP事情 (2000年7月22日,PHPカンファレンス)
最新PHP事情 (2000年7月22日,PHPカンファレンス)最新PHP事情 (2000年7月22日,PHPカンファレンス)
最新PHP事情 (2000年7月22日,PHPカンファレンス)
 
WTM53 phpフレームワーク いまさらcodeigniter
WTM53 phpフレームワーク いまさらcodeigniterWTM53 phpフレームワーク いまさらcodeigniter
WTM53 phpフレームワーク いまさらcodeigniter
 
第21回Creators MeetUp
第21回Creators MeetUp第21回Creators MeetUp
第21回Creators MeetUp
 
behatエクステンションの作り方
behatエクステンションの作り方behatエクステンションの作り方
behatエクステンションの作り方
 
ChefユーザのためのAnsible入門
ChefユーザのためのAnsible入門ChefユーザのためのAnsible入門
ChefユーザのためのAnsible入門
 
Xhprof
XhprofXhprof
Xhprof
 
Fuelphp1.8を始めたい
Fuelphp1.8を始めたいFuelphp1.8を始めたい
Fuelphp1.8を始めたい
 
FukuokaPHP 3
FukuokaPHP 3FukuokaPHP 3
FukuokaPHP 3
 
2009 PHP初心者
2009 PHP初心者2009 PHP初心者
2009 PHP初心者
 
Chef
ChefChef
Chef
 
WordPressプラグイン作成入門
WordPressプラグイン作成入門WordPressプラグイン作成入門
WordPressプラグイン作成入門
 
Spring Framework ふりかえりと4.3新機能
Spring Framework ふりかえりと4.3新機能Spring Framework ふりかえりと4.3新機能
Spring Framework ふりかえりと4.3新機能
 
NetBeansではじめる FuelPHP
NetBeansではじめる FuelPHPNetBeansではじめる FuelPHP
NetBeansではじめる FuelPHP
 
20091030cakephphandson 01
20091030cakephphandson 0120091030cakephphandson 01
20091030cakephphandson 01
 
How to run P4 BMv2
How to run P4 BMv2How to run P4 BMv2
How to run P4 BMv2
 
FuelPHP - フレームワーク4本勝負 @PHPカンファレンス関西2014
FuelPHP - フレームワーク4本勝負 @PHPカンファレンス関西2014 FuelPHP - フレームワーク4本勝負 @PHPカンファレンス関西2014
FuelPHP - フレームワーク4本勝負 @PHPカンファレンス関西2014
 
Apache Module
Apache ModuleApache Module
Apache Module
 

Último

Último (12)

Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 
Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsUtilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native Integrations
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
 

最近、僕がハマったFuelPHPの紹介

Notas do Editor

  1. \n
  2. \n
  3. \n
  4. \n
  5. \n
  6. \n
  7. \n
  8. \n
  9. \n
  10. \n
  11. \n
  12. \n
  13. \n
  14. \n
  15. \n
  16. \n
  17. \n
  18. \n
  19. \n
  20. \n
  21. \n
  22. \n
  23. \n
  24. \n
  25. \n
  26. \n
  27. \n
  28. \n
  29. \n
  30. \n
  31. \n
  32. \n
  33. \n
  34. \n
  35. \n
  36. \n
  37. \n
  38. \n
  39. \n
  40. \n
  41. \n
  42. \n
  43. \n
  44. \n
  45. \n
  46. \n
  47. \n
  48. \n
  49. \n
  50. \n
  51. \n
  52. \n
  53. \n
  54. \n
  55. \n
  56. \n
  57. \n
  58. \n
  59. \n
  60. \n
  61. \n
  62. \n
  63. \n
  64. \n
  65. \n
  66. \n
  67. \n
  68. \n
  69. \n
  70. \n
  71. \n
  72. \n
  73. \n
  74. \n
  75. \n
  76. \n
  77. \n
  78. \n
  79. \n
  80. \n
  81. \n
  82. \n
  83. \n
  84. \n
  85. \n
  86. \n
  87. \n
  88. \n
  89. \n
  90. \n
  91. \n
  92. \n
  93. \n
  94. \n
  95. \n
  96. \n
  97. \n
  98. \n
  99. \n
  100. \n
  101. \n
  102. \n
  103. \n
  104. \n
  105. \n
  106. \n