まだプログラマーですが何か?

プログラマーネタ中心。たまに作成したウェブサービス関連の話も https://twitter.com/dotnsf

2014/05

PHP を使ったアプリケーション開発フレームワークの1つ、cakePHP を最近あちこちで使うようになったので、その環境を構築する手順を紹介します。


まず前提条件として、PHP/MySQL(または mongoDB、或いは両方)/Apache HTTPD がセットアップ済みである必要があります。これらは全て異なるサーバーに用意しても構いませんが、本エントリでは同一のマシン内(localhost)に構築する前提で紹介します。

HTTP サーバーとして Apache HTTPD の代わりに Nginx を使うこともできますが、少し手順が異なってくるのでここでは詳細は省略します。DB は RDB を使うのであれば MySQL(又は互換性のある MariaDB) を、高速な JSON DB を使うのであれば mongoDB を、併用するのであれば両方をセットアップしておきます。これら前提条件の導入手順の詳細は以下を参照してください:
CentOS に PHP を導入する
CentOS に MySQL をインストールする
mongoDB を CentOS 上にインストールする
CentOS に Apache HTTPD を導入して SSL を有効にする


前提条件の用意が済んだら、公式ページから最新版の cakePHP をダウンロードします。仮にダウンロードモジュール名が cakephp-2.4.7.zip(バージョン 2.4.7)であったと仮定して以下の説明を続けます:


まずは cakePHP で開発するアプリケーションが使うデータベースを定義します。既存のものを使っても構いませんし、新規に作成しても構いません。ここでは MySQL 内に "cakedb" という名前の UTF8 データベースを作成しています。また同データベースにアクセスするためのユーザー cake_user を定義しました:
# mysql -u root -p
Enter password: (パスワード入力)
  :
  :
mysql> create database cakedb default character set utf8;
Query OK, 1 row affected (0.00 sec)
mysql> grant all privileges on cakedb.*  to cake_user@localhost identified by 'cake_pass' with grant option;
Query OK, 1 row affected (0.00 sec)
mysql> quit
#

次に cakePHP モジュールを展開します。この例ではドキュメントルート(/var/www/html/)以下に展開して、cake/ というフォルダ名に変更しています:
# cd /var/www/html
# unzip /tmp/cakephp-2.4.7.zip
# mv cakephp-2.4.7 cake

これで cakePHP がドキュメントルート以下に展開されました。が、利用するにはもう少し設定が必要です。まずは接続先データベースを定義します。まず app/Config/database.php.default を app/Config/database.php にコピーして、その内容を以下のように変更/保存します(この内容はデータベースに MySQL を使う前提で記載しています):
public $default = array(
  'datasource' => 'Database/Mysql',
  'persistent' => false,
  'host' => 'localhost',
  'login' => 'cake_user',
  'password' => 'cake_pass',
  'database' => 'cakedb',
  'prefix' => '',
  'encoding' => 'utf8'
);

public $cakedb = array(
  'datasource' => 'Database/Mysql',
  'persistent' => false,
  'host' => 'localhost',
  'login' => 'cake_user',
  'password' => 'cake_pass',
  'database' => 'cakedb',
  'prefix' => '',
  'encoding' => 'utf8'
);
この設定では上記で作成した MySQL 内の cakedb データベースに cake_user : cake_pass で接続するための $default という配列変数を定義しています。また全く同じ内容を $cakedb 変数にも設定しています。

cakePHP では特に何の指定もしない場合の接続先は $default 変数に定義する必要があります。そのための設定です。

なお、それだけならばわざわざ $cakedb 変数を定義する必要はないのですが、後から $default 以外の接続先を利用することも考慮してこのような設定にしています。MySQL 内の別のデータベースや、MySQL 以外の別データベースにも接続したり、接続先を随時変更したりすることができるようにこのようにしている(逆を言えば、MySQL 内の1つのデータベースだけを対象に読み書きするのであれば $default だけの定義で充分)、と理解してください。


次に cakePHP は一時的にファイルを作成することがあるため、そのための書き込み権限を付与します:
# cd app
# chmod -R 777 tmp

最後にセキュリティのための設定を行います。app/Config/core.php 内に 'Security.salt'(ハッシュキーの生成に用いる文字列)、および 'Security.cipherSeed'(暗号化・復号化で利用する文字列)がデフォルト状態で定義されています。これをそのまま使うのは危ないので、独自の内容に変更します。前者は半角英数字、後者は数値文字列で適当な内容に変更して保存ます:
    :
  Configure::write('Security.salt', 'ABCDabcd1234' );
    :
    :
  Configure::write('Security.cipherSeed', '12345678' );
    :


この時点で cakePHP を利用することができるようになります。ブラウザでドキュメントルートの cake サブディレクトリにアクセスすると、以下の様な画面になるはずです:
2014051301


この画面では緑および黄色のメッセージしか出ていませんが、ここに赤いメッセージが出ている場合はまだ設定が正しく完了していないことを意味しています。メッセージ内容を見直して、適宜対応してください。

とりあえず最低限のインストールはこんな感じです。



 

オープンソースのメモリキャッシュシステムとして、恐らく最もメジャーな memcached を CentOS にインストールする手順を紹介します:


インストールは yum で行います。memcached は rpmforge にあるので、まずは rpmforge のレポジトリを用意します。以下の例は 64bit 版 CentOS 6.x 向けのリポジトリですが、バージョンやアーキテクチャが異なる場合は適宜変更してください:
# rpm -Uhv http://apt.sw.be/redhat/el6/en/x86_64/rpmforge/RPMS/rpmforge-release-0.5.3-1.el6.rf.x86_64.rpm

で、yum インストール:
# yum install memcached

インストールが完了したら設定を確認します。必要に応じてこれらの値を変更します:
# cat /etc/sysconfig/memcached
PORT="11211" USER="memcached" MAXCONN="1024" CACHESIZE="64" OPTIONS="-l 127.0.0.1"

最後にデーモン起動と自動起動設定:
# /etc/init.d/memcached start
# chkconfig memcached on









 

ロジクール G550 パワーシェルコントローラ(以下 G550)が届いて1日経過しました。
2014051201

この G550 は iPhone/iPod Touch と Lightning 接続して、iOS のゲームをゲームパットで操作できるようにする、というものです。Lightning 接続なので iPhone 5 以降か、第五世代以降の iPod Touch で接続します。厳密には iOS7 以降の新機能であるゲーミング API に対応したゲームのみ操作が可能です。

接続が Lightning ということで BlueTooth を使いません。BlueTooth 接続による同様のゲームパッドは数多く出ていますが、BlueTooth による電力消費は心配ありません。 加えて、この G550 自体が 1500 mAh のバッテリーを内蔵していて、デバイス本体の電源負担を減らしてくれます。


ただ、購入前に想定していなかった問題点も分かってきました。まず上記のように G550 自体はデバイス本体の電源負担を軽くしてくれる設計になっているのですが、これを装着している間は(気のせいではないレベルで)画面が暗くなるまでの時間が長くなっているようです。要はなかなか画面が消えない、ということであり、ゲーム画面が消えないように工夫しているのかもしれませんが、その分については電気使用量が多くなっている、と思われます。

そしてもう1つ、iOS7 のゲーミング API に対応したゲーム、というのが、まだあまり多くない、ということが言えます。大半のゲームは未対応な上、スタート直後の選択画面では対応しているかのように見えても、実際のゲームが始まると照準が動かない、なんてこともあります。現時点で「互換性がある」とされているゲームの一覧を確認することもできますが、正直必ずしも多くはありません。この辺りは今後時間が解決していくのかもしれませんが、ちょっと想定以上に対応ゲームが少なかった、という印象です。 

もし購入を検討している人がいたら、お目当てのゲームが対応しているかどうかを確認の上で購入することをオススメします。コントローラ自体はそれなりに使いやすいので、対応さえしていれば使い勝手はいいと思っています。

僕は当面はパックマン専用機として遊ぶことになりそうです。


4月後半から「日本全国! マンホールの蓋(フタ) コレクションVol.1」というガシャポンが稼働を始めています:
7a03b792

ついにガチャポンに登場!「日本全国!マンホールの蓋(フタ)コレクションVol.1」


この Vol.1 シリーズでは、北は北海道から南は福岡まで、全7種のマンホールダイキャストがガシャポンの景品になっています。

が! 千葉県のデザインが含まれていないせいなのか、私の地元ではこのガシャポンが稼働している所を見たことがありません。稼働報告すらありません。もしかしたら稼働していないのかも・・・

というわけ(?)で、大人な方法で全7種を入手したいそこのあなた! 「ここから買えますよ」という情報です:


 ガシャポンは1回300円なので、7種コンプリートするには最低2100円必要です。
こちらから購入すると 2295 円 +送料+税。コンプリート前提の場合、どちらが安いかはなんとも言えません。

まあ、でも、近所に稼働してないならこれしかないとも言えるわけで、欲しい方どうぞ。


Vol.2 が出る前から「Vol. 1」を名乗るとは、なかなか期待できますね! Vol. 2 も待ってます!!
 

WordPress の最新バージョン 3.9(Smith) がリリースされました:
WordPress 3.9 "Smith"

ちなみにコードネームの "Smith" はジャズオルガン奏者の "Jimmy Smith" にちなんで付けられたそうです。この分野はあまり詳しくないので(苦笑)触れずに説明を続けます。 (^^;

注目の新機能のうち、特に気になるのが「画像編集」機能です。アップロードした画像コンテンツの拡大・縮小・切り抜き・回転・ドラッグ&ドロップといった簡易編集については標準機能だけでできるようになった、というものです。

これ、結構大きな意味があると思っています。WordPress はこれまでもコミュニティ提供の各種プラグインを使った拡張によって、CMS(コンテンツ管理システム)の(カスタマイズ前の)標準プラットフォームの主流になっていました。そこに今度は画像編集機能までが付属することになります。

これまでも WordPress をベースにカスタマイズする方法でウェブサイトを開発すれば、コンテンツ編集のリッチテキスト化やPC/モバイル両対応のレスポンシブ化といった機能については標準機能だけで実現できていましたが、今回の新機能によって、コンテンツにアップロードした画像の編集も(WordPress 3.9 以上をベースにしているだけで)可能になる、ということになるのです。

ウェブアプリケーションを開発する視点から考えると、この「画像編集」とはスクラッチで作るには結構面倒なものです。それを「WordPress をカスタマイズするだけで実現できる」ことになれば、開発者としての負担は大きく軽減します。システムを Java で作るべきか、PHP で作るべきか、、、という議論も吹きとんで「WordPress(とPHP)で作るのが一番楽」という判断になってもおかしくないし、現にプライベートでは Java メインの自分でも、運用中のウェブサイトの次回リニューアル時は WordPress ベースにしようかな、実現に都合悪いことってあったかな?? と考えなおしてしまいかねないインパクトです。

WordPress 3.8 から 3.9 へは一見するとあまり見た目の変更が伴ったバージョンアップではないので気づきにくいのですが、内部的にはかなり大きな衝撃を伴う新機能が含まれていましたね。



このページのトップヘ