Archive for the ‘環境’ Category

Windows+Eclipseで(ゴテゴテした)快適なCake開発環境を作る(CakePHP Advent Calendar 2011 11日目)

日曜日, 12月 11th, 2011

@mon_satさんからバトンを受け取ってのAdvent Calendar2011 11日目担当EG(@EGMC)です。
初参加で地味ネタですが、開発環境の話ってあまり聞かないのでとりあえず自分なりに育てた開発環境の話をしてみます。

※注 この前置きは長いのでさっさと本題に入りたい方は「開発環境構築編(ここから本編)」へどうぞ

ネタはWindows+EclipsePDT+その他tools。
昨今、勉強会に行くと皆MacBook Airなどを片手に、華麗にターミナルを開いてVimやEmacsで優雅にコーディングしている光景を目に致します。
そんな光景を横目に見つつ、しかしThinkpadでWindowsを起動してEclipseでもっさり開発している人たちも一定数いるはずだ!と信じてこのエントリーを書く次第です。いるかなあ。いるといいなあ。
前提として環境は

・開発サーバー(物理でもVPSでも)を外部(VMとかではなく)立てていて、DBは同サーバー(または同一ネットワーク内)にある
・ローカル環境はWindows+EclipsePDTで構築しており、プロジェクトは作成済み
・ソース編集はローカルで行うが、DBの操作やデバッグ(ログのtailとか)はリモートで行う
・ローカルのWindows環境にもphpがインストールされてる(bake用)

とします。
それ以前の情報は検索すればすぐ当たると思うので他に譲ります。
なお、cake1.3系で書きますが2.0系でも基本的に同じような事が出来ます。
環境設定上examle.netとかにしている部分は適宜ご自分の環境に置き換えてくださいませ。

なぜWindowsなのか?

・プラットフォームに依存したエディタとか、使い慣れたツールがたくさんあるからです。例えば私はHTMLエディタにCrecsent EVEを使ってます。

なぜEclipseなのか?

・元々自分がJava開発をメインでやってたのでその流れて使い始め、慣れていたというのが大きい
・起動の重さとかは色々あるものの、強力な補完機能(コード、Docコメント)、コードへのジャンプ、バージョン管理連携、プラグイン拡張など現実的な機能が多い
・最悪外部エディタが起動出来たり結構なんとかなる
・他の環境(Andoroid開発環境とか)と同居出来る
・起動の遅さについてはRAMDISKなどを使ってある程度は改善出来る

なぜ外にサーバーを立てるのか?

・自分の場合、会社と家で使うPCが違ったりするのでローカルに環境作ると何かと面倒くさい
・外部から叩かれる(例えばFacebookのプラグイン入れたりとか)ような機能を追加したりする
・他の人と環境を共有したりする
・↑みたいなことが無ければ全然VMでいいかなーと思ってます

使うツール群

Eclipse PDT(IDE)
WinSCP(ファイル転送)
PortFowarder(ポート転送)

開発環境構築編(ここから本編)

1)ファイルの自動転送

今回の構成では開発環境はリモートにあるのですが、ソースの反映は書き換えたらリアルタイムで行いたいですよね。
というわけで変更を即座に反映するよう自動転送します。
WinSCPの同期機能を使います。

ローカルはEclipseのプロジェクトフォルダを指定してパスを合わせます。
これで監視下のフォルダで変更があると即座にリモートへ転送してくれます。
無視したいファイル(.svnなど)はこんな感じで除外リストに入れておきましょう。

この状態でセッション保存しておけば、起動→接続→CTRL+Uですぐ同期をスタート出来ます。

2)Eclipseの自動補完を効かせる

なぜEclipseなのか?の所で補完機能を使いたいからだよ!と書きましたが、フレームワーク故にというかCakeはあまりモデルそのものをnewしたりしないので、そのままではほとんど補完が効きません(モデル、コンポーネント、etc・・)。
というわけで補完を効かせるようにコードをいじります。
正直、IDEの補完機能のために不要なコードを足すのはどうなの?という思いもありますが開発効率や動作速度を天秤にかけてこの方法を採用しています。

app_controller.phpに

/**
* Userモデル
*
* @var User
*/
var $User;

/**
* セッションコンポーネント
*
* @var SessionComponent
*/
var $Session;

/**
* authコンポーネント
*
* @var AuthComponent
*/
var $Auth;

/**
* セキュリティコンポーネント
*
* @var AuthComponent
*/
var $Security;

のように書いてどのクラスかを教えてあげます。

これで補完が効くようになります。

3)ローカルからbakeを使う

cakeといえばbakeですよね。
モデルやコントローラの生成が楽に行えますが、リモートで生成したファイルをいちいち持ってくるのは面倒です。
ローカルで(かつIDE内で)作ります。

bakeは当然phpが必要なのでローカルのWindowsマシンにphpを入れます。
bake.batはphpにパスが通ってる前提なのでパスを通します。

さて、これでbakeは実行出来るのですが、モデルの情報を取得するのにDBに接続しなければなりません。
ローカルにDB作るという方法もありますが、いちいち二重化させるのは面倒なのでリモートのDBに繋ぎたいです。
ポート転送を使いましょう。
Teratermのポート転送機能などもありますが、今回はPortForwarderを使います。

config.txtはこんな感じで

Host dev.example.net
HostName dev.example.net
# hostname or IP address

User hoge
# username on server. NEEDED

LocalForward 13306 localhost:3306
# localforward info1

Compression yes
# if you need compression

IdentityFile dev.example.net-key.rsa

13306ポートをリモートサーバーの3306に転送してます。
これでPortForwarderを立ち上げてDBの接続先を13306にすれば繋がります。
開発環境と、ローカルで接続情報が異なる場合は実行パスの判定などを行って接続先を切り替えます。

core.phpで切り替える場合は例えばこんな感じで

if (__FILE__ === 'C:\path_to_workspace\project\app\core.php') {
// ローカルでbakeするための設定
    define( '_DB_HOST' , '127.0.0.1:13306' );
    define( '_DB_NAME' , 'projectname' );
    define( '_DB_USER' , 'user' );
    define( '_DB_PASS' , 'pass' );
} else {
    // サーバーで動かすための設定
    define( '_DB_HOST' , '127.0.0.1:3306' );
    define( '_DB_NAME' , 'projectname' );
    define( '_DB_USER' , 'user' );
    define( '_DB_PASS' , 'pass' );
}

※ちなみにCake2.x系の場合はPORTは別指定になりますね

bake用の実行構成を実行→外部ツールから作成します。

これでIDEからbakeが実行出来ます。

ファイルの生成を行った後、F5でファイルのリフレッシュを行うと反映されますね。

ここまでやると晴れて快適に補完も効き、bakeも使え、ソースも同期される開発環境が構築出来ます。

ちなみにここまでの設定をすべて行って必要な諸々を起動すると画面はこんな感じになります。

・・・・まあ非常にWindowsらしい感じですね、うんうん。
立ち上げているものも多く、そもそもサーバー側で作業すれば楽なことも多々ありますが、まあこれはこれで慣れればいいものですよー。
Windowsで開発をされている方のお役に立てれば幸いです。
あと、こんな面倒なことしなくてもこんなんありまっせ!みたいな情報もあれば是非twitterなどで突っ込んで頂ければと思います。

そんなこんなで初参加のCakePHP Advent Calendar 2011でした。明日は@slumbers99さんです!


Titanium環境構築メモ

火曜日, 7月 5th, 2011

昨日のWEBサービス開発者のはじめてのTitanium勉強会で諸々開発についていい話を聞いたのだけど、環境構築がすこぶる面倒だったので今のうちにメモしておく。

開始前に気づいて事前準備としてTitanium StudioとKichenSinkプロジェクトのダウンロードはやっておいたのだけど、進めていくうちにこれも足りねーってことになったので・・。

環境:Windows7(Home Premium) SP1

最終的に入れたもの

  • Titanium Studio

http://www.appcelerator.com/(要登録、Community)

  • JDK 1.6.0_26

http://www.oracle.com/technetwork/java/javase/downloads/jdk-6u26-download-400750.html

  • Andoroid SDK

(これいれないとプロジェクトが作れない)

このうち足りなかったのはJDKとAndoroid SDK。

JREだと動かないので注意(javacとか使うので・・そりゃそうだ)。

パスを通すもの(環境変数)

  • JAVA_HOMEのパス(C:\Program Files\Java\jdk1.6.0_26)など
  • (多分)PATH(%JAVA_HOME%\bin)も通しておく

JDK、Andoroid SDK、Titanium Studioは結構ダウンロードに時間がかかるので気長にやりましょう。


PHP5.3にXHProf導入メモ

日曜日, 11月 28th, 2010

環境 CentOS5.5(x86_64) php5.3.3 xhprof-0.9.2 普通にpeclで入れられるっぽいが今回はパスまわりで怒られたので、ソースから。 xhprof-0.9.2のソースフォルダからextensionに移動して

phpize
./configure
make
make install

→xhprof.soをphp.iniに追加

extension=xhprof.so

ソースフォルダ直下の xhprof_html xhprof_lib をアクセス可能な場所に移動。 今回は適当なバーチャルホストを切ってxhprof_html配置フォルダをドキュメントルートにしてみた。 試しにプロファイルを取ってみたが、ダイアグラム表示の画像が出ずにエラーとなってしまった。 公式ドキュメントをみると、

dot (image generation utility): The callgraph image visualization ([View Callgraph]) feature relies on the presence of Graphviz “dot” utility in your path. “dot” is a utility to draw/generate an image for a directed graph.

と書いてあるので、以下yumで。

yum install 'graphviz*' --skip-broken

これで画像が出るようになった。 (追記) そういえばプロファイルデータはどこに出来るのだろう、と思い探してみた。 どうやらデフォルトで/tmpに出来るらしい。 明示する方法がうえちょこさんのブログ記事にあったのでphp.iniに追記した

xhprof.output_dir=/var/log/xhprof

こんな感じ。 プロファイルデータの中身は単純にserializeしたオブジェクトだが配列だかっぽい。

 


PHP5.3.3をコンパイルした時のconfigureメモ(mysqlndで)

水曜日, 8月 18th, 2010
./configure \
--prefix=/usr/local/php5.3 \
--with-config-file-path=/etc \
--with-config-file-scan-dir=/etc/php.d \
--with-apxs2=/usr/local/httpd/bin/apxs \
--enable-mbstring \
--enable-mbregex \
--with-pcre-regex \
--with-mysql=mysqlnd \
--with-mysqli=mysqlnd \
--with-mcrypt \
--with-curl \
--with-iconv \
--enable-exif \
--enable-sockets \
--without-sqlite \
--with-gd \
--with-openssl \
--with-png-dir=/usr/lib \
--with-jpeg-dir=/usr/lib \
--with-pdo-mysql=mysqlnd \
--with-zlib \
--enable-zip \

ドライバーの指定をそれぞれmysqlndにしておく。
まあ、mysqliは使わないわけですが、一応。


MyDNS-NGのインストール

月曜日, 8月 9th, 2010
MyDyNS-NGのインストール
環境:CentOS、MySQLはソースビルドで標準インストール
./configure --prefix=/usr/local/mydns --with-mysql-lib=/usr/local/mysql/lib/mysql --with-mysql-include=/usr/local/mysql/include/mysql  --without-pgsql

confを作る

mydns --dump-config > /etc/mydns.conf

テーブルを作る。この辺は前回もやってたので中身を比較、特に変わってなさそう。

CREATE TABLE IF NOT EXISTS soa (
  id         INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
  origin     CHAR(255) NOT NULL,
  ns         CHAR(255) NOT NULL,
  mbox       CHAR(255) NOT NULL,
  serial     INT UNSIGNED NOT NULL default '1',
  refresh    INT UNSIGNED NOT NULL default '28800',
  retry      INT UNSIGNED NOT NULL default '7200',
  expire     INT UNSIGNED NOT NULL default '604800',
  minimum    INT UNSIGNED NOT NULL default '86400',
  ttl        INT UNSIGNED NOT NULL default '86400',
  UNIQUE KEY (origin)
) Engine=MyISAM;

--
--  Table structure for table 'rr' (resource records)
--
CREATE TABLE IF NOT EXISTS rr (
  id         INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
  zone       INT UNSIGNED NOT NULL,
  name       CHAR(64) NOT NULL,
  data       VARBINARY(128) NOT NULL,
  aux        INT UNSIGNED NOT NULL,
  ttl        INT UNSIGNED NOT NULL default '86400',
  type       ENUM('A','AAAA','CNAME','HINFO','MX','NAPTR','NS','PTR','RP','SRV','TXT'),
  UNIQUE KEY rr (zone,name,type,data)
) Engine=MyISAM;

一応これ

mydns --create-tables

 
でSQLが標準出力されるので流し込めばよい。
次、ユーザーの作成も前回やってるので割愛。
confをいじる。
→とりあえずDB接続を設定。なんかエンジンタイプの指定があったのでinnoDBとかにしてもいいのかも。

シンボリックリンクを作成

/usr/local/mydns/bin/mydns-conf
/usr/local/mydns/bin/mydnscheck
/usr/local/mydns/bin/mydnsexport
/usr/local/mydns/bin/mydnsimport
/usr/local/mydns/bin/mydnsptrconvert

VSuite Ramdisk (Free Edition)を使ってEclipse高速化

水曜日, 12月 16th, 2009

まあ実際のところはこれから計測ですが。

会社のノートはもともとVistaが入っていたものをWindowsXPにダウングレードしているのだが、大人の事情によりなぜか4GBのメモリを積んでいる。

とはいえ32bitWindows環境では4GBのメモリを使いきれるわけもないので、ふと思い立って余っている部分をRAM DISK領域にしてみた。

使ったのはVSuite Ramdisk (Free Edition)

特に大きな理由もなかったのだがなんとなく使いやすそうなので。

OS管理外のメモリを使うにはオプションからチェックをいれ(一応リスクについて警告が出る)あとはそれ以上のメモリをディスク領域として割り当てればOK。

会社環境で一応問題なかったのでついでに家のPC(同じくなぜか4GB積んでしまっている)もEclipse本体をそっちにおき、なおかつワークスペースもまるごとそこにおいてみた。

現在のところCore2Duo2.4Ghzの環境でEclipse3.5ガリレオさん+Pleiades(PDTのやつ)が最短5秒前後で立ち上がっており、かつ起動時の検証も一瞬で終わるので体感はもっと速くなった感じがする。

これは癖になりそうだ。

 

2010-01-19

一応追記。

ワークスペースをまるごと突っ込む場合は、当然何らかの理由によりPCが正常にシャットダウンしなかった場合などにデータが消えるor壊れる可能性があります(一度それでデータが壊れた)。

幸い自分はワークスペース内のソースはすべてSVNに突っ込んでいるので特に問題なかったのですが、ローカルにしか持っていない人はご注意を。