PHPに限らずJAVAなどにもあるようですが(Strutsなど)私はPHPしか使ったことがありません。それを背景に説明してもらえるとありがたいです。
みなさんよろしくお願いします。
みなさんが概念を説明されているので、最近初めて使ってみた実感を書いてみます。(使ったのは上でtokyosmashさんがあげられている[[Ethna]]です。なのでこれに沿って記述します)
良い点
- コマンド1つでクラスやらHTMLテンプレートやらを生成
- 入力フォームの定義を書くだけで入力チェックやデータの引継ぎをしてくれる
- 画面遷移がわかりやすい(上であげられていますが、コントローラーで管理しているので)
- HTMLとPHPなどのプログラムを切り離せるので、デザイナーがいじり易い
- コードが綺麗に書ける(重要)
悪い点
- 構造や仕組みを覚えるのに時間がかかる
- 万能ではないので手を加える必要がある(例えば、ライブラリで用意されているもの意外でバリデーターが必要な場合は自作で対応)
- 現段階では出来ることに限りがある(DBクラスなんかの機能制限があったりします)。
- フレームワーク自体にバグあった場合大変
初めは「こんなのベタに書いたほうが早いじゃん」とか思うかもしれませんが、個人的にはデバッグとかも含めるとフレームワークを使ったほうが早い気がします。
保守性はかなり高いんじゃないかと。
一度ルールを覚えてしまえば、さほど考えずにガンガン作っていけると思います。あと、MVCモデルを覚える勉強にもなりますので、他のところでも言及されていますが初心者こそ使うべきではないかと。
PEARは私も使っていますが、EthnaはそのPEARを継承したクラスが沢山定義されています。
PEAR単体と異なるのは、PEARはincludeして関数呼び出すだけですが、Ethna(フレームワーク全般も含めて)はディレクトリの構造から記述の仕方まで結構かっちり決まってます。なので毛嫌いする人は結構いますね。自由に作らせろとか。
ちなみに私がフレームワーク検討段階で候補に挙がったのは
SymfonyとZendFrameworkとEthnaでしたが、Ethnaにした理由は
フレームワークとは、その名の通り開発を簡易化するための枠組みです。 データベースであるとか、スクリプトだかという言い方と同じように、フレームワークというソフトがあるわけではありません。
フレームワークは、よく使う機能をクラスとして用意しておく物です。 それを継承するなどして自分が欲しいように改良します。
例えば、掲示板では、書き込みや読み出し、検索などをフレームワークとして用意しておいて、実際の掲示板の見た目や、個別の掲示板毎の機能を個別に開発します。
ログイン処理も、ユーザIDとパスワードを受け取ってデータベースで正しければログインするなど、どこでも同じような処理ですので、フレームワークの仕組みを利用すれば、開発者はデータベースの設定であるとか、表示する画面であるとか、ログイン成功時・失敗時の遷移先だけを記述すれば良く、面倒なロジック開発が不要になります。
このような、開発を補助するための仕組みがフレームワークです。
http://e-words.jp/w/E38395E383ACE383BCE383A0E383AFE383BCE382AF.h...
回答ありがとうございます。
私はログイン処理についてはPearAuthを使っているんですね。だからログインのロジックを書いた事は無いのですが、フレームワークを導入すれば同じ結果になるという事でしょうか?最初からPearのAuthが導入されているというか。
うーんやはり使ってみないとイマイチつかめませんね。とりあえずEthnaを試してみようと思います。
フレームワークはどれも同じ訳ではありません。
つまり、印刷フレームワークであるとか、ネットワークフレームワークであるとかというように、目的に応じたフレームワークがあり、同じ目的でもいろいろなフレームワークがあって、それぞれ使い方(設定すべき項目)や、中身も異なります。
ですので、フレームワークを利用した開発を行う場合には、どのフレームワークが適切であるか、と言うのを選定します。
目的を達成するのに必要な機能のフレームワークが存在すれば、それを利用することで開発コストを削減できるわけです。
そして、デザインパターンとは、開発で良く用いられるパターンです。 例えば、ログイン処理はユーザIDとパスワードを入力して、データベースを検索して、ログイン可否を決定する、と言うパターンが一般的でしょう。 フォーム送信でも、フォームを表示して、入力項目が正しいか確認して、確認画面を表示して、送信する、と言うパターンが一般的かと思います。
このような形式化された問題の解決には、適切な解決方法が見つけられている物です。
このようなよく使われるパターンの適当な解決方法をまとめた物がフレームワークというわけです。
PHPは利用者も多いということで、フレームワークはたくさんあります。
フレームワークを一言で言えば雛形です。
ソフト開発において一からソフトを何度も作っていると、その作業に共通する部分がほとんどで同じ作業の繰り返しのことがあります。
その同じ部分をあらかじめ出来た物を使い、あるいは自動生成させて作業の効率化を図るという考えからフレームワークは生まれました。
最近のフレームワークはWebアプリケーションを構成するのに不可欠なコードを自動生成する機能を備えています。簡単なデータベース・アプリケーションならばコードを1行も書かずに作ることも可能です。
実際にWebアプリケーション・フレームワークを使って開発を行う際には、自動生成機能によってとりあえず動くものを手に入れ、必要な機能、例えばユーザー認証などの機能を付け足していく形で進めていきます。
フレームワークを理解する上で避けて通れないのが、MVCパターンです。Model,View,Controllerを示します。モデルはデータベース処理などを行う部分。コントローラはアプリケーションの制御を司る司令塔。ビューは見た目のWebページの部分です。
大きなサイトになるとリンク構造が複雑になりページごとの繋がりが分かりづらくなることがあります。コントローラはページごとの遷移をコントローラを経由することで集中管理します。
ビューは開発の効率化のため複数のWebページの共通部分からなる「テンプレート」を提供します。テンプレートはデータ部分と見た目を分離することで組織での開発のしやすいものとなってます。
モデルはデータベースを意識することなく開発できるように工夫されたものです。Ruby on Rails ではO/Rマッピングツールを内臓しています。O/Rマッピングツールを正しく使えばSQLインジェクションの対策としても有効です。
簡単なサイトならばフレームワークを使わずに自分で書いた方が早いということもありますが、ちょっと凝ったサイトを手抜きをして作れるということです。
>簡単なデータベース・アプリケーションならばコードを1行も書かずに
これは本当でしょうか?その辺りを実感できるサイトはあるでしょうか?
コントローラはなんだか便利そうですね。でも、実際に何なのかはよくわかりません。使ってみなければ理解できなさそうですね。
モデルがあればSQLをいちいち書かなくてもいいのでしょうか。
テンプレートとは、Smartyのようなものでしょうか?
うーん難しいですね。でも「MVC」というキーワードを知ることができました。ありがとうございます。
みなさんが概念を説明されているので、最近初めて使ってみた実感を書いてみます。(使ったのは上でtokyosmashさんがあげられている[[Ethna]]です。なのでこれに沿って記述します)
良い点
- コマンド1つでクラスやらHTMLテンプレートやらを生成
- 入力フォームの定義を書くだけで入力チェックやデータの引継ぎをしてくれる
- 画面遷移がわかりやすい(上であげられていますが、コントローラーで管理しているので)
- HTMLとPHPなどのプログラムを切り離せるので、デザイナーがいじり易い
- コードが綺麗に書ける(重要)
悪い点
- 構造や仕組みを覚えるのに時間がかかる
- 万能ではないので手を加える必要がある(例えば、ライブラリで用意されているもの意外でバリデーターが必要な場合は自作で対応)
- 現段階では出来ることに限りがある(DBクラスなんかの機能制限があったりします)。
- フレームワーク自体にバグあった場合大変
初めは「こんなのベタに書いたほうが早いじゃん」とか思うかもしれませんが、個人的にはデバッグとかも含めるとフレームワークを使ったほうが早い気がします。
保守性はかなり高いんじゃないかと。
一度ルールを覚えてしまえば、さほど考えずにガンガン作っていけると思います。あと、MVCモデルを覚える勉強にもなりますので、他のところでも言及されていますが初心者こそ使うべきではないかと。
PEARは私も使っていますが、EthnaはそのPEARを継承したクラスが沢山定義されています。
PEAR単体と異なるのは、PEARはincludeして関数呼び出すだけですが、Ethna(フレームワーク全般も含めて)はディレクトリの構造から記述の仕方まで結構かっちり決まってます。なので毛嫌いする人は結構いますね。自由に作らせろとか。
ちなみに私がフレームワーク検討段階で候補に挙がったのは
SymfonyとZendFrameworkとEthnaでしたが、Ethnaにした理由は
おお、丁寧にありがとうございます。
実際に使われている方の感想は本当に貴重だと思ってます。
>初心者こそ使うべき
実際にEthnaをインストールしてみました。ドキュメントを見ながら今まで作ったスクリプトをいじろうと思ったのですが、何をどうしたらいいのかさっぱり状態です。nonプログラマには結構敷居が高いです。腰を据えて勉強する必要があるようです。
ZendFrameworkが将来的にはデファクトになるという記事をよく見かけたのでぜひ使おうと思ったのですが、現時点で日本語ドキュメントは皆無に等しいので止めました。日本語でも理解に苦しむのに英語じゃ厳しすぎます。
Ethnaは日本人が作られているんですね。この世界では珍しいのではないでしょうか?Rubyなんて凄いものもありますけど、日本発ってあまりないですよね。応援する意味合いも込めてEthna使おうと思います。
それからまた質問になってしまいますが、フレームワーク(例えばEthna)とPearは併用可能なのでしょうか??
フレームワーク(例えばEthna)とPearは併用可能なのでしょうか??
実際にまだ併用していないのでハッキリとは言えませんが、恐らく使えるのではないかと思います。フレームワークに組み込むとなると面倒ですが、単体で読み込んで使う分にはどのフレームワークでも問題ないのではないでしょうか。
nonプログラマには結構敷居が高いです
確かにそうですね。私もまだ手探りしつつ、っていう感じです。
まずは簡単なログインとかフォームとかを1から始めてみると良いかもしれません。
チュートリアルもありますし
結局ZendFrameworkを勉強する事にしました。マニュアルを見てみるとAmazon・GoogleのAPI用の機能までありました。これは凄い・・。
MVCの基本的な概念は理解できました。実際にZendFrameworkを使ったシステムが公開されていたので中身を解析中です。
みなさんありがとうございました。
おお、丁寧にありがとうございます。
実際に使われている方の感想は本当に貴重だと思ってます。
>初心者こそ使うべき
実際にEthnaをインストールしてみました。ドキュメントを見ながら今まで作ったスクリプトをいじろうと思ったのですが、何をどうしたらいいのかさっぱり状態です。nonプログラマには結構敷居が高いです。腰を据えて勉強する必要があるようです。
ZendFrameworkが将来的にはデファクトになるという記事をよく見かけたのでぜひ使おうと思ったのですが、現時点で日本語ドキュメントは皆無に等しいので止めました。日本語でも理解に苦しむのに英語じゃ厳しすぎます。
Ethnaは日本人が作られているんですね。この世界では珍しいのではないでしょうか?Rubyなんて凄いものもありますけど、日本発ってあまりないですよね。応援する意味合いも込めてEthna使おうと思います。
それからまた質問になってしまいますが、フレームワーク(例えばEthna)とPearは併用可能なのでしょうか??