【バックエンド初心者向け】初めてPHPのフレームワークを使う時に知っておくと良い事
みなさん初めまして。ゲーム大好き人間のmackyです!よくsteamのゲームを動画配信したりしています。最近はMGSVが熱い!
前職はHTMLをガリガリ書きながらサイト制作を行っていましたが、今年の6月にソニックムーブに入社してからはフレームワークを使って開発したり環境構築したりとほぼ知識0からバックエンドをやっています。
そんなバックエンド初心者な僕ですが、フレームワークに興味あるけど実際どうなんだろう、という方向けにフレームワークの基本的な部分をお伝えします。
PHPフレームワークを使って開発する
フレームワークとはPHPで開発するにあたって、よくある機能や実装が予め用意されているアプリケーションのひな形のようなものです。いろいろな種類があってフレームワーク毎に得意としているものが違います。
僕は以前、PHPでお問い合わせフォームを作った事があったのですが素のPHPで開発するのとフレームワークで開発するのは全くの別物でした。
ちなみに弊社では主にphalconというフレームワークを使用して開発を行っています。特徴は実行速度が速いという点です。phalconを例にフレームワークの理解を深めていきましょう。
MVC
ざっくり言うと開発の際に効率よく開発出来るよう考えられた考え方の一つです!
- Model…いろいろな処理を記述
- View…表示を行う
- Controller…モデルとビューをコントロールする
この3つを組み合わせてMVCと呼びます。多くのフレームワークはこの考えに則って作られています。例として、WEBサイトではどのようにMVCが使われているのかを見てみましょう。
- ユーザーがお問い合わせフォームからデータを送信。
- 送信されたデータはサーバに届いてからどんなデータか調べられ、お問い合わせフォームのデータだ!と判断されコントローラからモデルに渡される。
- モデル内でいろいろな計算をしてこのデータは不正なものではないという事がわかったのでデータをDBに格納して結果をコントローラに返す。
- コントローラはビューに「送信完了という画面を出せ」という命令を送りユーザーの前には「送信完了」という画面が表示される。
このような構造で作ろう!というのがMVCの思想です。
何故MVCを取り入れるのかというと、この構造だと普通にサイト内にPHPを直打ちするよりもメリットが多いからです。
機能が分割されるため、例えば、コントローラに変更があったとしてもモデルには影響はありません。
また、分割のされ方に規則性があるのでこの機能はどこに書いたかなというのも、書いた本人以外でもすぐにわかるので複数人で作成している時に非常に作業がしやすいでしょう。プロジェクトのみんなが各々のページに好きなようにPHPを書いたら、書いた本人しか分からなかったり、収集がつかなくなります。
MVCはオブジェクト指向を利用して、モデルはモデルのクラスを一箇所にまとめたりといったように各機能をクラスやメソッドとして実装しています。
ルーティング
フレームワークには、コントローラとURLを対応させるルーティングという仕組みがあります。
ブラウザから、このURLにアクセスしたらこのコントローラを起動するという対応表があって、それに書かれている内容をプログラムが読み取って都度必要なコントローラを起動してくれます。コントローラを動かす第一歩はURLを叩くことから始まるのです。
ORM(Object-Relational Mapping)
WEBサイトでDBを使用するのはよくある事です。
そのためフレームワークにはDBの使用を簡単にするためのORMという仕組みが用意されています。
ORMを使えば、DBの中身にPHPで簡単にアクセス出来るようになり、SQLをほとんど書かずにDBを操作することが可能です。
phalconだと、DBに対応したクラスが自動生成されて、コントローラで呼び出すだけで簡単に利用できるようになっています。
PDOを使ってDBのデータを全件取得
1 2 3 4 5 6 7 8 9 |
[sourcecode lang="php"] try { $pdo = new PDO('mysql:host=Host名;dbname=DB名;charset=utf8','ユーザー名','パスワード',[PDO::ATTR_EMULATE_PREPARES => false]); } catch (PDOException $e) { exit('接続失敗'.$e->getMessage()); } $items = $pdo->query('SELECT * FROM DB名'); [/sourcecode] |
phalconを使ってDBのデータを取得
1 2 3 4 5 |
[sourcecode lang="php"] $items = DB名::find(); [/sourcecode] |
だいぶ簡潔になったかと思います。
素のPHPでやっていると、DBのデータが必要な場合は毎回PDOで接続する必要がありますが、phalconだと特定のメソッドを呼び出すだけで接続から実際にデータを取得するまでやってくれます。
テンプレートエンジン
モデルとビューを分離するためにテンプレートエンジンというものを使います。
これは、表示をするHTMLと、処理が書いてあるPHPを分離するために考案されたものです。
特殊な書き方をしてあるファイルに、コントローラからデータを渡すと表示や様々な処理を行ってくれます。
phalconではvoltという名前のファイルを書くことによって実装します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
[sourcecode lang="html"] {# index.volt #} <html> <head> <title>{{ title }}</title> </head> <body> <h1>{{ post.title }}</h1> <div class="content"> {% if post.content %} {{ post.content }} {% endif %} </div> </body> </html> [/sourcecode] |
例えば、voltはこのように書きます。{{ title }}の部分はtitleという名前の変数をコントローラから受け取って表示します。
構文を扱うことも出来て、ifやforeach等の基本的な構文が使えます。
以上です。大体フレームワークってこんな感じといった雰囲気くらいはつかめたでしょうか。
文中ではphalconでの実装の仕方でしたが、いろんなフレームワークで共通の概念や機能をお伝えしました。
フレームワークによって実装の方法は変わりますが、大体のフレームワークで用意されているものなのでフレームワークを使う時は思い出してみて下さいね。
拙い文章でしたが、最後まで読んでいただきありがとうございました!