Laravelと構造
タグ: Laravel
もう一つ追加しておきましょう。3つ目の記事です。
どうしてこんな記事を書いたのかというところですが、Laravelの構造を説明する必要があり、最初はMVCで行う予定でした。本当に3週間ほど悩み、結局MVCでの説明を諦めました。皆さんご存知の通り、MVCは地雷です。どこをどう突っついても爆発します。
個人的にはLaravelがMVCであるかどうかなんて気にしていません。(どこかで聞いたセリフですね。)そう、個人的にはMVCを意識してなんていません。シンプルな方針として意識しています。「簡単な場合はコントローラにぶち込む、複雑なら独立させる。」、「ビューはBladeで書いとく。参照のためインスタンスもわたすど。」、「Laravelの仕組みを使う時も、できれば業務ロジックは独立させる。」単純でしょ。(ちなみに、業務ロジックは開発対象のロジックという意味で使っています。その他の言葉は意味が狭すぎて…)
前記事でSymfonyの開発者、Fabien Potencierさんの書いた記事を最後に追記しましたが、これは本当に追記です。説明にMVCを使わないという結論を出し、記事を書き、その後に検索で引っかかりました。そしたら、言いたいことが書かれていたので、紹介しました。
話を戻して、結論を出した決め手は今までの経緯です。MVCだとドキュメントで謳い、それを止め、modelsを削除し、構造を大きくかえました。もうドキュメントにはMVCだと言っていません。そうだとしたら日本語で言う「意図を汲む」ことができます。MVCだと言っているのは、他の人の記事を読みコピペしあっている新しい外人さんたちです。そもそもドキュメントに「構造」としてまとめられているのです。
また、そのほうが一般受けするという理由でModelsが復活し、そこにEloquentが置かれ、ドキュメントにMVC構造を持っていますと書かれたら、私もまたMVCですと説明します。それくらい軽い理由です。ただ、現状がそうでなければ、意図を汲みましょう。
MVCと同様に、「初心者」という言葉も曖昧です。PHPの初心者?フレームワーク初心者?Laravelの初心者?それともWebアプリ?プログラミング??
MVCと言う言葉は初心者に向けたものというより、既にMVCフレームワークを経験している人に向けたものであると考えるほうが妥当です。もしLaravelがMVCならば、Laravelを知りたいのにMVCを理解する努力が必要です。検索してみれば、他のフレームワークを勉強しようとしてMVC地獄に墜ち、やっと理解した人が自分なりに書いた記事が結構日本語でも見つかります。MVCだから初心者にやさしいわけでありません。チキンと考える人なら(つまりプログラミングできるひとなら)、MVCだと説明され、それを調べ、多用な定義に混乱するでしょう。理解した後、Laravelを見て「どうやってMVCにするんだ」と考えます。カンの良い人はModelsディレクトリを作成し、Eloquentモデルをぶち込みます。(モデル=ORM!?)まあ、大抵の人は悩むでしょう。
Laravelは既に初心者向きではありません。Laravel3は初心者向きでした。段々便利になり、段々複雑になり、段々初心者向きではなくなりました。その傾向に「人気を失うのではないかと」危惧したこともあります。最近、初心者向きなフルスタックといえばyiiでしょう。そして、Laravelはますます人気をあげています。
Laravelは開発者向きです。自分の開発スタイルが身についているとか、考えたり調べたりして、理解できる人のものです。その努力の結果、楽しい開発ができるのです。なにせ、はまるスイートスポットがたくさんありますからね。
追記:
恒例の追記です。やっとTaylorさん自身がモデルについて話しているのを思い出しました。自分で翻訳しておいて忘れていました。彼の電子書籍の中の「MVCはあなたを殺す」の一文です。ああ、高いですし、現状のバージョンにあっていませんから買わなくてもいいですよ。引用します。
「モデル」という言葉は余りにも曖昧になってしまい、意味はありません。もっと限定された語彙を使用し開発を行えば、明確に定義された責任を持つ、より小さくてきれいなクラスへ、アプリケーションを簡単に分割できるでしょう。