より読みやすいプログラムとするために
連載の最後となる本稿では、関数およびトランザクションの理解を深め、よりプログラムを安全に、読みやすいものにする方法を解説してきました。しかし、まだ学ぶべきことは多くあります。
PHPには、さらに「テンプレートエンジン」や「フレームワーク」と呼ばれるツールが存在し、それらをうまく活用することで、プログラムをより読みやすく、管理しやすい物にすることが可能です。本稿では詳細には触れませんが、これらのツールを用いてどのようなことが実現できるかを説明しておきます。
まず、これまで作成したプログラムの構造を見てみましょう。これまでは、次のようにHTMLとPHPが混在する構造でした。
このままでも関数等のテクニックである程度読みやすさを高めることはできますが、HTMLのところどころに、
<?php print( $cart["price"] ); ?>
といったPHPが混在するのは、あまり読みやすいものではありません。
また、Webサイトを制作する場合、1人でデザインもできればそれに越したことはないのですが、実際はプログラミングを担当するプログラマーと、HTMLなどでサイトの見た目をデザインするWebデザイナーが共同で開発することがほとんどです。しかし、プログラマーが記述するPHPとデザイナーが記述するHTMLが混在する状態では、同時に作業を進めることができません。できれば分業したいものです。
これがもしも、PHPとHTMLに明確に分離できていればどうでしょうか?
このような構造であれば、コードも読みやすく、分業もしやすくなりそうです。これを実現するのが、「テンプレートエンジン」です。テンプレートエンジンは、下図のようにプログラムとHTMLの橋渡しのような役割を担います。
同様のことは、「フレームワーク」を利用しても実現できます。フレームワークの中でも特に「MVCモデル」と呼ばれる構造に基づいているものを利用することで、単なるプログラムとデザインの分離だけではない、さらに洗練された役割分担を行うことが可能です。MVCモデルについてはCodezineの記事の「MVCとは」という章に分かりやすくまとめられているので、参照ください。
テンプレートエンジンやフレームワークを利用することで得られるメリットとして、次のようなものがあります。
- プログラムの見通しがよくなり、機能追加などの修正がしやすい
- プログラマーとWebデザイナーの分業がしやすい
- 複数のプログラマーがチームで開発する時にも分業がしやすい
- きちんと流儀に従ってプログラムを書く必要があるので、勝手なプログラムの構造(設計)ができなくなる
- デザイン部分が分離されているため、PC版と携帯版の両方があるサイトでは、理論上、デザイン部分を切り替えるだけで携帯対応できる
その他にフレームワークによっては、土台となるプログラムを自動生成してくれるscaffolding(スカフォールディング)と呼ばれる機能もついており、開発の時間が短縮できます。
テンプレートエンジンの代表格としては、Smartyと呼ばれるものがあります。Smartyを学習するための参考サイトとして、ゼンド・ジャパン株式会社のサイトを挙げておきます。
MVCフレームワークに関しては、有名なものとしてCakePHP、Symfony、Zend Framework、Ethnaなどがあります。MVCフレームワークの特徴を分かりやすく比較した参考サイトとしてPHPフレームワークの機能比較 - PHPプロ!を挙げておきます。必要に応じて目を通してみてください。
参考書籍
また、より深く学習したい方のために、以下の参考書籍を挙げておきます。
- 『Smarty入門 ~PHP+テンプレート・エンジンでつくるMVCアプリケーション~』 山田 祥寛著 翔泳社 2005年3月
- 『PHPフレームワーク入門―CakePHP/Zend Framework/symfony/CodeIgniter対応』 掌田 津耶乃著 秀和システム 2009年5月
タイトルの通り、テンプレートエンジンであるSmartyの入門書です。
様々なフレームワークを浅く広く学習するのに向いています。特定のフレームワークに関して理解を深めたい場合は、Amazonなどでフレームワーク名で検索してみてください。
まとめ
それでは、今回のまとめです。
- 関数を利用することで、同じ処理を何度も記述する必要がなくなり、読みやすいプログラムとなる
- 関数は、引数として変数を受け取り、戻り値として変数を返す
- 複数回のSQLを実行する際、トランザクション管理を行うことで中途半端なデータベースの状態を許可しないことができる
MDB2
では、beginTransaction()
、commit()
、rollback()
という命令を用いてトランザクションを管理する- MySQLが内部的に用いるエンジンを「ストレージエンジン」と呼び、代表的なものに
MyISAM
とInnoDB
がある InnoDB
はトランザクション管理をサポートしているが、MyISAM
ではサポートされていない- テンプレートエンジン、MVCフレームワークと呼ばれるツールを利用することで、さらに見通しの良いプログラムを作ることができる
- テンプレートエンジンの代表格としてSmartyがある
- 有名なフレームワークとしてCakePHP、Symfony、Zend Framework、Ethnaなどがある
長期間に渡る学習、お疲れ様でした。プログラミングを一通り終えて、難しいと思ったでしょうか? それとも思ったよりも簡単だったでしょうか? ほとんどの方は、前者の感想だと思います。
実は、本連載で取り上げたテーマはプログラミングの基本的な技術要素ばかりです。しかし、まだ先が長いとがっかりしないでください。基本的な単語を一通り覚えておけば英語圏でどうにか生活ができるように、基本的な技術を押さえておけばWebサイトの大半の機能は作ることができます。
残りの技術の多くは、今回取り上げたテンプレートエンジンやフレームワークのような、読みやすさや機能追加のしやすさ、チームで実装する際の分業のしやすさを高めるといった応用的なテクニックです。より読みやすいプログラムを書くために、今回取り上げたテンプレートエンジンのようなテクニックをゆっくり身につけていきましょう。
今後の学習は、書籍やネット上のサイト、掲示板などをうまく活用するとスムーズに進むはずです。掲示板やメーリングリストで技術的な質問をするときは「何が分からないか」「どこが動かないか」を明確にするよう心がけると、期待する回答が得られやすいかと思います。
皆さまの今後のご活躍を陰ながら応援しています。