omoon.org の裏側 〜fuelphp の task 活用例〜

81
omoon.org の裏側 FuelPHP の task 活用例 FuelPHP&CodeIgniter ユーザの集い(FuelPHP東京勉強会#5、CodeIgniter talk #2) October 12, 2013 Sotaro OMURA @omoon

Upload: sotaro-omura

Post on 11-Jun-2015

5.244 views

Category:

Technology


5 download

DESCRIPTION

2013/10/12 の FuelPHP&CodeIgniter ユーザの集い LT 資料です。

TRANSCRIPT

Page 1: omoon.org の裏側 〜FuelPHP の task 活用例〜

omoon.org の裏側FuelPHP の task 活用例

FuelPHP&CodeIgniter ユーザの集い(FuelPHP東京勉強会#5、CodeIgniter talk #2)October 12, 2013

Sotaro OMURA@omoon

Page 2: omoon.org の裏側 〜FuelPHP の task 活用例〜

About Me

Page 3: omoon.org の裏側 〜FuelPHP の task 活用例〜

About Me

• Sotaro OMURA

Page 4: omoon.org の裏側 〜FuelPHP の task 活用例〜

About Me

• Sotaro OMURA•大阪から来ました

Page 5: omoon.org の裏側 〜FuelPHP の task 活用例〜

About Me

• Sotaro OMURA•大阪から来ました•Kansai PHP Users Group Staff

Page 6: omoon.org の裏側 〜FuelPHP の task 活用例〜

About Me

• Sotaro OMURA•大阪から来ました•Kansai PHP Users Group Staff• PHP歴は12年ほど(最近はFuelPHP)

Page 7: omoon.org の裏側 〜FuelPHP の task 活用例〜

About Me

• Sotaro OMURA•大阪から来ました•Kansai PHP Users Group Staff• PHP歴は12年ほど(最近はFuelPHP)• omoon.org

Page 8: omoon.org の裏側 〜FuelPHP の task 活用例〜

About Me

• Sotaro OMURA•大阪から来ました•Kansai PHP Users Group Staff• PHP歴は12年ほど(最近はFuelPHP)• omoon.org•@omoon

Page 9: omoon.org の裏側 〜FuelPHP の task 活用例〜

About Me

• Sotaro OMURA•大阪から来ました•Kansai PHP Users Group Staff• PHP歴は12年ほど(最近はFuelPHP)• omoon.org•@omoon

Page 10: omoon.org の裏側 〜FuelPHP の task 活用例〜

めんどくさがり

Page 11: omoon.org の裏側 〜FuelPHP の task 活用例〜
Page 12: omoon.org の裏側 〜FuelPHP の task 活用例〜
Page 13: omoon.org の裏側 〜FuelPHP の task 活用例〜

About Me

Page 14: omoon.org の裏側 〜FuelPHP の task 活用例〜

About Me

Page 15: omoon.org の裏側 〜FuelPHP の task 活用例〜

フレームワークを使ったサンプルアプリケーション

Page 16: omoon.org の裏側 〜FuelPHP の task 活用例〜

 1  <?php  2  require  __DIR__  .  '/../vendor/autoload.php';  3    4  $app  =  new  Silex\Application();  5    6  $app-‐>register(new  Silex\Provider\TwigServiceProvider(),  array(  7          'twig.path'  =>  __DIR__.'/../views',  8  ));  9  10  //  データベース接続情報の読込11  $env  =  getenv('APP_ENV')  ?:  'development';12  $config  =  require  __DIR__  .  "/../config/$env.php";13  $app-‐>register(new  Silex\Provider\DoctrineServiceProvider(),  array(14          'db.options'  =>  $config['db'],15  ));16  17  //  トップ画面18  $app-‐>get('/',  function(Silex\Application  $app)  {19          $posts  =  $app['db']-‐>fetchAll('20                  SELECT  name,  message,  unix_timestamp(created)  as  created21                  FROM  posts  ORDER  BY  created  DESC  LIMIT  522          ');23          return  $app['twig']-‐>render('index.twig',  array(24                  'posts'  =>  $posts,25          ));26  });27  28  //  投稿処理29  $app-‐>post('/speak',  function(Silex\Application  $app)  {30          $name  =  $app['request']-‐>get('name');31          $message  =  $app['request']-‐>get('message');32          if  ($name  &&  $message)  {33                  $app['db']-‐>insert('posts',  array('name'  =>  $name,  'message'  =>  $message));34          }35          return  $app-‐>redirect('/');36  });37  38  $app-‐>run();

Page 17: omoon.org の裏側 〜FuelPHP の task 活用例〜

 1  <?php  2  require  __DIR__  .  '/../vendor/autoload.php';  3    4  $app  =  new  Silex\Application();  5    6  $app-‐>register(new  Silex\Provider\TwigServiceProvider(),  array(  7          'twig.path'  =>  __DIR__.'/../views',  8  ));  9  10  //  データベース接続情報の読込11  $env  =  getenv('APP_ENV')  ?:  'development';12  $config  =  require  __DIR__  .  "/../config/$env.php";13  $app-‐>register(new  Silex\Provider\DoctrineServiceProvider(),  array(14          'db.options'  =>  $config['db'],15  ));16  17  //  トップ画面18  $app-‐>get('/',  function(Silex\Application  $app)  {19          $posts  =  $app['db']-‐>fetchAll('20                  SELECT  name,  message,  unix_timestamp(created)  as  created21                  FROM  posts  ORDER  BY  created  DESC  LIMIT  522          ');23          return  $app['twig']-‐>render('index.twig',  array(24                  'posts'  =>  $posts,25          ));26  });27  28  //  投稿処理29  $app-‐>post('/speak',  function(Silex\Application  $app)  {30          $name  =  $app['request']-‐>get('name');31          $message  =  $app['request']-‐>get('message');32          if  ($name  &&  $message)  {33                  $app['db']-‐>insert('posts',  array('name'  =>  $name,  'message'  =>  $message));34          }35          return  $app-‐>redirect('/');36  });37  38  $app-‐>run();

Page 18: omoon.org の裏側 〜FuelPHP の task 活用例〜

 1  <?php  2  require  __DIR__  .  '/../vendor/autoload.php';  3    4  $app  =  new  Silex\Application();  5    6  $app-‐>register(new  Silex\Provider\TwigServiceProvider(),  array(  7          'twig.path'  =>  __DIR__.'/../views',  8  ));  9  10  //  データベース接続情報の読込11  $env  =  getenv('APP_ENV')  ?:  'development';12  $config  =  require  __DIR__  .  "/../config/$env.php";13  $app-‐>register(new  Silex\Provider\DoctrineServiceProvider(),  array(14          'db.options'  =>  $config['db'],15  ));16  17  //  トップ画面18  $app-‐>get('/',  function(Silex\Application  $app)  {19          $posts  =  $app['db']-‐>fetchAll('20                  SELECT  name,  message,  unix_timestamp(created)  as  created21                  FROM  posts  ORDER  BY  created  DESC  LIMIT  522          ');23          return  $app['twig']-‐>render('index.twig',  array(24                  'posts'  =>  $posts,25          ));26  });27  28  //  投稿処理29  $app-‐>post('/speak',  function(Silex\Application  $app)  {30          $name  =  $app['request']-‐>get('name');31          $message  =  $app['request']-‐>get('message');32          if  ($name  &&  $message)  {33                  $app['db']-‐>insert('posts',  array('name'  =>  $name,  'message'  =>  $message));34          }35          return  $app-‐>redirect('/');36  });37  38  $app-‐>run();

なんかすみません

Page 19: omoon.org の裏側 〜FuelPHP の task 活用例〜

FuelPHPとのなれそめ

Page 20: omoon.org の裏側 〜FuelPHP の task 活用例〜
Page 21: omoon.org の裏側 〜FuelPHP の task 活用例〜
Page 22: omoon.org の裏側 〜FuelPHP の task 活用例〜
Page 23: omoon.org の裏側 〜FuelPHP の task 活用例〜
Page 24: omoon.org の裏側 〜FuelPHP の task 活用例〜
Page 25: omoon.org の裏側 〜FuelPHP の task 活用例〜

お好きですね

Page 26: omoon.org の裏側 〜FuelPHP の task 活用例〜

他に

Page 27: omoon.org の裏側 〜FuelPHP の task 活用例〜
Page 28: omoon.org の裏側 〜FuelPHP の task 活用例〜

最近は

Page 29: omoon.org の裏側 〜FuelPHP の task 活用例〜
Page 30: omoon.org の裏側 〜FuelPHP の task 活用例〜
Page 31: omoon.org の裏側 〜FuelPHP の task 活用例〜
Page 32: omoon.org の裏側 〜FuelPHP の task 活用例〜
Page 33: omoon.org の裏側 〜FuelPHP の task 活用例〜
Page 34: omoon.org の裏側 〜FuelPHP の task 活用例〜

JSONでやりとり

Page 35: omoon.org の裏側 〜FuelPHP の task 活用例〜
Page 36: omoon.org の裏側 〜FuelPHP の task 活用例〜

ありがとう

Page 37: omoon.org の裏側 〜FuelPHP の task 活用例〜

さて

Page 38: omoon.org の裏側 〜FuelPHP の task 活用例〜

omoon.org

Page 39: omoon.org の裏側 〜FuelPHP の task 活用例〜
Page 40: omoon.org の裏側 〜FuelPHP の task 活用例〜

omoon.org

Page 41: omoon.org の裏側 〜FuelPHP の task 活用例〜

omoon.org

• 2002年ごろスタート

Page 42: omoon.org の裏側 〜FuelPHP の task 活用例〜

omoon.org

• 2002年ごろスタート•写真と一行コメントだけ

Page 43: omoon.org の裏側 〜FuelPHP の task 活用例〜

omoon.org

• 2002年ごろスタート•写真と一行コメントだけ•最初は HTML + FTP アップロード

Page 44: omoon.org の裏側 〜FuelPHP の task 活用例〜

めんどくさがり

Page 45: omoon.org の裏側 〜FuelPHP の task 活用例〜
Page 46: omoon.org の裏側 〜FuelPHP の task 活用例〜
Page 47: omoon.org の裏側 〜FuelPHP の task 活用例〜
Page 48: omoon.org の裏側 〜FuelPHP の task 活用例〜

簡易化の歴史

Page 49: omoon.org の裏側 〜FuelPHP の task 活用例〜

簡易化の歴史

• Flickr

Page 50: omoon.org の裏側 〜FuelPHP の task 活用例〜

簡易化の歴史

• Flickr• PHP + MySQL

Page 51: omoon.org の裏側 〜FuelPHP の task 活用例〜

簡易化の歴史

• Flickr• PHP + MySQL• Flickr + Eye-Fi

Page 52: omoon.org の裏側 〜FuelPHP の task 活用例〜

簡易化の歴史

• Flickr• PHP + MySQL• Flickr + Eye-Fi•独自 cron job

Page 53: omoon.org の裏側 〜FuelPHP の task 活用例〜
Page 54: omoon.org の裏側 〜FuelPHP の task 活用例〜

オレオレなので完成しない

Page 55: omoon.org の裏側 〜FuelPHP の task 活用例〜
Page 56: omoon.org の裏側 〜FuelPHP の task 活用例〜

Tasks are classes that can be run through the command line or set up as a cron job. They are generally used for background processes, timed tasks and maintenance tasks. Tasks can calls models and other classes just like controllers.

Page 57: omoon.org の裏側 〜FuelPHP の task 活用例〜

Tasks

Page 58: omoon.org の裏側 〜FuelPHP の task 活用例〜

Tasks

•コマンドラインから呼べる

Page 59: omoon.org の裏側 〜FuelPHP の task 活用例〜

Tasks

•コマンドラインから呼べる• cron jobとして使える

Page 60: omoon.org の裏側 〜FuelPHP の task 活用例〜

Tasks

•コマンドラインから呼べる• cron jobとして使える•バックグラウンド処理とか

Page 61: omoon.org の裏側 〜FuelPHP の task 活用例〜

Tasks

•コマンドラインから呼べる• cron jobとして使える•バックグラウンド処理とか•定期的な処理とか

Page 62: omoon.org の裏側 〜FuelPHP の task 活用例〜

Tasks

•コマンドラインから呼べる• cron jobとして使える•バックグラウンド処理とか•定期的な処理とか•メンテナンスに

Page 63: omoon.org の裏側 〜FuelPHP の task 活用例〜

Tasks

•コマンドラインから呼べる• cron jobとして使える•バックグラウンド処理とか•定期的な処理とか•メンテナンスに•モデルやクラスをコントローラから呼ぶ時みたいに呼べる

Page 64: omoon.org の裏側 〜FuelPHP の task 活用例〜

いけるかも

Page 65: omoon.org の裏側 〜FuelPHP の task 活用例〜

やってみた

Page 66: omoon.org の裏側 〜FuelPHP の task 活用例〜
Page 67: omoon.org の裏側 〜FuelPHP の task 活用例〜

▾  fuel/    ▾  app/        ▸  cache/        ▾  classes/            ▸  controller/            ▸  model/            ▸  twig/            ▸  view/                flickr.php        ▾  config/            ▸  development/            ▸  production/            ▸  test/                config.php                db.php                parser.php                rest.php                routes.php        ▸  lang/        ▸  less/        ▸  logs/        ▸  migrations/        ▸  modules/        ▾  tasks/                flickr.php                robots.php        ▸  tests/        ▸  tmp/        ▾  vendor/            ▸  Goutte/            ▾  phpFlickr/                    auth.php                    example.php                    getToken.php                    phpFlickr.php                    README.txt            ▸  Twig/                .gitkeep

外部ライブラリ

Page 68: omoon.org の裏側 〜FuelPHP の task 活用例〜

▾  fuel/    ▾  app/        ▸  cache/        ▾  classes/            ▸  controller/            ▸  model/            ▸  twig/            ▸  view/                flickr.php        ▾  config/            ▸  development/            ▸  production/            ▸  test/                config.php                db.php                parser.php                rest.php                routes.php        ▸  lang/        ▸  less/        ▸  logs/        ▸  migrations/        ▸  modules/        ▾  tasks/                flickr.php                robots.php        ▸  tests/        ▸  tmp/        ▾  vendor/            ▸  Goutte/            ▾  phpFlickr/                    auth.php                    example.php                    getToken.php                    phpFlickr.php                    README.txt            ▸  Twig/                .gitkeep

クラス

Page 69: omoon.org の裏側 〜FuelPHP の task 活用例〜

require_once  APPPATH  .  'vendor'  .  DS  .  'phpFlickr'  .  DS  .  'phpFlickr.php';class  Flickr{        protected  static  $_instance  =  null;        private  function  __construct()        {                $this-‐>api  =  new  phpFlickr(                        'xxxxxxxxxxxxxxxxxxxx'  //Config::get('app.flickr_api_key')                );        }        public  static  function  forge()        {                if  (empty(self::$_instance))  {                        static::$_instance  =  new  static();                }                return  static::$_instance-‐>api;        }}

Page 70: omoon.org の裏側 〜FuelPHP の task 活用例〜

▾  fuel/    ▾  app/        ▸  cache/        ▾  classes/            ▸  controller/            ▸  model/            ▸  twig/            ▸  view/                flickr.php        ▾  config/            ▸  development/            ▸  production/            ▸  test/                config.php                db.php                parser.php                rest.php                routes.php        ▸  lang/        ▸  less/        ▸  logs/        ▸  migrations/        ▸  modules/        ▾  tasks/                flickr.php                robots.php        ▸  tests/        ▸  tmp/        ▾  vendor/            ▸  Goutte/            ▾  phpFlickr/                    auth.php                    example.php                    getToken.php                    phpFlickr.php                    README.txt            ▸  Twig/                .gitkeep

タスク

Page 71: omoon.org の裏側 〜FuelPHP の task 活用例〜

namespace  Fuel\Tasks;class  Flickr{        public  static  function  run($limit  =  4)        {                $response  =  \Flickr::forge()-‐>photos_search(                        array(                                'user_id'  =>  '94387617@N00',                                'per_page'  =>  $limit,                                'tags'  =>  'asgt,cover',                                'tag_mode'  =>  'all',                                'sort'  =>  'date-‐taken-‐desc'                        )                );                foreach  ($response['photo']  as  $photo)  {                        $r  =  \Flickr::forge()-‐>photos_getInfo($photo['id']);                        $e  =  \Flickr::forge()-‐>photos_getExif($photo['id']);                        //print_r($e['camera']);                        if  (null  ===  \Model_Coverphoto::find_by('flickr_id',  $r['photo']['id']))  {                                $r['photo']['dates']['taken'];                                $coverphoto  =  \Model_Coverphoto::forge();                                $coverphoto-‐>flickr_id  =  $r['photo']['id'];                                $coverphoto-‐>title  =  $r['photo']['description'];                                $coverphoto-‐>taken_at  =  $r['photo']['dates']['taken'];                                $coverphoto-‐>camera  =  $e['camera'];                                $coverphoto-‐>data  =  json_encode($r['photo']);                                $coverphoto-‐>save();                        }                }        }}

Page 72: omoon.org の裏側 〜FuelPHP の task 活用例〜

#  crontab  -‐e

*  *  *  *  *  cd  /var/www/omoon.org;  /usr/bin/php  oil  refine  flickr:run

Page 73: omoon.org の裏側 〜FuelPHP の task 活用例〜
Page 74: omoon.org の裏側 〜FuelPHP の task 活用例〜

omoon.org

Page 75: omoon.org の裏側 〜FuelPHP の task 活用例〜

タグ付けだけで更新可能

Page 76: omoon.org の裏側 〜FuelPHP の task 活用例〜

iPhoneのflickrアプリでも

Page 77: omoon.org の裏側 〜FuelPHP の task 活用例〜

今後の展望

Page 78: omoon.org の裏側 〜FuelPHP の task 活用例〜
Page 79: omoon.org の裏側 〜FuelPHP の task 活用例〜
Page 80: omoon.org の裏側 〜FuelPHP の task 活用例〜

task を積極的に使いましょう

Page 81: omoon.org の裏側 〜FuelPHP の task 活用例〜

ありがとうございました