CodeIgniterのモデルとは?データベース操作の基本と役割を徹底解説
生徒
「CodeIgniterでアプリを作ってみたいのですが、モデル(Model)って何のためにあるんですか?」
先生
「モデルは、アプリの中で『データの管理』を専門に担当する場所ですよ。主にデータベースとのやり取りを行います。」
生徒
「データベースの操作を全部モデルに任せるということですね。どうして分ける必要があるんですか?」
先生
「役割を分けることで、コードが整理されて修正や管理が楽になるからです。まずは基本から紐解いていきましょう!」
1. CodeIgniterのモデル(Model)とは?
CodeIgniter(コードイグナイター)は、PHPというプログラミング言語を使ってウェブサイトやシステムを効率よく作るための「道具箱」のようなものです。この道具箱の中には、MVC(エムブイシー)という考え方に基づいた役割分担があります。
その中でもモデル(Model)は、データの処理を専門に行う担当者です。例えば、ユーザーの名前やメールアドレスを保存したり、保存されている情報を検索して取り出したりする作業はすべてモデルの仕事になります。パソコンに詳しくない方向けに例えると、モデルは「大きな図書館の司書さん」のような存在です。あなたが「あの本が欲しい」と頼むと、司書さんが棚から探して持ってきてくれますよね。この「棚(データベース)」から「本(データ)」を探す仕組みそのものがモデルなのです。
2. MVCモデルにおけるモデルの立ち位置
プログラミングの世界では、作業効率を上げるために役割を3つに分けるのが一般的です。これがMVCです。
- M(Model/モデル): データの管理、計算、データベースとの通信(司書さん)
- V(View/ビュー): 画面の表示。ユーザーが見るデザイン部分(本の展示スペース)
- C(Controller/コントローラー): 命令の仲介役。ユーザーの操作を受けて、モデルやビューに指示を出す(受付係)
ユーザーが「会員情報を書き換えたい」というボタンを押すと、まずコントローラーがその命令を受け取ります。コントローラーは「モデルさん、データを更新しておいて」と指示を出し、モデルが実際にデータベースの中身を書き換えます。このように、モデルは表舞台には出ませんが、システムの心臓部である「データ」を預かる非常に重要な役割を担っています。
[Image of MVC architecture flow]3. データベース(DB)との連携の仕組み
データベースとは、大量の情報を整理して保管しておくための専用の保管庫です。CodeIgniterでは、この保管庫を操作するためにSQL(エスキューエル)という特殊な言葉を使いますが、モデルを使えばもっと簡単に操作することができます。クエリビルダという機能を使えば、難しい呪文のような命令を書かなくても、直感的にデータを扱えます。
例えば、利用者の名簿が入っている「users」というテーブル(表)から、特定の人の情報を取得するシンプルなコードを見てみましょう。ここでは、コントローラーからモデルを呼び出すイメージで作成します。
// モデルの中で、全てのユーザー情報を取得する関数を作る例
public function get_all_users() {
// usersという名前のテーブルから全てのデータを取ってくる
$query = $this->db->get('users');
// 結果を配列(リスト形式)で返す
return $query->result_array();
}
このコードだけで、複雑な通信手順を気にすることなく、データベースの中身をリストとして取得できます。これがCodeIgniterのモデルが「親切」だと言われる理由の一つです。
4. モデルを自作してみよう!基本の書き方
モデルを作る際は、決められたルールに従ってファイルを作成します。基本的には「名前+_model.php」という名前にすることが多いですが、CodeIgniter 4以降ではシンプルに「UserModel.php」のように書くこともあります。モデルは必ず CI_Model という元々の機能を継承(機能を借りること)して作ります。
次に、特定のID番号を指定して、一人のユーザー情報を取得するプログラムを書いてみましょう。これを「条件指定」と呼びます。
// 会員一人を探すためのモデル
class User_model extends CI_Model {
public function get_user_by_id($id) {
// IDが一致する人を探すという条件を追加
$this->db->where('id', $id);
// usersテーブルから取得
$query = $this->db->get('users');
// 1件だけ結果を返す
return $query->row_array();
}
}
実行結果は、指定したIDに一致する人のデータだけが詰まった箱として返ってきます。もしIDが1番の人が「田中さん」なら、田中さんの情報が表示されるようになります。
5. データの追加(Insert)もモデルの仕事
新しい情報を登録することもモデルの大切な役割です。例えば、ブログのお問い合わせフォームから送られてきた内容を保存する場合を考えてみましょう。プログラミング未経験の方でも、「連想配列」という「ラベル付きの箱」のイメージがわかれば簡単です。
「名前」というラベルには「山田太郎」、「本文」というラベルには「こんにちは」という値を入れて、モデルに渡します。
// データを新しく保存するプログラム
public function insert_contact($data) {
// $dataの中には、名前やメールアドレスが入っている想定
// insert命令を使ってデータベースのcontactsテーブルに保存する
return $this->db->insert('contacts', $data);
}
この一行だけで、データベースに新しい行が追加されます。成功すると「1」という数字などが返ってきて、無事に保存されたことがわかります。失敗した時の処理もモデルに書いておけば、安全なシステムになります。
6. データの更新と削除(Update & Delete)
一度保存したデータを書き換えたり、不要になったデータを消したりするのもモデルが行います。これを専門用語で「CRUD(クラッド)」と呼びます。Cは作成(Create)、Rは読み取り(Read)、Uは更新(Update)、Dは削除(Delete)の頭文字です。
最後に、データの削除(Delete)の例を見てみましょう。間違えて投稿してしまった記事を消すような場面ですね。削除は慎重に行う必要があるため、必ず「どのデータを消すか」をはっきり指定します。
// 指定したIDのデータを削除する関数
public function delete_user($id) {
// IDが一致するものだけを対象にする(これを忘れると全部消えるので注意!)
$this->db->where('id', $id);
// usersテーブルから削除を実行
$this->db->delete('users');
}
このように、モデルはデータベースに対する「読み・書き・消し」のすべての窓口になります。コントローラーに直接これらのコードを書くことも技術的には可能ですが、モデルにまとめることで、同じ処理を色々な場所で使い回せるようになり、開発がグッと楽になります。
7. なぜ初心者はモデルから学ぶべきなのか
プログラミングを始めたばかりの時、一番感動するのは「自分が入力したデータが画面に残っている」瞬間ではないでしょうか。それを支えているのがこの「モデル」の技術です。データベースの仕組みを理解するのは少し時間がかかるかもしれませんが、CodeIgniterのモデルを使えば、直接難しいプログラムを書く必要がなくなります。
まずは「モデルはデータベースとの通訳さん」だと覚えておきましょう。私たちが日本語に近い命令を出すと、モデルがそれをデータベースに伝わる言葉に翻訳してくれます。この通訳さんがいるおかげで、私たちは複雑な裏側の仕組みを気にせずに、楽しいアプリ開発に集中できるのです。これからWeb開発を学びたい方は、ぜひこのモデルの書き方に慣れて、データの扱いをマスターしてくださいね。