Robo を使った モダンなタスク管理/PHP-conference-2017

Robo を使った モダンなタスク管理/PHP-conference-2017

最近ではGradleやGulpなどタスクランナーは、よりコードに近い形で定義できるツールが使われてきています。
PHPではJenkinsなどとの連携の容易さから、Phingが使われることが多かったと思いますが、XMLでの定義は容易ではありませんでした。
RoboはPHPのコードでタスクを定義できるモダンなタスクランナーで、私たちPHPerにも読みやすく理解しやすい構造をしています。

このセッションではRoboを使ったタスクの定義を、動作デモを交えて紹介したいと思います。

http://robo.li/

C4c161ae9eeeed8f161197410f7a228a?s=128

Kenichiro Kishida

October 08, 2017
Tweet

Transcript

  1. 3PCPΛ࢖ͬͨ ϞμϯͳλεΫ؅ཧ php conference 2017 by @sizuhiko

  2. ,FOJDIJSP,JTIJEB 5PLZP +"1"/ TJ[VIJLP!HNBJMDPN !TJ[VIJLP IUUQTHJUIVCDPNTJ[VIJLP IUUQCMPHPQFOUPLZPKQ 2QN[OGTEQGFQ 

  3. ࣗಈԽͯ͠·͔͢ʁ

  4. %FW0QT IUUQTKBXJLJQFEJBPSHXJLJ%FW0QTΑΓҾ༻

  5. wૣ͘ࢢ৔ʹग़͢ wϑΟʔυόοΫΛಘΔ w҆ఆͨ͠඼࣭ wڞ௨ͷձ࿩

  6. ࣗಈԽ͸ ໨తͰͳ͘ खஈͰ͋Δ

  7. } else { // 失敗パターンの処理 this.log.error(“エラーメッセージ”); this.response.status = 500; throw

    new ServerError(); } this.log.info(“何かのログ”); @@ -8,6 +8,7 @@ php:
  8. if (results) { // 成功パターンの処理 return this; } else {

    // 失敗パターンの処理 this.log.error(“エラーメッセージ”); this.response.status = 500; throw new ServerError(); } this.log.info(“何かのログ”);
  9. None
  10. wίʔυϨϏϡʔ w੩తղੳ wࣗಈςετ wࣗಈσϓϩΠ

  11. +FOLJOT

  12. pipeline { agent any stages { stage('Install') { steps {

    sh 'npm install' } } stage('JsHint') { steps { sh 'npm run lint:ci' } } stage('Test') { steps { sh 'npm run test:ci' } } } post { always { step([$class: 'CheckStylePublisher', pattern: 'jshint-results.xml', unstableTotalAll: '0', usePreviousBuildAsReference: true]) junit allowEmptyResults: true, testResults: 'test-results/*.xml' } } }
  13. None
  14. <?xml version="1.0" encoding="UTF-8"?> <!-- Phing build config file. @link http://www.phing.info/

    --> <project name="blogapp" default="build"> <!-- Properties --> <property name="basedir" value="${phing.dir}" /> <property name="appdir" value="${basedir}/app" /> <property name="logdir" value="${appdir}/tmp/logs" /> <property name="vendorbindir" value="${appdir}/Vendor/bin" /> <!-- Build --> <target name="build" depends="prepare,caketest,behat,phpcs,phpmd,phpcpd"/> <!-- Prepare --> <target name="prepare" description="Prepare for build"> <exec dir="${appdir}" executable="${appdir}/Console/cake" output="${logdir}/migration.log" checkreturn="true"> <arg line="migrations.migration" /> <arg line="run" /> <arg line="all" /> </exec> </target> <!-- CakePHP unit test with PHPUnit --> <target name="caketest" description="Run CakePHP unit tests with PHPUnit"> <exec dir="${appdir}" executable="${appdir}/Console/cake" output="${logdir}/caketest.log" checkreturn="true"> <arg line="test" /> <arg line="--log-junit=${appdir}/reports/unittest.xml" /> <arg line="--coverage-html=${appdir}/reports" /> <arg line="--coverage-clover=${appdir}/reports/coverage.xml" /> <arg line="app" /> <arg line="AllTests" /> </exec> </target> <!-- CakePHP acceptance test with Behat --> <target name="behat" description="Run CakePHP acceptance test with Behat"> <exec command="find ${appdir}/tmp -type d -print | xargs chmod 777" escape="false" /> <exec dir="${appdir}" executable="${appdir}/Console/cake" output="${logdir}/behat.log" checkreturn="true"> <arg line="Bdd.story" /> <arg line="--format=junit" /> <arg line="--out=${appdir}/reports" /> </exec>
  15. w(/6.BLF 3BLFͳͲؚΉ  wNBWFOBOU wHSBEMF wHSVOU wHVMQ

  16. 443 41"

  17. 443 41"

  18. $PNQPTFS

  19. { "scripts": { "test": [ "@composer install", "@clear",
 "phpunit" ],


    "clear": "rm -rf test-results/*” } }
  20. http://robo.li/

  21. • automate your common tasks • start workers • run

    parallel tasks • execute commands • run tests • watch filesystem changes
  22. %FNP https://github.com/sizuhiko/ phpkansai-2017-demo

  23. 1)1 /PEF+4 ґଘؔ܎ͷղܾ $PNQPTFS /1. λεΫϥϯφʔ 3PCP (VMQ

  24. ssh rsync phpunit

  25. WJTJUNZCMPHHJUIVC https://github.com/sizuhiko http://blog.open.tokyo.jp