Lesson 1
CakePHPとは
Lesson 1
Chapter 1
PHPについて
はじめに
Lessonは1~13までとなっており、CakePHPの主な特徴や、使い始めるために必要な設定、基礎を知るための簡単なアプリケーション作成をした上で、その他の基本的なCakePHPの機能について知識をつけていく内容となっています。
Lesson1では導入として、PHPやフレームワークの概要について触れていきます。それでは早速学んでいきましょう。
PHPとは
元々はC言語をベースに「Personal Home Page Tools」として誕生し、一種のツールとしての位置づけでした。その後の改良によってプログラミング言語として認められ、名称も「PHP: Hypertext Preprocessor」へと変更。データベースも扱えるようになり、今では当たり前となっている「動的なWebアプリケーション」も容易につくることができる言語へと進化してきました。
名称に「Hypertext」が入っていることからも分かる通り、HTML(Hyper Text Markup Languege)との親和性が高く、WEBフレームワークなどを使わずともHTMLファイルにコードを埋め込める点などが特徴的です。
もちろん、今回学んでいくCakePHPを含め、現在は開発にフレームワークを使用することが主流のため、埋め込みが出来るだけでは大きなメリットとは言えないかもしれません。ですが、PHPがWEB開発を前提としている言語であり、データベース連携や、フォームの作成、セキュリティ対策など、WEB開発に必要な機能が一通り揃っており、それらを比較的容易に扱うことが出来ることを考えると、WEB開発を行うにあたってPHPは優れた言語の一つと言えるでしょう。
では実際にPHPがどの程度使われているのか、調査サイトの一つであるW3Techsを参考に見てみましょう。
引用元:https://w3techs.com/ より
2023年時点ではサーバーサイド言語内でのシェア率が77.4%と他の言語に比べても圧倒的なことがわかります。
PHP開発の代表例の一つに「WordPress」(WEBサイトの作成・管理を簡単にしてくれるCMS=コンテンツマネジメントシステム)がありますが、同W3Techsの調査では世界中のCMSを利用したWEBサイトのうち、実に63%以上が「WordPress」を使用しており、対するRubyを使用した2位の「Shopify」(CMSの中でもオンラインストアを構築することに特化したサービス)は5.5%となっています。このことからワードプレスのシェア率がそのままPHPの高いシェア率につながっていることが伺えます。
ほかにもWikipediaなどの有名なものから、予約サービスやショッピングサイト、社内管理システムなど、動的なWebサービスの多くがPHPによってつくられており、PHPが持つ市場は決して小さいものではないことがわかります。
また、PHPは開発言語の中でもエンジニアが学習をしやすいという特徴を持ちます。理由としてはまずオープンソースであり、公式のドキュメントも基礎から応用まで幅広く詳細な内容が用意されており、なおかつドキュメントが日本語にも対応しているため、英語が苦手なエンジニアでも学習が進めやすい点が挙げられます。
加えてシェア率が高いからこそ、すでにPHPを扱っている経験者による解説記事や、エラー・技術的問題への対応方法といった情報もインターネット上で比較的容易に見つけることができるため、プログラミング初学者でも比較的つまづきにくく、学習のしやすい言語であるといえるでしょう。
PHP開発の問題点
このように人気のあるPHP言語ですが、PHPに携わるエンジニアが増えれば増えるほど、開発の方法やコードの書き方は多種多様となり、その中にはコードの統一性が無かったり、セキュリティに問題のあるシステムなどが少なからず含まれます。
開発の仕方に統一性や一定のルールがなければ複数人での開発や、後になってシステムを改修する際の手間は膨大となります。またセキュリティの不備は言わずもがな万全の対策をすべきですが、それらを満遍なく行うには高い技術力が必要です。
そこで、このような問題の解決策の一つとして「フレームワーク」が登場します。開発方法に一定の枠組みとも言える決まりを設け、その決まりに則って開発をすることで、開発効率を上げながらセキュリティ面の問題も改善される。こういった背景もあり、PHPだけでも様々なフレームワークが登場してきました。その中でも、規則がわかりやすく初心者でも扱いやすいとされるのが今回学ぶCakePHPとなります。

Lesson 1
Chapter 2
フレームワークの考え方
PHPにおけるフレームワークとは何かというと「WEBアプリケーション開発をするために必要な基本機能と、それらの組み立て方(設計)がセットになったもの」と言うことが出来ます。
またフレームワークと似たものに「ライブラリ」があります。この2つの違いはフレームワークがアプリケーションをつくる上での設計部分も担当できるのに対し、ライブラリは部品の提供までとなります。
フレームワークは枠組みに従いながら足りない部分をプログラマが付け足していきますが、ライブラリはあくまで一つ一つの機能の集合であり、設計に関してはプログラマが全て組み立てる必要のある点が大きな違いとなります。
フレームワークを使う利点
フレームワークを使う利点をより具体的に見てみましょう。
フレームワークはコードの書き方を統一するための決まりや全体の処理の流れなど、設計部分を含めた大枠を決めてくれます。そのためチームなど複数人で開発を行う際には、個人によるコードの書き方の違いによる可読性の低下を防いだり、システム全体の決まり事を一から作り共有するといった手間を大幅にカットすることができるようになります。
また、フレームワークには開発でよく使われる機能やテンプレートなどが用意されているため、少ないコードでシステムを組み上げ、ミスやエラーを減らすことができるなど、開発効率の改善が望めます。
フレームワークを使わない開発では設計から各種の機能まで、力量のあるエンジニアが1から作り上げていくことになるため個人に依存しがちでしたが、フレームワークの登場により、誰がつくっても一定の品質を維持することが容易になりました。
初見のシステムに触れる場合などでも、フレームワークによる共通認識があれば全体像を把握しやすいため、スムーズに作業へと移ることができます。
このようにフレームワークを扱うことができれば多くのメリットを受け取ることができるようになります。
Composerによるパッケージ管理
Composerと呼ばれる、PHPのパッケージ管理システムについてもフレームワークを扱う上で必要な知識となるので簡単に触れておきましょう。
まず「パッケージ」とは「配布するためにまとめられた」ものの単位であり、ソフトウェアやライブラリなどのプログラムと、それをインストールしたりアップデートするためのファイルが同梱されて1つのパッケージとなっているものを指します。パッケージには様々な種類があり、場合によってはパッケージ同士で依存関係(パッケージAのプログラムを使用するにはパッケージBも必要といった関係)にあるものもあります。
パッケージ管理システムでは、それらパッケージ1つ1つのインストールやアップデートを行い、依存関係にあるパッケージがあれば、それらも自動的にダウンロードをしてくれます。そしてPHP用のパッケージ管理システムとしてあるのが「Composer」ということになります。
今回はこのComposerを通してcakePHPをインストールするのですが、仮に手作業でやるとした場合、cakePHPを動かすために必要なライブラリなどを一つ一つ調べ、依存関係についても考慮しながら手動でダウンロードしていくというのは難しく、効率も悪く現実的ではありません。
そのため、あらかじめ必要なパッケージをまとめあげ、古いものがあれば自動でアップデートもかけつつインストールを行ってくれるComposerが必要となってきます。
CakePHPは専用のインストーラーなどが用意されておらず、基本的にはComposerでのコマンド操作によってCakePHPの環境をつくることになります。

Lesson 1
Chapter 3
CakePHPの特徴
先ほどのchapter2で、フレームワークは「設計」部分も担当をするという話をしましたが、今回学ぶCakePHPが持つ「設計」には「MVCモデル」と「CoC(設定より規約)」というものが採用されています。CakePHPの特徴ともいえるこの二つについて詳しくみていきましょう
MVCモデル
MVCモデルはアプリケーション開発においてよく使われる設計モデルの一つで、CakePHPにおいてその概念は非常に重要なものとなります。プログラムを3つの役割に分けてコーディングを行うモデルで、それぞれの役割は以下のように分かれています。
M→Model(モデル)
アプリケーションにおける「データ」の処理を担います。DB(データベース)と連携し、DB上のデータの検索・取得・保存・更新・削除などを行ったり、入力されたデータのバリデーションも行います。
V→View(ビュー)
ユーザーが直接目にする、いわばフロント部分。動的なページの生成や出力など「見える」部分全般の処理を担当します。
C→controller(コントローラー)
modelとviewそれぞれとデータの受け渡しをしたり、ユーザーからの入力をもとに適切なモデルやビューを呼び出したりと各機能のハブ(中継地点)のような役割をします。
MVCのメリット
重要な点は「分ける」という部分にあります。仮に全く同じ処理を複数のページで行う場合に、MVCに分かれていれば処理部分であるモデルとコントローラーはそのままに、ビューだけの変更だけで済ますことが出来ます。また、扱うデータだけを変えたければモデルのみの変更で済むなど、役割と機能ごとに分けることで、再利用性が高くなるメリットがあります。
また、バグが発生してしまった場合でも、それぞれ役割ごとに分かれているため、修正箇所を突き止めやすく、他の機能への影響も最小限で抑えることができます。
他にも分かれていることで、個別でのテストがやりやすい点や、MVCを共通認識とすることで、コード初見でも構成を理解しやすくなるなどがあります。
CoC(設定より規約)
CakePHPの「設計」において次に重要なのが「設定より規約」という考え方です。
規約と言うのはつまり、主にコードの書き方のことを指しており、設定よりも書き方を重視することで効率化を図ったフレームワークと言えます。
同じPHPフレームワークであるFuelPHPなどは逆に「規約より設定」をコンセプトにつくられていることからもCakePHPがCoC(Convention over Configuration)を採用していることは大きな特徴の一つと言えるでしょう。
CakePHPの規約については後のLessonでその都度触れていきますが、コントローラー、モデル、ビュー、などを作る際の「命名」に決まりを持たせることで、複雑な設定をすることなくデータのやりとりを可能にしたりといったものがあります。
他の多くのフレームワークではクラスを記述したファイルとは別に設定ファイルを用意し、そこに「Aにアクセスした場合に呼び出すのはB」などといった記述をしておく必要があります。(CakePHPでも設定ファイルを使ってのルーティングは可能です)
これだとアクセスするページが少ないうちはいいですが、数百などの規模になってくるとそれら1ページごとの設定をファイルに書き込んでいくのは非常に手間がかかり、管理もしづらくなります。
CakePHPではその手間を省き、規約に沿って命名をしておくだけで自動的に必要な機能を呼び出してくれます。
CakePHPの特徴をまとめると、コントローラ、モデル、ビューなど「MVCモデル」に従って、役割ごとに分けて作成した機能たちを「CoC」による規則的な命名やコードを用いて結びつけることで、効率的にアプリケーション開発を行うことのできるフレームワークということになります。
最初にMVCの役割や、規約のことを覚えるコストはかかるかもしれませんが、十分コストに見合った開発効率の改善が見込めます。
ひとまずは、CakePHPが「MVCモデル」と「CoC」のもと、作成したファイルの命名や置き場所などを大事にしているということを頭にいれておきましょう。
