2011-08-11 Updated

wordpressのプラグインでCAKEPHPを利用する方法

cakephpとwordpressのプラグインを統合する方法です。やはりデータベースアクセスやデータバリデーションはcakephpを利用するほうが楽です。そのままでは統合できませんので、いくつか事前準備が必要です。具体的には、cakephpとのブリッジクラスを作成し、そのクラスからcakephpのアクションに処理を委譲させる方法をとります。では、順に見ていきましょう。

cakephpのwebrootにあるindex.phpをcakephp.phpにコピーする

このコピーしたファイルの一番最後の方にあるDispatcherをコメントアウトします。これは、手動でコントローラーを起動するため、自動的にcakephpに処理が委譲しないようにするための措置です。詳細はUsing CakePHP in external PHP Systemsを参照してください。

//$Dispatcher = new Dispatcher();
//$Dispatcher->dispatch();

cakephp側のコントローラーにメソッドを追加する

次に、wordpressから処理が委譲されるメソッドを作成します。このメソッドは本来のcakephpで実行されると宜しくないので、メソッドの頭に「_」をつけてprivateにして宣言します。また、表示させるviewも作成します。この例では_wp_admin_indexと_wp_admin_listを作成しています。

//=================================================
 //Wordpress側の管理画面用のメソッド
 //================================================
 function _wp_admin_index() {
 $this->layout = 'wp-admin';
 echo $this->render("_wp_admin_index");   
 }

 function _wp_admin_list() {
 $this->layout = 'wp-admin';
 echo $this->render("_wp_admin_list");   
 }

wordpress用のlayoutファイルを作成する

通常のlayout.ctpだと不要なデザインが含まれる可能性があるため、wordpress専用のlayoutファイルを作成します。

<?php
 echo $this->Session->flash();
 echo $content_for_layout;

 

wordpressのプラグインを作成する

<?php
/*
Plugin Name: Test
Plugin URI: http://www.mnsite.com
Description: Test Plugin
Author: MNSoft
Author URI: http://www.mnsite.com/
Version: 0.1
*/
add_action('admin_menu', 'my_plugin_menu');

function my_plugin_menu() {
 add_menu_page('テストページタイトル','インデックス',8,
         __FILE__, 'wp_admin_index');
 //第一引数が__FILE__なのは、parentに自分自身がくるため。
 //第5引数は適当?重複するとダメ
 add_submenu_page(__FILE__,'リスト','リスト',8,
        'list', 'wp_admin_list');
}

//これらが、cakephpへのブリッジメソッドとなる
function wp_admin_index() {
 $cake = new WPCakePHP();
 $cake->action(_wp_admin_index);

}
function wp_admin_list() {
 $cake = new WPCakePHP();
 $cake->action(_wp_admin_list);
}

//cakephpのwordpressラッパー
class WPCakePHP {
 var $controller;

 //引数で指定されたcakephpのメソッドに処理を委譲する
 function action($act) {
     require_once($_SERVER['DOCUMENT_ROOT'].'/webroot/cakephp.php');
     //ここでの例ではTestsControllerを想定
     App::import('Controller', 'Tests');
     $this->controller = new TestsController();
     $this->controller->constructClasses();
     $this->controller->$act();
 }
}
?>

最後に

備忘録としての意味もあり、駆け足で書きました。これからもう少し情報を拡充していきます。まずは、これがもっとも基本的な連携だと思います。ちなみに、cakephpとwordpressを連動させるとstripslashes_deepと__メソッドで重複宣言のエラーが発生します。今後修正されることを期待しますが、これの暫定措置としてcakephpのbasic.phpでfunction_existsにてラップすることで対応しました。他国語対応させる場合には別途検討する必要がありそうです。

2011-08-11 Updated

Cakephpの開発環境を作ろう

準備するもの

まずは、開発の前に開発できる環境を構築する必要があります。開発にあたり、PHPの実行環境、WEBサーバー、データベースの3つが必須です。一見大変そうですが、実はとっても簡単に環境構築が可能なのです。

windows上にxampp環境を入手しよう

cakephpでシステムを構築する場合には、PHPが動作するapache等のWEBサーバーの環境が必要です。通常はプロバイダー等でホームページスペースやレンタルサーバー等では既に構築されているため直ぐに動作が可能ですが、それらを使って開発を行うのはあまり効率的とは言えません。また、データベース環境も開発用と本場用とは区別しておきたいものです。

これらを取りまとめてセットアップ可能なxamppというものが存在します。windows用にはインストーラーもあり、数回のクリックでインストールが完了します。まずは、XAMPP For Windowsをダウンロードします。

ダウンロードは、XAMPP Windows版のEXEをダウンロードします。

 

ダウンロードされたファイルからインストールを行います。詳細はxamppのインストールマニュアルを参照して下さい。これで、apache、mysql、PHP5の開発環境がc:\xamppに整います。

CAKEPHP開発用のフォルダーを作成しよう

まずは、cakephpの最新版をダウンロードします。執筆時点での最新版は1.3.5でした。画面右側のDownloadからダウンロードを行います。ダウンロードリンクをクリックすると、様々なファイルが一覧表示されますが、windowsでの開発ならzip形式を選択します。1.3.5なら、1.3.5の右側のzipをクリックしてダウンロードを行います。

ダウンロードされたファイルはZIP形式で圧縮されていますので、解凍します。解凍されたフォルダー内をたどると、以下のようなフォルダー構成があります。これが、これから長~~くお付き合いするCAKEのトップレベルフォルダーの構成になります。

 

次に、開発用のフォルダーを作成します。これは、どこでもいいのですが、例えば、Cドライブ直下にdevWWW等とします。これは、DevelopWWWの略で、WEB開発用と私はしています。さらに、このフォルダー直下に開発したいシステムのフォルダーを作成します。例えば、ご意見システムを作成するのであれば、「opinion」などとします。開発を進めるとソースコード以外にもドキュメントや備忘録等が増えていきます。これらをソースコードと同じ部分に保管したくないので、このフォルダー以下にsrcとdocなどを作成します。doc無いには、備忘録や議事録、画像等なんでも保存します。そして、src以下にソースコードを保管します。少し複雑になりますが、後ほどツリー図を記載します。

さて、ここまででソースコードを保管するフォルダーが作成されました。このフォルダー内に先ほど解凍したCAKEPHPのファイル一式をコピーします。最終的には以下の形になります。今後これを開発用フォルダーと呼びます。

 

XAMPPの設定を行おう

ここまでで、xamppのインストールとCAKEPHPのファイルがセットアップされました。最後に仕上げの設定ですが、ブラウザーから「localhost」と入力すると、先ほどのcakephpが表示されるようにxamppの設定を行います。設定といっても数行変更するだけです。まずは、xamppのインストールフォルダーを開きます。その中の、apache->conf->httpd.confを設定します。このファイルをメモ帳やお気に入りのエディターで開きます。このファイルがxamppでインストールされたapacheの設定ファイルになります。

このファイルの中の大体190行目付近にDocumentRootの設定箇所があります。この部分を先ほど作成した開発用フォルダーのapp/webrootをCドライブからの絶対パスで記載します。また、合わせてDirectoryの設定とオプションの設定および、設定の上書き(AllowOverride=上書許可)の設定も行います。ちなみに、DocumentRootは通常一つしか設定できませんから、予め記載されいるDocumentRoot行は「#」をつけてコメントアウトします。詳細は以下参照。

 

Apacheの起動とテスト環境の表示

お疲れ様でした。開発の前段階でも結構な作業量がありますが、どのような開発でも基本的には同じ作業になります。後は、CAKEPHP側でDocumentRootの位置を変更する方法もあります。これを行うとよりセキュリティー面で有効となります。詳細はcakephpのマニュアルを参照下さい。

さて、ここまでの設定が完了したらいよいよApacheの起動です。xamppを起動し、画面上のapache欄のstartボタンを押します。左側に薄緑でstartedなどと表示されれば起動が成功しています。もし、startedと記載されて直ぐに消えてしまう場合には設定が誤っています。c:/xampp/apache以下にlogsというフォルダーがあり、その中のerror.logにエラー内容が記載されますので、内容を確認して修正します。尚、80番ポートを利用しているアプリケーション(スカイプ等)が既に起動している場合には、apacheと競合して起動できませんので、予めそのようなアプリケーションは停止しておく必要があります。

無事、apacheが起動したらブラウザーを起動し、http://127.0.0.1または、http://localhostと入力します。以下のような画面が表示されているはずです。

 

参考サイト

2011-08-11 Updated

CAKEPHPってなに?

まずは、フレームワークとは

フレームワークとは何かをいうと、アプリケーションの雛形というか骨格です。例えば、アンケートフォームやご意見フォームなどユーザーが何らかの情報を入力し、その情報をデータベースに格納する場合には殆ど同じような処理を毎回書く必要があります。よくあるパターンとしては・・・

  1. ユーザーは入力フォーム内容を入力して「確認へ」ボタンを押す。
  2. システムは入力された内容を検証する。問題があった場合には、(1)に戻る。
  3. システムは、入力された内容を基に確認画面を表示する。
  4. ユーザーは内容を確認し、問題がなければ「登録」ボタンを。あるいは、「戻る」ボタンを押す。
  5. システムは「登録」ボタンをおされた場合には、再度内容を確認してデータベース等に格納する。
  6. システムは、登録完了画面を作成して、画面に表示する。
  7. システムは、登録されたメールアドレスにメールを送信する

だいたいこの様なシステムが多いと思います。

つまり、この似通った処理のプログラムを毎回書いているため、そのプログラム内容も似通ってものです。フレームワークとは、大雑把にいうと、この画面の遷移、入力内容を検証、データベースへの登録等の決まりきった部分を骨格として提供するわけです。

 

このように、共通の部分はフレームワークが提供してくれますので、実際には、アプリケーション固有のこの青色部分のみ集中してプログラムを行えばよく、労力の大幅な削減になります。実は、これよりももっと大きなメリットがフレームワークにはあります。それは、独自作成のプログラムと比較してバグやセキュリティーホールが極めて少ないのです。これは、世界中で多くのサイトがフレームワークを導入して既に運用している訳で、常に徹底的な検証がされているわけです。もし、問題点が発覚した場合には、すぐさま修正が行われます。フレームワークは作業を低減し、強固な骨格を我々プログラマーに提供してくれるのです。

CAKEPHPとはなに?

CAKEPHPもPHP言語で記述されたフレームワークで、現在最も人気があるフレームワークの一つです。先進の様々な機能が提供されアプリケーションが高速に作成可能です。CAKEPHP以外にはSymfony、Zend Framework、ethena等様々なフレームワークがありますが、GoogleTorendで比較してみると、CAKEPHPの人気が伺えます。特に、日本においては圧倒的な人気になっています。

CAKEPHPの関連サイト

2011-08-11 Updated

動的サイトというもの

静的サイトと動的サイトの違い

例えば、YahooやGoogleなどのサイトは動的サイトと言えます。逆に、企業などのサイトのトップページ等は静的サイトと思われます。違いはなんでしょうか?一番の違いはユーザーからの入力を受け付けるか、受付ないかです。より具体的には、ユーザーが入力する画面までは静的サイトでも良いのです。例えば、アンケートフォームの場合にユーザーが入力する画面は全ユーザー共通のはずですが、その結果はユーザーごとに違うのが普通です。また、アンケートにしても、メールフォームにしても入力された情報を集約しなければ意味がありません。これも動的サイトの特徴の一つです。つまり、ユーザー毎に処理が変わり、画面も変わるようなサイトが動的サイトなのです。

静的サイトでも内部的に動的サイトがあります

たとえは、当サイトがそれです。当サイトの全ての画面は動的に生成されています。通常ホームページを作成する場合には、.htmlファイルを開き、その中を編集してFTPなどでサーバーに接続して公開するのが一般的です。しかし、これはかなり面倒な作業です。そこで、WEB上からページを修正したり、削除したり、追加できる仕組みをコンテンツマネジメントシステムと総称され、一般にCMSを略されます。近年流行したブログもその一種です。一見しただけでは、ユーザー入力部分が無いページも多く静的サイトに見えますが、実は内部的には動的サイトなのです。

一方で接続するのがPCの場合には、このページを。携帯の場合にはこのページをと切り替えるサイトが多くあります。なかでは、検索エンジンからの検索とその他の顧客によって表示する内容を切り替えているサイトまであります。これらは動的なサイトなのでしょうか?じつは、この切り分け作業は一般的にもう一段回前の処理になります。つまり、静的なサイトでも切り分けは可能なのです。

動的サイトのメリットとデメリット

物事には全てメリットとデメリットがあるように、動的サイトにもそれが存在します。まず、メリットですが、これは多くあります。まずは、ユーザー単位での表示切替や会員ページの作成。ユーザーからの意見徴収やコミュニティーの形成。このように様々なことが可能となり、無限の可能性を占めています。逆にデメリットのほうは、静的サイトと比較してサーバーに負荷がかかるため、速度が遅くなる。プログラムにバグがあるとセキュリティー上で深刻な問題が発生する。それと、動的サイトを作成するためには一定のスキルが必要。といったところでしょうか。ただし、これらのデメリットを改善に解決は難しいにしろリスクを削減する手法は様々存在しています。負荷の問題については、スペックの向上等で対応可能であり、コストをかければ平行稼動等もできます。バグの部分ですが、バグを少なくする唯一の方法はコードを書かないことですので、新しく記載するコードを少なくすればその分バグは減少します。また、新しいコードを減らす為にはフレームワークが有効です。最後に一定のスキルですが、これはこのサイトで順を追って説明していきます。

以上のことから、静的サイトにはない様々な工夫が動的サイトでは実現でき、より魅力的かつ個性的なホームページを作成可能であるといえます。

2011-08-11 Updated

開発環境の準備

プログラマーはキーボードが命

木工職人が、自身の手に馴染んだカンナを使うように、プログラマーは自身の手に馴染んだキーボードとエディターをそろえる必要があります。特に、キーボードはとても重要です。お勧めのキーボードをまずは紹介します。アフィリエイトリンクになっています。もし、興味がおありなら、是非このリンクから購入して下さい。私に少しの小遣いが入ります。

まず、プログラムを本当に行うのなら、英語キーボードを推奨します。理由は記号入力がしやすいからです。プログラムでは頻繁に「’」や「”」を多様します。日本語キーボードの場合には、Shift+2または、Shift+7です。英語キーボードでは、「け」とShift+「け」となり、無駄なストロークなしで入力できます。あと、日本語キーボードでは&の入力も遠いですね。それと、日本語キーボードはスペースキーも小さいので、若干不便です。後、利用するエディターによってはコントロールキーの位置が最悪になります。

ただ、英語キーボードの場合には、キー配列が異なるため、日本語キーボードを利用している人が直ぐに利用するのは困難です。また、複数人で利用するような端末には設置しないほうがよいでしょう。

東プレのRealForceというキーボードです。見た目は何の変哲もないキーボードですが、実はこれが凄いんです!キーボードの命はキータッチですが、このキータッチには、メンブレンスイッチ方式、メカニカルスイッチ方式そして、静電容量無接点方式の3つあり、メンブレンスイッチ方式が一般的に流通しているメーカー製のキーボードの大半をしめています。右のキーボードは静電容量無接点方式になります。この方式はこのキーボード以外にはPFU製のHappyHackingKeybordにも使われていますが、これは東プレのOEM製品になりますので、RealForceが本家と言えます。なにが違うかというと、入力時のキータッチ感が違います。たとえると、「スコスコ」といった感じでとても滑らかで私も愛用していますが、休みの日等に20時間程度使っても疲れません。また、メンブレン方式で一時腱鞘炎になりましたが、それも知らないうちに治りました。あとは、耐久性が違います。メンブレン方式では内部の機械に接触してキー入力を行うためその部分がどうしても劣化します。それに対してこのキーボードの場合には接点がありません。そのため、耐久性はバツグンなのです。確かに高額なキーボードですが、いちど使い始めるとこのキーボードなしではパソコンは出来なくなる位の相棒になります。見た目は無骨で面白みもなにもありませんが、実用性は申し分なくおススメのキーボードです。
次のおススメはFILCOのキーボードです。私はこのキーボードは会社で愛用しています。こちらはメカニカル方式のキーボードでして、キーを押すと「カチカチ」と反応が伝わってきます。RealForceは大変静かで滑らかな入力が特徴ですが、このキーボードは「あー入力している!」という充実感が味わえます。そのうち、入力が快感(?)に変わります。このキーボードですが、メカニカルの機械部分(これを軸といいます)が黒軸、茶軸、青軸の3種類あり、それぞれ入力感が違います。私は茶軸派ですが、黒軸は最もカチカチ感が高く、青軸はカチカチ感+軽い入力感だといわれます。茶軸はカチカチ感が少し少なめです。ちなみに、黒軸と青軸はよく音がうるさいといわれるみたいです。

いずれも、この世界では最高級かつ至高のキーボードです。個人的にはHappyHackingKeybordも好きですが、Linux等の環境でガリガリコーディングをしないのであれば、上記2つが一番だと思います。一度使うと、パソコンに付いて来るような量産キーボードやゴテゴテと機能が多いキーボードは利用したくなくなります。キーボードの目的は入力作業です。それ以外の部分をデコレーションして本質の入力機能に重点を置いていないキーボードが近年目立ちます。ワンプッシュでメーラーが起動したり、IEが起動したり、シャットダウンができたりと・・・・まったくもって不要な機能だと思います(私の偏見ですが・・・)。 いちど、これらのキーボードを試してみてはいかがでしょうか?。

マウスは何でもOK

キーボードについて少しこだわってしまい長くなりました。それでは、マウスはどうでしょうか?答えは何でもOKです。私は秋葉原等で2000程度で販売しているマウスを長年利用しています。いったんプログラム環境に慣れるとマウスは殆ど使わなくなります。というより、使う時間が惜しくなります。全てはキーボードのショートカットで対応できます。マウスを利用するのは情報収集のWEBブラウザーやデバックなどです。ちなみに、マウスパッドはダイソーの100円のものを利用していますが、最近は畳のマウスパッドに興味があります。ちょっと粋ですよね。

プリンターはよく使います

プリンターは通常なら年賀状や写真印刷等で年間通してあまり利用しないように思います。しかし、プログラミングを行うと意外と印刷物が増えます。もしかしたら私だけかも知れませんが、ライブラリーのマニュアル、APIのマニュアル、サンプルコード、説明のページ等など、有用なものは印刷してファイリングしています。特に、有用なホームページは見つけた時点で直ぐに印刷してファイリングします。結構個人のホームページは無くなる事が多いので、発見した時が重要なのです。このような使い方を行っているため、写真画質等の高性能なプリンターは不要でして、4色インクの高速なプリンターが大変重宝します。私はHP製のOfficeJetPro K550に連続供給ユニットをくっ付けて利用しています。このプリンターは既に販売終了してしまいましたが、同等機種は今でもあると思います。なにより、連続供給が素晴らしいのです。これをつけるとインク切れから開放され、あの高価なインクも買わなくてすみます。私は常に200CC入りのボトルでインクを購入しています。通常1,000円程度の市販のインクは5ccや10cc程度だと聞いたことがありますが、連続供給のインクは200ccで1,000円程度です。つまり、コスト的には1/20になるわけです。また、印刷する用紙はA4です。こちらも需要が高いので、OfficeDepot等で5,000枚単位でまとめ買いします。

プログラムの開発環境を整える

プログラムの開発環境はそのプログラム言語によって様々です。以下では統合開発環境をその言語毎に紹介しますが、私の持論としては、言語毎に開発環境が異なり、キー操作が変更になるのは開発効率が低下すると思います。そのため、一つのテキストエディターを熟知し、それで全てのプログラムやドキュメントの作成が行えれば効率化にもつながります。かの有名な書籍「達人プログラマー」の第三章:パワーエディットのところにも

あなたは一芸に秀でていなければならないのです。単に直接タイピングを行い、マウスを使ってカット・アンド・ペーストをしているだけではだめなのです。強力なエディターとあなたの指先を使えば、高い生産性をあげることができるようになるのです・・・一つのエディターを熟知すること

とあります。私のおススメのエディターはemacsです。「イーマックス」と発音します。これはUnix系OSでは大変メジャーでして、elispという言語で自由自在に拡張可能です。習得にはそれなりに日数がかかり、特殊なキー操作を覚える必要も少なからずありますが、一度熟練すると、キー操作を無意識に行え、ある意味手の延長になります。これは大げさな表現ではなく、本当にそのように感じるから不思議です。このエディターの詳細はWikipedia本家サイトでお調べ下さい。

PHP eclipse 様々な言語で利用可能な統合開発環境です。PHP用のモードもあります。フォルダー移動が多くなるフレームワークでも使い勝手が良いです。ただ、動作が少し遅いのが難点です。また、大規模なエディターですので、設定やメニューも複雑です。
PHPエディタ- PHP専用のエディターです。ただし、最近は更新されていないのか少し古いようです。マニュアルの検索がF1キーでできたりします。
emacs+php mode 前述したemacsのPHP編集モードです。私はこれで開発しています。フォルダー移動が多い場合には、別途speedbar等も併用しています。
サクラエディタ これもおススメのエディターです。大変軽く、ちょっとした設定ファイルの修正から、長大なファイルまで編集できます。PHPも色分けされて表示されるので便利です。
Java eclipse eclipseはもともとJavaの開発環境だったため(今も主体はそうです)Javaの開発は最も得意です。Javaの開発ではコンパイル作業も必要なことからemacsよりeclipseの方が設定箇所もすくなる便利な面もあります。私はJavaの開発ではこれを利用しています。
NetBeans Javaの開発元であったSun microsystems(現在はOracleが買収)が開発を手がけたオープンソースの開発環境です。
C# #develop .NET FrameworkのC#の統合開発環境です。GUIエディターも付属しており不足なく開発できます。おススメです。

Visual Studio 2010
Express Edition

マイクロソフト純正の開発環境の評価版です。評価版といっても基本的な開発はでき、商用利用も可能です。ただし、30日以上の利用の場合には、ユーザー登録を行う必要があります。
Mono Develop 主に、Linuxで動作する.NET Frameworkと互換性があるMONO用の開発環境ですが、.NET Frameworkの開発環境としても利用できます。
C emacs 最近C言語はLinux等のシステムアプリケーションやwindowsの本当に込み入った部分をAPIを駆使して開発する位になってしまいました。そんなC言語ですが、C言語の開発はやはりemacsがナンバーワンです。使い慣れているのもありますが、最強ではないでしょうか。
C++ emacs 上と同じ理由です
Eclipse CDT eclipseにCDTというプラグインを追加するとC/C++の開発が容易になります。linuxで利用できるGUI開発環境はあまりないため重宝します。
2011-08-11 Updated

まずは自己紹介

30代後半の妻子持ちです

少数精鋭のソフトハウスでコーディングを行い、日夜技術を勉強中!ただ、最近はスマートホンで通勤中にコミックを読むのが楽しく、学習量が低下しているよな・・・。あ、こんなではだめだ!と言いつつも、なかなか抜けられない今日このごろ・・・。

名前 本名は内緒。管理人Mとしましょう。
年齢 30代後半
住所 東京都市街地
趣味 愛娘と遊ぶこと、読書
習慣 プログラム、パソコン全般
言語 C言語、C++言語、C#、Java、Pascal、Perl、Physon、Lisp、PHP、VB
一番好きなのは、Javaでしたが、最近はObjective-C
OS 一番好きなOSはDebian GNU/Linux。それと、FreeBSDとNetBSD
NetBSDは一番ソースコードが読みやすいから好き。
WEB デザインはだめ。現在のサイト作成は主にCAKEPHPを利用。ただし、CMSとの連動を行う事が多い。特に、XOOPSで全体を構築し、CAKEPHPをモジュールして利用したりする。MODxも多く利用している。MovableTypeはあまり好きではない。Flashを利用したサイト(ActionScript)もあまり好きではない。
SEO SEOを商売にしている業者は信用しない。なぜなら、SEOで検索してもその業者がトップに表示されないから。他社に進める前に自社をやらないと・・・
好きな食べ物 毎日のお弁当と食事、
ブドウ糖を多く含んだ甘いもの全般 スイーツパラダイスは感激しました。
それと、肉。最近は鶏肉のムネ肉が淡白でおいしいと感じている。次に牛肉かな。
好きなもの 新しいもの全般。ダイソーの文具。安いボールペン等
嫌いなもの 再現できないバグ、納期、不要な社内調整、通勤電車で出口をふさいで頑張っているオヤジ
欲しいもの お金、「ありがとう」という感謝、コピーロボット

とまあ、こんな奴です。

お問い合わせ