ぷぎがぽぎ このページをアンテナに追加 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 を試してみましょう。

2012-12-01

[] Symfony を楽しむためのポイント - Symfony Advent Calender 2012 1日目 -

この記事は Symfony Advent Calender 2012 の1日目の記事です。

全体のカレンダーは Symfony Advent Calender 2012で見ることができます。

Symfonyの基礎

まず最初に、Symfonyをあまり知らない方のために簡単に特徴をまとめます。

Symfony はフランス Sensio Labs社 が開発するオープンソースのPHPウェブアプリケーションフレームワークソフトウェアです。 2007年にバージョン1.0が公開されて以降、大規模なサイトを含む多数のウェブサイト、E-コマースサイトで利用されてきました。2012年12月1日現在の最新版は 2.1.4 です。

日本国内では日本Symfonyユーザー会で翻訳や勉強会を行なっています。

Symfony の開発は github で開発が行われており、PHPに分類された世界中のリポジトリの中では hiphop-php の次に2番目に注目を集めているリポジトリです。

とはいえ日本語の情報をあまり見ないので、その部分もふくめて Symfony を楽しむポイントを書いて行きたいと思います。

Symfonyはモデルには無関心

SymfonyはWebアプリケーションフレームワークです。関心があるのは、コントローラとビュー *だけ* です。

あなたが開発しようとしているドメイン部分(モデル)については全くもって関心はありません。

ドメイン部分については自分の好きなように開発することができます。

他のよくあるPHPのフルスタックフレームワークはモデル部分を作成しようとすると、class User extends FrameworkModel のようにフレームワークに依存したコードになってしまったりしますが、Symfonyではそもそもモデルは関与しないので、フレームワークに依存せずに、ドメイン部分を育てていくことが自然にできます。

この部分はテストでも地味に影響してきます。たとえば、モデルにテストコードを書くことを考えてみましょう。さきほどのような extends が必須なモデルクラスのテストコードを書くことはフレームワークの基底モデルクラス(FrameworkModel)に依存しているので、本来気にしなくてもよいフレームワークのクラスをテストとの依存を何らかの方法で解決しなければなりません。

ドメイン部分をアジャリティに開発したい場合は Symfony はとても優れているとおもいます。

逆にいうと、ドメイン部分はあなたが正しく設計していかないと、簡単に廃れてしまいます。そのための知識が要求されるということになりますが、この知識はフレームワーク限定の知識ではありませんし、これからのエンジニアとして必要とされる知識なので、Symfony を使ってフレームワークに限定されないエンジニアとして必要な知識も勉強できるとも言えます。

Symfony Componentの存在

SymfonyはSymfony Component を組み合わせたフルスタックフレームワークです。Symfony Componentとは単なるライブラリ群です。

Webアプリケーションで必ず必要となるRequestやResponseをオブジェクトで扱えるようにしたHTTP Foundation

コンソールアプリをPHPで作るときに便利なConsoleなどがあります。

自分が見ているOSSの中ではテストコードも比較的しっかり書かれつつコミュニティベースで開発されているライブラリだと思います。

実際に、Symfonyそのものではなく、Symfony Componentの一部を使って別のフレームワークを開発しているプロジェクトもあります。

その代表的なのがSilexという、RubyのSinatra風にアプリケーションをPHPで構築できるフレームワークです。

私自身もCodeIgniterの既存プロジェクト内でSymfony Componentを組み合わせて使っていたりもします。

これらのコンポーネントのドキュメントから読み始めてみるのも面白いとおもいます。

とりあえず十分すぎるドキュメント

本家の公式ドキュメントはPDFでダウンロードできるのですが900ページ以上あります。なので、ググる前にPDF内検索することで大体やりたいことを見つけることができます。

how to 的なブログが少ないのもその影響があるのかもしれません。

また、日本語訳は全然追いつけていませんが、それでも多くのドキュメントやチュートリアルがオンラインで見ることができます。

海外ではカンファレンスも多く開催されており、そのときのセッションの多くが動画で見れるようになっています。

自分自身も全部を読み切れていない充実ぶりです。

また、翻訳作業については随時募集していますので、読むだけではなくコントリビューターとしても楽しむこともできます。興味がある方は日本Symfonyユーザー会のMLに声をかえてください。

難しいと感じるかわかりやすいと感じるか

SymfonyでWebアプリケーションを開発するときに、DDD(ドメイン駆動設計)に関する知識が必要になってきます。

また、普通にDIも使うことになります。

でも、このあたりの知識が不足しているものはアプリケーションが *ただ動く* だけで、ドメイン領域を反映できていないものになり、結果として普通のテストすらも書けなくなってしまいます。

PHPは歯ブラシですが、偉大な先人たちの経験を活かした普通のWebアプリケーションをPHPでも書くことができるのです。

デザインパターンを勉強した結果、チームが「ここはシングルトンパターンで...」というだけで共通認識を持てるのと同じですよね。「Userはエンティティだから...」というだけで共通認識が持てて開発できるのですから。

覚えることは多いかもしれませんが、フレームワークを使う以上フレームワークの知識が必要なのは避けれませんし、それはどのフレームワークでも必要な初期コストです。

どうせ勉強するなら今後も自身のキャリアで活かすことができる領域について勉強していきたいですよね。Symfonyはそういったエンジニアの方が楽しめるフレームワークだと思います。


とはいえ、Symfony自体の設計でまだまだイケていない部分もありますが、そういった部分と向き合いながらSymfonyにフィードバックをしてSymfonyを進化させることをコントリビューターとして楽しむというのが究極の楽しみ方かもしれません。

2012-04-24

[][] 4/25(水) 20:30〜 Symfonyしゃべりば - 春ですね - をust放送

春ですねー!開発してますかー?

f:id:brtRiver:20110425015404p:image

唐突ですが、明日夜に久しぶりにSymfonyしゃべりばUst放送をやります。

Facebook

Symfonyしゃべりば Ustream

Symfonyしゃべりばとは、Symfonyのことも話ながらお酒のみながらゆるーい会話をただ流すだけのUst番組です。過去5回ほど?やってますが半年ぶりぐらいになります。


今考えいてるお題は以下の感じ

今のところ、私(@brtriver)と@ganchikuが渋谷某所から飲みながらダラダラ放送する予定です。そうです。これまでのようなSkypeだけでのオンライン居酒屋とちょと違います。とはいえ、いつものようにSkypeで会話に参加もできるようにしたいし、どうせなら某所に飛び入り参加してもらってもOK。

あ、いつもは朝まで延長線で放送してたりしましたが、多分今回は2時間程度で終わるはず。多分。

というわけで、明日の夜時間がある人はいっしょに楽しみましょー!!

2011-05-26

[][] symfony 1.4 で簡単メンテナンスモード

inspired by

流行に乗っかって symfony 1.4 でもやってみます。

メンテナンス画面を用意する

プロジェクトルート/config/unavailable.php にHTMLファイルを用意します。

拡張子はphpになっていますが、素のHTMLとして書いた方がいいです。

./config/unavailable.php
<!DOCTYPE HTML>
<html lang="ja-JP">
<body>
  <h1>メンテナンス中</h1>
</body>
</html>

設定でロック機能を有効にする

標準の設定だと、このunavailable.phpを利用する機能は無効になっています。

なので、以下のようにアプリケーションに設定を書いておきます。

apps/アプリケーション名/config/settings.yml
all:
  check_lock: true

コマンドで切り替える

あとは、コマンドを叩くだけです。

メンテナンス画面に切り替える場合
$ ./symfony project:disable prod

タスクに渡す引数は環境名です。通常は本番環境だと思うので、標準だとprodになります。

また、環境名の後にアプリケーション名を渡せば特定のアプリケーションだけメンテナンス画面にすることもできます。

メンテナンス画面を終わる場合
$ ./symfony project:enable prod

これでunavailable.phpを呼び出さなくなります。

ドキュメントでは

- Symfony

あたりが参考になります。

フレームワーク側で用意されているので簡単すぎます。

この仕組みを知っているかどうかというところだけですw

時間指定でメンテナンス画面に切り替える

CakePHPのメンテナンスプラグインは時間指定できて便利だと思ったのでsymfonyで同じことを簡単に実装する方法を追記です。

といっても、タスクが用意されているのでこのタスクをコンソールから指定時間にたたいてくれるようにatコマンドを使うだけです。

$ /PATH_TO_SF_PROJECT/symfony project:disable prod |at 21:00 12/31/2011

こうしておけば、指定時間にメンテナンス画面に自動的に切り替わります。symfonyは直接関係ないですがタスクで用意されているのでできる便利機能ですね。

[追記] ドキュメントへのリンクと説明を追加しました。

[追記2] この機能を有効にするためにsettings.ymlへの設定が必要だったのを忘れていたので追記しました。Thanks to @jiskanulo

[追加3] CakePHPの場合へのリンクと指定時間にメンテナンス画面にする方法を追加

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 |