CrocosSecurityBundleリリースしました

GitHub - crocos/CrocosSecurityBundle: A symfony bundle provides a simple way to manage auth with annotation.

クロコス で使っている認証管理のバンドルを公開しました。(正確には最近使い始めた)

元々SecurityBundleを拡張してFacebookPHP SDKを使った認証の仕組みとか作っていたのですが、正直複雑すぎて管理してられないので、今後のことを考えてシンプルなものをさっと作ってみました。

現状の機能はREADMEに書いてあるとおりで、基本的には認証が必要かどうかを判定する程度のものしかできてないです。ですがまあ、普通にやる分にはこれくらいで十分かなとも思います。

あとはまあ、必要な機能ができたら作るとして、SecurityContextをTwigのグローバル変数に組み込んだり、認証を一切しないようにするオプションくらいは早めにつけようかなと思います。

PHPカンファレンス2011のSymfony Updateの発表資料

PHPカンファレンス2011のフレームワークアップデートで、Symfonyについて発表しました。

今回は機能の解説とかではなく、DDDなどの紹介をしました。様々なフレームワークがありますが、僕たちエンジニアにとってフレームワークを覚えることが仕事ではなく、システムを開発することが仕事ですよね。

どんなフレームワークを使おうと揺るがない知識・技術を身につけるべきだと思っています。DDDやデザインパターンがいい例です。Symfonyの背景にはそういった技術がありますが、それはフレームワークを学ぶと言うより、技術者としての本質的なレベルアップだと考えています。

だからこそ、今日は機能の解説などを行ってフレームワークとしての優位性を解説するのではなく、DDDの紹介を行いました。機能については、今日の話を聞いていた感じだと大体Symfonyにも実装されているなという感じです。

というわけで、そういった思想のもと書いている本が「実践PHP」なわけです。それはまた後日。

      • -

ちなみに去年の発表資料。

PHPカンファレンス2010の発表資料 - ゆっくり*ゆっくり

Monologのfingers_crossedがようやくわかった

MonologはSymfony2でも利用されている高機能なロガーライブラリです。PythonLogbookというライブラリをPHPに移植したものだと記憶しています。

Symfony2の app/config/config_dev.yml では、Monologは次のように設定されています。

monolog:
    handlers:
        main:
            type:  stream
            path:  %kernel.logs_dir%/%kernel.environment%.log
            level: debug

これはそのまま、debug以上のレベルのログをpathに指定したログファイルに書き出すという指定です。config_dev.phpなので開発環境用の設定ファイルですが、ログはすべて書き出すという設定です。

これとは別に、運用環境用の config_prod.yml では次のように設定されています。

monolog:
    handlers:
        main:
            type:         fingers_crossed
            action_level: error
            handler:      nested
        nested:
            type:  stream
            path:  %kernel.logs_dir%/%kernel.environment%.log
            level: debug

nestedという部分はconfig_dev.ymlのものと同一です。それとは別に、fingers_crossedという typeのハンドラーが設定されています。今までこのfingers_crossedというのが何かよくわからなかったので調べてみました。

上記のconfig_prod.ymlの設定だとどのようになるかというと、ログレベルがerror以上のログが記録された場合のみログを出力するが、そのときはそれまでに記録されたdebug以上のすべてのログが出力されます。

FingersCrossedHandler: A very interesting wrapper. It takes a logger as parameter and will accumulate log records of all levels until a record exceeds the defined severity level. At which point it delivers all records, including those of lower severity, to the handler it wraps. This means that until an error actually happens you will not see anything in your logs, but when it happens you will have the full information, including debug and info records. This provides you with all the information you need, but only when you need it.

GitHub - Seldaek/monolog: Sends your logs to files, sockets, inboxes, databases and various web services

従来のロガーでは、error以上と設定した場合、error以上のログのみが記録されます。しかし、エラーが出た場合はより詳細なログがみたいというものです。このfingers_crossedを用いると、エラーがあったプロセスはデバッグ情報も含めたログが残るため、エラーの追求などが容易になります。

今までは運用環境ではデバッグログなんかは出力しないようにしていましたが、それでもログを残すように設定しておいて損はないなと思いました。

24歳になりました

今日で24歳になりました。

23歳は、オブジェクト指向を基礎から学び直したおかげでコードの質が上がったと思います。会社も作ったし、自分の中ですごく大きな1年でした。

24歳は、よりよいプログラムを書くために勉強を積み重ねていきたいと思います。あと、また本を書いているので、それも仕上げてしまいたいですね。

みなさま、今後ともよろしくお願いします。

あとウィッシュリストをはっておくのでこちらもよろしくお願いしますね!!!!

第4回Symfony2勉強会で発表しました

第4回Symfony2勉強会でSymfony2のフォームフレームワークについて発表を行ってきました。

symfony 1.xのころのフォームって正直柔軟性低くて使いづらかったのですが、大幅に改善されていたのでこれは多くの人に伝えねばなるまいと思い、40分まるまるフォームを解説することにしました。

フォームは最後にでき上がったコンポーネントなので情報も少ないのでFormコンポーネントに実装されている多くの機能を伝えようと思い、1つの部分に突っ込んで解説するよりは満遍なく解説する内容になっています。一人でも多くの方の参考になれば幸いです。

クロコス

クロコスに転職したことは前のブログにも書きましたが、色々な方とそれに関するお話もできたし、名刺もお渡しできたのでよかったなと思います。ただ、僕のミスで名刺を少なめにもってきてしまい、一部の方にお渡しできなかったのが残念です。また今度お渡しします。

所感

今回の勉強会は大盛況でしたね。中々濃い勉強会になるなと企画段階で思いましたけど、実際に僕自身もすごく刺激を受けました。なにより多くの方々に久保さんのお話を聞いてもらえただけでも、すごく意義のある勉強会になったのではないでしょうか。

会場を提供いただいたZynga Japanさま、運営活動を行っていただいたSymfonyユーザー会のみなさま、本当にお疲れさまでした。今後も力を合わせて盛り上げていきましょう。

Symfony2のリリースの話

どうやらβ4の後はRCがくるらしいですね。それまでに直したい点がいくつか。。。

  • [HttpFoundation] SessionStorageInterface::regenerate()の引数にtrueを設定する方法
  • [Validator] Traversableを実装したクラスへのPropertyPathの扱い
  • [Validator] validation.ymlを分割できるよう修正
  • [DoctrineBundle] EntityTypeに対するValidator(EntityChoice?)の実装
  • [DoctrineBundle] FormのDoctrineOrmExtensionなどがEntityManagerではなくRegistryを受け取るよう修正
  • [Doctrine] generate:entitiesした際に、元のクラスファイルのクラス定義前にuseがあると内容が二重に定義されてしまう
  • [Doctrine] 継承のマッピング定義をYAMLで行った場合に、Entityを新規に生成しようとすると失敗する
  • [Doctrine] とりあえずYAML定義を元にしたEntityの自動生成が色々いけてない
  • [Doctrine] ORDER BY RAND()の実装(ORDER BYに関数が書けない問題)

多くがDoctrine絡みですが、がんばります・・・。

アシアルを退職しました

突然ですが、3月いっぱいでアシアル株式会社を退職しました。

アシアルには2006年の12月にアルバイトとして入社し、2011年の3月まで、かれこれ4年以上勤めたことになります。辞めることを決める前までは、まだまだアシアルでやりたいと考えていました。僕をここまで育ててくれたのはアシアルですし、今度は自分が引っ張っていく立場にならなくてはいけないと思っていました。

退職することになった理由は起業です。様々な縁があって株式会社クロコスという会社を立ち上げることになり、今この機会を逃してはいけないと思ってアシアルを離れることを決断しました。

エンジニアとして初めて勤めた会社がアシアルで本当によかったと思っています。アシアルにいたからこそ得られた縁もありましたし、アシアルにいたからこそ学べたものもたくさんありました。コミュニティ活動などにも積極的でしたし、アシアルで働けたことは今でも誇りに思っています。長い間、本当にありがとうございました。

これからはクロコスの一員として尽力してまいります。