SlideShare a Scribd company logo
1 of 13
タスクの作り方
タスクとは? Symfony で作る CLI アプリです。 デフォルトでたくさんのタスクが用意されています。 $ ./symfony Available tasks: :help  Displays help for a task :list  Lists tasks app :routes  Displays current routes for an application cache :clear  Clears the cache (cc)  :  :  :
タスクの作り方① <?php class SampleTask extends sfBaseTask { protected function execute($arguments = array(), $options = array()) { echo &quot;Hello, World!&quot;; } } $ ./symfony sample Hello, World! ファイル名は○○ Task.class.php /lib/task/ 配下に置く sfBaseTask を継承 「 symfony ○○ 」で実行できる
CLI アプリを Symfony で作るメリット ,[object Object],[object Object],[object Object]
タスクの作り方② $ ./symfony generate:task myapp:sample ※ myapp =ネームスペース ※ sample =タスク名 $ ./symfony myapp :sample $ ./symfony myapp:sample class myappSampleTask extends sfBaseTask { protected function configure() { $this->namespace  = 'myapp'; $this->name  = 'sample'; } protected function execute($arguments = array(), $options = array()) { } }
ヘルプを付ける protected function configure() { $this->briefDescription = ' サンプルアプリ '; $this->detailedDescription = ‘ これは [ サンプル |INFO] の [ アプリ |COMMENT] です。’ ; } $ ./symfony myapp :sample  サンプルアプリ $ ./symfony --color help myapp:sample Usage: symfony myapp:sample Description: これは サンプル の アプリ です。
コマンドライン引数の受け取り方 <?php class SampleTask extends sfBaseTask { protected function configure() { $this->addArguments(array( new sfCommandArgument('arg1', sfCommandArgument::REQUIRED, ' 引数1の説明 '), new sfCommandArgument('arg2', sfCommandArgument::OPTIONAL, ' 引数2の説明 ', ' 初期値 '), )); } protected function execute($arguments = array(), $options = array()) { echo $arguments['arg1']; } } ------------------------- $./symfony help sample Usage: symfony sample  arg1 [arg2] Arguments: arg1  引数1の説明 arg2  引数2の説明  (default:  初期値 )
コマンドラインオプションの受け取り方 <?php class SampleTask extends sfBaseTask { protected function configure() { $this->addOptions(array( new sfCommandOption('opt1', 'O', sfCommandOption::PARAMETER_REQUIRED, ' オプション1の説明 '), new sfCommandOption('opt2', null, sfCommandOption::PARAMETER_OPTIONAL, ' オプション2の説明 ', ' 初期値 '), )); } protected function execute($arguments = array(), $options = array()) { echo $options['opt1']; } } ------------------------- $ ./symfony help sample Usage: symfony sample [-O|--opt1=&quot;...&quot;] [--opt2[=&quot;...&quot;]] Options: --opt1  (-O)  オプション1の説明 --opt2  オプション2の説明  (default:  初期値 )
終了コードと例外処理 ◆ 終了コード execute メソッドの return 値が、 CLI アプリの終了コードになる。 成功  0 失敗  0 以外 ◆ 例外 throw new sfCommandException(' エラーです! ', 100); catch はフレームワーク側でしてくれる。 例外発生時の終了コードは Exception::getCode() の値
ログの出し方 protected function execute($arguments = array(), $options = array()) { $this->log('hogehoge'); $this->logSection('init', 'hogehoge'); $this->logSection('proc', 'hogehoge'); $messages = array('hoge', 'hogehoge', 'hogehogehoge'); $this->logBlock($messages, 'INFO'); } $ ./symfony sample hogehoge >>  init   hogehoge >>  proc   hogehoge hoge hogehoge hogehogehoge なぜ echo や print ではだめなのか? -> ログも event で実現しています
DB アクセスの仕方 protected function execute($arguments = array(), $options = array()) { $databaseManager = new sfDatabaseManager($this->configuration); $connection = $databaseManager->getDatabase(' 接続名 ')->getConnection(); $member = Doctrine::getTable('Member')->find(1); $this->log($menber->getName()); }
Web アプリリソースへのアクセス方法 コンフィグ& ルーティング ------------------------- protected function configure() { $this->addOptions(array( new sfCommandOption('application', null, sfCommandOption::PARAMETER_REQUIRED, ' アプリ名 '), new sfCommandOption('env', null, sfCommandOption::PARAMETER_REQUIRED, ' 環境名 ', 'dev'), )); } $this->log(sfConfig::get('app_name')); $ symfony myapp:sample --application=frontend --env=dev ------------------------- $routing = $this->getRouting(); $this->log($routing->generate('homepage')); $this->log($routing->generate('default', array('module' => 'Login', 'action' => 'login'))); $ symfony myapp:sample --application=frontend --env=prod / /Login/login
その他 こんなのもあります。 ◆ メール送信 $this->getMailer() project:send-emails タスク ◆ 入力 $this->ask() $this->askConfirmation() $this->askAndValidate() ◆ ファイル操作 sfFilesystem ◆ タスクの起動 $this->runTask()

More Related Content

What's hot

Haskell超初心者勉強会20
Haskell超初心者勉強会20Haskell超初心者勉強会20
Haskell超初心者勉強会20
Takashi Kawachi
 
Effective java 勉強会
Effective java 勉強会Effective java 勉強会
Effective java 勉強会
Takinami Kei
 
F#とC#で見る関数志向プログラミング
F#とC#で見る関数志向プログラミングF#とC#で見る関数志向プログラミング
F#とC#で見る関数志向プログラミング
satoshimurakumo
 
Ekmett勉強会発表資料
Ekmett勉強会発表資料Ekmett勉強会発表資料
Ekmett勉強会発表資料
時響 逢坂
 

What's hot (20)

おいしいLisp
おいしいLispおいしいLisp
おいしいLisp
 
Mock and patch
Mock and patchMock and patch
Mock and patch
 
Haskell超初心者勉強会20
Haskell超初心者勉強会20Haskell超初心者勉強会20
Haskell超初心者勉強会20
 
研究生のためのC++ no.2
研究生のためのC++ no.2研究生のためのC++ no.2
研究生のためのC++ no.2
 
Effective java 勉強会
Effective java 勉強会Effective java 勉強会
Effective java 勉強会
 
Java8 Lambda chapter5
Java8 Lambda chapter5Java8 Lambda chapter5
Java8 Lambda chapter5
 
研究生のためのC++ no.7
研究生のためのC++ no.7研究生のためのC++ no.7
研究生のためのC++ no.7
 
From Java To Clojure
From Java To ClojureFrom Java To Clojure
From Java To Clojure
 
awk v.s. bashどっちが強い?@OSC2011Tokyo
awk v.s. bashどっちが強い?@OSC2011Tokyoawk v.s. bashどっちが強い?@OSC2011Tokyo
awk v.s. bashどっちが強い?@OSC2011Tokyo
 
F#とC#で見る関数志向プログラミング
F#とC#で見る関数志向プログラミングF#とC#で見る関数志向プログラミング
F#とC#で見る関数志向プログラミング
 
Enumはデキる子 ~ case .Success(let value): ~
 Enumはデキる子 ~ case .Success(let value): ~ Enumはデキる子 ~ case .Success(let value): ~
Enumはデキる子 ~ case .Success(let value): ~
 
ナウなヤングにバカうけのイカしたタグ付き共用体
ナウなヤングにバカうけのイカしたタグ付き共用体ナウなヤングにバカうけのイカしたタグ付き共用体
ナウなヤングにバカうけのイカしたタグ付き共用体
 
Swift 3 で新しくなったところ - 表面から見えにくいところを中心に紹介 #ISAOcorp
Swift 3 で新しくなったところ - 表面から見えにくいところを中心に紹介 #ISAOcorpSwift 3 で新しくなったところ - 表面から見えにくいところを中心に紹介 #ISAOcorp
Swift 3 で新しくなったところ - 表面から見えにくいところを中心に紹介 #ISAOcorp
 
Swift 3 を書くときに知っておきたい API デザインガイドライン #love_swift #akibaswift
Swift 3 を書くときに知っておきたい API デザインガイドライン #love_swift #akibaswiftSwift 3 を書くときに知っておきたい API デザインガイドライン #love_swift #akibaswift
Swift 3 を書くときに知っておきたい API デザインガイドライン #love_swift #akibaswift
 
Good Parts of PHP and the UNIX Philosophy
Good Parts of PHP and the UNIX PhilosophyGood Parts of PHP and the UNIX Philosophy
Good Parts of PHP and the UNIX Philosophy
 
Haskell で CLI
Haskell で CLIHaskell で CLI
Haskell で CLI
 
Ekmett勉強会発表資料
Ekmett勉強会発表資料Ekmett勉強会発表資料
Ekmett勉強会発表資料
 
Ekmett勉強会発表資料
Ekmett勉強会発表資料Ekmett勉強会発表資料
Ekmett勉強会発表資料
 
200319 eash python_shareslide_functions
200319 eash python_shareslide_functions200319 eash python_shareslide_functions
200319 eash python_shareslide_functions
 
pecl-AOPの紹介
pecl-AOPの紹介pecl-AOPの紹介
pecl-AOPの紹介
 

Viewers also liked

Business law
Business lawBusiness law
Business law
vinitvats
 
Demo example
Demo exampleDemo example
Demo example
Greg Rice
 
Kalkulus 2 minggu 10
Kalkulus 2   minggu 10Kalkulus 2   minggu 10
Kalkulus 2 minggu 10
Iwan Pranoto
 

Viewers also liked (20)

Nca research-consumer-empowerment-oct-2010
Nca research-consumer-empowerment-oct-2010Nca research-consumer-empowerment-oct-2010
Nca research-consumer-empowerment-oct-2010
 
Kalkulus 2A – minggu 13
Kalkulus 2A – minggu 13Kalkulus 2A – minggu 13
Kalkulus 2A – minggu 13
 
Revolusi Kopernikus oleh prof Bambang Hidayat
Revolusi Kopernikus oleh prof Bambang HidayatRevolusi Kopernikus oleh prof Bambang Hidayat
Revolusi Kopernikus oleh prof Bambang Hidayat
 
Kalkulus 1A minggu 5
Kalkulus 1A   minggu 5Kalkulus 1A   minggu 5
Kalkulus 1A minggu 5
 
Guru merdeka versi panjang
Guru merdeka   versi panjangGuru merdeka   versi panjang
Guru merdeka versi panjang
 
Business law
Business lawBusiness law
Business law
 
Kalkulus 2 minggu 4
Kalkulus 2   minggu 4Kalkulus 2   minggu 4
Kalkulus 2 minggu 4
 
Mengukur kecakapan mematematikakan final
Mengukur kecakapan mematematikakan finalMengukur kecakapan mematematikakan final
Mengukur kecakapan mematematikakan final
 
Passion to Teach, Conceptual Mastery
Passion to Teach, Conceptual MasteryPassion to Teach, Conceptual Mastery
Passion to Teach, Conceptual Mastery
 
UN LOT VS HOT
UN   LOT VS HOTUN   LOT VS HOT
UN LOT VS HOT
 
Demo example
Demo exampleDemo example
Demo example
 
Matematika 1A minggu 2
Matematika 1A   minggu 2Matematika 1A   minggu 2
Matematika 1A minggu 2
 
Matek 1 - Minggu 2
Matek 1 - Minggu 2Matek 1 - Minggu 2
Matek 1 - Minggu 2
 
Consumer switching behaviour in Ireland, Aug 2012
Consumer switching behaviour in Ireland, Aug 2012Consumer switching behaviour in Ireland, Aug 2012
Consumer switching behaviour in Ireland, Aug 2012
 
Kalkulus 2 minggu 10
Kalkulus 2   minggu 10Kalkulus 2   minggu 10
Kalkulus 2 minggu 10
 
Kalkulus 2A minggu 3 a
Kalkulus 2A   minggu 3 aKalkulus 2A   minggu 3 a
Kalkulus 2A minggu 3 a
 
Kalkulus 2 minggu 2
Kalkulus 2   minggu 2Kalkulus 2   minggu 2
Kalkulus 2 minggu 2
 
Anuj resume
Anuj resumeAnuj resume
Anuj resume
 
Kalkulus 2A – minggu 8A
Kalkulus 2A – minggu 8AKalkulus 2A – minggu 8A
Kalkulus 2A – minggu 8A
 
Irish Consumer Empowerment and Complaining, January 2010
Irish Consumer Empowerment and Complaining, January 2010Irish Consumer Empowerment and Complaining, January 2010
Irish Consumer Empowerment and Complaining, January 2010
 

Similar to Task

Replace Output Iterator and Extend Range JP
Replace Output Iterator and Extend Range JPReplace Output Iterator and Extend Range JP
Replace Output Iterator and Extend Range JP
Akira Takahashi
 
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
 
GNU awk (gawk) を用いた Apache ログ解析方法
GNU awk (gawk) を用いた Apache ログ解析方法GNU awk (gawk) を用いた Apache ログ解析方法
GNU awk (gawk) を用いた Apache ログ解析方法
博文 斉藤
 
第三回ありえる社内勉強会 「いわががのLombok」
第三回ありえる社内勉強会 「いわががのLombok」第三回ありえる社内勉強会 「いわががのLombok」
第三回ありえる社内勉強会 「いわががのLombok」
yoshiaki iwanaga
 
Using PyFoam as library(第25回オープンCAE勉強会@関西)
Using PyFoam as library(第25回オープンCAE勉強会@関西)Using PyFoam as library(第25回オープンCAE勉強会@関西)
Using PyFoam as library(第25回オープンCAE勉強会@関西)
TatsuyaKatayama
 
速くなければスマフォじゃない - インターンバージョン-
速くなければスマフォじゃない - インターンバージョン-速くなければスマフォじゃない - インターンバージョン-
速くなければスマフォじゃない - インターンバージョン-
Kazunari Hara
 
TypeScript 1.0 オーバービュー
TypeScript 1.0 オーバービューTypeScript 1.0 オーバービュー
TypeScript 1.0 オーバービュー
Akira Inoue
 
Javaセキュアコーディングセミナー東京第3回演習の解説
Javaセキュアコーディングセミナー東京第3回演習の解説Javaセキュアコーディングセミナー東京第3回演習の解説
Javaセキュアコーディングセミナー東京第3回演習の解説
JPCERT Coordination Center
 

Similar to Task (20)

Swiftおさらい
SwiftおさらいSwiftおさらい
Swiftおさらい
 
Replace Output Iterator and Extend Range JP
Replace Output Iterator and Extend Range JPReplace Output Iterator and Extend Range JP
Replace Output Iterator and Extend Range JP
 
10分でわかるFuelPHP @ 2011/12
10分でわかるFuelPHP @ 2011/1210分でわかるFuelPHP @ 2011/12
10分でわかるFuelPHP @ 2011/12
 
仕事で使えるシェルスクリプト
仕事で使えるシェルスクリプト仕事で使えるシェルスクリプト
仕事で使えるシェルスクリプト
 
Swift 2.0 で変わったところ「後編」 #cswift
Swift 2.0 で変わったところ「後編」 #cswiftSwift 2.0 で変わったところ「後編」 #cswift
Swift 2.0 で変わったところ「後編」 #cswift
 
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 @ 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
 
MP in Scala
MP in ScalaMP in Scala
MP in Scala
 
JavaのGenericsとは?
JavaのGenericsとは?JavaのGenericsとは?
JavaのGenericsとは?
 
Subprocess no susume
Subprocess no susumeSubprocess no susume
Subprocess no susume
 
TypeScript 言語処理系ことはじめ
TypeScript 言語処理系ことはじめTypeScript 言語処理系ことはじめ
TypeScript 言語処理系ことはじめ
 
GNU awk (gawk) を用いた Apache ログ解析方法
GNU awk (gawk) を用いた Apache ログ解析方法GNU awk (gawk) を用いた Apache ログ解析方法
GNU awk (gawk) を用いた Apache ログ解析方法
 
第三回ありえる社内勉強会 「いわががのLombok」
第三回ありえる社内勉強会 「いわががのLombok」第三回ありえる社内勉強会 「いわががのLombok」
第三回ありえる社内勉強会 「いわががのLombok」
 
Project lambda
Project lambdaProject lambda
Project lambda
 
JavaScript (ECMAScript) 2013
JavaScript (ECMAScript) 2013JavaScript (ECMAScript) 2013
JavaScript (ECMAScript) 2013
 
Using PyFoam as library(第25回オープンCAE勉強会@関西)
Using PyFoam as library(第25回オープンCAE勉強会@関西)Using PyFoam as library(第25回オープンCAE勉強会@関西)
Using PyFoam as library(第25回オープンCAE勉強会@関西)
 
速くなければスマフォじゃない - インターンバージョン-
速くなければスマフォじゃない - インターンバージョン-速くなければスマフォじゃない - インターンバージョン-
速くなければスマフォじゃない - インターンバージョン-
 
TypeScript 1.0 オーバービュー
TypeScript 1.0 オーバービューTypeScript 1.0 オーバービュー
TypeScript 1.0 オーバービュー
 
最新PHP事情 (2000年7月22日,PHPカンファレンス)
最新PHP事情 (2000年7月22日,PHPカンファレンス)最新PHP事情 (2000年7月22日,PHPカンファレンス)
最新PHP事情 (2000年7月22日,PHPカンファレンス)
 
Javaセキュアコーディングセミナー東京第3回演習の解説
Javaセキュアコーディングセミナー東京第3回演習の解説Javaセキュアコーディングセミナー東京第3回演習の解説
Javaセキュアコーディングセミナー東京第3回演習の解説
 

Task

  • 2. タスクとは? Symfony で作る CLI アプリです。 デフォルトでたくさんのタスクが用意されています。 $ ./symfony Available tasks: :help Displays help for a task :list Lists tasks app :routes Displays current routes for an application cache :clear Clears the cache (cc)  :  :  :
  • 3. タスクの作り方① <?php class SampleTask extends sfBaseTask { protected function execute($arguments = array(), $options = array()) { echo &quot;Hello, World!&quot;; } } $ ./symfony sample Hello, World! ファイル名は○○ Task.class.php /lib/task/ 配下に置く sfBaseTask を継承 「 symfony ○○ 」で実行できる
  • 4.
  • 5. タスクの作り方② $ ./symfony generate:task myapp:sample ※ myapp =ネームスペース ※ sample =タスク名 $ ./symfony myapp :sample $ ./symfony myapp:sample class myappSampleTask extends sfBaseTask { protected function configure() { $this->namespace = 'myapp'; $this->name = 'sample'; } protected function execute($arguments = array(), $options = array()) { } }
  • 6. ヘルプを付ける protected function configure() { $this->briefDescription = ' サンプルアプリ '; $this->detailedDescription = ‘ これは [ サンプル |INFO] の [ アプリ |COMMENT] です。’ ; } $ ./symfony myapp :sample サンプルアプリ $ ./symfony --color help myapp:sample Usage: symfony myapp:sample Description: これは サンプル の アプリ です。
  • 7. コマンドライン引数の受け取り方 <?php class SampleTask extends sfBaseTask { protected function configure() { $this->addArguments(array( new sfCommandArgument('arg1', sfCommandArgument::REQUIRED, ' 引数1の説明 '), new sfCommandArgument('arg2', sfCommandArgument::OPTIONAL, ' 引数2の説明 ', ' 初期値 '), )); } protected function execute($arguments = array(), $options = array()) { echo $arguments['arg1']; } } ------------------------- $./symfony help sample Usage: symfony sample arg1 [arg2] Arguments: arg1 引数1の説明 arg2 引数2の説明 (default: 初期値 )
  • 8. コマンドラインオプションの受け取り方 <?php class SampleTask extends sfBaseTask { protected function configure() { $this->addOptions(array( new sfCommandOption('opt1', 'O', sfCommandOption::PARAMETER_REQUIRED, ' オプション1の説明 '), new sfCommandOption('opt2', null, sfCommandOption::PARAMETER_OPTIONAL, ' オプション2の説明 ', ' 初期値 '), )); } protected function execute($arguments = array(), $options = array()) { echo $options['opt1']; } } ------------------------- $ ./symfony help sample Usage: symfony sample [-O|--opt1=&quot;...&quot;] [--opt2[=&quot;...&quot;]] Options: --opt1 (-O) オプション1の説明 --opt2 オプション2の説明 (default: 初期値 )
  • 9. 終了コードと例外処理 ◆ 終了コード execute メソッドの return 値が、 CLI アプリの終了コードになる。 成功 0 失敗 0 以外 ◆ 例外 throw new sfCommandException(' エラーです! ', 100); catch はフレームワーク側でしてくれる。 例外発生時の終了コードは Exception::getCode() の値
  • 10. ログの出し方 protected function execute($arguments = array(), $options = array()) { $this->log('hogehoge'); $this->logSection('init', 'hogehoge'); $this->logSection('proc', 'hogehoge'); $messages = array('hoge', 'hogehoge', 'hogehogehoge'); $this->logBlock($messages, 'INFO'); } $ ./symfony sample hogehoge >> init hogehoge >> proc hogehoge hoge hogehoge hogehogehoge なぜ echo や print ではだめなのか? -> ログも event で実現しています
  • 11. DB アクセスの仕方 protected function execute($arguments = array(), $options = array()) { $databaseManager = new sfDatabaseManager($this->configuration); $connection = $databaseManager->getDatabase(' 接続名 ')->getConnection(); $member = Doctrine::getTable('Member')->find(1); $this->log($menber->getName()); }
  • 12. Web アプリリソースへのアクセス方法 コンフィグ& ルーティング ------------------------- protected function configure() { $this->addOptions(array( new sfCommandOption('application', null, sfCommandOption::PARAMETER_REQUIRED, ' アプリ名 '), new sfCommandOption('env', null, sfCommandOption::PARAMETER_REQUIRED, ' 環境名 ', 'dev'), )); } $this->log(sfConfig::get('app_name')); $ symfony myapp:sample --application=frontend --env=dev ------------------------- $routing = $this->getRouting(); $this->log($routing->generate('homepage')); $this->log($routing->generate('default', array('module' => 'Login', 'action' => 'login'))); $ symfony myapp:sample --application=frontend --env=prod / /Login/login
  • 13. その他 こんなのもあります。 ◆ メール送信 $this->getMailer() project:send-emails タスク ◆ 入力 $this->ask() $this->askConfirmation() $this->askAndValidate() ◆ ファイル操作 sfFilesystem ◆ タスクの起動 $this->runTask()