Symfony2: よりかんたんになりました

by Fabien Potencier – April 27, 2011

最初のベータのリリースが近づくにつれて、開発チームの主な関心は新しいフィーチャを追加することから、既存のものに磨きをかけることに移り変わりました。 Symfony2 にはたくさんのすばらしいフィーチャが用意されていますが、ときに、コンフィギュレーションが複雑すぎると感じられたり、エラーメッセージがあまり親切でなかったりします。これらのイシューはさまざまなフラストレーションを生じさせる可能性があるので、開発チームはこれらの問題に大きな配慮をしています。最近、Ryan と筆者 (Fabien) はエラーメッセージを調整し、コードとコンフィギュレーションを簡略化することに時間を費やし、フレームワーク全体の整合性を高めました。ゴールは学習曲線をゆるやかにし、日々の活動に必要な作業をシンプルにすることです。これまで開発チームが成し遂げてきたことのいくつかの例を見てみましょう。

Twig のエラーメッセージの改善

簡潔な構文と自動出力エスケーピングというすばらしいフィーチャのおかげで、Twig は時間を大きく節約してくれます。PHP で書かれた「古い」テンプレートを編集する必要があるたびに、これがレガシーコードに関することであることに本当にうれしく感じます (そしてそう思っている人はあきらかに筆者だけではありません)。遭遇するかもしれない1つの問題はテンプレートのコンパイルもしくは実行時においてうまくゆかない場合です。例外メッセージは問題が発生したテンプレートの名前や行を言及しないことがあります。もちろん、PHP のスタックトレースにはキャッシュずみの PHP ファイルに関する情報だけしかありません。このことによってデバッグが必要以上にむずかしくなります。これは最近になって「修正」されました。現在、Twig はテンプレートファイルのどこでエラーが発生したのか一生懸命伝えようとします。また、全体として関連性のない話ですが、PHPStorm が Twig をネイティブにサポートするようになりました。

コンフィギュレーションのエラーメッセージの改善

上述したことはコンフィギュレーションのエラーメッセージにもあてはまります。ここでは、Twig のテンプレートの代わりに設定ファイル (XML もしくは YAML 形式) を考えてみましょう。たとえば、サービスのなかで定義されていないパラメータを使おうとすると、次のエラーメッセージが示されます。

The service "%s" has a dependency on a non-existent parameter "foo".

そして古いメッセージは次のとおりです:

You have requested a non-existent parameter "foo".

新しいメッセージはあなたが探す必要のあることを即座に伝えます。

Doctrine のコンフィギュレーションの簡略化

大半のプロジェクトは1つのデータベースだけを使います。しかし Doctrine のコンフィギュレーションの構文は複数のデータベースコネクションを管理できるようにする必要がある場合に合わせて「最適化」されています。このことによってコンフィギュレーションが冗長になり、理解しずらく、教えずらくなっていました。

---
doctrine:
    dbal:
        connections:
            default:
                dbname:   dbname
                user:     root
                password:

本日をもって、データベースコネクションが1つだけ必要な場合、シンプルになった次の構文を使うことができます。

---
doctrine:
    dbal:
        dbname:   sfweb
        user:     root
        password:

ORM のコンフィギュレーションを修正する作業はサードパーティのバンドルを追加するたびに苦痛になっていました。Doctrine のマッピングコンフィギュレーションにそれを追加したことを覚えていなければならなかったからです。そのことを忘れてしまうと、エラーメッセージを見ても、修正する必要のあることの理解の助けにならなくなります。エンティティマネージャを1つだけを使う場合 (繰り返しますが、これがもっとも共通のユースケースです)、すべてのバンドルのマッピングコンフィギュレーションを自動的にロードするよう Doctrine に指示することができます。

---
orm:
    auto_mapping: true

念のため記しておくと、「古い」ORM の最小のコンフィギュレーションは次のとおりです。

---
orm:
    entity_managers:
        default:
            mappings:
                BlogBundle:

吉報は複数のデータベースコネクションもしくは複数のエンティティマネージャが必要なまれな機会があるときに古い構文を代わりに使うことができることです。この記事は日々の活動で開発チームが行っていることのほんの一例です。もう1つの吉報はあなたがフレームワークを改善するために開発チームを支援できることです。エラーメッセージが明確ではない、もしくは構文が扱いにくいために、壁にぶち当たるとき、開発チームに教えてくださいますようお願いします。Symfony の開発者メーリングリストにメールを書いていただければ、開発作業をやりやすくするために開発チームは一丸となって取り組みます。数週間のうちに似たようなさまざまな変更がなされることをご期待ください。

インデックス

Document Index

関連ページリスト

Related Pages

日本語ドキュメント

Japanese Documents

リリース情報
Release Information

Symfony2 に関する情報(公式) Books on symfony