CodeIgniterでファイルキャッシュを使う方法!初心者でもわかるWebサイト高速化の秘訣
生徒
「Webサイトが重いというか、表示されるまでに時間がかかることがあるんですけど、何か良い解決策はありませんか?」
先生
「それは『キャッシュ』という仕組みを使うと解決するかもしれませんね。PHPのフレームワークであるCodeIgniterには、便利なファイルキャッシュ機能があるんですよ。」
生徒
「キャッシュ……?聞いたことはありますが、具体的にどうやって設定するのかさっぱり分かりません。」
先生
「大丈夫ですよ。今回は、CodeIgniterで一番手軽に始められる『ファイルキャッシュ』について、初心者の方でも分かるように解説していきます!」
1. 「キャッシュ」って一体なに?魔法の仕組みを解説
プログラミングの世界でよく聞く「キャッシュ(Cache)」とは、一言で言うと「一度計算したり、準備したりした結果を、どこかに一時的に保存しておく仕組み」のことです。例えば、あなたが毎日学校や職場に持っていくお弁当をイメージしてみてください。朝から野菜を切って、火を通しておかずを作るのは大変な作業(これがプログラムの実行です)ですよね。でも、前日の夜に作り置き(キャッシュ)をして冷蔵庫に保存しておけば、朝はそれを取り出すだけで済みます。これと同じことがWebサイトでも行われています。
Webページを表示する際、サーバーの中ではPHPという言葉を使って、データベースから情報を探したり、計算をしたりと、裏側で一生懸命働いています。これを毎回繰り返すと、アクセスがたくさん増えたときにサーバーが疲れてしまい、表示が遅くなってしまいます。そこで、一度作った「表示用データ」をファイルとして保存しておき、次からはそのファイルをサッと出すだけで表示を終わらせるのが「ファイルキャッシュ」の役割です。この設定を行うだけで、サイトの表示速度は劇的にアップします。
2. CodeIgniterでキャッシュを使うための準備
CodeIgniter(コードイグナイター)でファイルキャッシュを利用するためには、まず「キャッシュをどこに保存するか」を決める必要があります。通常、パソコンやサーバーの中にはたくさんの箱(フォルダ)がありますが、その中にキャッシュ専用の置き場所を作ってあげるイメージです。デフォルトでは、writable/cache という場所が使われることが多いですが、ここが書き込み可能な設定になっているか確認しましょう。
初心者の方にとって「書き込み可能」という言葉は難しく感じるかもしれませんが、要するに「プログラムが自由にメモを書き残しても良いですよ」という許可を与える作業のことです。この準備ができていないと、せっかくのキャッシュ機能も「保存する場所がない!」と怒って動いてくれません。まずは設定ファイルを確認し、キャッシュ機能を使える状態に整えるところからスタートします。
3. キャッシュを読み込むための基本コード
CodeIgniterでキャッシュを扱うには、まず「キャッシュを管理する担当者(ライブラリ)」を呼び出す必要があります。これをプログラムの世界では「読み込み」や「初期化」と呼びます。以下のコードは、キャッシュ機能を使えるようにするための魔法の合言葉のようなものです。まずはこの一行からすべてが始まります。
// キャッシュエンジンを呼び出す(ファイル形式を指定)
$cache = \Config\Services::cache();
この \Config\Services::cache() という部分は、「キャッシュのサービスを開始しますよ!」という宣言です。これにより、変数 $cache を通じて、データを保存したり、取り出したりできるようになります。パソコンの操作で例えるなら、ExcelやWordなどのソフトを立ち上げた状態と同じですね。ソフトを立ち上げないと、中身を書くことも保存することもできませんから、この準備は非常に重要です。
4. データを保存してみよう(saveメソッド)
それでは、実際にデータをキャッシュに保存してみましょう。保存するときには「データの名前(キー)」と「保存したい中身(値)」、そして「いつまで保存するか(有効期限)」の3つを指定します。例えば、「今日のラッキーアイテム」という情報を60秒間だけ保存したい場合は、以下のように記述します。
// 'lucky_item' という名前で '赤いペン' を 60秒間保存する
$cache = \Config\Services::cache();
$cache->save('lucky_item', '赤いペン', 60);
ここで出てくる save は「保存する」という意味です。第一引数の 'lucky_item' は、後で取り出すときに使う「ラベル」のようなものです。第二引数の '赤いペン' が実際の内容です。そして第三引数の 60 は、秒単位の期限です。期限が過ぎると、このキャッシュは自動的に消えてなくなります。冷蔵庫に入れた食品の「賞味期限」を設定しているようなものだと考えると、分かりやすいかもしれません。
5. 保存したデータを取り出す(getメソッド)
保存したデータは、必要なときにいつでも取り出すことができます。取り出しには get という命令を使います。もし保存した期限が切れていたり、まだ一度も保存していなかったりした場合は、中身が空っぽの状態(falseやnull)で返ってきます。これを活用して、「もしデータがあればそれを使い、なければ新しく作る」という処理を書くのが一般的です。
$cache = \Config\Services::cache();
// キャッシュからデータを取得してみる
$data = $cache->get('lucky_item');
if ($data) {
echo "キャッシュから見つけました!今日のアイテムは:" . $data;
} else {
echo "キャッシュがなかったので、新しく計算します。";
}
上記のコードは、まず lucky_item という名前のデータがキャッシュの箱の中にあるか確認しに行きます。もしあれば(if文の条件が成立)、その内容を表示します。なければ、もう一度お弁当を作り直す作業に入る、という流れです。このように if 文と組み合わせることで、無駄な計算を省き、Webサイトをサクサク動かすことができるようになります。これがキャッシュ活用の王道パターンです。
6. 不要になったキャッシュを削除する(deleteメソッド)
キャッシュは便利ですが、時には期限を待たずに今すぐ消したいときもあります。例えば、ブログの記事を更新した直後などは、古い情報のキャッシュが残っていると、読者に古い記事を見せてしまうことになります。そんなときは delete という命令を使って、特定のキャッシュを狙い撃ちで削除しましょう。
$cache = \Config\Services::cache();
// 指定した名前のキャッシュを削除する
$cache->delete('lucky_item');
echo "古いキャッシュを削除しました。これで新しい情報が表示されます。";
この delete 命令を実行すると、指定したラベルのデータが消去されます。大掃除をして不要なものを捨てるのと同じで、常に最新の情報を届けたい場合には、適切なタイミングでこの削除処理を入れることが大切です。特に、管理画面でデータを修正したときなどにこの処理を組み込んでおくと、サイトが常に最新の状態に保たれます。これもWeb開発における大切なお作法の一つです。
7. すべてのキャッシュを一括で消去する(cleanメソッド)
サイトを大幅にリニューアルしたり、システム全体を更新したりしたときは、一つずつキャッシュを消していくのは大変です。そんな時は、全てのキャッシュをまとめてゴミ箱に捨てる clean という命令を使います。一気にリセットできるので、開発中などにもよく使われる非常に便利な機能です。
$cache = \Config\Services::cache();
// すべてのキャッシュファイルを一括削除!
$cache->clean();
echo "すべてのキャッシュをリセットしました。";
この命令を使うと、CodeIgniterが管理しているファイルキャッシュがすべて消去されます。実行結果は何も残りませんが、次に誰かがサイトにアクセスしたときに、新しくすべてのデータが計算され直し、最新のキャッシュが再生成されることになります。非常に強力な命令なので、使うときは「本当に全部消して大丈夫かな?」と一瞬だけ考えるようにしましょうね。
8. ファイルキャッシュを使う際の注意点
ファイルキャッシュは非常に便利ですが、注意点もあります。それは「ファイルとして保存する」という特性上、あまりにも大量のデータをキャッシュしすぎると、今度はファイルを読み書きする作業自体が重くなってしまう可能性があることです。また、サーバーの容量(ストレージ)も有限ですので、無限に保存し続けるわけにはいきません。
しかし、小規模から中規模のWebサイトであれば、ファイルキャッシュは設定も簡単で効果が非常に高い手法です。プログラミング初心者の方は、まずはこのファイルキャッシュを使いこなせるようになることを目指しましょう。データベースへのアクセス回数を減らすことができれば、それだけであなたの作ったサイトはプロ並みの快適な動きを見せてくれるはずです。まずは簡単な数字や文字列を保存することから練習してみてくださいね。