スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

Symfony2勉強会に行ってきました。#Symfony2study

11/20 Symfony2勉強会に行ってきました。

内容は以下の通りです。
・3部構成のワークショップ
@chobi_eさんのLT
@fivestrさんのLT
・パーフェクトPHPの著者の一人@fivestrさんのサイン会

ワークショップのスライドはこちら。
http://www.symfony.gr.jp/blog/20111121-symfony2-workshop-1

LTを行った@chobi_eさんのスライドはこちら。
http://d.hatena.ne.jp/chobi_e/20101121

今回の勉強会は企画を立てて一人で司会をこなした@hidenorigotoさんには当然感謝なのですが、個人的には@chobi_eさんに今回一番感謝しています。
本来自分で環境作るべきところを仮想環境のイメージを作っていただき、当日はエラーが出る度に見てもらってかなり助けていただきました。本当にありがとうございます。

以下、感想。
Symfonyを使うとモテるらしい。
Symfonyを使うとモテるらしい。
はい、大事なことなので二度言いました。

ワークショップ本編の感想としては環境の構築から人にお願いしてるような状況なので全然前準備が足りなくて第一部の基礎編はどうにかついて行けたのですが、第二部のMongoDB ODMでは完全について行けませんでした。
前準備大事です。
ついて行けませんでした。で終わらせたら意味が無いので個人的に復習します。
第三部は急遽ライブコーディングが始まったりしましたが無事終了。

その後、二本のLTがあり無事第一回Symfony2勉強会が終了しました。

すでに第二回の開催も決まっているので次回はきちんと準備して参加したいと思います。

その後、懇談会で鍋食って、2.5次会、Symfony2Midnightと明け方5時迄深い話が聞けてとても良かったです。
懇談会ではブログを読んで是非直接話しが聞きたいと思っていた@HIROCASTさんと話が出来て、Midnightでは@brtriverさんに「日本でSymfonyが盛り上がってるのは開発者に伝わってないし、Symfony2は今ならまだ意見を取り入れてもらえるから英語でどんどん発言しないとダメ」(かなり割愛してます)と言われてかなり考えさせられてほんとに濃い一日でした。
少しずつでもいいから英語でコミュニケーション取れるようにやれることから始めようと思います。

「第2回 symfony1.4勉強会」に参加してきました

4/28 「第2回 symfony1.4勉強会」に参加してきました。

内容としては、
・挨拶
・参加者による自己紹介
・MVCモデルの説明
・サンプルアプリを使ってsymfony1.4の説明
・質疑応答
・交流会

MVCモデルの説明については個人的に10年近くMVCモデルで開発してるのでメリットは大体理解してるし、理解してるから10年近くもなるべくMVCでの開発を心がけている。

MVCの説明として
・楽
・多少悩む
と説明がありました。

講師の方のまとめとして「悩まなければ楽」と締めましたが、確かに2週目、3週目の方は楽でしょうね。
でも俺みたいに導入から関わる人は結局悩んで試行錯誤しながらの導入となるから悩まずにやるんなら既に知ってる人を探す必要がありますね。


その後、symfony1.4に関しての説明。
遅いと言われてるけど実際は十分な速度って話を聞けたのは現場を説得する材料になるから良かった。
例として不動産関係のサイトでテストデータ2万件の検索をしてたけど普通に動いてた。

併せて、symfonyを使うメリットを説明。
・実装以外の不安を解決
これはクロスサイトスクリプティングとかDBアクセスとかsymfonyがやってくれるから気にしなくて済むよねってこと
・誰が見てもどこに何があるかだいたい分かる。
symfonyはディレクトリ構造が決まってるから一度覚えれば他の人のプログラムもどこで何やってるかだいたい分かる。(cakeも多分同じだとは思うけど講師の人はcakeはカオス化しそうだと感じたらしい)
・多人数で同時に開発するのに向いてる
他にzendやcakeもあるけどsymfonyが一番向いてると感じたらしい。


そして、サンプルプログラム見ながら実際の実装方法を説明。
まぁ、内容はJobeetやれば被ってる部分はあるかも。
でもやっぱりフォームクラスは使いにくいって話は出てた。


勉強会の全体の雰囲気としてみんなで情報交換してみんなで勉強していきましょうって内容だったから俺個人ももっとsymfony1.4触って情報出せるようにしないと。

symfony1.4 jobeet 10日目

今回はフォームクラスの説明

フォームフレームワークは以下の3つの部分で構成されます。
  • バリデーション: バリデーションサブフレームワークは入力(整数、文字列、Eメールアドレス・・・) をバリデートするクラス群を提供します。
  • ウィジェット: ウィジェットサブフレームワークは HTML フィールド(入力、テキストエリア、選択・・・) を出力するクラス群を提供します。
  • フォーム: フォームクラス群はウィジェットとバリデーターで構成されるフォームを表し、フォームを管理しやすくするメソッドを提供します。それぞれのフォームフィールドに、個別のバリデーターとウィジェットが設定されます。
内容としてはチュートリアルの通り進めていけば動くの割愛します。
今後調査としてはバリデーション・ウィジェットをどこまでカスタマイズ出来るかを調べる。
これは実際に何かアプリケーション作ってみないと分からないのでチュートリアル終了後に適当なアプリ作ってみて色々タメ所定です。

チュートリアルを進める上で一点躓いた部分が管理メニューの表示。
特にチュートリアルに記述がなくて悩みましたが以下のURLで無事表示されました。
http://localhost:8080/frontend_dev.php/job/job_expired

フォームクラスに関しては上記でも書いたようにバリデーション・ウィジェットのカスタマイズや入力内容の確認画面の追加の仕方などまだ調査が必要なので別途詳細は調べる予定です

symfony1.4 jobeet 9日目

今回は機能テストの説明。

イメージとしてはseleniumをコマンドラインから実行してる感じかな。
Webシステムのテストってこのリクエスト投げるとこんなレスポンスが返るよね。の繰り返しだからなんとか自動化したくてseleniumとかも調べたけどsymfonyの機能テストはまさに俺が求めてたもの。
1.0でも一度使ったんだけどその時はスケジュールがきつくなって途中でやめてしまった。

まずは、機能テストを実現するためのsfBrowserの説明とメッソドの説明。
この辺はチュートリアル読んでもらって要はsfBrowserでブラウザの動きをシミュレート出来ますよって話。

次に実際にテストを行うためのsfTestFunctionalクラスの説明。
limeでisとかでテストしてたのをリクエストが正しいかだとsfTestFunctionalのisParameterでチェックしたりする。
sfTestFunctionalが持ってるメソッドはチュートリアル見てください。

実際にテストケースを追記していくクラスはモジュール作成時にモジュール名ActionTest.phpというファイルでスケルトンコードが作成されます。
試しにカテゴリモジュールのテストを行います。
4件のテストケースが実行され、2件がエラーになりました。
これは自動で作成されるテストコードが以下のテストを行ってるためです。
category/indexの表示テスト
1.モジュールがcategoryである。
2.アクションがindexである。
3.ステータスコードが200である。
4symfonyのデフォルトページではない。
今回、categoryにindexアクションが存在しないので2,3のテストがエラーとなります。

機能テストを行う際にはデータベースに接続する必要があります。
job/indexを表示するとjobデータが○件表示される。とかは実際テーブルからデータ持ってこないとテストできないですよね。
そのためのテストデータを読み込むための前準備のやり方が書かれています。
具体的には先程のsfTestFunctionalクラスを継承した独自の機能テストクラスを作成します。
その後、sfTestFunctionalを使用していた部分を独自の機能テストクラス(JobeetTestFunctional)をインスタンス化してテストを行います。
テスト内容としてResponseに対してcheckElementメソッドを使用して表示内容の確認も行えます。

ただ、ここで問題が。。。
jobモジュールのテストjobActionsTestを実行したところ独自の機能テストクラス(JobeetTestFunctional)がnot Foundになってします。
要はクラスが見えてないだけだからrequire_onceしてやれば普通に動きます。
さんざんtwitterで愚痴を言った後にチュートリアルよく見るとJobeetTestFunctionalのコードが以下のようになってました。
// lib/test/JobeetTestFunctional.class.php
class JobeetTestFunctional extends sfTestFunctional
{
public function loadData()
{
Doctrine_Core::loadData(sfConfig::get('sf_test_dir').'/fixtures');

return $this;
}
}
1行目のコメントをよく見るとlibフォルダの下に置くようになっていました。
昨日からずっとtestフォルダの下で作業していたのでよく見ずtestフォルダの下にJobeetTestFunctionalを作ってしまいそりゃ見えないよって感じになってました。
(symfonyはlibやapp/libなどlibフォルダの下にクラスを配置すると自動的にロードされます。)

で、無事サンプルのテストケースが動いたのでこの後2日目に書かれていた要件にそったテストケースを追加していく。
途中テストコードのリファクタリングの仕方などがあり、無事実装完了。

今回はチュートリアル通りコードを書いてるので特に問題無いのですが実際使用する際はResponseの情報がないとなんでエラーなのか分からない時があると思います。
そんな時は以下のコード使用することでResponseの内容を表示出来ます。
$browser->with('response')->debug();
チュートリアルのそってjobモジュールとcategoryモジュールのテスト作成したのですが、以下のコマンドでまとめてテストすることが可能です。
$ php symfony test:functional frontend
さらに前回作成したユニットテストもまとめてテストするには以下のコマンドで可能です。
1つのテストクラスが1つのテストスイートって感じですね。
$ php symfony test:all

毎回毎回、テストケース全部通すのはめんどくさいので"--only-failed"という便利なオプションも用意されています。
これは前回通らなかったテストのみ強制実行するオプションです。
試しにcategoryActionsでエラーが発生するように修正してテストを実行します。
その後、テストが通るように再度修正し、"--only-failed"オプションを付けて実行するとエラーだったテストケースのみが実行されます。
その状態で再度テストを実行すると全テストケースが実行されます。
(イマイチ説明が下手だな)
とにかく、"--only-failed"は便利!!

symfony1.4 jobeet 8日目

今回はユニットテストの説明。

1.0でもユニットテストやろうとしたけど挫折して、1.4ではユニットテストも使い易くなってるって記事を読んだ記憶があるのでかなり期待。
後、個人的な課題として開発工程にテスト駆動を取り入れたいので今回と次回機能テストは俺の中で結構重要な意味を持ってます。

まずはlimeテストフレームワークとテストに使用するメソッドの説明。

で、実際サンプルに基づいてJobeetクラスのテスト。
環境がWindowsでCygwinも入っていないのでグリーンにはなりません。(気が向いたらCygwin入れるかも)

その後に実際に以前作ったslugifyメソッドをテスト。
既に存在するメソッドに対してこう動くよねって視点のテストなので問題なく全部通りました。

その後、テストケースにコメントを追加して何のテストを行ったか表示するように修正。
1.0でもそうだったけど試しに日本語入れると当然化けました。
symfonyのソースファイルは基本UTF-8なのに対してコマンドプロンプトはShift-JISなので当然の結果。
そこで以前調べたコマンドプロンプトでUTF-8を表示する方法を実行して無事日本語も表示出来た。

コラム的な感じでカバレッジを調べる方法も書かれてたので試しに実行したらXDebugが入ってないので当然のようにカバレッジの計測は出来ませんでした。
なので、XDebugのインストール。
インストール方法が書かれてるサイトを参考にしてdllのダウンロードとphp.iniファイルの設定をしたけどXDebugが反映されない。
参考にしたサイトでは設定値の追加で"zend_extension_ts"という項目名になっていたのを"zend_extension"に変更したら無事反映されました。
このことをtwitterでつぶやいたら@hidenorigotoさんが以下のサイトを教えてくれました。(感謝)
http://www.php-seed.net/blog/archives/95
そこを見ると
1.zend_extensionに
2.もしデバッグビルドが有効なら、_debugを付けて、
3.もし、スレッドセーフが有効なら、_tsを付ける。
ということらしい。
真面目にtsをtestの略で参考にしたサイトはtest的にこの項目追加してますよって事なんだと思ってた^^;

その後、slugifyは機能が足りてないとの事なので新しい機能の実装。ここで本来のTDDにそってコードの修正を行う。
1.まずテストケースを追加してテストを実行し、レッドを表示(テストを失敗させる)。
2.コードの修正。
3.再度テストを実行してグリーンを表示(修正が正しいことを確認)。

その後、slugifyにはまだバグがあるのでバグを確認できるテストケースを追加して上記の流れ(レッド->修正->グリーン)で再度修正。

iconv(翻字(言語学において特定の言語を記した文字表記を別の文字による表記に移すこと))についてのコラムも記載されているのでついでだからそれもやってみた。
だが、ここで問題が。。。
コラムでは"Développeur Web"のテスト結果は"developpeur-web"となっているがテストが通らない。
で、調べてみるを"Développeur Web"にiconvを実行すると"D'eveloppeur Web"となってるため"'"が"-"に置き換えられてテストを失敗している。
しょうがないので"Développeur Web"のテストの期待値を"d-eveloppeur-web"にしてテストを通した。

 さらにこの後、Doctrine モデルクラスのユニットテストの説明
まずはテストに使用するDBの作成とテスト用DBに接続するための設定の追加。
設定の追加は以下のコマンドの実行で完了するのでラクチン。
php symfony configure:database --name=doctrine --class=sfDoctrineDatabase --env=test "mysql:host=localhost;dbname=jobeet_test" root mYsEcret
Doctrine モデルクラスのテストにはDBに接続する必要があるのでセットアップ用のクラスを追加。
後は、SQL発行するコードを書いて、上記のユニットテストとほぼ同じ流れでテストを実行。
DB取得してのテストこれでいいが今回saveメソッドをオーバーライドしてるのでそれのテストも行う。
しかし、saveメソッドテストちょっとややこしくインサートするために値のセットが必要なので値をセットするためのメソッドを追加。
その後、ユニットテスト実行して、無事終了。

試しにJobeetJobクラスのカバレッジ測ってみたら100%じゃなかったので、勉強のつもりでカバレッジが100%になるようにテストケースを修正してみた。
100%じゃない理由は__toString・getPositionSlug・getLocationSlugがテストされて無いため、これらのメソッドのテストケースを追加して無事カバレッジも100%になりました。
検索フォーム
カレンダー
03 | 2017/04 | 05
- - - - - - 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 - - - - - -
RSSリンクの表示
last.fm
twitter
リンク
ブロとも申請フォーム

この人とブロともになる

QRコード
QR
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。