Magento Advent Calendarもいよいよ最終日、25日目です。
最終日の記事は「Magento1.xのビギナー開発者がよくハマるポイント」です。

Magentoは1系も2系もかなり大きなアプリケーションで、ビギナー開発者は様々なポイントで躓きます。
私がこれまで目にしてきたビギナー開発者がよくハマるポイントをご紹介したいと思います。

クラスの別名でハマる

Magento1.xの場合、ModelもBlockもHelperも呼び出しの際には「別名」を使います。
例えば、「Mage_Catalog」の場合は別名として「catalog」を使います。別名は全てconfig.xmlで定義するのですが、なにゆえ別名を定義して記述しなければならないかが最初はピンと来ないため、ハマります。

何のために別名を定義するのか

Magento1.xのrewriteは、別名をキーとして実際のクラス名を探しに行きます。
rewrite自体はconfig.xmlで定義するのですが、別名がキーになるので、別名がどこからきて何を意味しているかを理解していないと、別名の存在意義が理解できません。(ただし、Magento2では別名が冗長な表現であるとして廃止されていますが・・・)

別名はレイアウトXMLでも利用されているので、Magento1.xの開発では避けて通れない道になっています。

XMLの定義でハマる

Magento1.xも2にも様々なXMLファイルがありますが、このXMLを記述するためのスキーマ定義でハマります。
1.xは特にXSDやDTDといったXMLファイルの構造を定義するものがないため、何が正解なのかわかりにくかったり、必須属性や必須タグがわからないという問題がありました。

XMLを読んでいる処理を解析して、どんなタグや属性が使えるかを調査したのは今となっては良い思い出ですが、初心者にとっては本当にMagentoのXMLファイルの定義方法がわからずにハマるのは致し方ない側面があります。

Magento2ではXSDファイルが全てのXMLファイルに定義されるようになったため、PHPStormなどの統合開発環境を利用すれば、どの階層にどのタグを書けばよいか、あるいはどの属性を書けばよいかをアシストしてくれます。
ですからMagento2の開発では統合開発環境は必須であるといえます。(vimやemacsで同等の環境を作れる方は、もちろんそちらをお使いいただいたほうが慣れが効いて効率が良いと思います)

テーマの設定とフォールバックでハマる

Magentoの場合、テーマの設定が若干わかりにくいところがあり、最初の設定でハマることがあります。
Magentoの場合は、

  • テンプレート
  • スキン
  • 翻訳

を1つのストアビューに対してそれぞれ設定できます。
これにフォールバック(テンプレートや画面定義がない場合に親階層のものを利用する機能)先が指定できますが、Magento1.8までと1.9以降とではテーマのフォールバックの仕組みが多少異なります。

1.8まではtheme.xmlの指定ができずカスタマイズがやりにくいシーンも有りましたが、1.9以降であればtheme.xmlを使うことで、どのテーマでも親テーマに指定することができます。
そのため商用テーマやフリーのテーマをベースにして、最小限のカスタマイズでサイトをローンチできます。

ですがテーマの親子関係についての理解が不足していると、過剰にテーマをカスタマイズしてしまうので注意が必要です。

デバッグでハマる

Magentoの開発で今も昔も変わらないのは、「安易にvar_dumpやvar_exportしてはいけない」というものがあります。

これはMagentoの変数がオブジェクトであることが多く、var_dumpやvar_exportが再帰的に値のダンプをしてしまうためにメモリ溢れや果てしないダンプによって処理が終わらないということが起きます。
そのため、Magentoのデバッグをする際には、どこにデバッグ出力を設置するか、あるいはある値のどの部分をダンプするのかをよく考える必要性があります。

これを知らないと開発時にハマってしまうことがあります。

おわりに 

どうしてもMagentoの開発には英語から来た単語が多い傾向にあります。
また、他のパッケージでは見られないような概念・実装があるために困惑する事が多いようです。
(実際私も最初の頃は戸惑いました)

ただ、それらを乗り越えていくと、ある時点からは抵抗がなくなります。
要はMagentoで開発をしていく場合、その時点を乗り越えられるか、耐え切ることができるかということが重要になると思います。
それはMagento1.xでも2でも変わりません。学習曲線の一定の水準を超えられるかどうか。それにかかっています。