CodeIgniter入門!初心者が開発前に知っておくべき基本概念とMVCモデルを徹底解説
生徒
「Webアプリを作ってみたいんですけど、CodeIgniter(コードイグナイター)って初心者でも使えますか?」
先生
「はい、CodeIgniterは動作が軽くてルールもシンプルなので、初めてのフレームワーク学習には最適ですよ。」
生徒
「フレームワーク……なんだか難しそうですね。何から理解すればいいんでしょうか?」
先生
「まずは、開発を楽にするための『枠組み』であることと、その仕組みの基本を理解することから始めましょう!」
1. CodeIgniter(コードイグナイター)とは何か?
CodeIgniterは、プログラミング言語であるPHPを使ってWebサイトやシステムを効率よく作るための「フレームワーク」です。フレームワークとは、日本語でいうと「枠組み」や「骨組み」のようなものです。例えば、プラモデルを作るときに、一からプラスチックを溶かして形を作るのは大変ですよね?でも、あらかじめパーツが用意されていて、説明書通りに組み立てれば完成する「キット」があれば、誰でも同じようにクオリティの高いものが作れます。Web開発におけるそのキットが、CodeIgniterなのです。
CodeIgniterの最大の特徴は、その「軽さ」と「自由度の高さ」にあります。他の複雑なフレームワークに比べて、覚えるべきルールが少ないため、パソコン操作に慣れていない初心者の方でも、学習の壁が低いと言われています。また、動作が非常に高速なため、ユーザーにとってもストレスのないWebアプリを提供することができます。このフレームワークを使うことで、お問い合わせフォームやログイン機能、ブログシステムなどを、一から手書きでコードを書くよりも圧倒的に早く、安全に作成することが可能になります。
2. フレームワークを使うメリットを理解しよう
なぜプログラミングを始めたばかりの人が、生のPHPだけで書かずにCodeIgniterのようなフレームワークを使うのでしょうか。それには大きな理由が三つあります。一つ目は「セキュリティ」です。Webの世界には、悪意のある攻撃がたくさん存在します。CodeIgniterには、そうした攻撃からサイトを守るためのガード機能が標準で備わっています。初心者が自分で完璧な盾を作るのは難しいですが、フレームワークを使えば最初から頑丈な盾を持った状態でスタートできるのです。
二つ目は「コードの統一感」です。自分一人で書いている分にはいいですが、将来誰かと一緒に開発する場合、書き方がバラバラだと解読に時間がかかります。フレームワークという共通のルールに従うことで、誰が書いても読みやすいプログラムになります。三つ目は「便利な道具箱(ライブラリ)」の存在です。データベースへの接続や、メールの送信など、よく使う機能が「部品」として用意されているため、それらを呼び出すだけで簡単に高度な機能を実装できます。これにより、開発者は「そのアプリにしかないオリジナルな機能」を作ることに集中できるのです。
3. MVCモデルという考え方の基礎
CodeIgniterを扱う上で、最も重要で、かつ初心者が最初につまずきやすいのがMVCモデルという概念です。これは、プログラムの役割を「Model(モデル)」「View(ビュー)」「Controller(コントローラー)」の三つに分けて管理しようという考え方です。なぜ分けるのかというと、役割を分担させることで、修正や変更が楽になるからです。
料理に例えると非常に分かりやすくなります。まず「View」は、お客さんに出される「お皿(見た目)」です。見た目が綺麗かどうか、どこに具材が配置されているかを担当します。次に「Model」は「冷蔵庫や倉庫(データ)」です。必要な食材を取り出したり、新しく仕入れたりする裏方の仕事です。そして最後が「Controller」で、これは「シェフ(司令塔)」の役割です。お客さんからの注文を受け取り、冷蔵庫(Model)から食材を出して、お皿(View)に盛り付けて出す、という全体の流れを指揮します。この「見た目」「データ」「命令」の切り分けが、Web開発の基本となります。
4. Controller(コントローラー)の役割を具体的に見よう
それでは、司令塔である「Controller」の実際のコードを見てみましょう。コントローラーは、ユーザーがブラウザ(Google ChromeやEdgeなど)で特定のURLにアクセスしたときに、最初に呼び出される場所です。ここで「どのデータを取ってくるか」「どの画面を表示するか」を決定します。
例えば、トップページを表示するためのシンプルなコントローラーは、以下のようになります。このプログラムは、「Hello World!」という文字を画面に表示するための命令を出しています。
namespace App\Controllers;
class Home extends BaseController
{
public function index()
{
// Viewファイルを呼び出して表示する
return view('welcome_message');
}
}
上記のコードでは、view('welcome_message')という命令を使って、後述するViewファイルを呼び出しています。このように、コントローラー自体に見た目のデザインを書くのではなく、あくまで「指示」だけを出すのがスマートな書き方です。
5. View(ビュー)で画面のデザインを作る
次に、ユーザーの目に触れる「View」について解説します。Viewは主にHTML(エイチティーエムエル)という、Webサイトの文字や画像の位置を決める言語で書かれます。Controllerから渡されたデータを、どのように画面に配置するかを決める場所です。
例えば、先ほどのコントローラーから呼び出される「welcome_message」というViewファイルの中身は、次のようなイメージになります。プログラムの結果を表示するための「窓口」だと思ってください。
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>CodeIgniter入門</title>
</head>
<body>
<h1>こんにちは!CodeIgniterの世界へ。</h1>
<p>これはView(ビュー)で表示されている画面です。</p>
</body>
</html>
このViewを書き換えるだけで、システムの中身(ロジック)をいじることなく、画面のデザインだけを自由に変更することができます。例えば「文字を赤くしたい」「ボタンを大きくしたい」といった要望は、このViewファイルを編集するだけで完結します。これが役割分担の大きなメリットです。
6. Model(モデル)でデータを管理する
三つ目の要素である「Model」は、データベースとのやり取りを専門に行います。データベースとは、ユーザーの名前や投稿したブログ記事の内容などを保存しておく「巨大な表計算シート」のようなものです。Modelは、そのシートから特定の情報を検索したり、新しい情報を書き込んだりします。
初心者のうちは、「データベースの操作はModelに任せる」というルールを徹底するだけで、プログラムがとても綺麗になります。以下のコードは、データベースからユーザーの一覧を取得するイメージのModelです。
namespace App\Models;
use CodeIgniter\Model;
class UserModel extends Model
{
protected $table = 'users'; // 操作するテーブル(表)の名前
public function getAllUsers()
{
// 全てのユーザーデータを取得して返す
return $this->findAll();
}
}
このように、データを取り出す処理をModelの中に隠しておくことで、Controllerは「Modelにお願いしてデータをもらう」という単純な動作だけで済むようになります。複雑な計算やデータの抽出条件が増えても、Modelの中を修正するだけで対応できるため、プログラムのメンテナンスが非常に楽になります。
7. ルーティング(Routing)の仕組みを知る
CodeIgniterで開発を始めると、「ルーティング」という言葉によく出会います。これは、ユーザーが入力したURL(アドレス)に対して、どのControllerのどの機能を動かすかを決める「地図」のような役割です。例えば、「/contact」というURLにアクセスしたらお問い合わせフォームを出し、「/blog」なら記事一覧を出す、といった交通整理を行います。
ルーティングを設定することで、URLを人間にとって分かりやすい形(URL設計)にすることができます。以下のコードは、特定のURLにアクセスがあった際の行き先を指定する例です。
// アドレスの末尾が /hello だったら、Homeコントローラーの sayHelloメソッドを動かす
$routes->get('hello', 'Home::sayHello');
この設定があるおかげで、ブラウザに「domain.com/hello」と打ち込んだ際に、プログラムが迷わずに正しい処理を実行できるのです。これも、CodeIgniterが自動的に交通整理をしてくれる重要な基本概念の一つです。
8. 名前空間(Namespace)の重要性
最後に、少し発展的な内容ですが、最近のPHP開発では欠かせない「名前空間(Namespace)」について触れておきます。これは、プログラムの部品に「住所」をつけるような仕組みです。Webアプリが大きくなってくると、同じ「User」という名前のファイルが複数の場所で作られてしまうことがあります。そうすると、コンピュータはどちらのUserを使えばいいか分からなくなってしまいます(これを名前の衝突と言います)。
そこで、namespace App\Controllers;のように宣言することで、「これはAppというフォルダの中のControllersという場所にある部品ですよ」と明示します。これにより、同じ名前のファイルがあっても、住所が違えば別のものとして正しく認識されるようになります。CodeIgniter4以降では、この仕組みが全面的に採用されているため、ファイルを新しく作る際には必ず意識する必要があります。最初は「おまじない」のように感じるかもしれませんが、プログラムの整理整頓に不可欠なものだと理解しておきましょう。