# プログラミング # 技術的な話題-PHP# 技術的な話題

さくらインターネットのレンタルサーバでAPCuを使って高速化を行なった。

さくらインターネットのレンタルサーバでAPCuを使って高速化を行なった。

さくらインターネットレンタルサーバでAPCuを使って高速化を行なった。

5月31日の時点で沖縄本島には台風が徐々に近づいてきている。気象情報を確認するとこんな感じ。

現時点でも結構風が強い状態ではあるがまだ雨は降ってきてない。おそらく明日の1日は台風2号のためにバスが止まるんじゃないかなーと思われる。うちの会社は台風の時はバスが止まればお休みである。

仕事が一日程度休みになるのであれば単にありがたいことであるけど、この台風は進行速度が非常に遅い台風であるらしく今週の後半はずっと暴風域に入ってる恐れがあるらしい。2日も休みになってしまうと流石に仕事の進捗の遅れが気になってしまう。

別に休みなら休みでも良いんだけどね。でも、その分他の日にしわ寄せがきて休日出勤しろとか言われたりするんだよね。とりあえず明日が休みになるのであれば、開発中の自作アプリのScrapDiaryに画像の投稿機能でも追加してしまおうかと考えているけど、台風が来ると停電になったりするんだよね。家が停電になってしまうと開発どころじゃない。

まぁ、とりあえず今日は家に帰ったら暴風対策でモバイルバッテリーを充電したりとか盆栽を家に片付けたりとかするよ。水も念の為に風呂桶に準備しておくのが良いかなーと思うところであるが、台風の強度的にはそこまで強い台風という訳でもない。停電せずにバスだけ止まってお休みとなれば良いけど、普通に通常出勤という可能性もあるからな。とりあえず生活リズムは普通に朝は5時起きで平日と変えないようにしておく。台風で停電した時のために読書で読むべき本も用意しておこう。

とりあえず、ま、沖縄方面は今日は朝っぱらからJアラートが大音量で鳴り響いて、北の将軍様がイキリ倒してるとの通知が来たりなど人災天災が次々とやってくる。めんどくさい世の中の風潮に関してはため息をつくぐらいしかできなくてうんざりするね。

そんなことはどうでもいいや。最近僕は個人開発強化月間に入ってる。生活の中でめんどくさい仕事に関しては自分でシステムを開発して効率化することに力を入れており、今回はこのブログについている上の長文要約システムの処理を少しカスタマイズしていた。

うちのブログに付いている長文要約システムは、毎日0時になると本文をChatGPTに要約させてMySQLに保存するバッチ処理を動かして動いている。バックエンドはそんな感じだけど、フロントエンドの方もPHPAPI処理を自作してアクセスがあったらそのURLをサーバに投げてDBを検索して要約文のJSONを投げ返すのを受け取る感じで動いている。

それでまぁちゃんと動いているから良いかーと思ってたんだけど、案外、この処理はアクセス負荷がかかるらしくて最近は表示が遅くなることがあったんだよね。うちのブログは1日のPVは350程度だけどそれでも重さが気になるね。

この長文要約システムではバックエンドはさくらインターネットレンタルサーバを使ってるのだけど、そちらではAPCu(APC User Cache)が使えることが判明した。

APCu(APC User Cache)は、PHPで用いられる高速なキャッシュシステムである。元々はAPCAlternative PHP Cache)というシステムの一部だったが、PHP 5.5以降でオプコードキャッシュ(PHPスクリプトコンパイルした結果をキャッシュする機能)が組み込まれたため、ユーザーデータのキャッシュ機能として分離、独立したものがAPCuである。

要するにPHPを高速化するのに使えるキャッシュ機能である。WordPressなんかにはこれを使うためのプラグインなどがあったりするので、さくらインターネットのスタンダートプランを契約してる人は高速化するために使うことができる。

今回、僕の書いたプログラムでもさくらにインストールされてるAPCuを使ってキャッシュで高速化するようにしてみた。さくらのレンタルサーバは共用サーバではあるけど、こういう色々とカスタマイズして使える機能が入ってたりするのでちょっとした個人用のバックエンドとかに使うには良いんだよね。個人でちょっと遊ぶ程度のバックエンドでAWSとか使ったりするのは流石に鶏に牛刀だし、何せさくらのレンタルサーバは年間5000円程度と安い。

とりあえず簡単にやり方をメモしておく。

まず、使われているPHPがモジュール版かどうか確認しておく。APCuはモジュール版でしか使うことができない。CGI版の場合は切り替えておこう。

次にphp.iniへ下記の項目を追加。

extension=apcu.so
apc.enabled=1

そしてプログラムをこんな感じで書き換える

apcu_fetchは渡されたキーがキャッシュにあれば値を返し、なければfalseを返す。データがない場合のみDBにデータを取得に行って、その後apcu_storeでキャッシュに保存する。この処理ではいったん取得したデータは24時間キャッシュされる。要約データは更新されないので別にそれぐらいの時間のキャッシュで良い。

この手のキャッシュの機能はうまく使えばシステムが高速化するけど、頻繁に更新されるデータである場合、使い所を間違うと不具合の原因になる。でも、さくらインターネットレンタルサーバはAPCuがデフォルトで使えるっぽいので、技術を試すためにひとまずこんな感じに変えてみた。あとはどの程度高速化されたのかサーバ負荷を毎日確認して楽しもうと思う。

あわせてよみたい

ランキング

[

ランキング参加中

Think<書くことは考えること>](https://blog.hatena.ne.jp/-/group/11696248318756940487/redirect)

[

ランキング参加中

【公式】はてなダイアリー時代開設ブログ](https://blog.hatena.ne.jp/-/group/4207112889925310834/redirect)

[

ランキング参加中

感想をブログで書いてもらえると喜びます](https://blog.hatena.ne.jp/-/group/11696248318756863545/redirect)

[

ランキング参加中

雑談](https://blog.hatena.ne.jp/-/group/11696248318754550910/redirect)