上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

CakePHPをインストールしてブログチュートリアルに挑戦

MacのXAMPPに、フレームワークの中でも一番お手軽と言われている「CakePHP」を入れて、ブログチュートリアルに挑戦してみました。
CakePHPのオンラインマニュアルの嬉しいところは、「ブログチュートリアル」に沿って開発していくと、データベースと連携した簡単な更新管理システムが作れてしまう点です。

【参考】
CakePHPブログチュートリアル

上記ページに沿って試した際の注意点などを書いておきます。

●CakePHPをインストール
せっかくなので、gitを使ってリポジトリから。

$ git clone git://github.com/cakephp/cakephp.git

Cloning into cakephp...
remote: Counting objects: 117664, done.
remote: Compressing objects: 100% (23338/23338), done.
remote: Total 117664 (delta 94311), reused 114520 (delta 92321)
Receiving objects: 100% (117664/117664), 14.95 MiB | 1.08 MiB/s, done.
Resolving deltas: 100% (94311/94311), done.


私は、/Applications/XAMPP/htdocs/cakephpに置きました。

●ブログチュートリアルを始める前に
http://localhost/cakephpにアクセスしてみてください。
以下のようにいろいろ警告や注意が表示されると思います。
CakePHP初期画面
これは、まだcakephpの環境設定が終わっていない状態だからです。

●ブログデータベースの作成
データベース、テーブル、フィールドの照合順序を「utf8_unicode_ci」にしておかないと、日本語が文字化けしますのでご注意。

●Cakeのデータベース設定
CakePHPのデータベース設定用ファイルは、app/config/database.php.defaultにあるので、これをコピーして利用します。

$ cp app/config/database.php.default app/config/database.php

database.phpの設定内容は、先ほど作成したデータベースに合わせます。



●追加の設定
設定1:パーミッションの設定

Warning (512): /Applications/XAMPP/xamppfiles/htdocs/cakephp/app/tmp/cache/ is not writable
Warning (512): /Applications/XAMPP/xamppfiles/htdocs/cakephp/app/tmp/cache/persistent/ is not writable
Warning (512): /Applications/XAMPP/xamppfiles/htdocs/cakephp/app/tmp/cache/models/ is not writable


CakePHPをインストールするにはcakephp/app/tmp含むtmpフォルダ内全てに書き込み権限が必要です。
Webサーバーのユーザー名を調べて、ディレクトリにそのユーザーの所有権をを与えるのが一番と書かれてあるので、Webルートに以下の内容を書いたwhoami.phpを作成して実行し、

<?php echo `whoami`;?>



表示されたユーザー名でtmpフォルダに所有権をもたせます。

$ cd /Application/XAMPP/htdocs/cakephp
$ chown -R nobody app/tmp



設定2:セキュリティパスワードの変更

Notice (1024): Please change the value of 'Security.salt' in app/config/core.php to a salt value specific to your application
Notice (1024): Please change the value of 'Security.cipherSeed' in app/config/core.php to a numeric (digits only) seed value specific to your application


Noticeですが気になるので設定しておきます。
デフォルトのままだとダメということなので、デフォルトの文字列を適当に削ったものでもOKです。

$ vi app/config/core.php

Security.saltと、Security.cipherSeedに設定してある文字列を適当に変更してください。



ここまで設定して先ほどのページにアクセスすると、WarningとNoticeが消えています。
CakePHP初期設定完了

後は書かれてある通りにファイルを作っていけばOKです。
完了するとこのようなものが出来上がります。
CakePHPブログチュートリアル完成
タイトルクリック、Add Post、Edit、Delete、それぞれちゃんと動くかの確認を忘れないでください。

CakePHPはMVCモデルに忠実な造りになっていて、それぞれのファイル同士の繋がりやデータベースとの連携も把握しやすいという印象を受けました。

EthnaでMySQLデータベースにアクセスしてデータを取得

EthnaでのデータベースアクセスとしてPEAR::DBを使った方法がありますが、他のフレームワークと同様にO/Rマッパーも用意されていることを知ったので、試してみました。

【参考】
社長フラグ:初心者が送るEthna超入門その4「はじめてのapp-object」

●データベースを作成する
phpMyAdminなどで以下のデータベースを作成します。

・DB名:greeting
・テーブル名:greeting_word
・フィールド名:id auto_increment、word varchar(32)
・wordフィールドに「good morning」「hello」を追加

面倒な場合は以下のSQL文を流しこんでください。

CREATE DATABASE `greeting`;
CREATE TABLE `greeting`.`greeting_word` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`word` varchar(32) NOT NULL,
PRIMARY KEY (`id`)
);

INSERT INTO `greeting`.`greeting_word` (`id`, `word`) VALUES
(1, 'good morning'),(2, 'hello');



●helloethnaプロジェクトを作成
ethnaの新規プロジェクトは、add-projectオプションでつくることができます。

$ cd /Applications/XAMPP/htdocs/Ethna
$ ethna add-project helloethna



●helloethnaプロジェクトからデータベースへ接続するための設定
データベースへの接続設定は、そのプロジェクトのetcフォルダにある設定ファイルで行います。

cd helloethna/etc
$ vi helloethna-ini.php

'dsn' => 'mysql://root:mysql@localhost/greeting',
※ローカル環境なのでrootユーザー、安易なパスワード(mysql)にしています。



●データベース操作用オブジェクトを生成
helloethnaプロジェクトフォルダの中で以下のコマンドを実行します。
これで、先ほど作ったgreeting_wordテーブルに対応した操作用オブジェクトが生成されます。

ethna add-app-object greeting_word



●データベースへアクセスしてデータを取得
helloethna/app/view/Greeting.phpを編集(Greeting.phpが無い場合は、「ethna add-view Greeting」で作成)

preforward() {
 // select * from greeting_word where id=1;
 $greetingWordObj=$this->backend->getObject('greeting_word','id','1');
 // 取得したオブジェクトを配列に格納
 $greetingWord = $greetingWordObj->getNameObject();
 // 配列をアクションフォームで扱うための処理
 $this->af->setApp('greetingWord',$greetingWord );
}



●表示用テンプレートの編集
helloethna/template/ja_JP/greeting.tplを編集(無ければ、「ethna add-template greeting」で作成)

<h2>app-object練習</h2>
<ul>
 {foreach from=$app.greetingWord item=item key=key}
 <li>{$key}:{$item}</li>
 {/foreach}
</ul>



http://localhost/Ethna/helloethna/?action_greeting=trueにアクセスすると、以下のように表示されます。
app-objectサンプル
私の場合、最初「undefined action」とエラーが出たので、「ethna add-action Greeting」でアクションを作成しました。

「DBObject」ではなくて「AppObject」という名前からすると、データベース以外のものも操作できそうな感じがするのですが、扱えるのはデータベースだけなのかな?

MacのXAMPPにEthnaをインストールしてみた

テンプレートエンジンにSmartyを利用したPHPフレームワークのEthna、調べてみるとPEAR経由でインストールできるようなので早速インストールしてみました。

●インストール
 インストール方法は公式サイトに書いてあるように、以下のコマンドだけで、Ethnaとそれに依存するSmarty、simpletestも一緒にインストールされます。

$ pear channel-discover pear.ethna.jp
$ pear update-channels
$ pear install -a ethna/ethna

インストール後にXAMPPのpearフォルダを見ると、
Ethna、Smarty、simpletestのフォルダが出来ています。
/Applications/XAMPP/xamppfiles/lib/php/pear

Ethna:ダウンロード



●ethnaコマンドを使えるようにする
 XAMPPのPEAR経由でインストールした場合、ethnaコマンドは、
/Applications/XAMPP/xamppfileslib/php/pear/Ethna/binにある「ethna.sh」です。
このファイルを開いて、一番上に以下のようにphpバイナリのパスとEthnaのパスを追記します。

PHP_COMMAND="/usr/bin/php"
ETHNA_HOME="/Applications/XAMPP/xamppfiles/lib/php/pear/Ethna"


さらに、.shを外して、パスの通っているフォルダにシンボリックリンクを置くと、いつでも利用できて便利です。

$ mv ethna.sh
$ cd /usr/local/bin
$ ln -s /Applications/XAMPP/xamppfiles/lib/php/pear/Ethna/bin/ethna ethna



●サンプルを動かしてみる

$ ethna add-project -b /Applications/XAMPP/htdocs/Ethna/sample sample
※EthnaフォルダはEthna用に作ったフォルダです。

Ethna:アプリケーション構築手順(1)


これで、sampleフォルダの中に以下のフォルダが自動生成されます。

.ethna etc log template
app lib schema tmp
bin locale skel www


http://localhost/Ethna/sample/www、にアクセスすると、以下のエラーが沢山。。

Deprecated: Assigning the return value of new by reference is deprecated in 〜


調べたところ、このエラーはPHP5.3の場合に表示されるものだそうで、php.iniを以下のように書き換えればこのエラーが表示されなくなります。

error_reporting = E_ALL & ~E_NOTICE & ~E_DEPRECATED


無事、サンプルが表示されました。
Ethnaサンプル
フレームワークがPEAR経由でインストールできるのはお手軽でいいですね。

MacにXAMPPを入れた際にPEARのパス設定で悩んだ点

WindowsにXAMPPを入れた時はすんなりいけたのですが、MacBook(Snow Leopard)にXXAMPを入れた際にPEARの設定で少しハマったので、備忘録として書いておきます。

MacにXAMPPを入れた後に、

/Applications/XAMPP/xamppfiles/bin/pear install PEAR


でPEARをインストールすると、/Applications/XAMPP/xamppfiles/lib/phpに「pear」というフォルダが作られて、/Applications/XAMPP/etc/php.iniの「include_path」が以下のように追記されます。

;***** Added by go-pear
include_path=".:/Applications/xampp/xamppfiles/lib/php:
        /Applications/xampp/xamppfiles/lib/php/pear" ※実際は1行で書かれてます
;*****


その後にApacheを再起動すればPEARが使えるようになるはずなのですが、エラー。。

Fatal error: Class 'PEAR_Error' not found 〜


PEAR_ErrorクラスはPEAR.phpの中にあるので、pearフォルダへのパスが上手く設定できてないということになるのですが、phpinfoでinclude_pathを確認したところ、ちゃんとpearフォルダへのパスは設定されていました。
試行錯誤した結果、php.iniの先ほどのinclude_pathの「.:」の部分を消したところ、上手くPEARが使えました。

;***** Added by go-pear
include_path="/Applications/xampp/xamppfiles/lib/php:
       /Applications/xampp/xamppfiles/lib/php/pear" ※実際は1行で書かれてます
;*****


「.」はカレントディレクトリを示すのですが、何故これがあると上手くパスが通らなかったのかは分かりませんが、PEARが使えるようになったので、とりあえずは良しとします。

Ruby技術者認定試験 Sliverに合格しました!

試験の結果は「94点」で合格!(ほっ
Ruby技術者認定試験
後日、認定証が郵送されるそうです。

【 試験を受けた理由 】
実は最初Rubyをいじる前にRuby on Railsをいじってみて、Rubyの文法が分からなくて四苦八苦したのですが、なかなか面白かったので、Rubyの勉強をしたいと思ったのがきっかけです。
Rubyを勉強するにあたり、何か目標が欲しいと思い、まずはRuby技術者認定試験 Silverの合格を目指すことにしました。
Rubyアソシエーション:Ruby技術者認定試験機構

その理由としては、この資格を受けたRubyプログラマーの方々のネット上の評判がとても良かったので。
そこで「Ruby技術者認定試験公式ガイド Ruby1.8対応版 Silver」を購入して勉強しました。




この本の巻末にある模擬問題がスラスラ解答できるようになれば、Silverは合格できると書かれている人が多かったのも購入した理由です。

【 試験対策 】
●公式ガイドの模擬問題を解く
●以下の模擬問題サイトの問題を解く
 ・Ruby認定試験対策問題(こちらは少し難しいので、勉強中の人はある程度Rubyに慣れてから)
 ・総合問題 No.1
 ・まつもと ゆきひろのRuby検定(My ITproへの登録必須)
 ・minituku:Ruby技術者認定試験(Silver)対策問題集
●それぞれの問題の回答、解説を見て、1問1問納得が行くまで理解し、繰り返す
●とにかく毎日Rubyを触り、疑問に思ったら実際にプログラムを書いたり、irbで動作を確かめる
●公式ガイド、逆引きRubyRubyリファレンスマニュアルなどもよく見ておく

私が行った試験対策としてはこんな感じでしょうか。

【 試験予約 】
Ruby技術者認定試験は予約が取れればいつでも試験を受けることが可能ですが、都合が悪くなりキャンセルする場合のことも考えて、1週間程度は余裕を見て予約しておいた方が安心です。
テストセンターでは様々な試験が行われているため、近々の予約は結構詰まっていることが多いようです。
試験予約はプロメトリックのサイトでユーザー登録後に、家、会社などから近いテストセンターを選択して予約します。
Ruby技術者認定試験の試験料は、15,750円。この価格はプレッシャーになりますね。
予約完了後に表示される確認書ページを印刷して試験当日に持っていく必要があるのですが、印刷環境が無い場合は、サポートセンターに連絡をすると、その日に確認書の郵送処理を行ってくれます。
私は印刷環境が無かったので、連絡して郵送してもらいました。

その他、試験当日に必要なものとして身分証明書2点があるのですが、確認書に記載されているものがちゃんと揃っているか、必ず確認しておいてください。
これらを忘れると、当日試験を受けられなくなります。

【 試験当日 】
必ず、集合時刻前に試験会場に着くようにしてください!
試験会場最寄り駅には1時間前に着いて、カフェで最終確認をしていたのですが、集合時刻の数分前に名前を呼ばれたので、もう少し遅く着いていたら遅刻するところでした。。

テストセンターでは様々な試験を受ける人達が居るので、受付前にはその人達でいっぱいでした。
名前を呼ばれたら受付に行き、身分証明書2点を掲示して、サイン等を行って鍵を受け取ります。
ロッカーに貴重品等を閉まったら、次に呼ばれた時に、メモ用ボードとペンの入った試験セットを受け取り、全員受け取り終えたら試験会場へ移動し、着席後に各自試験開始です。

試験時間は90分、Ruby技術者認定試験の場合は50問中38問以上正解で合格点となります。
コンピュータ試験で、画面に表示された問題に該当する答えの選択肢をマウスでクリックして選択する形です。
その際、画面左下に見直しチェックを入れる欄があるので、後で見直したい問題、後でじっくり解く問題にチェックを入れておくと確認時に確認しやすいです。
ただ、全問回答語の確認画面からどの問題へも移動可能なので、チェックを入れなかった問題はもう確認できないということは無いのでご安心ください。
ただ、コンピュータ試験はOSがWindowsで結構古いマシンを利用するので、試験中にフリーズするんじゃないかという変なドキドキ感は常にあります。。

「もうOK」となったら、確認画面の「テストを終了」ボタンをクリックし、簡単なアンケートに答えて試験終了となりますが、アンケート完了後すぐに得点と合格/不合格が表示されます!
試験が終わったら退室して、試験セットを返却し、スタッフから試験結果の紙を貰って帰ります。

【 試験を終えて 】
実際の試験問題は公式ガイドの模擬問題と類似した問題が多かったように感じました。
公式ガイドの模擬問題と同じ開始30分位で全問一通り回答し終えたので、未回答問題や見直しチェックを入れた問題を解き直した後に2回程全問見直しを行いました。
が、それでも3問間違えました。

試験問題は毎回ランダムですが、私の時は以下のような問題がありました。
・Arrayクラス、Hashクラスの定義、使い方
・sort、sort_byについて
・splitメソッドの挙動 → 試験後にirbで確認した私のエントリー
・各クラスのクラスメソッド
・chop、chompの挙動
・変数のスコープ
・Rubyの予約語

【 一番の注意点 】
公式ガイドの解説時ではメソッドを通した結果をそのまま出力して、そのメソッドの挙動として示しているものが多いのですが、試験問題ではメソッドを通した結果を一度変数へ代入し、その変数を出力する場合が多いので、各メソッドが破壊的メソッドか非破壊的メソッドなのかをしっかり把握しておかないと混乱するので、この点は注意してください。
公式ガイドの模擬問題にもそのような出題がありますけどね。

そのまま出力
p "abc¥r¥n".chomp #=> "abc"
p "abc¥r¥n".chomp! #=> "abc"

一度変数に代入したものを出力
a = "abc¥r¥n"
a.chomp
p a #=> "abc¥r¥n"

a = "abc¥r¥n"
a.chomp!
p a #=> "abc"


実務経験の無い私ですが、実務経験があって日々Rubyをいじっている方なら、普段使わないようなメソッドや動作について確認する程度で問題なく合格できるのではないでしょうか。

いつになるかは未定ですが、次はSilverの上のGoldの試験を受けてみたいです。
プロフィール

星羽(榎田)

Author:星羽(榎田)
PHPエンジニアがRuby、PHPなどをいじった時の備忘録

最新記事
最新コメント
最新トラックバック
カテゴリ
スポンサードリンク
検索フォーム
RSSリンクの表示
リンク
QRコード
QR
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。