読者です 読者をやめる 読者になる 読者になる

草野球リーグ運営アプリの開発 a.k.a ひまつぶし 1

日記 Symfony PHP

このとおり、土日働いたらダメよ指令があったので、前々から作成したかった草野球リーグ運営のアプリの開発をしてみた。The ひまつぶし。ターゲットとするリーグは IT LEAGUE。チームの代表者として参加しているので運営についてもなんとなく把握している!野球も中学校からやっているのでなんとなくしっている!今日は Day 1。

まずはいつもとおり、どんなドメインがあるのかフリーハンドで書いてみる。特定のドメインを決めて深掘りする。やりかたは以下の 1 ~ 3 を何回か繰り返す。あーなんとなくこれでいけそう!ってなるまで繰り返す。

  1. 用語をざっくり書き出す(ユビキタス言語)
  2. 紙に書いてざっくりマッピング
  3. ユースケースを文章で書く

ビジネスロジックや用語にまよったら辞書や野球のサイト、野球のルールブックを見てみる。用語のより専門的な「呼び方」や「意味」からすごーく深いい情報が得られたりする。今回だと以下を参考にした。今回だとリーグの「シーズン」っている概念がなんとなく頭から抜けていて、MLBのサイトを見て「シーズンでフィルタ」する機能を見て気付いた。あと選手の成績としてどんなデータを残すのか?という観点で表示されているデータからより深く洞察できるようになったりした。

なんとなく頭で実装イメージが湧いてきたところでコーディングを開始!1回くらいは作りなおすなーくらいのテンションで手を動かすこともどんどんやって実装からフィードバックを得ていく。採用した技術は慣れている PHP + Symfony。DB は MySQL。開発環境は PHP のビルドインサーバ。

結局、今日は分析と Entity, Repository の作成を半分くらいまででおわた!分析でだいたい5時間くらい(°_°)実装は3時間くらいかな。野球のルールブック見てたら日が暮れてもた笑 FOSUserBundle, EasyAdminBundle を利用してさくっとスタート!!

github.com

画面はこんな感じ。

f:id:kseta:20160626234600p:plain

また時間あいたらちょっとづつ開発していこーっと。 ひとりきままなざっくり開発最高!

働きすぎて

日記

働きすぎて5年を経てようやく上司に注意された。が、めっちゃ働きたいw とはいっても、労基的にもそこらへんはきっちりしないといけない。いやでも働きたい・・・。笑 なんで働きたいのか?はやく会社のビジョンを実現したいから、できるだけ早く。焦っているだけかもしれない(?)けど、いま使える全部の時間を使ってチャレンジしてみたいんだよな〜!!

ここまで打ち込めることに出会えているって幸せなことやね。

もっとゆるふわに考えていくこと

日記

最近、いろいろ考える。周りの仲間もいろいろ考えている。自分のこれまでを振り返る。これでいいんだろうか?と少し悩む。これからどうやって生きていこうかと思いがふくらむ。

自分はこの数年、ほぼ仕事しかしていない。仕事にしか打ち込めていない。時々、「あれ、これでいいんだっけ?」と不安になる。そして、たまーになにしてきたのかを振り返ったりする。振り返りろうとしている。Wantedly からプロフィール埋めてねリコメンド来てたので少しだけ埋めてみた。う〜ん、大したことしてないから書けない(笑)。また後で書こう。

まだまだいろんなことにチャレンジできるしチャレンジしていきたい。成したいこともある。取捨選択が難しい。一度決めたことが変えられない、選び直すことができない。できなかった。なんか物事から逃げているみたいで。でもそれって、「絶対これは変えちゃだめなんだ!」って思い込むことによって変化から逃げ、自分を守っているだけだよね。これからもうちょっとゆるふわに考えてみたい。

今週末はSymfony Meetup #8 !!

今週末は Symfony Meeup #8 を開催しますー!UUUM株式会社さんのステキなオフィスで開催ですよ!

当日は書籍「基本からしっかり学ぶ Symfony2入門」の写経会も実施する予定です。講師は著者の後藤さん(@hidenorigoto)と金本さん(@qckanemoto)。著者による写経会というのはかなり貴重な機会だと思いますので、入門者の方に超オススメします!Meetup には Symfony に興味がある方が多数参加されますので、友達作りや交流するキッカケとしてぜひ遊びにきてください。

さて、

週末の Meetup に先駆けて写経会に必要な開発環境の構築会を開催しました。水曜日と金曜日で二回に分けて開催です。

おこしやす! #準備完了 #マンツーマン #symfony_ja #symfony_meetup

せたー!さん(@kseta19)が投稿した写真 -

どんなことをしたのか?

「本を読みはじめたんですけど、いざコードを写して書いてみようと思うと PHP のインストールとかの環境構築ができない・・・挫折!」という入門者の方のために、講師の方と一緒に環境構築をしてまずスタートラインに立てるようにしよう、というのが会の主旨です。写経にはアプリケーションを動作させる環境が必要で、その環境構築には、PHP のインストール、Apache の設定などなどが必要になってきます。ルーキーの中には「そこまでまだ一人でできない!」という方も多いと思います。「じゃあそれできないと書籍読めないのか」というとそうでもなくて、まず Symfony に触れてその世界に飛び込んでみるというはチャレンジとしてはアリだと思っています。なので、「細かいことはよくわかってないけどとりあえず動く環境用意する!」という感じで最低限の説明と共に環境構築しました。

もちろん、今回の環境構築に必要な知識がないとエンジニアとしての基礎が養われないので、そのあたりは引き続き習得していただく感じで。(このあたりは自分も全然できてなくて、もっと勉強していかないと、と日々学習に励んでます。)

結果的に、参加者全員が環境構築まで完了できたのでよかったです^^写真は作業中の様子。

f:id:kseta:20160123015119j:plain

環境構築のハマりポイント

今日の環境構築でハマったところを2つピックアップ。今回はエンジニア歴2年の2人の方と一緒にやっていたのですが、特に大きくハマることなくスムーズに構築できました・・・!(でも全工程で3時間掛かった)

  • Symfony の check.php を利用して動作に必要な要件を満たそう

Symfony が動作する環境かどうかを判定を $ php app/check.php で確認できます。実行し PHP の拡張モジュールが足りない、など要件を満たしてませんよ的な主旨のメッセージが表示されたら、まずそれを修正する必要があります。どうやって解決するかは内容によって異なるのでここでは詳細に書きませんが、まずこのスクリプトの実行結果で OK と表示されるまでやってみましょう。

  • 書籍にコマンドの誤りがあるので正誤表を確認しよう

書籍にコマンドの誤りが一部あるので、そのまま叩くと失敗することがあります。正誤表は こちら で公開されいていますのでまずさっと見てみるとよさそう。今回は $ symfony new classic-symfony2.7 で 2.7 の前にスペースを空けずに実行したりして失敗されていることがありました。

というわけで、Meetupでお会いしましょう!

今週の Meetup でお待ちしています!まだ残席ありますのでぜひ。環境構築会など初心者向けの会は今後も実施していきますので、そちらもご期待ください^^

symfony.doorkeeper.jp

f:id:kseta:20160123015315j:plain

では!!!

RESTful#とは勉強会10に参加してきた!

RESTful#とは勉強会10に参加してきた!郡山さん (@koriym) が講演されるということを聞いていってみよかなーって感じで参加!楽しかったです。毎度のことですが、中身はあんまりないですが、参加ログ!!!

rubychildren.doorkeeper.jp

どんなことをしたのか?

募集ページにあるとおりで、

RESTプロフェッショナルの 川村 徹 さんとフリーランスPHPプログラマーで、WebアプリケーションフレームワークBEAR.Sundayの開発者として知られる 郡山 昭仁さんをお迎えし、RESTfulに関して基礎から学ぶ勉強会です。

内容は、①「WEBを支える技術」の読書会 〜② 郡山さんのトーク 〜 ③懇親会という感じでした。

読書会パート

読書会パートは3人〜4人でひとつのグループになって声に出して輪読しつつ疑問点などあったらグループ内で話し合う、という形式。今日は「キャッシュ」に関する章から。参加したグループはなんと全員 PHPer の Symfony、Silexユーザでちょっとびっくり。ETag って Symfony だとこんな計算の実装ですよね〜とか話題になって、全員初対面なのに親近感がわきましたw 社会人になって、読書会に参加したのははじめてかも。一冊の本に対して議論をしていると結構いろんな方向に話が広がったりして面白かったデス。本の内容も基本的なものだったので、ちょっと知ってる前提で「これってこうだよね」みたいな感じで始められたので気楽でした(難しい本だと、そもそも理解するのにすごく時間が掛かったり、誰もちんぷんかんぷんになったりとかなりそう。)もちろん、知らないこともあったりして、都度確認しながら進めていく感じでした。例えば、キャッシュヘッダの方針について

キャッシュさせない場合は、Pragma と Cache-Control の no-cache を同時に指定する

というものに対して「これってなんでだっけ?」みたいな質疑がでてたりしました。

この書籍はこの読書会のために会の直前で買ったのでまだ全く読めてないです!ちょっと読み進めてみたいと思います。

郡山さんのトークパート

前回の Symfony Meetup #5 でも再演していただいた PHPカンファレンス福岡の基調講演の再演トークをしていただきました!二回目で理解も深まりました!!僕は郡山さんのファンなのでそもそもめっちゃ面白いのですが、現場でも盛り上がってたみたいですね!

今回の参加者の方は郡山さんと面識がない方が多くて「この御方、誰や!?」みたいな感じでトーク終わったあとや懇親会で検索されている人がいて、いつもの「郡山さん話すと油性ペンが〜」みたいなノリと違う感じで楽しかったです。

本編総括

そんなこんなで楽しかったです。以上。

いやーたのしかた。 #RESTudy

せたー!さん(@kseta19)が投稿した写真 -

懇親会

懇親会、いや〜久々に視野狭い自分の視野が広がった会でした。

  • ヨッシーのたまごを支える技術」について郡山さんに教えてもらう。アセンブラでの実装とか、ファミコンの処理についてなど。
  • Vimmer な女子に出会う。というかそもそもエンジニア、プログラマーな女子とこんなに話すのはじめて?かも。論理和の話で笑える女子、実在するんだ・・・。ステキっすね・・・。
  • 帰り道で川村さんにフリーになったこととかいろいろ教えてもらう。キャリアどうしよーとか考えることが多いのでめっちゃ興味でたっ

いやーたのしかた。 #RESTudy

せたー!さん(@kseta19)が投稿した写真 -

あと自己紹介で「せたといいます!」と言ったら「(Twitterの?)IDは?」と聞かれてあたふたするなど。twitter とか SNS はほんとにやらないのできょどる。など。

そんなこんなで

  • WEBを支える技術、という本を読むきっかけになった!読む。
  • 社会人になって読書会、初体験。ちょっと会社でもやってみたいなー
  • 自身の女子感に広がり。
  • 川村さんに出会う、話を聞く、もっと話を聞いてみたくなった!

次回もぜひ参加したいなー!そんな会でした。

Symfony Meetup #5 を開催しました。

Symfony Meetup #5 を 9月6日(日) に開催しました。

Symfony Meetup #5 - 日本Symfonyユーザー会 | Doorkeeper

LT まとめ

Symfony Meetup #5 の LT をカンタンにまとめます。 LT資料は WEB にアップされたてきたら更新しまーす!

LT 1. Symfony の HTTP Cache について by @polidog

  • Symfony の HTTP Cache についての解説

LT 2. ChatOps で快適リリース生活 by @qckanemoto

speakerdeck.com

(2015/09/07 資料追加)

LT 3. メルカリの話 by @DQNEO

  • メルカリの話
  • メルカリってええ会社なんやなぁ〜と羨望の眼差し。
  • 次回は Symfony にコントリビュートした話を楽しみにしています!

LT 4. Bundle の歩き方 by @Ohiai_Cstap

  • 毎回恒例の Bundle 紹介シリーズ

LT 5. E2E テスト雑感 by @imunew

LT 6. Cache について by @koriym

講演

PHP カンファレンス福岡での基調講演の再演 by @koriym

speakerdeck.com

第五回目終了!

会場提供していただきました hitomedia 様、本当にありがとうございました。この一年で3回も会場をお借りしていまして、大変お世話になっています。井村さん、花井さん、今回も会場準備からクロージングまでありがとうございました。

次回

次回は、今月末か来月に開催予定です。また日程決まりましたら募集しますので、遊びにきてください。

Stagehand_TestRunner 4.1.0 がリリースされたので Symfony 2.7 で使ってみた(道半ば)

WIP

Stagehand_TestRunner 4.1.0 released!

さっそく 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 の設定ファイルで設定してあげたい・・・(?)

  • app/phpunit.xml.dist で bootstra_test.php を読み込むようにする
<?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の初心者向けワークショップを開催しました。会場は新宿のフォトクリエイトのセミナールームでやりました。

speakerdeck.com

Symfony よちよち会(仮)#1 - 日本Symfonyユーザー会 | Doorkeeper

初心者向けのワークショップ

一週間前に @DQNEOさんから Symfony の初心者向けの会あったらいいですね、と言っていただき、迅速に開催しました。一週間という短い募集期間でしたが、10名もご参加いただきありがとうございます。Symfonyの勉強会は、Symfonyに限らず設計やモデリングの話など話題が広いため、ちょっと初心者の方にとっては質問しずらかったりする雰囲気があったような気がします。もっとガンガン聞きたいことが聞けるような場があってもいいな〜という思いは前からあったので、こういった形で会をひらくことができて嬉しいです。

内容

「初心者」といっても幅が広く準備期間も短かったため、集まった人たちが抱えている課題によってレベルをいくつかに分けました。そこで、2人に対して講師を1人につけるくらいで配分して似たような課題レイヤー同士と講師で課題解決できるようなスタイルにしてみました。実際の分類は、

  1. 環境構築から(3人)
  2. チュートリアルの写経から(8人)

というようなものでした。最後に全体で質問をいくつか受けて終了です。

f:id:kseta:20150630012546j:plain

講師陣

安定のおかぽん先生(@okapon_pon)、おちぽん先生(@Ochiai_Cstap)、ぽりどっく先生(@polidog)の布陣。と僕です。僕が教えてほしい!!(切実)

環境構築からチームの取り組み

このチームには講師は私が付きました。Symfony Installerでインストールを実行し、PHPのビルドインサーバで"Hello World"できるようになるまでくらいを目標に進めました。レシピとしては以下のような感じ。

  1. PHPの実行環境がある状態でスタート
  2. Symfony InstallerSymfony プロジェクトを作成
  3. $ php app/check.php で動作環境を確認
  4. $ php app/console server:runHello World
  5. $ php app/console について
  6. 終わったらチュートリアル

今後について

今後も初心者の方が学びやすい場を作れたらなぁ〜と思っています。また機会をみつけて開催する予定です。

私が Symfony に入門した当時は年に2回ほどイベントがあるだけで、Symfony の勉強は独学で大変つらかった思い出があります。コミュニティの活動が活発になって、もっと楽しく学べる環境・仲間が作れるような、そんな Symfony界隈になりますように。

ということで、次回の開催はまだ未定ですが、またやります^^

Shinjuku.rb #26 に参加してきました

何年かぶりに再開された Shinjuku.rb に参加してきました。

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日(土)に開催しました。

symfony.doorkeeper.jp

当日の LT まとめ

Symfony Meetup #4 での LT をカンタンにまとます。

LT 1. AngularJS (1.x) いまさら触ってみた by @qckanemoto

speakerdeck.com

  • AngularJS の学習体験談。
  • 序盤は結構カンタンそう!ディレクティブとかになるとチョット難しい・・・。
  • 最後らへんに登場する学習曲線?の図がかなり納得感ある人多いらしい!
  • 「今から触る人は 2系やりましょう」
  • 質問より、Symfony で AngularJS やるとき Twig と平行でどう使うの?⇒いろいろ方法はある。並行で使うのははそれなりにリスクもあり。

LT 2. CakePHPで作ったサービスをSymfony2で書き直した話 by @polidog

f:id:kseta:20150620161541j:plain

  • すみません、寿司とピザを注文していて聞けてなかったです・・・。

LT 3. 教育系Webサービスにおける開発事例 @imunew

f:id:kseta:20150620162616j:plain

  • hitomedia での教育系WEBサービスの開発事例。
  • サービスの紹介 + Scrutinizer による取り組みのチラ見せ・・・!
  • 質問より、Scrutinizer のスコアで妥協も必要⇒例えば、Duplicate の指摘とか。

LT 4. バンドルの歩き方 by @Ohiai_Cstap

f:id:kseta:20150620164459j:plain

  • 我らが、バンドルマスターによるバンドルの歩き方の紹介(シリーズもの)
  • すみません、いろいろやってて聞けませんでした・・・orz

LT 5. 集合演算ライブラリHaydn by @hidenorigoto

  • 集合演算ライブラリ Haydn について
  • 近日 OSS 化!(を目指しているとのこと。)

LT 6. Symfony ユーザ向け psr-7 zend-diactoros middleware 入門 by @sasezaki

psr7.net

  • PSR-7 のポイントや構成について
  • zend-diactoros について
  • Middleware について

LT 7. Apache の設定ファイルを劇的に読みやすくする方法 by @DQNEO

  • ライブコーディング形式のLT!
  • 不要なファイルや記述は徹底的に消すとびっくりするほど綺麗に見やすくなる(°_°)
  • 要点をブログにまとめてくださいました!

あなたのApache設定ファイルを劇的に読みやすく改善する12の方法 - DQNEO起業日記

LT 8. ハイパーメディアAPIについて by @koriym

  • 寿司とピザの受け取りで聞けず・・・orz すみません。

懇親会

懇親会もいつもながら盛り上がりました。

LT 9. Docker をどっかどっか使う by @gilbite

  • ご本人曰くネタLT(笑)ということでした。
  • が、PHPについてや、開発環境のあり方についてなどかなり盛り上がりました。
  • Dockerを使ってローカル開発環境を統一しよう!という考えに対して「ローカルの開発環境はみんな違っていていいんだよ」という意見がとても参考になりました。

今の会社では、Vagrant + Chef でローカル開発環境の自動構築を推奨しているのですが、もう少し自由に環境を変更できる”ゆらぎ”があっても楽しそう!って思いました。

LT 10. Scrutinizerのスコア10点のプロダクトを作り続けるコツの話

  • 郡山さん(@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は以上です。

というわけで第四回目も無事に終えれました。

第四回目も無事に終えることができました。会場提供いただいた株式会社リジョブ様、本当にありがとうございました。写真のとおり、芝生の会場なんです!!!裸足でぺたぺた歩いたりなんかもできて、とてもリラックスできる会場でした。

http://4.bp.blogspot.com/-FZ87ae5JUdU/VSOMlKubVHI/AAAAAAAAAVY/wioyItd4Ga0/s1600/rejob_Office01.jpg

咲くらぼ TECH 勉強会サポート | 咲くらぼTECHブログ - 株式会社リジョブ

勉強会の会場の確保や、費用に問題を感じられている主催者の方に勉強会の会場を無償で提供いたします。

ということですので、セミナースペースを探している方はぜひご利用されてみてはいかがでしょうか。

次回予告

Symfony Meetup は7月も開催予定です^^!また、6月29日(月)19:30〜より初心者向けのイベントを開催予定です。

Symfonyについて困っている初心者のみなさんのサポートができればと考えておりますm(_)m ぜひ気軽に参加してください。では(^^)/~