ぷぎがぽぎ このページをアンテナに追加 RSSフィード

2013-05-29

[] Symfony 勉強会 #8 を開催しました

5/25(土)に 半年ぶりとなる Symfony勉強会 #8 を VOYAGE GROUP のajitoにて開催しました。

参加者の方の感想などのブログも上がっています。私はスタッフ側として今回の勉強会を振り返りたいと思います。

f:id:brtRiver:20130529235736j:image

Symfonyユーザー会として今回の勉強会の目標は "Symfonyを触ってみたい人にSymfonyの魅力を伝えつつ実際に触れてもらうこと"でした。

過去開催した勉強会はどちらかというと、色々詰め込みすぎて朝早くから夜遅くまでのスパルタワークショップになったりと準備するのも大変だったり、参加者の疲労感もかなりのものになっていました。

そして、回数を重ねて行くと内容もどんどん濃いものになってきました。

今後もできるだけ勉強会の間を開けずに小さく開催することができればということを考えて、Symfonyをなんとなく知ってて触ってみたい人を対象に午後から5時間程度での開催としました。

最終的に30人弱の方が参加されました。最近の勉強会ではキャンセル率が高くて場合によってはキャンセル率が50%を超えたりすることもあるのですが、14%程度とかなり皆さんが楽しみにされていたんだろうなと思いました。

最初のセッションは基礎編と最新情報の2つ

Symfonyはよく難しいと言われますが、たぶん他のフレームワークとそんなに変わらないと思います。

Symfony独特な技術を駆使するわけでもなく、古くから実績のある一般的なMVCのような関心事の分離をごく普通に行う素直なフレームワークです。

そして、さらに開発者が開発や運用を行いやすくするための仕組み (コマンドやProfiler) が準備されていたり、何時ごろ何をリリースするかのスケジュールだけでなく、「後方互換をどこまで維持しようとするか、BCがあってもどう気づくことができるようにするか」など、symfony1系のころからの運用経験を存分に活用しコミュニティーでSymfonyの開発を進めているという特徴は他のフレームワークより一歩先を行っていると思います。

だからといってSymfonyが一番優れているということを言いたかったのではなく、Symfonyの開発で必要な知識は言語を超えてWebアプリケーションの開発において活用できるものが多いので、食わず嫌いにならずにぜひ触れてみてその世界を体験してもらいたかったということでした。

実際、私はSymfonyだけで開発しているわけでもありませんし、他のフレームワークだったとしても、言語だったとしても関心事の分離を意識した設計にすることや継承地獄にならないための手法やMockを使った軽量なユニットテストを書くことなどSymfonyを使ったときの開発と同じ手法をやっているだけだなと思います。

後藤さんには具体的な内容のリクエストはしていなかったのですが、まさに伝えてほしかった内容でさすがでした。

PHP Mentors -> 第8回 Symfony勉強会参加&基礎知識セッションスライド等

今後やりたいこと

今回のような勉強会でもまだ規模が大きいかなと思うので、もう少し軽めの勉強会を8月ぐらいでできればなと思っています。

また、Symfonyユーザー会では温泉旅行もあると思うので興味あるかたは https://groups.google.com/forum/?fromgroups#!forum/symfony-users-ja に参加を :)

謝辞

スタッフのユーザー会の皆さん!とくに今回講師をやってくださった @okapon_pon さん、いつも無茶ぶりにも関わらず刺激あるLTをしてくださる @koriym さん、会場スタッフ業でおいしいゼリーの差し入れまでしてくださった @kuromatu さん

そして、参加してくださった皆さん。ありがとうございました。

さいごに

Symfonyとは関係ないですが、現場で既存コードと戦っている人たちが集まってどうやって目の前のコードをより良くしていくかという感じの話を CodeIgniter Talk #01 - CodeIgniter Talk | Doorkeeper で少し話します。

興味があるかたは是非参加してみはどうでしょうか?

2013-05-19

[] Symfony をしんふぉにゃん化 (2.3対応版)

2年前にかいてたこの記事のアップデートです。

Symfony2のエラーページのカスタマイズ - ぷぎがぽぎ

composerでインストールできるようになりました。

そして地味にまだリリースされていない2.3に対応すべくRC1で確認済みです。

ゆるふわ Symfony化

開発環境のエラーページ

f:id:brtRiver:20130519141628p:image

production環境でのエラーページ

f:id:brtRiver:20130519141113p:image

welcomeページは @tdakak さんが描いてくれたしんふぉにゃんがお出迎え

f:id:brtRiver:20130519141112p:image

参照: https://twitter.com/tdakak/status/332021029830533120

デモページ

f:id:brtRiver:20130519141109p:image

welcomeページ右下には日本語ドキュメントへのリンク付き

f:id:brtRiver:20130519141110p:image


composer でしんふぉにゃん化

あなたの Symfonyプロジェクトの composer.json に以下の1行を追加し composer.phar install するだけ

"require": {
    ....
    "symfonyan/acme-symfonyan-bundle": "dev-master"
}

AppKernel.phpでAcmeSymfonyanBundleを有効にする

if (in_array($this->getEnvironment(), array('dev', 'test'))) {
    ....
    $bundles[] = new Acme\SymfonyanBundle\AcmeSymfonyanBundle(); // <= 追加
}

symfonyanコマンドでインストール

$ ./app/console symfonyan:exception-install
$ ./app/console symfonyan:welcome-install

prod環境で反映されないとかはキャッシュが原因の可能性が高いので php app/console ca:c --env=prod を試してみましょう。

2013-05-04

[] Phalconでマイクロフレームワーク

久しぶりにPHPエクステンションで書かれた超高速フレームワークPhalconを見たら

  • 公式ページが見やすくなってた
  • バージョンが1.0.0になってた
  • annotationリーダーのライブラリができてた(そしてPhlconで使える)
  • Microというクラスがあり、マイクロフレームワーク風に書けるようになってた

と、相変わらず斜め上まっしぐらな感じがします。

マイクロフレームワークはルーティングだけ欲しいのなら選択肢としてありなきがします。

Phalconのことだからオーバーヘッドも少ないでしょうし。

というわけでGWで遊んでみたい人のためのやってみよう記事。

Phalconをインストール

たぶん一番難しいのはここだけ。

自分はmacのローカルに入れたので、以下のコマンドをぽちぽちたたいた。

$ git clone git://github.com/phalcon/cphalcon.git
$ cd cphalcon/build
$ sudo ./install

実際は複数のPHPのバージョンを入れている関係でinstallファイルに書かれているphpizeのパスを変更したり、--with-php-configの指定を変更して実行

コントローラーファイルを書く

requireなんていりません。だってPhalconだから。

  • index.php
<?php
$app = new Phalcon\Mvc\Micro();

$app->get('/', function () {
        echo "<h1>Welcome!</h1>";
    });

$app->get('/say/welcome/{name}', function ($name) {
        echo "<h1>Welcome $name!</h1>";
    });

$app->handle();

すっきり。

組み込みサーバーを立ち上げる

PHP5.4だよね?アプリケーションを書いたディレクトリで以下を実行

$php -S localhost:9999 

アクセスしてみる

ブラウザから以下のようなURLでアクセス。htaccessとか書いてないので、パスは_urlパラメータとして渡すのがコツ。

http://localhost:9999/index.php?_url=/say/welcome/brtriver

これは遊べそう。

マイクロな使い方のドキュメントは以下を参照。サンプルコードが多いからたぶん難しくないと思う。

さくらインターネットとかどこかのレンサパさん!

Phalconを標準で組み込んだPHPを使えるようにすると大ヒットするかもしれません。

まとめ

本当は BEAR.SundayルーターとしてPhalconを使えるようにしようとして久しぶりに見たのがきっかけだったり。腰据えてするならBEAR.Sundayのほうが面白いと思う。

あと、Silexの1.0がリリースされました。

5.3/5.4/5.5 どのバージョンでも動作します。また、5.4以上だとtraitで実装された機能も使えます。

これも要チェックです。

2013-05-02

[] downコマンドがなくupだけのDBマイグレーションツール Dbup

ビー・バップ・ハイスクールって知ってますか? Dカップって大きいですよね?

というわけで、超シンプルなDBマイグレーションツール Dbup を作ってみたので紹介。

Dbup

f:id:brtRiver:20130502213335p:image

インストールから実行までのデモンストレーション

dbup demo from brtriver on Vimeo.

特徴

  • 準備はdbup.pharをダウンロードするだけ
  • up コマンドしかありません。down コマンドは存在しません
  • マイグレーションの記述は親しみあるSQLそのままです。ORMやDSLを新しく覚える必要はありません
  • PHP標準のPDOクラスを利用しています
  • マイグレーションのステータス管理のためにデータベースに専用のテーブルを作る必要がありません
  • 設定ファイルはiniフォーマットです。PHPに依存しない一般的なフォーマットです。
  • PHP5.4以上。5.3.xでは動きません。

なぜDBマイグレーションツールを作ったか

DBマイグレーションはデプロイ自動化や継続的インテグレーションにおいて一般的に使われるようになってきました。PHPのDBマイグレーションツールとしてはDoctrine2 Migraionがすぐ思い浮かびます。フレームワークに特化したORMの一部として用意されているもの( CakePHP Migrations PluginとかCodeIgniterのマイグレーション )もあったりします。

これらは、ORMの機能の一部だったりするので、ORMの使い方を理解している必要があったり、DSLを覚えたりする必要があったりと手軽さがありません。

DBマイグレーションはDBに対してSQLを発行するのがお仕事なので、アプリの言語とは同じである必要はありません。なので、MyBatis Schema Migration*1Flywayのようなツールを使うほうが導入が楽だったり再利用性が高かったりします。

ただ、これでもまだコストが高いと思っています。というのは、DBマイグレーションというとスキーマのバージョンをUpしたりDownしたり、または特定の時点のバージョンに戻したりというのができて幸せ!ということができるようになっているのですが、事実上Downや特定のバージョンにマイグレーションツールを使って安全に戻せることはとても至難だと思います。

たとえば、カラムを追加しデータがその新しいカラムに追加された時点でDownを実行してデータを消していいかどうかは場合によると思いますし、実際はアプリケーションもあわせてロールバックしなくてはならない場合もあります。

ソースコードと違い、DBマイグレーションは常に歴史を進めていく(Upしつづける)のも運用方法の1つだと考えます。

もし、Upして何か問題が発生した場合も、新しくSQLを用意しそのSQLを発行することで修正を行う方法です。

そして、このようにUpだけできれば良いシンプルなマイグレーションツールが無く、あれば良いよなぁってことで作ってみました。

ドキュメントに書いてないこと

  • 当たり前ですが、フレームワークとか全く関係なく、使いたいときに使えます。
  • PHP環境であれば、他言語のプロジェクトでも使えます。たまたまたPHPで書かれてるだけです。PDOのドライバが対応していれば大丈夫(なはず)
  • githubからcloneしてきて適当にカスタマイズし、php dbup compile すれば俺マイグレーション作れます
  • 実装は Symfony Component の Consoleですので、Symfonyのコマンドの一部として作り込むなんてのも簡単
  • 「とりあえず作ってみた」感が強いので、実プロジェクトで使うときは要注意です。(dev環境やpre環境など本番とは別環境で十分確認できるようになっている等)
  • バグ見つけたらPull Requestくだしあ

作ってすっきり。

2007 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2008 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2009 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2010 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2011 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2012 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2013 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2014 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2015 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2016 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |