Stagehand_TestRunner 4.1.0 がリリースされたので Symfony 2.7 で使ってみた(道半ば)
Stagehand_TestRunner 4.1.0 released!
Stagehand_TestRunner 4.1.0 released! https://t.co/PoJaJU3ieu #php #testing #phpunit
— Piece Framework (@piece_framework) 2015, 7月 12
さっそく Symfony 2.7 で使ってみました。が、ちょっと設定まわりではまって、最後まで綺麗に終わってません。
リリースノート
Stagehand_TestRunner 4.1.0 (stable) ではこういった機能が追加されたようです。
結論からいうと
こんな感じでコマンドラインで使うと「自動テスト」+「通知」をしてくれます。src 以下を監視してくれているので、ファイルを修正するたびにテストが実行されテストの検証結果の通知を対話的に受け取ることができます。通知は音でもテスト失敗と成功を教えてくれるのでいい感じ。
$ bin/testrunner phpunit -amR src --preload-script app/bootstrap_test.php
PHPUnit 4.7.6 by Sebastian Bergmann and contributors. . AppBundle\Tests\Controller\DefaultController [x] Index Time: 1.04 seconds, Memory: 20.00Mb OK (1 test, 2 assertions)
bootstrap_test.php はこんな感じ。
<?php $_SERVER['KERNEL_DIR'] = __DIR__; require_once $_SERVER['KERNEL_DIR'] . '/bootstrap.php.cache';
うまくいかなかったこと
ただし、config/phpunit.xml.dist などで設定してあげたいところがあんまりうまくいけてないです(後述)。深夜なのでまた頭がまわらない・・・。また今度調査してみようと思います。知ってる人いたら、だれか教えてくださいm(__)m
では、以下、やったことの紹介。マシンは Mac OSX Yosemite。
Symfony 2.7 のサンプルプロジェクトを作成
まずは、symfony-installer を使って Symfony 2.7 のプロジェクトを作成。
$ symfony new my_project
Downloading Symfony... 4.95 MB/4.95 MB ▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓ 100% Preparing project... ✔ Symfony 2.7.1 was successfully installed. Now you can: * Change your current directory to /Users/seta/tmp/work-stagehand-testrunner/my_project * Configure your application in app/config/parameters.yml file. * Run your application: 1. Execute the php app/console server:run command. 2. Browse to the http://localhost:8000 URL. * Read the documentation at http://symfony.com/doc
Composer Install
次に Composer Install を実行。( Composer のインストールはこちらを参考に。)
$ cd my_project $ composer install
Stagehand_Testrunner をインストール
$ composer require --dev piece/stagehand-testrunner "4.1.*"
./composer.json has been updated Loading composer repositories with package information Updating dependencies (including require-dev) - Installing sebastian/version (1.0.6) Loading from cache - Installing piece/stagehand-componentfactory (v1.0.1) Loading from cache - Installing piece/stagehand-alterationmonitor (2.0.0) Loading from cache - Installing piece/stagehand-testrunner (v4.1.0) Loading from cache piece/stagehand-testrunner suggests installing phpunit/phpunit (For using PHPUnit) Writing lock file Generating autoload files > Incenteev\ParameterHandler\ScriptHandler::buildParameters Updating the "app/config/parameters.yml" file > Sensio\Bundle\DistributionBundle\Composer\ScriptHandler::buildBootstrap > Sensio\Bundle\DistributionBundle\Composer\ScriptHandler::clearCache Clearing the cache for the dev environment with debug true > Sensio\Bundle\DistributionBundle\Composer\ScriptHandler::installAssets Trying to install assets as symbolic links. Installing assets for Symfony\Bundle\FrameworkBundle into web/bundles/framework The assets were installed using symbolic links. Installing assets for Sensio\Bundle\DistributionBundle into web/bundles/sensiodistribution The assets were installed using symbolic links. > Sensio\Bundle\DistributionBundle\Composer\ScriptHandler::installRequirementsFile > Sensio\Bundle\DistributionBundle\Composer\ScriptHandler::removeSymfonyStandardFiles > Sensio\Bundle\DistributionBundle\Composer\ScriptHandler::prepareDeploymentTarget
あれ、PHPUnit は別でインストールするんだ!インストールしてみます。
$ composer require --dev phpunit/phpunit "4.7.*"
./composer.json has been updated Loading composer repositories with package information Updating dependencies (including require-dev) - Installing sebastian/global-state (1.0.0) Loading from cache - Installing sebastian/recursion-context (1.0.0) Loading from cache - Installing sebastian/exporter (1.2.0) Loading from cache - Installing sebastian/environment (1.2.2) Loading from cache - Installing sebastian/diff (1.3.0) Loading from cache - Installing sebastian/comparator (1.1.1) Loading from cache - Installing doctrine/instantiator (1.0.5) Loading from cache - Installing phpdocumentor/reflection-docblock (2.0.4) Loading from cache - Installing phpspec/prophecy (v1.4.1) Loading from cache - Installing phpunit/php-text-template (1.2.1) Loading from cache - Installing phpunit/phpunit-mock-objects (2.3.5) Downloading: 100% - Installing phpunit/php-timer (1.0.6) Loading from cache - Installing phpunit/php-token-stream (1.4.3) Loading from cache - Installing phpunit/php-file-iterator (1.4.0) Loading from cache - Installing phpunit/php-code-coverage (2.1.7) Downloading: 100% - Installing phpunit/phpunit (4.7.6) Downloading: 100% sebastian/global-state suggests installing ext-uopz (*) phpdocumentor/reflection-docblock suggests installing dflydev/markdown (~1.0) phpdocumentor/reflection-docblock suggests installing erusev/parsedown (~1.0) phpunit/phpunit-mock-objects suggests installing ext-soap (*) phpunit/phpunit suggests installing phpunit/php-invoker (~1.1) Writing lock file Generating autoload files > Incenteev\ParameterHandler\ScriptHandler::buildParameters Updating the "app/config/parameters.yml" file > Sensio\Bundle\DistributionBundle\Composer\ScriptHandler::buildBootstrap > Sensio\Bundle\DistributionBundle\Composer\ScriptHandler::clearCache Clearing the cache for the dev environment with debug true > Sensio\Bundle\DistributionBundle\Composer\ScriptHandler::installAssets Trying to install assets as symbolic links. Installing assets for Symfony\Bundle\FrameworkBundle into web/bundles/framework The assets were installed using symbolic links. Installing assets for Sensio\Bundle\DistributionBundle into web/bundles/sensiodistribution The assets were installed using symbolic links. > Sensio\Bundle\DistributionBundle\Composer\ScriptHandler::installRequirementsFile > Sensio\Bundle\DistributionBundle\Composer\ScriptHandler::removeSymfonyStandardFiles > Sensio\Bundle\DistributionBundle\Composer\ScriptHandler::prepareDeploymentTarget
さぁ、テスト!
まずは、PHPUnit で。
$ bin/phpunit -c app
PHPUnit 4.7.6 by Sebastian Bergmann and contributors. . Time: 739 ms, Memory: 16.25Mb OK (1 test, 2 assertions)
はい。次は Stagehand_Testrunnerで!
$ bin/testrunner phpunit -R ./src
PHPUnit 4.7.6 by Sebastian Bergmann and contributors. E AppBundle\Tests\Controller\DefaultController [ ] Index Time: 403 ms, Memory: 8.75Mb There was 1 error: 1) AppBundle\Tests\Controller\DefaultControllerTest::testIndex RuntimeException: You must override the KernelTestCase::createKernel() method. /Users/seta/tmp/work-stagehand-testrunner/my_project/vendor/symfony/symfony/src/Symfony/Bundle/FrameworkBundle/Test/KernelTestCase.php:44 /Users/seta/tmp/work-stagehand-testrunner/my_project/vendor/symfony/symfony/src/Symfony/Bundle/FrameworkBundle/Test/KernelTestCase.php:113 /Users/seta/tmp/work-stagehand-testrunner/my_project/vendor/symfony/symfony/src/Symfony/Bundle/FrameworkBundle/Test/KernelTestCase.php:159 /Users/seta/tmp/work-stagehand-testrunner/my_project/vendor/symfony/symfony/src/Symfony/Bundle/FrameworkBundle/Test/KernelTestCase.php:140 /Users/seta/tmp/work-stagehand-testrunner/my_project/vendor/symfony/symfony/src/Symfony/Bundle/FrameworkBundle/Test/WebTestCase.php:33 /Users/seta/tmp/work-stagehand-testrunner/my_project/src/AppBundle/Tests/Controller/DefaultControllerTest.php:11 /Users/seta/tmp/work-stagehand-testrunner/my_project/vendor/piece/stagehand-testrunner/src/Runner/PHPUnitRunner.php:81 /Users/seta/tmp/work-stagehand-testrunner/my_project/vendor/piece/stagehand-testrunner/src/Process/TestRunner.php:106 /Users/seta/tmp/work-stagehand-testrunner/my_project/vendor/piece/stagehand-testrunner/src/CLI/TestRunnerApplication/Command/PluginCommand.php:150 /Users/seta/tmp/work-stagehand-testrunner/my_project/vendor/symfony/symfony/src/Symfony/Component/Console/Command/Command.php:259 /Users/seta/tmp/work-stagehand-testrunner/my_project/vendor/symfony/symfony/src/Symfony/Component/Console/Application.php:878 /Users/seta/tmp/work-stagehand-testrunner/my_project/vendor/symfony/symfony/src/Symfony/Component/Console/Application.php:195 /Users/seta/tmp/work-stagehand-testrunner/my_project/vendor/symfony/symfony/src/Symfony/Component/Console/Application.php:126 FAILURES! Tests: 1, Assertions: 0, Errors: 1.
エラー・・・orz。
テスト用の bootstrap ファイルを作成してあげる
- app/bootstrap_test.php
<?php $_SERVER['KERNEL_DIR'] = __DIR__; require_once $_SERVER['KERNEL_DIR'] . '/bootstrap.php.cache';
このファイルを --preload-script
で通してあげてテストすると通った。
$ bin/testrunner phpunit -R ./src --preload-script app/bootstrap_test.php
PHPUnit 4.7.6 by Sebastian Bergmann and contributors. . AppBundle\Tests\Controller\DefaultController [x] Index Time: 985 ms, Memory: 19.75Mb OK (1 test, 2 assertions)
ほんとは PHPUnit の設定ファイルで設定してあげたい・・・(?)
<?xml version="1.0" encoding="UTF-8"?> <!-- http://phpunit.de/manual/4.1/en/appendixes.configuration.html --> <phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://schema.phpunit.de/4.1/phpunit.xsd" backupGlobals="false" colors="true" bootstrap="bootstrap_test.php" > (省略) </phpunit>
実行するとエラー。
$ bin/testrunner phpunit -R src --phpunit-config app/phpunit.xml.dist
Fatal error: Cannot redeclare class Symfony\Component\DependencyInjection\ContainerInterface in /Users/seta/tmp/work-stagehand-testrunner/my_project/app/bootstrap.php.cache on line 1980 Call Stack: 0.0059 264160 1. {main}() /Users/seta/tmp/work-stagehand-testrunner/my_project/vendor/piece/stagehand-testrunner/bin/testrunner:0 0.0873 2695080 2. Symfony\Component\Console\Application->run() /Users/seta/tmp/work-stagehand-testrunner/my_project/vendor/piece/stagehand-testrunner/bin/testrunner:55 0.1007 3031784 3. Symfony\Component\Console\Application->doRun() /Users/seta/tmp/work-stagehand-testrunner/my_project/vendor/symfony/symfony/src/Symfony/Component/Console/Application.php:126 0.1213 3032904 4. Symfony\Component\Console\Application->doRunCommand() /Users/seta/tmp/work-stagehand-testrunner/my_project/vendor/symfony/symfony/src/Symfony/Component/Console/Application.php:195 0.1214 3033424 5. Symfony\Component\Console\Command\Command->run() /Users/seta/tmp/work-stagehand-testrunner/my_project/vendor/symfony/symfony/src/Symfony/Component/Console/Application.php:878 0.1245 3039264 6. Stagehand\TestRunner\CLI\TestRunnerApplication\Command\PluginCommand->execute() /Users/seta/tmp/work-stagehand-testrunner/my_project/vendor/symfony/symfony/src/Symfony/Component/Console/Command/Command.php:259 0.1703 4127864 7. Stagehand\TestRunner\CLI\TestRunnerApplication\Command\PluginCommand->createTestRunner() /Users/seta/tmp/work-stagehand-testrunner/my_project/vendor/piece/stagehand-testrunner/src/CLI/TestRunnerApplication/Command/PluginCommand.php:150 0.1703 4127960 8. Stagehand\TestRunner\Core\ApplicationContext->createComponent() /Users/seta/tmp/work-stagehand-testrunner/my_project/vendor/piece/stagehand-testrunner/src/CLI/TestRunnerApplication/Command/PluginCommand.php:298 0.1703 4128024 9. Stagehand\ComponentFactory\ComponentFactory->create() /Users/seta/tmp/work-stagehand-testrunner/my_project/vendor/piece/stagehand-testrunner/src/Core/ApplicationContext.php:106 0.1703 4128520 10. Symfony\Component\DependencyInjection\Container->get() /Users/seta/tmp/work-stagehand-testrunner/my_project/vendor/piece/stagehand-componentfactory/src/Stagehand/ComponentFactory/ComponentFactory.php:76 0.1703 4129160 11. Stagehand\TestRunner\DependencyInjection\PHPUnitContainer->getTestRunnerService() /Users/seta/tmp/work-stagehand-testrunner/my_project/vendor/symfony/symfony/src/Symfony/Component/DependencyInjection/Container.php:327 0.1749 4182432 12. Stagehand\TestRunner\Process\TestRunner->__construct() /Users/seta/tmp/work-stagehand-testrunner/my_project/vendor/piece/stagehand-testrunner/src/DependencyInjection/PHPUnitContainer.php:449 0.1749 4182504 13. Stagehand\TestRunner\Preparer\PHPUnitPreparer->prepare() /Users/seta/tmp/work-stagehand-testrunner/my_project/vendor/piece/stagehand-testrunner/src/Process/TestRunner.php:95 0.1828 4515680 14. Stagehand\TestRunner\Preparer\PHPUnitPreparer->earlyConfigure() /Users/seta/tmp/work-stagehand-testrunner/my_project/vendor/piece/stagehand-testrunner/src/Preparer/PHPUnitPreparer.php:71 0.1874 4672272 15. Stagehand\TestRunner\Preparer\PHPUnitPreparer->handleBootstrap() /Users/seta/tmp/work-stagehand-testrunner/my_project/vendor/piece/stagehand-testrunner/src/Preparer/PHPUnitPreparer.php:127 0.1885 4680656 16. PHPUnit_Util_Fileloader::checkAndLoad() /Users/seta/tmp/work-stagehand-testrunner/my_project/vendor/piece/stagehand-testrunner/src/Preparer/PHPUnitPreparer.php:107 0.1885 4680856 17. PHPUnit_Util_Fileloader::load() /Users/seta/tmp/work-stagehand-testrunner/my_project/vendor/phpunit/phpunit/src/Util/Fileloader.php:36 0.2001 5822360 18. include_once('/Users/seta/tmp/work-stagehand-testrunner/my_project/app/bootstrap.php.cache') /Users/seta/tmp/work-stagehand-testrunner/my_project/vendor/phpunit/phpunit/src/Util/Fileloader.php:52
もちろん、これは通る。
$ bin/testrunner phpunit -R src --phpunit-config app/phpunit.xml.dist --preload-script app/bootstrap_test.php
PHPUnit 4.7.6 by Sebastian Bergmann and contributors. . AppBundle\Tests\Controller\DefaultController [x] Index Time: 1.26 seconds, Memory: 19.75Mb OK (1 test, 2 assertions)
あれ?これどうするんだ・・・っけ(?)。何か勘違いしている・・・!?深夜で頭がまわってないので、また今度調べてみます。
参考 URL
Symfonyの初心者向けワークショップを開催しました
Symfony よちよち会(仮)と題して、Symfonyの初心者向けワークショップを開催しました。会場は新宿のフォトクリエイトのセミナールームでやりました。
Symfony よちよち会(仮)#1 - 日本Symfonyユーザー会 | Doorkeeper
初心者向けのワークショップ
一週間前に @DQNEOさんから Symfony の初心者向けの会あったらいいですね、と言っていただき、迅速に開催しました。一週間という短い募集期間でしたが、10名もご参加いただきありがとうございます。Symfonyの勉強会は、Symfonyに限らず設計やモデリングの話など話題が広いため、ちょっと初心者の方にとっては質問しずらかったりする雰囲気があったような気がします。もっとガンガン聞きたいことが聞けるような場があってもいいな〜という思いは前からあったので、こういった形で会をひらくことができて嬉しいです。
内容
「初心者」といっても幅が広く準備期間も短かったため、集まった人たちが抱えている課題によってレベルをいくつかに分けました。そこで、2人に対して講師を1人につけるくらいで配分して似たような課題レイヤー同士と講師で課題解決できるようなスタイルにしてみました。実際の分類は、
- 環境構築から(3人)
- チュートリアルの写経から(8人)
というようなものでした。最後に全体で質問をいくつか受けて終了です。
講師陣
安定のおかぽん先生(@okapon_pon)、おちぽん先生(@Ochiai_Cstap)、ぽりどっく先生(@polidog)の布陣。と僕です。僕が教えてほしい!!(切実)
環境構築からチームの取り組み
このチームには講師は私が付きました。Symfony Installerでインストールを実行し、PHPのビルドインサーバで"Hello World"できるようになるまでくらいを目標に進めました。レシピとしては以下のような感じ。
- PHPの実行環境がある状態でスタート
- Symfony Installerで Symfony プロジェクトを作成
$ php app/check.php
で動作環境を確認$ php app/console server:run
で Hello World$ php app/console
について- 終わったらチュートリアルへ
今後について
今後も初心者の方が学びやすい場を作れたらなぁ〜と思っています。また機会をみつけて開催する予定です。
私が Symfony に入門した当時は年に2回ほどイベントがあるだけで、Symfony の勉強は独学で大変つらかった思い出があります。コミュニティの活動が活発になって、もっと楽しく学べる環境・仲間が作れるような、そんな Symfony界隈になりますように。
Symfonyよちよち会、めちゃくちゃ勉強になりました。ありがとうございました〜‼︎ Symfonyの中身がよくわかりました。講師陣の懇切丁寧ぷりにお金払ってもいいレベル。 #symfony_ja
— どきゅねお (@DQNEO) June 29, 2015
ということで、次回の開催はまだ未定ですが、またやります^^
Shinjuku.rb #26 に参加してきました
何年かぶりに再開された Shinjuku.rb に参加してきました。
きた。 / Shinjuku.rb #26 (06月24日) #shinjukurb https://t.co/7CMVc3LlWL
— 勢田圭剛(Seta Keigou) (@kseta19) 2015, 6月 24
Shinjuku.rb の思い出
今、社会人4年経ったのですが、1年目にAimingのみなさんにいろいろ教えてもらったなー。そこでShinjuku.rbを開催していて何回か遊びにいってました。当時参加していたときは、参加者でペアを組んで、お題に対してひとつのマシン・ひとつのスクリーンで交代でペアプロしながら実装していくっていう感じで、全くRuby書けないのに前でて冷や汗かきながら実装したのを覚えています。もちろん、テストも当たり前のように書くし、TDDだし、まわりからいろいろ突っ込まれる。今思うと、初心者ながらよく耐えれたな・・・と思います。
特に、Shinjuku.rb を主催されていた西川さん(@shishi4tw)には、「エンジニアとは何か」という姿勢の話や、技術的な話、キャリアの話など相談にのってもらってたなー。「文系出身でエンジニアってうまくやってけるんですか」「どうやったら技術的に伸びますか」みたいな話の相談のってもらってたな・・・。いろんな話を覚えているのですが、今でも書籍を買おうとしたときは必ず西川さんの「書籍の自己投資すらケチるやつはダメ」って言葉が浮かんできます。その言葉を聞いて以降、ちょっとお金がきつくても本だけはケチらずに買おう、読もう!とやってこれました。まだまだ読書量は少ないですが、それなりに読む習慣がついたかなと思います。
今回の Shinjuku.rb #26 について
今回の Shinjuku.rb についてですが、参加者も20名弱(?)で、LTも5本(?)くらいあってすごく楽しかったです。主催の方が「ゆるくいきましょ」って言ってくれてたので、リラックスした会になったのではないかなと思います。ふりかえりのKPTもいろいろ改善案がでてて次回も楽しみです。
Rubyコミュニティにもっと触れようと思った
普段、Rubyのイベントに全く行かないのですが、Rubyのコミュニティってやっぱすごいですね。テスト・CIとか当たり前の文化で。PHPだと「テスト書いてますか?」って話したら7割くらいあんまり書いてない、書いてるけどちょっと、って話になるような肌感。いろいろRuby界隈のコミュニティにも参加して勉強したいなーと思いました。
では/
Symfony Meetup #4 を開催しました
Symfony Meetup #4 を6月20日(土)に開催しました。
当日の LT まとめ
Symfony Meetup #4 での LT をカンタンにまとます。
LT 1. AngularJS (1.x) いまさら触ってみた by @qckanemoto
- AngularJS の学習体験談。
- 序盤は結構カンタンそう!ディレクティブとかになるとチョット難しい・・・。
- 最後らへんに登場する学習曲線?の図がかなり納得感ある人多いらしい!
- 「今から触る人は 2系やりましょう」
- 質問より、Symfony で AngularJS やるとき Twig と平行でどう使うの?⇒いろいろ方法はある。並行で使うのははそれなりにリスクもあり。
LT 2. CakePHPで作ったサービスをSymfony2で書き直した話 by @polidog
- すみません、寿司とピザを注文していて聞けてなかったです・・・。
LT 3. 教育系Webサービスにおける開発事例 @imunew
- hitomedia での教育系WEBサービスの開発事例。
- サービスの紹介 + Scrutinizer による取り組みのチラ見せ・・・!
- 質問より、Scrutinizer のスコアで妥協も必要⇒例えば、Duplicate の指摘とか。
LT 4. バンドルの歩き方 by @Ohiai_Cstap
- 我らが、バンドルマスターによるバンドルの歩き方の紹介(シリーズもの)
- すみません、いろいろやってて聞けませんでした・・・orz
LT 5. 集合演算ライブラリHaydn by @hidenorigoto
@hidenorigoto さんによる集合演算ライブラリHaydnについてのLT
#symfony_ja #symfony_meetup pic.twitter.com/PAeYRiXSHj
— 勢田圭剛(Seta Keigou) (@kseta19) June 20, 2015
- 集合演算ライブラリ Haydn について
- 近日 OSS 化!(を目指しているとのこと。)
LT 6. Symfony ユーザ向け psr-7 zend-diactoros middleware 入門 by @sasezaki
- PSR-7 のポイントや構成について
- zend-diactoros について
- Middleware について
LT 7. Apache の設定ファイルを劇的に読みやすくする方法 by @DQNEO
- ライブコーディング形式のLT!
- 不要なファイルや記述は徹底的に消すとびっくりするほど綺麗に見やすくなる(°_°)
- 要点をブログにまとめてくださいました!
あなたのApache設定ファイルを劇的に読みやすく改善する12の方法 - DQNEO起業日記
LT 8. ハイパーメディアAPIについて by @koriym
郡山さん( @koriym )によるハイパーメディアAPIについてのLT
#symfony_ja
#symfony_meetup pic.twitter.com/cvafN0tAg4
— 勢田圭剛(Seta Keigou) (@kseta19) June 20, 2015
- 寿司とピザの受け取りで聞けず・・・orz すみません。
懇親会
懇親会もいつもながら盛り上がりました。
LT 9. Docker をどっかどっか使う by @gilbite
懇親会LTはじまりました。いけめんさん(@gilbite)のLTから。Dockerの話。
#symfony_ja
#symfony_meetup pic.twitter.com/UKToqCXdrb
— 勢田圭剛(Seta Keigou) (@kseta19) June 20, 2015
- ご本人曰くネタLT(笑)ということでした。
- が、PHPについてや、開発環境のあり方についてなどかなり盛り上がりました。
- Dockerを使ってローカル開発環境を統一しよう!という考えに対して「ローカルの開発環境はみんな違っていていいんだよ」という意見がとても参考になりました。
今の会社では、Vagrant + Chef でローカル開発環境の自動構築を推奨しているのですが、もう少し自由に環境を変更できる”ゆらぎ”があっても楽しそう!って思いました。
LT 10. Scrutinizerのスコア10点のプロダクトを作り続けるコツの話
郡山さん(@koriym)のLT開始。Bear.SundayのScrutinizerのスコアはオール10の満点。その真髄について
http://t.co/02amVWNkJM
#symfony_ja
#symfony_meetup pic.twitter.com/GEQQqkTYTW
— 勢田圭剛(Seta Keigou) (@kseta19) June 20, 2015
- 郡山さん(@koriym) によるプロダクト作成のコツ
- Bear.Sunday のパッケージは Scrutinizer のスコア全満点・・・!すごい(°_°)
- 「まずは、いいわけなし!妥協せずにやってみよう。」
- 「else句を使い出したら、注意。他の方法を探してみよう。」
- このLTを聞くまで、10点満点を維持するという発想がそもそもなかったです(°_°)
- 8点くらいとれたらいいや!とハードルを低くしていたことを反省。郡山さんのスケールの大きさを再確認。
LT 11. A Deep Dive into JSON-LD and Hydra の紹介 by @koriym
www.slideshare.net
- 郡山さんによる良スライドの紹介
全11本のLTは以上です。
というわけで第四回目も無事に終えれました。
第四回目も無事に終えることができました。会場提供いただいた株式会社リジョブ様、本当にありがとうございました。写真のとおり、芝生の会場なんです!!!裸足でぺたぺた歩いたりなんかもできて、とてもリラックスできる会場でした。
咲くらぼ TECH 勉強会サポート | 咲くらぼTECHブログ - 株式会社リジョブ
勉強会の会場の確保や、費用に問題を感じられている主催者の方に勉強会の会場を無償で提供いたします。
ということですので、セミナースペースを探している方はぜひご利用されてみてはいかがでしょうか。
次回予告
Symfony Meetup は7月も開催予定です^^!また、6月29日(月)19:30〜より初心者向けのイベントを開催予定です。
Symfony初心者向けのイベントを新宿のフォトクリエイトで開催します。「Hello Worldから先に進みたい」という方、ぜひ(・∀・)/
Symfony よちよち会(仮)#1 (06月29日) #symfony_ja
https://t.co/F5rykZqGzv
— 勢田圭剛(Seta Keigou) (@kseta19) June 22, 2015
Symfonyについて困っている初心者のみなさんのサポートができればと考えておりますm(_)m ぜひ気軽に参加してください。では(^^)/~
Scrutinizer をトライアルしていますなう
これまで、CI をする際は Jenkins を利用していたのですが、Scrutinizer がよさそうだったのでトライアルしています。
Measure and Improve Code Quality continuously with Scrutinizer
今の会社は、新卒で入社して5年目なのですが、そもそも、入社当初は CI 環境が存在してなくて、いろいろ勉強して CI 環境をガーっと構築したのですが、全ての設定を基本的に一人でガーっと進めたので、Jenkins の設定なども自分しかできない状況になっています。これを解消するためには、Jenkins の使い方などを他のメンバーにも共有すればいいのですが、他のメンバーはそもそもそんなに CI に対して興味があんまりないので、そこを無理に強いるのもツライ状況。
外部サービスを使いたいと思っていたのですが、静的コード解析されるというのは NG ということをだいーぶ前の過去の上司に言われてて、諦めていました。が、去年変わった上司に「いいすかー?」ッて聞いたら「いいよー」ってあっさり返ってきて、満を持して導入できるようになりました。ナイス上司。
Circle CI や Travis CI も候補にあったのですが、Scrutinizer がいいらしいよって教えていただいて試してみることに。逆に Circle CI や Travis のほうがいいよ!ってことがあったらぜひ教えていただけると嬉しいです。・・・ほとんど CI のサービスを使ったことがないのです。
Scrutinizer は、Private のレポジトリを利用する場合は有料で、2週間のトライアルが可能でした。実際のコードでいくつか試したいこともあったので Private で試しています。今ちょうど1週間くらい経過したところです。でも実際にさわったのは、この3時間くらい・・・w
Scrutinizer で、できること
ここから、ちょっとした紹介です。
自動化されたコードレビューやデプロイなどができるようです。静的解析を行い、データがどのようにアプリケーションを通って行くかを追跡し、セキュリティやバグ、使用していないコードを検出してくれます。より詳細な機能はこちらから。
Measure and Improve Code Quality with Scrutinizer
はじめてのコードレビュー
テストで行ったのレビューから修正までの流れをご紹介。
プルリクエストを作成すると、レビュー結果をこんな感じで表示してくれます。この例の場合、プルリクエストによって、29件のイシューと2件のパッチが新規に作成されました。
はじめてのコードレビューで指摘されたことは、こんな感じのことでした。
- composer.lock に書いているバージョンの symfony/symfony は こういう問題があるよ
- PSR1 に準拠していないコードがあるよ(テストファイルに名前空間を指定してなくてそれが多かった)
- DRY じゃないコードがあるよ
イシューはこんな感じでコードとともに確認できます。みやすい。
で、そのイシューからポチっと GitHub の Issue を作成することができます。お手軽ですね。
で、修正プルリクエストを自分で作って、イシューを解決すると Good job とお褒めのお言葉をいただけます・・・!
また、パッチという機能があり、明らかな修正は修正済のプルリクエストを発行できます。たとえば、不要な空行などはパッチを作成してくれました。
こんな感じで、コードレビューから GitHub の Issue を作成するまではお手軽で、時には修正まで自動でしてくれるのはいいですね!
もうちょっといろいろなことを試してみます
いま、ドキュメントを翻訳しながらいろいろ試しています。テスト実行やデプロイ、実行環境のビルドもできるので、今の CI 環境でやっていることはほとんどできそうな予感・・・。けっこうデザインも好みで、触ったかぎりだとかなり好印象ですね!他のサービスも触ってみて比較しつつ導入を検討してみます。みなさんも興味あったらぜひ。
もう Jenkins のメンテとかあんまりやりたくないよ!!
では!
参考
Symfony Meetup #2 を開催しました
こんばんはっ!今日、Symfony Meetup #2 を開催しました。
今回は Voyage Group 様のパンゲア で開催することができました!会場準備にあたり、ご協力していただいた前田さん (@brtriver)、ありがとうございます!!懇親会はピザ+ビールが無料!ということで参加者全員参加の懇親会となり終始盛り上がってましたー。Voyage さんすごいっ!
もくもく会から Meetup へ
前回、もくもく会じゃなくてもっとわいわいやりたいし、実際わいわいしてるよねーみたいなことになり、今回は Meetup という形式での開催になりました!
コンテンツ
- イントロダクション(会場案内とか)
- 自由時間(交流とか、質問とか、もくもくとか自由)
- LT
- 懇親会
LT 1 - SQSJobQueueバンドル作りました (@polidog)
レポジトリはこちら!
ガンガンレビューしてほしいみたいですw
LT 2 - Bundleの探し方 (@Ochiai_Cstap)
- The 30 Most Useful Symfony Bundles (and making them even better) (Symfony Blog) を探す
- EmanueleMinotto/awesome-symfony2 · GitHub を探す
- Discover 2548 bundles for Symfony2 | KnpBundles を探す
- Symfony - PHP Trends, libraries and frameworks を探す
と、いいみたいです。 資料はこちらのソースコード!
LT 3 - Symfonyでロケールを含むURLを色々いい感じにする (@qckanemoto)
LT 4 - @Templateのテスト (@hidenorigoto)
@Template の Annotaion で指定しているテンプレートファイルが存在しないことを確認するテストができる→Template 以外の Annotation の確認がしたいとなった時にはこういった実装もできるのだなーと。
LT 5 - traitで機能を柔軟に拡張する(@brtriver)
- 「柔軟」と書いて「まとも」と読む。
- Trait について理解が深まりました。
LT 6 - SymfonyでCSVダウンロードしたときに困ったこと(@karakaram)
- 100万行の CSV をダウンロードする機能を実装した機会のはなし
- (追記 3/28(土)) ブログを投稿してくれていましたので記載。
LT 7 - Symfonyの歩き方 (@okapon)
- Symfony の初心者向けの勉強の仕方について
- Twitter で #symfony_ja や #symfony をフォローする
- @t_wada さんのスライドを読む
クローズ(@brtriver)
- 前田さんから Symfony ユーザ会創設の話。
- 「伝説のスライド」なるものが気になったのはぼくだけでしょうか?
- モテるPHP女子力を磨くための4つの心得 「symfony1.4を使えない女をアピールせよ」
- たのしそうな時代だ!
懇親会 LT
いくつかあったので"公開してもいいもの"で覚えていることをカンタンにまとめ。
SQSJobQueueバンドルレビュー会 (@polidog)
- 本編 LT で紹介されたバンドルのライブレビュー。
FizzBuzz で OOP のレビュー(@qckanemoto)
by_refernce の挙動の話(@qckanemoto)
- みなさん!by_reference はデフォルトでは TRUE ですよー
- collection Field Type (The Symfony Reference)
Silex React Sample (@brtriver)
- 前田さんの本日二回目の LT。
- Angular.js などとの比較・検討の話で盛り上がっておもしろかったです。
番外編
Symfony ドキュメント翻訳に @hanahiro_aze さんがチャレンジしてくれて見事デプロイされました!
[本日の成果]翻訳しました!
http://t.co/WEPLrUCKTD
#symfony_ja #symfony_meetup
— 腹周りたぷたぷ (@hanahiro_aze) March 22, 2015
さっそく翻訳の貢献も19位!
翻訳もガーーーっとどこかで時間設けてやりたいですね。
今回は Git や GitHub の使い方からサポートしたのですが、他にも翻訳してみたい(Git や GitHub を教えてほしい)みたいな人いたら言ってくださいーーー!絶賛翻訳者募集中デス。
本日はありがとうございましたっ
毎度ながら本当に楽しい会でした!参加者の人たちも楽しんでいただけているといいな・・・!
LT 資料が公開されたらぼちぼちまとめておきます。
イケメンさんたちは四次会なう〜な中、ワタシは寝ますッ!
来月も4月下旬に開催予定です。また来月、よろしくお願いします。
Symfonyもくもく会 #4 を開催しました
Symfonyもくもく会も今回で4回目を迎えることができました。
Symfonyもくもく会 #4 - 日本Symfonyユーザー会 | Doorkeeper
今回は株式会社ヒトメディアさんの the p@rk を会場での開催でした。今まで異常に Symfony にフォーカスした会となりとても内容の濃い会となったと感じます。参加者の方からも「楽しかった」「勉強になった」と好評の声をちらほら聞くことができて嬉しく感じました。
ということで第四回目の記録です。
どんな場所だった?
株式会社ヒトメディアさんの the p@rk を会場での開催でした。とても広々とした空間で音響設備もばっちり。Wi-Fi、電源、プロジェクターももちろん完備。子どもを遊ばせるスペースまでありました。仕事ではいつも音楽を聞いているので「こんな素敵な音響で毎日仕事できたらなぁ〜」と感じまくりましたっ!多くの参加者の方が心地よく感じていたのではないかと思います。
素敵な会場を貸していただき本当にありがとうございました、という気持ちでいっぱいです!
どんな人が参加していた?
(これまでの傾向も同じなのですが、)約半数が Symfony 歴1年未満の方々でした。PHP 歴1年未満の方もちらほら。今回は学生の方や勉強会がはじめてという方もいました。もともと、このもくもく会は「Symfony を通じていろいろな人と交流したい」「Symfony を広めていきたい」という想いのもとはじめたものでした。そういった意味で、初心者の方々がもくもく会に参加してくれることは非常に嬉しく思っています。
どんなことをしていた?
当日のタイムテーブルです。
内容 | 時間 |
---|---|
開場 | 12:30 ~ |
開始 | 13:15 ~ |
会場案内・自己紹介など | ~ 13:45 |
もくもく | ~ 16:00 |
LT | ~ 17:30 |
終了 | ~ 18:10 |
懇親会 | 18:30 ~ |
LT が盛り上がりました
LT は計4本でこれまで以上の盛り上がり。いやー知らないことが多くて非常に勉強になりました。
LT 1. Symfony で CI した話
これは自分で LT した内容です。
CI に関する取り組みは自分が結構力を注いできたことの一つでした。3年前、今の会社に入社したときは CI ナニソレみたいな感じだったのですが、いまでは当たり前のようにビルドプロセスが自動化されていてとても安定した開発ラインを築けています。デプロイ自動化からテストの自動実行、プルリクエストによるレビューフローなど NO プログラミング経験な自分が会社のメンバーの方と協力しながらこんな感じでやってきました〜みたいなことを共有しました。いくつか質問いただいたのでメモ。
Q. どうやってみんなにテスト書こうって提案した?
「(セミナーで知り合ったすごい人が)テスト書かないとやばい!!(って言ってます)」みたいな言い回しでとりあえずバシバシ情報を流布してました(笑)。ぶっちゃけ新卒1年目で十数年もキャリアがある先輩方と持論のみでテスト書くべき!って議論するのはとても難しかったのです。「俺はテスト書かなくても今までうまくいってきた」という意見にはなかなか真っ向から立ち向かえなかったです。なので「◯◯っていうセミナー行ってきたらみんなテスト書いてるっていってて書かないととりあえずやばいんです!」みたいなスタンスでとりあえず問題提起をガンガンしてました(笑)。そこから「いや書く気になれないんだ」「書く時間ないでしょ?」みたいな課題が明らかになっていって進めるには何を解決しなければいけないかという課題意識をしっかり持つことができ結果的に効率的な課題解決ができたように感じてます。もちろん、平行してしっかりテストを書くとどうなるか?を自分なりに勉強して「テストを書く技術」「提案の質」はどんどん上げていきました。
幸運なことに、何人かの先輩にすごく応援をいただいて現在はテスト書くことを会社的にも認めてもらえるようになりました。
Q. テスト書かない人いるよね?どうした?
査定に響くような目標設定をしました(笑)。テストを書かない=給料が上がらないという仕組みです。当時のチームメンバー全員で建設的に話し合って決めたのでそれほど殺伐とはしてなかったです。結局、まずやってみることが大事でやり続けられるモチベーションを確保すればいいんですよね。まずテストを書いてみる!からはじめられるようにして「書いても効果がなかったじゃん!」ってのがわかったらそれはそれで受け止めて。そういった意味では、当時のメンバーの「給料はあげたいよね」という根源的なモチベーションの柱をうまく活用できたので良い施策だったなと思います。
「あとカバレッジ5%あげないと給料あがらん!!」といってみんなで年の瀬にテスト書きまくったのはよい思い出です(笑)。
「給与駆動開発」なる言葉も飛び出して結構盛り上がりました。
今日の話の中で一番インパクトあったのは「給与駆動開発」 w #symfony_mokumoku
— にしむし (@nishimu1246) 2015, 2月 21
LT 2. コントローラのテスト
望月さん(@polidog)の LT。
Symfony でコントローラをするときに WebTestCase を使ったこんなテストを書きますよね。
<?php use Symfony\Bundle\FrameworkBundle\Test\WebTestCase; class DemoControllerTest extends WebTestCase { public function testIndex() { $client = static::createClient(); $crawler = $client->request('GET', '/demo/hello/Fabien'); $this->assertGreaterThan(0, $crawler->filter('html:contains("Hello Fabien")')->count()); } }
でももっと独立性の高いテスト書きたいときどうするか、というお話でした。
モックやスタブを使えばいいのですが、Symfony の Controller は継承しているのでやっかい、
class DemoController extends Controller
と思っていたら、これって継承しなくても動くんですね!全然知らなかったです。
@kseta19 controller as a service ってドキュメントがありますよー
— おかぽん (@okapon_pon) 2015, 2月 21
はい、安定のおかぽん先生からの優しいアドバイス。痛み入ります。ドキュメントはこちらです。
あと落合さんが共有してくれたこれも気になる。BDD 的に受け入れテストが書けるみたいで。一回触ってみます。
LT 3. Symfony から学ぶデザインパターン
おかぽん先生の LT。
Symfony の実装からデザインパターンを学ぶというお話。これシリーズ化してほしい!結構デザインパターンの勉強はおろそかにしていたので すが、Symfony から学ぶといういい視点をいただきました。
LT 4. バンドルの見つけ方
落合さんの LT。
- EmanueleMinotto/awesome-symfony2 · GitHub
- 数多くのバンドルがまとめられている。ここをみればだいたい主要なバンドルはチェックできる。
- PHP Trends, libraries and frameworks
- 最新情報はこちらで。
結論→バンドルマスターがフィルタリングした厳選された Bundle 情報をチェックするのが一番よいということにまとまりました。
Symfony Meetup!
前から感じてたんですけど、「全然もくもくしてないっ!(笑)」ということを改めて再認識し、次回からは「Symfony Meetup」と名前を改めてやっていきます!「Symfony を通じて人と人が出会う場」として盛り上げていきたいと思います。
来月も開催する予定なので Symfony に興味ある方、遊びにきてみてください^^
Symfony もくもく会 #3 を開催しました
1月24日(土)に Symfony もくもく会 #3 を開催しました。
今回はラクスルさんのオフィスをお借りしての開催でした。開始早々いきなり、 Symfony を脱線して OOP の小ネタ話がはじまったり Symfony の質疑応答や How to 的な話をしたり、LTがあったりと自由な感じで、いつものとおり和気あいあいとした感じでした。
タイムスケジュール
時刻 | 内容 |
---|---|
12:30 - | 開場 |
12:30 - 18:00 | もくもく + LT 1本 |
18:00 | 終了 |
~ 21:00 | 懇親会 |
~ 23:15 | 続・懇親会 |
話題になったこと
今日、話題になったこと。基本的にもくもくしているので全てをキャッチアップしているわけじゃないのですが、みんなでわーっと盛り上がった話を中心に挙げときます。項目的には Symfony 以外のことが多くみえますが、Symfony に関わる質疑応答や話題もそれなりに多かったように思います。
- OOP の小ネタ x 2本 by 後藤さん(@hidenorigoto)
- symfony/symfony-installer · GitHub について
- JMSDiExtraBundle (master) - JMSDiExtraBundle Documentation について
- GitHub Pages + Jekyll について
- Chef, Docker, Vagrant について
- 最近の JavaScript フレームワークについて
- みなさん、現場の 開発側 vs 営業側 問題ってどうしてる??
- LT
自分がもくもくやってたこと
みなさんと Symfony のこと話したり聞いたりしつつ、メインでは日頃お世話になっている方のプロダクトの開発環境を Chef + Vagrant で作ってました。
Commits · tyoshii/cookbook-bms · GitHub
どなたかが開発環境を Vagrant で作ってたみたいなのですが、担当者の方の業務などで時間が取れなくなってしまったのでそれを引き継いでちょっとお手伝いしている感じです。業務でも Chef 使っているのですが、そもそも Chef の入門本読んでシャッと独学で書き進めているのであんまりイケてる書き方じゃないかもって不安です。もっとこうしたほうがいいよ!とかあったらぜひ教えてほしいです。
全然テスト書いてなかったのでテスト書こうと思って serverspec 触ってたら楽しすぎて一日が終わってしまいました(汗)。Chef を現場で使っている方もいましたのでみなさんの現場でどんな感じでやってるかもお話できてよかったです。Docker まだ全然触ってないのですが、ちょっと来週触ってみます・・・。
次回に向けて
来月、第4回を開催します。日程など決まったらまた告知させていただきます。
今回もルーキーな人(私もルーキーなのですが。)が多かったです。Symfony に入門する人もどんどん増えてきている感じなんでしょうか〜。 来月は「Symfony を現場でどうやって使っているか」とか「こんなよいプラクティスあるよ」などのテーマを据えて何人かの方に LT や情報共有してもらうような構成にしていこうかなと模索しております。
最後に
会場提供してくださったラクスルさんありがとうございました。 参加してくださったみなさまありがとうございました。 来月もよろしくお願いします。
Symfony のプロファイラーを触ってみた話
はじめに
このエントリは Symfony Advent Calendar 2014 - Qiita の2日目の記事です。
Symfony のプロファイラーってみなさん活用されてますか?ぼくは、
Symfony を仕事で使うようになって(とはいってもSyfmonyの作業は全体の数%程度)、約半年経ったのですが全然使いこなしていません。Symfony は PHP でははじめてのフレームワークでもあるので基礎的な設計や実装で頭の中がいっぱいになりなかなか目を向けれないような状況でした。でもたまにみてみると、様々な情報が記載されていまして。きっと便利なんだろうな (°°)!いつかはしっかり学ばないと (°°)!という課題意識のみが盛り上がってきている今日このごろです。
ということでSymfony Advent Calendar 2014 - Qiita の2日目はこの盛り上がった課題意識とともにプロファイラーに触れる第一歩を踏み出すところからのプロセスをお楽しみいただければ幸いです。
ということでやったことをつらつらと書いていきます
プロファイラーを知る上での第一歩、ドキュメントを読む
まずドキュメントを読んでみました。Symfony 初心者のぼくにとってはドキュメントを探っていくのも少しばかり大変です。さーっと目を通した限りではこんなところが目につきました。うーん、英語ですね。
- Recipes about Profiler (The Symfony CookBook)
- WebProfilerBundle Configuration ("web_profiler") (The Symfony Reference)
- Internals (The Symfony Book)
プロファイラーを知る上での第二歩、日本語ドキュメントをそっと覗いてみる
英語は苦手ではないのですが、やはり日本語のほうがスーーッと頭に入ってきてしまう。そんなときには日本語ドキュメントを参照します。
しかりながら、プロファイラーの cookbook は翻訳されてないので困ったところ。ここで立ち止まっては真の(日本 Symfony ユーザ会にいつもお世話になっている)男じゃないッ!
プロファイラーを知る上での第三歩、ドキュメントを翻訳する
ということで、おもむろにドキュメントを翻訳してきますね (°_°)!日本語ドキュメントは GitHub で管理されてまして symfony-japan/symfony-docs-ja · GitHub にあります。翻訳活動はプルリクエストベースで行われているので GitHub が使えたらどなたでも翻訳可能でしょう。やりかたは Wiki に記載されてますので要チェックです。今回はこういったプルリクエストで翻訳しました。
- [cookbook] Profiler の翻訳 by kseta · Pull Request #329 · symfony-japan/symfony-docs-ja · GitHub
- [cookbook] プロファイラーの翻訳の修正点を対応 by kseta · Pull Request #333 · symfony-japan/symfony-docs-ja · GitHub
プロファイラーを知る上での第四歩、コードを読む
次に実際のコードを読んでいきました。どうやら [src/Symfony/Bundle/WebProfilerBundle][(https://github.com/symfony/symfony/tree/2.7/src/Symfony/Bundle/WebProfilerBundle) が実装コードのようですね。うーん、なんだかよくわかりませんセンパイ!(投げやり)
プロファイラーを知る上での第五歩、触れてみる
さぁそんなこんなでプロファイラーのドキュメントをさーっと見てシャッと翻訳してコードはそっとじしてなんとなく勉強した気分になってきました。Symfony の 2.6.1-DEV をインストールして触ってみます。Composer で Symfony のスタンダード・エディションをサクッと見ていきました。デフォルトで作成されいる AcmeDemoBundle で触れてみたのでそんなに目新しい発見はなかったです。ドキュメントを読んだり翻訳してみたりして知った設定などを試してみました。
プロファイラーについていろいろ調べてみて知ったこと
そんなこんなのファイブステップで自分なりにはそこそこプロファイラーのことが知れました。特に初歩的な設定周りについては新しく知ることが多かったです。いくつかピックアップして紹介します。
プロファイラーを本番機でも使う
デフォルトでは開発環境のみ適応される設定になっています。しかしながら、本番機でも Profiler が使えたら何かと捗りそうですよね。Symfony では build-in matcher を使うことで特定の IP アドレスからのアクセスのみ許可する、パスで特定のURLのみ許可する、といった使い方ができます。
# app/config/config.yml framework: # ... profiler: matcher: ip: 168.0.0.1
詳しい使い方は Recipes about Profiler (The Symfony CookBook) にありますので確認してみてください。
例外が発生したときのみプロファイラーが情報を収集するように制限する
本番機で稼働させた時などオーバーヘッドが気になるシーンでは例外発生したときのみプロファイラーが情報を収集するように制限できるようです。具体的には only_exceptions
を true
にすればいいようです。
# app/config/config.yml framework: profiler: { only_exceptions: true }
プロファイラーが集積するコントローラの処理を絞る
さらに only_master_requests
というオプションでプロファイルするコントローラの処理を限定できるようです。
# app/config/config.yml framework: profiler: only_master_requests: true
プロファイラーが集積したデータをテストに利用する
Symfony2 のプロファイラ Profiler は、毎回のリクエストに関するたくさんのデータを集めます。このデータを使ってデータベース呼び出しの回数を調べたり、フレームワーク内でかかる時間を調べることができます。 - ファンクショナルテストでプロファイラを使用する方法 | Symfony2日本語ドキュメント
こんな使い方があるなんて。プロファイラーで集積したデータを取り扱うことが簡単にできるみたいで、発想次第でものすごく幸せになれそうな予感。
プロファイラに集積されるデータのストレージを変更する
普段は app/cache/dev/profiler
に集積されるデータを MySQL や Redis などのストレージに変更できるようですね。
Switching the Profiler Storage (The Symfony CookBook)
プロファイラーの表示位置を変更する
プロファイラーの表示位置は position
というオプションで top
, bottom
が選択できるようです。
# app/config/config.yml framework: position: position: top
プロファイラーを無効にする
enabled
というオプションでプロファイラーを無効にできます。
# app/config/config.yml profiler: enabled: false
プロファイラーに手軽にアクセスできるようになるChrome拡張
こんな Chrome 拡張があるようです。
Give access to Symfoy2 Profiler if any Response from a server is made with the "X-Debug-Token". Very useful for REST & AJAX Development/testing - RiperFr/sf2DebuggerChrome · GitHub
感想
こんな感じでプロファイラーについてドキュメントを眺めてみたり翻訳してみたりしていろいろ触ってみました。プロファイラーを利用することで開発をスムーズに進められるだけでなく、本番機でも動作させたりして障害対応力を向上できたりといろいろと使いどころがありそうですね。今回は、ドキュメント読み→翻訳→エントリ作成、あたりの全工程で 3時間ほどでした。実際にはいろいろと実装もしてみたのですが、ちょっとまとまりつかなくなりそうでしたのでまたの機会にします。ちょっと知識が増えてきたので、実際の開発でも活用して効率のいいプロファイラー・デバックライフを過ごしたいと思います。
Symfonyもくもく会 #1 を開催しました
10月25日(土) に Symfonyもくもく会 を開催しました。
Symfony温泉2014に参加してきたときに「もっと交流会みたいなことしたいよねー」って盛り上がって2週間で日程だけ決めて開催した感じです。会場はフォトクリエイトのセミナールームで行いました。
「もくもく会」とはいいつつも「わいわい会」とわいわい騒ぐ会になって個人的には楽しい会になったのではないかなと感じてます。(もくもくしに来た人にとってはあまりよくなかったかも!と反省)
今後も月一くらいでなんらかの勉強の場ができればなーと思ってます!
タイムスケジュール
時刻 | 内容 |
---|---|
12:30 - | 開場 |
12:30 - 18:00 | もくもく |
16:00 ~ | LT x 5本 |
18:00 | 終了 |
全体的な感想
- 参加者は、1年未満の方が5人いてルーキー歓迎な感じでした
- 日本Symfonyユーザ会の人たちもいて質問とかしている方もちらほら
- ただ、もくもくするとせっかく集まっているのにあんまり質問とかしにくくて
- でも、もくもく会だから集中したい人もいるので次回からは「けっこうわいわいします」っていうべきでしたm(__)m
- 途中からハッシュタグを作って「質問はこちら」です形式にしたんですが、はじめからすればよかった
Symfonyもくもく会のハッシュタグ。質問とかあればこちらまで!Best PracticesやFormの話で盛り上がっているもくもく会は、まもなくLT大会へ。 #symfony_mokumoku #symfony_ja
— 勢田圭剛(Seta Keigou) (@kseta19) 2014, 10月 25
- LT希望者がいて「おー」と思ってたら結局5本もLTしていただきいろいろ情報共有もはかどりました!
- 自分も「Symfony友達を作る方法」というLTをしました^^もっとコミュニティを活性化させたい!
「Symfony友達の作り方」というタイトルでLTしました。もくもく会みたいな交流の場がもっと増えるといいなぁ
#symfony_mokumoku #symfony_ja
— 勢田圭剛(Seta Keigou) (@kseta19) 2014, 10月 25
で、お前はなにもくもくしたの?
会社の開発者向け管理画面を Symfony で実装しているのですがそのチューニングしてました。 あとは、所属している野球のリーグの管理アプリをちょっと着手したり、最近会社でトライアルしているQiita:Team の API をばーーっと見てみたり、雑談したりしてました。
うん、全然もくもくではなかったです。(やや反省)
最後に
参加者のみなさま、至らないところもありましたが、ご参加いただきありがとうございました! 来月は、@polidogさんが仕切りでやってくれるみたいなので興味ある方ぜひ参加くださいませ^^