読者です 読者をやめる 読者になる 読者になる

女子WEBエンジニアのTechメモ

都内の某企業でマーケッターやってます。営業→WEBエンジニア・オフショア開発チーム駐在→マーケッター(SEO)ちょっと便利だなと思ったことをメモしています。

MAMP環境のローカルにmemcachedをインストールする

インフラ

私のMacのローカル環境は、MAMPを使って構築しています。

この前、APIを無料枠で使いたくてリクエスト回数を減らすために「memcached」を導入したので、その時の手順メモ。

memcacheとmemcachedは違う

手順通りやってもなぜかエラーが起きるという人は、これをまず確認してください。
memcacheとmemcached、ごっちゃになってないですか?わたしは、1年以上memcacheを使っていたにも関わらず、混同してました^^memcacheを使っていると思っていたら、memcachedだったのです・・・

memcacheとmemcachedは、両方とも「memcachedをPHPから利用するためのモジュール」です。

それぞれ対応しているPHPのバージョンなどが違ったりするので、自分の利用したい環境に応じて、好きな方を選ぶと良いと思います。

memcacheとは

  • 利用可能バージョン:PHP4.3.3以上
  • インストール時に他のライブラリに依存しない
  • 複数サーバーに対応できる(分散が可能)

memcachedとは

  • 利用可能バージョン:PHP5.2.0以上
  • モジュール「libmemcached」のインストールが必要
  • memcacheより利用できる機能が多いらしい。

例:文字列ではなくてバイナリ形式でのシリアライズ方式のサポート

  • 複数サーバーに対応できる(分散が可能)

※私はわかりませんが、memcachedのほうがパフォーマンスが良い、と書かれている方もいます。

今回の記事では、memcachedをMAMP環境にインストールする、というところをやっていきます。

memcachedのインストール方法

brewでインストールする

Homebrewをつかって、必要なパッケージをインストールします。
今回はmemcachedを使うため、必要なlibmemcachedもインストールします。

brew install memcached
brew install libmemcached

memcachedをサービスに登録する

インストールしたmemcachedを起動するため、サービスに登録します。
登録の方法は、plistファイルを作成することです。
/Library/LaunchDaemons/homebrew.memcached.plistというファイルを作成します。

vi /Library/LaunchDaemons/homebrew.memcached.plist

作成したら、下記の内容をコピペして書き込みます。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>Label</key>
    <string>memcached</string>
    <key>ProgramArguments</key>
    <array>
        <string>/usr/local/bin/memcached</string>
        <string>-u</string>
        <string>devy</string>
        <string>-m</string>
        <string>32</string>
    </array>
    <key>RunAtLoad</key>
    <true/>
</dict>
</plist>

RunAtLoadがTRUEになっているので、PC起動時にmemcachedも自動で起動されるようになります。

作成したplistファイルをサービスに登録します。登録したら、サービスを起動します。

launchctl load /Library/LaunchDaemons/homebrew.memcached.plist
launchctl start memcached

コマンドが実行できない場合は、sudo を頭につけて実行してみてください。

(おまけ)サービスを停止して、サービスから登録を解除するとき
launchctl stop memcached
launchctl unload /Library/LaunchDaemons/homebrew.memcached.plist

PHP の拡張モジュール memcached.so をダウンロードする

まず、自分の環境にすでにインストールされているPHPのバージョンを調べます。

php -v

わたしの場合、実行結果は下記のようになりました。

PHP 5.5.36 (cli) (built: May 29 2016 01:07:06) 
Copyright (c) 1997-2015 The PHP Group
Zend Engine v2.5.0, Copyright (c) 1998-2015 Zend Technologies

PHPのバージョンは「5.5.36」です。

そのPHPのバージョンに該当しているmemcached.soを下記のサイトからダウンロードして、ディレクトリに設置します。
GitHub - majksner/php-memcached-mamp: Pecl Memcached Extension for MAMP 3.x
設置するディレクトリは、phpinfo()extension_dirの欄に書いてあるので、PHPが実行できるところで下記のように書いて、ブラウザからそのページにアクセスすると表示されます。

phpinfo()

f:id:bombomprin:20161024185432p:plain

私の場合は、/Applications/MAMP/bin/php/php5.6.10/lib/php/extensions/no-debug-non-zts-20131226/extension_dirとなりました。

PHP の拡張モジュール memcached.so を有効にする

ダウンロードして設置したmemcached.soを有効にします。
php.iniに下記を記述します。

extension = "memcached.so"

php.iniのファイルの場所がわからない場合、先ほどと同様にphpinfo()でLoaded Configuration Fileの場所を確認ください。
f:id:bombomprin:20161024185733p:plain
私の場合は、/Applications/MAMP/bin/php/php5.6.10/conf/php.iniでした。

php.iniに追記を行います。
私はすでにいくつか拡張モジュールを入れていたので、下記のように書き足しました。(下から2行目)

;extension=apcu.so

extension=imap.so
extension=yaz.so
extension=mcrypt.so
extension=gettext.so
extension=pgsql.so
extension=pdo_pgsql.so
extension=memcached.so

;extension=imagick.so

追加したモジュールが有効になっていることを確認

apacheを再起動して、先ほど追加したモジュールが有効になっていることを確認します。

まず、apacheを再起動します。私はMAMPの画面から再起動を行いました。
f:id:bombomprin:20161024190530p:plain

再起動が終わったら、再度phpinfo() を表示して、memcached の項目があるか確認します。

コンパイルエラーが起こったら

私はここのタイミングでコンパイルエラーが起きました。

A PHP Error was encountered

Severity: Core Warning

Message: PHP Startup: memcached: Unable to initialize module Module compiled with module API=20121212 PHP compiled with module API=20131226 These options need to match

Filename: Unknown

Line Number: 0

Backtrace:

memcached.soを、PHP5.5向けのものから、PHP5.6向けのものに変更して再起動したら、正常にmemcached の項目が表示されました。
f:id:bombomprin:20161024190826p:plain

完成!