コンクリートファイブジャパン 菱川です。
concrete5 でカスタマイズを行う際、「コアを改変しない」というのがルールです。
このルールは concrete5 に限らず、オープンソースプロダクトをカスタマイズする際は、どのプロダクトを使っていても耳にするフレーズかと思います。
concrete5 のレガシーバージョンでは、concrete フォルダ内のファイルをひとつ上の階層に複製すると、そちらが優先されるというオーバーライドの仕組みがあり、コアファイルをカスタマイズする場合は、元のファイルには手を加えずに、オーバーライドしたファイルを変更するというルールになっていました。
バージョン7になっても、ブロックのテンプレートやJavaScriptなどは、ひとつ上の階層への移動ではなく concrete フォルダから階層構造を維持して application フォルダに移すようになったというルールの変更はあるものの、以前の通りオーバーライドが使えます。
しかし、concrete5 のコアAPIのカスタマイズを行いたい場合は、オーバーライドの仕組みは廃止され、新しい柔軟なサービスプロバイダ(IoCコンテナ)とファサード(Facade)を使うようになりました。この2つの仕組みは、現在開発者から非常に人気の高いPHPフレームワークの「Laravel」から輸入されました。これらのおかげで concrete5 のカスタマイズはコアを改変せずとも、相当深いところまで安全かつ柔軟に行うことができるのですが、concrete5 のソースコードを追いかけるのを難しくしている要因でもあります。今日はこの2つについて簡単に解説してみます。
サービスプロバイダ(IoCコンテナ)とは
concrete5 のコアのテンプレートを見ていると、下記のようなコードが含まれていることがあります。