Home > アーカイブ > 2011-06

2011-06

現状のPHP環境はそのままで、PHP 5.4 を試す

  • 2011-06-30 (木)
  • PHP
この記事の所要時間: 217

現状のPHPはそのままで、新しい(別の)バージョンをPHP試す方法です。

PHP

PHP 5.4.0 alpha がリリースされました。Traits や Array dereferencing support など試してみたいですけど、さすがにメインのPHP環境を変えるのは早いですね。

そこで新しいPHPをビルドして、インストールはしない方法で試してみました。

PHP 5.4.0 alpha をビルド

qa.php.netから、PHPのソースをダウンロードします。

$ wget http://downloads.php.net/stas/php-5.4.0alpha1.tar.bz2

展開して、configureして、makeします。とりあえずコンパイルオプションはナシで。

$ tar jxvf php-5.4.0alpha1.tar.bz2
$ cd php-5.4.0alpha1
$ ./configure
$ make

通常はこの後、make install に続くわけですが、今回はインストールせずにPHP-5.4.0alphaを動かしたいので、そのままで。

PHP 5.4.0 alpha を実行

CLI版PHPバイナリは、sapi/cli/php にビルドされているので、これを実行すれば ok です。

$ ./sapi/cli/php -v
PHP 5.4.0alpha1 (cli) (built: Jun 29 2011 16:10:51) 
Copyright (c) 1997-2011 The PHP Group
Zend Engine v2.4.0, Copyright (c) 1998-2011 Zend Technologies

下記のようなソースで、Traits がさっくり動きます。

$ ./sapi/cli/php traits.php 
string(11) "TFoo::func1"
string(11) "TBar::func2"

手軽にお試し

別バージョンのPHPを同居させる方法としては、コンパイルオプションで –prefix を指定して、インストール先も変えるという方法もあります。

もちろんこの方法でも良いのですが、とりあえず新しいバージョンの機能を試してみたいというだけなら、このエントリの make install しない方法の方が手軽です。

今回ビルドしたPHPが不要になれば、ソースディレクトリごと削除するだけで良いです。

現状の環境には影響を与えず、手軽に新しいバージョンが試せるので、5.4 を触ってみて下さい。

コマンドラインからPHPマニュアルを見るpmanコマンド

  • 2011-06-26 (日)
  • PHP
この記事の所要時間: 430

コマンドラインからPHPマニュアルを見ることができるpmanコマンドが登場しました。

manコマンドのようにコマンドラインからPHP関数やSPLのクラスについて調べることができます。

インストール

pearコマンドでインストールします。

$ sudo pear install doc.php.net/pman

手元のMac OS X 環境では、/usr/bin/ に pman コマンドがインストールされました。

$ which pman
/usr/bin/pman

使い方

pmanコマンドに調べたい関数名を指定します。例えば、array_map のマニュアルを見たいなら以下のように指定します。

$ pman array_map

ARRAY_MAP(3)                                          1                                         ARRAY_MAP(3)

array_map - Applies the callback to the elements of the given arrays

SYNOPSIS
       array array_map (callback $callback, array $arr1, [array $...])

DESCRIPTION
       array_map(3) returns an array containing all the elements of $arr1 after applying the $callback func-
       tion to each one. The number of parameters that the $callback function accepts should match the  num-
       ber of arrays passed to the array_map(3)

PARAMETERS
              o $callback
                - Callback function to run for each element in each array.

              o $arr1
                - An array to run through the $callback function.

              o $array
                - Variable list of array arguments to run through the $callback function.

RETURN VALUES
        Returns  an array containing all the elements of $arr1 after applying the $callback function to each
       one.
(snip)

SPLなどオブジェクトのメソッドを調べるなら、クラス名+”.”+メソッド名を指定します。下記では、Exceptionクラスのコンストラクタを指定しています。

$ pman Exception.__construct

EXCEPTION.__CONSTRUCT(3)                              1                             EXCEPTION.__CONSTRUCT(3)

Exception::__construct - Construct the exception

SYNOPSIS
       public Exception::__construct NULL ([string $message = ""], [int $code], [Exception $previous])

DESCRIPTION
        Constructs the Exception.

PARAMETERS
              o $message
                - The Exception message to throw.

              o $code
                - The Exception code.

              o $previous
                - The previous exception used for the exception chaining.
(snip)

pman=ビーマン?

pmanコマンドの名称は「PHP man pages」です。呼び名はやっぱり「ピーマン」ですかね。

名前が示すとおり、pmanコマンドの実装を見てみると、manコマンドをラップしているだけでした。

今のところ英語版しか無いようですが、array関係など引数の順序があいまいな時にさっと調べるには便利そうです。

動作中のハードディスクの動きが見える2分の動画

この記事の所要時間: 031

動作中のハードディスクが機械的にどう動いているかが分かる動画です。

先日のJAWSUG-Osaka勉強会@tamagawa_ryuji さんが紹介されていた動画が面白かったのでご紹介。

ディスクが回転したり、ヘッドを動いている様が一目瞭然です。たった約2分の動画なのでぜひ見てみて下さい。

実行している処理は以下。

  • 電源オン
  • フォルダ削除
  • コピー&ペースト
  • クイックフォーマット
  • 電源オフ

当たり前ですが、物理的なパーツがガンガン動いていますね。これ見ると動作中に持ち運ぶのが怖くなります:D

SeleniumでAWS課金情報を取得する – JAWS-UG Osaka勉強会 第3回

この記事の所要時間: 147

Japan AWS User Group (JAWS-UG) – Osaka勉強会 第3回に参加してきました。

すっかり恒例になってきたJAWS-UG Osaka勉強会に参加してきました。今回も濃いセッション満載で楽しかったです。会場提供頂いたテレビ大阪さんありがとうございました。

せっかく参加するならということで、今回は Selenium を使って AWS の課金情報を取得して、Twitter で投稿するという内容でLTをやってきました。

SeleniumでAWSへの愛を叫ぶ

当日は真面目なものとそうでないものの2つ発表ネタを持って行っていたのですが、発表前にこちらにしました。

スライドを用意していましたが、このタイトルの解説を延々と書いているだけなので表紙だけアップしておきます:D

20110618_jaws_osaka_lt

SeleniumでAWS課金情報を取得する

やっていることは単純で、Selenium で AWSサイトにログインして、Account Actibityページで今月の課金(=愛)を取得、そしてそれをTwitterで投稿するだけです。

デモで使った Selenium テストケースのソースは以下です。(AWS アカウントのメールアドレスとパスワードは仮の値に変えています。)

ポイントは、課金情報をstoreTextで取得している点と、課金情報に含まれる単位($)をJavaScriptで削除している点ですね。

Seleniumを使えば、単純なスクレイピングならこれだけでできます。

テストケースをxUnitのソースに変換して、Selenium RCと組み合わせると、cronやJenkinsなんかで定期的に課金情報を取得することも可能です。

みなさんも愛を確認して、叫んでみて下さい:D

雑感

  • Beanstalk の PHP 対応が来るらしい!
  • Hadoop / EMR 分かりやすかったです。
  • Hadoop のデモは地味:D
  • 決戦に参加できて勝てて良かった!
  • 今回のLTは(自分以外)レベル高かったー。
  • おっぱいぷるぷる。

10,000はてブと10,000tweets

この記事の所要時間: 513

このblogについた、はてブが10,000、@shin1x1のtweetsが10,000を超えました。

10000

だからどうというわけではないですが、何となく区切りが同じ月に来たので記念に。

10,000はてブ

hatebu10000

TopHatenarを見ると、このblogについたはてブが10,000を超えていました。

はじめのエントリが2006年7月なので、約5年越し、405エントリでの10,000はてブです。

当時、深い理由は覚えてないですが、とにかくblog書かなきゃダメだと思って書き出しました。最初のころは、本当にだーれも読んでる人がいない状態だったので、はてブが付いた時はとても嬉しかったです。付けてくれた人が誰かは分からないですが、書いたこと、やったことを、誰かが認めてくれたような気持ちでした。

そういえば、初めてホットエントリーに入って、さらに はてブトップページにエントリが表示された時の喜び、そしてその喜びを誰とも分かち合えない(理解してくれる人が周りにいない)ことへの落胆も同時に味わったことがありました。分かち合えない状況はあんまり変わっていないような気もしますが、喜びはいつも新鮮です。

それから5年、継続は力なりとはよく言ったもので、投稿ペースが落ちまくりながらも辞めずに継続しておいて良かったです。

元来飽きっぽい性格なのですが、ここ数年は「blogを書く」という行為が、目的ではなくて手段になってきたのが継続できている理由だと思います。何か面白そうなことをやってみて、その結果をまとめておきたいとか、特定の誰かに対してこれを教えたい伝えたいとか、あくまで「伝える」ということの手段としてblogを書いています。

技術ネタが多いですが、実は誰かに向けて書いていることも結構あったりします。(その人に直接、書いたよ!と言うわけではないですけどね:D)

はてブ数だけを目的にするのは本末転倒な気はしますが、たくさん付けばより多くの人に見て貰える機会が増えますし、なんだかんだ言っても付くと嬉しいモノです。

そんなはてブ好きが高じて「hot.hatebu」という、はてブホットエントリーを色々な切り口で見るサービスを作ったりもしました。hot.hatebu 自体がこのサービスに載ることが無いのがアレな感じがしますが、良かったら見てみて下さい。
はてブホットエントリーを見るWebサービス「hot.hatebu」を作りましたComments

残念ながら10,000個目のはてブはどれか分からないですが、これまで、はてブを付けてくれた、みなさんありがとうございます!

10,000 tweet

Twitterって呟きでしょ?別にインターネットで呟かなくてもええやろ、という意見を聞くので、これはブログだと言い張る。そんな 10,000 tweet。less than a minute ago via YoruFukurou Favorite Retweet Reply

Twitterをはじめたのが、たしか2007年4月。Twitterが日本ではやりだした第一次ブームの時に登録しました。

当時はTwitterをやっているのは、Web大好きな人ばかりだったのでなんとなく内輪感がありましたね。考えてみればフォロー数もフォロワー数も4ケタ超えている人なんか希でした。

その頃作ったサービス「Twitter検索」がそこそこアクセスがあったりしたおかげで、どんどんTwitterにのめり込んでいったのですが、IPをブロックされたり、Twitterユーザが増えて雰囲気が変わった(ような気が)したりで、いつの頃からかあまりtweetしなくなっていきました。

また戻ってきたのは、iPhone を買ったのが大きかったです。いつでもどこでも気楽にtweetできるのはスマートフォンを使うシーンとマッチしますね。

最近は、はてブ連携のtweetが多くて、正直Facebookとの共存で迷ったりもしますが、あまり構えず気が向いた時に使うようにしてます。

今後ともよろしくお願いします!

変化の激しいWebの世界で両サービスとも4,5年継続というかさらに拡大していっているのはすごいことですね。

どちらも無いと生きていけないというわけではないですが、やっぱりあると嬉しいサービスです。

あまり鼻息荒くやると続かないので今後もマイペースでやっていきたいと思います。今後ともよろしくお願いします!

コードカバレッジ測定ツールPHP_CodeCoverageをCakePHPで使ってみた

この記事の所要時間: 64

PHP_CodeCoverageで、CakePHPのユニットテストのコードカバレッジを表示してみました。

php_codecoverage

CakePHP標準のテストランナー(test.php)でも単一のテストケースについてはコードカバレッジが表示できるのですが、All tests の時はコードカバレッジが表示されません(All testsでも表示されることもあるようです。hiromi さん、ありがとうございます)。

そこでPHP_CodeCoverageを使って、All testsのコードカバレッジを表示してみました。

1. PHP_CodeCoverage インストール

PHP_CodeCoverageは、PHPUnitでおなじみのSebastian Bergmannが開発した、コードカバレッジやCRAPを計測、表示するツールです。

PEARパッケージで提供されているので、pear コマンドでインストールします。

2011/06/15現在の最新版1.0.4では、PHP5.2.7以上とxDebugが必要となります。

sudo pear channel-discover pear.phpunit.de
sudo pear channel-discover components.ez.no

sudo pear install phpunit/PHP_CodeCoverage

ソースコードはgithubでも公開されており、README.markdownで詳しいインストール方法なども記載されているので、気になる人は見てみて下さい。

sebastianbergmann/php-code-coverage – GitHub

2. test.php のコードカバレッジを計測する

test.phpで実行する All tests のコードカバレッジを計測します。

test.php を直接改修して PHP_CodeCoverage を実行しても良いのですが、test.php を改修しない方法として、auto_prepend_file / auto_append_file を使う方法で実装します。

auto_prepend_file / auto_append_file を使うと test.php の実行前後に、自動実行するPHPスクリプトを指定することができます。そこで、auto_prepend_file ではコードカバレッジ計測を開始するPHPスクリプトファイルを、auto_append_file ではコードカバレッジ計測終了と結果を書きだすPHPスクリプトを指定します。

2-1. auto_prepend_file / auto_append_file を設定

httpd.confでauto_prepend_file / auto_append_file を設定します。

<VirtualHost *:80>
  ServerName example.com
  DocumentRooot /path/to/cakephp/app/webroot

  <Location /test.php>
    php_value auto_prepend_file /path/to/prepend.php
    php_value auto_append_file /path/to/append.php
  </Location>
</VirtualHost>

2-2. prepend.php

auto_prepend_file で指定したコードカバレッジ計測を開始するPHPスクリプトを実装します。

[/path/to/prepend.php]

ポイントは 7 行目から 14 行目で、PHP_CodeCoverage_Filterを使って、フレームワークやプラグイン、テストケース、 prepend.php、append.php を対象外にしています。

このあたりが考慮されているのがさすがですね。

2-3. append.php

auto_append_fileで指定したコードカバレッジ計測を終了して、結果ファイルを出力するPHPスクリプトを実装します。

[/path/to/append.php]

2-4. 結果出力ディレクトリ作成

append.phpでは app/webroot/coverage ディレクトリに結果ファイルを出力するので、あらかじめディレクトリを作成して apache ユーザに書き込み権限を付与しておきます。

$ mkdir app/webroot/coverage
$ chmod a+w app/webroot/coverage

3. test.php で All tests を実行

あとは普通にtest.phpで All tests を実行します。

テストが完了して /coverage/ にアクセスすると、下記のようなコードカバレッジ計測のレポートが表示されます。

php_codecoverage

内容は CakePHP 標準のコードカバレッジレポートよりも詳細で、全体、ディレクトリ単位、ファイル単位で、行数・メソッド数・クラス数でのコードカバレッジを確認することができます。

左のディレクトリ、ファイルはリンクになっており、クリックするとディクレトリ内のファイルを見ることができます。またファイルをクリックするとPHPソースが表示され、背景色によってその行が実行されたか否かが判別できるようになっています。

4. メモリーエラーが出たら

コードカバレッジ計測では多くのメモリを消費するのでテスト対象のソースファイルが多いと「Fatal error: Allowed memory size of 0 bytes exhausted」といったメモリ不足によるPHPエラーが出る場合があります。

エラーが発生した時は memory_limit にてPHPが確保できるメモリを増やします。

なお古いバージョンの test.php では memory_limit 設定がハードコーディングされている場合があるので、その際は test.php を直接書き換えて下さい。

[app/webroot/test.php]

-ini_set('memory_limit','128M');
+ini_set('memory_limit','512M');

手軽にコードカバレッジを表示

コードカバレッジを計測すること自体はxdebugを使うと簡単なのですが、それを集計して、見やすい形式にまとめてくれるという点で、PHP_CodeCoverage はかなり便利なツールです。

auto_prepend_file / auto_append_file を使う方法を応用すれば Selenium のテストでもコードカバレッジを計測することができそうです。これはぜひ試したいですね。

ここではCakePHPを対象としましたが、もちろん他のフレームワークやアプリケーションでも利用できるので、一度試してみてください。

古くなったMacPortsを再インストール

この記事の所要時間: 418

古くなったMacPortsを再インストールしました。

macports

2年程前にインストールしたMacPorts。これまでもたまに selfupdate していた気はするのですが、久しぶりに selfupdate & upgrade outdated したらエラーで止まりまくりだったので、ここで心機一転再インストールしてみました。

1. MacPortsを削除

インストールしていた MacPorts を削除します。

/opt/local がそのまま残っていると、新しいMacPortsからソフトをインストールした際にエラーになる場合があるので、リネームしておきます。ここでは、/opt/local 以下の設定ファイルやデータを再利用したいのでリネームしていますが、不要であれば削除でも問題無いです。

$ sudo port deactivate active
$ sudo port -f uninstall installed
$ sudo port clean all
$ sudo rm -rf /Library/Tcl/macports1.0
$ sudo mv /opt/local /opt/local.old

2. 新しいMacPortsをインストール

macports.org から最新の MacPorts パッケージをダウンロードしてインストールします。

macports_1

The MacPorts Project — Download & Installation

3. 最新版に更新

念のため最新版に更新しておきます。

$ sudo port selfupdate
$ sudo port upgrade outdated

4. 定期的に更新

今後はちゃんと更新するようにcronに設定しておきます。

$ sudo crontab -l
10 9 * * 3  /opt/local/bin/port selfupdate
20 9 * * 3  /opt/local/bin/port upgrade outdated

5. もろもろインストール

あとはお好みで必要なソフトをインストールしていきます。下記はおなじみApache+PHP+PostgreSQL/MySQL環境。

$ sudo port install apache2
$ sudo port install postgresql84-server mysql5-server
$ sudo port install php5 php5-curl php5-gettext php5-mbstring php5-mcrypt php5-mysql php5-openssl php5-postgresql php5-xdebug 
$ sudo port install wget git-core

Mac起動時にデーモンが立ち上がるように設定します。

$ sudo port load apache2
$ sudo port load postgresql84-server
$ sudo port load mysql5-server

各サービスを手動で起動、終了するコマンド。

# 起動
$ sudo launchctl load -w /Library/LaunchDaemons/org.macports.*.plist
# 終了
$ sudo launchctl unload -w /Library/LaunchDaemons/org.macports.*.plist

必要であれば、以前の環境から設定ファイルやデータを移行します。

$ sudo cp -a /opt/local.old/etc/php5/php.ini /opt/local/etc/php5/php.ini
$ sudo cp -a /opt/local.old/apache2/conf/httpd.conf /opt/local/apache2/conf/
$ sudo cp -a /opt/local.old/apache2/conf/extra/httpd-vhosts.conf /opt/local/apache2/conf/extra/
$ sudo cp -a /opt/local.old/var/db/postgresql84/defaultdb /opt/local/var/db/postgresql84/

MacPortsが楽

一時homebrewをMacPortsの代わりに使ってみたりもしましたが、個人的にはやっぱり対応しているソフト、バージョンが多いMacPortsの方が便利でした。(まあインストールが遅いというのは確かにそうなんですけどね。)

環境が新しくなると気持ち良いですね。あーすっきり:D

参考

Macports の再インストール – Hidde’s Tips
HowTo/UseMacPorts – MacPortsWiki-JP

週休二日じゃなくて月休八日の方が良いかも

この記事の所要時間: 422

まあtweetどおりなんですが、週休二日で毎週少しづつ休むより、月休八日で一気に休んだほうが効率が良さそうな気がしてます。

5日出勤2日休みより、22日出勤8日休みとかの方が効率良いような気がする。平日<->休日切替のオーバーヘッドが大きい。もしそうなれば毎月GWだ。less than a minute ago via YoruFukurou Favorite Retweet Reply

月休八日にすると良さそうなこと

休日<->平日の切替が少ない

最近特になのですが、平日から休日、休日から平日の生活リズムの変化に上手くついていけていないというか、切替に時間がかかっています。

まずは、平日から休日。月曜日は、土日にどれだけノンビリしても、反対に気分転換に遊んでも、いまひとつ調子が出ません。疲れているのかなーと思いきや、火曜日になると調子が出てきて、金曜日になってもまだまだ大丈夫だったりします。

で、土曜日になって休みに入るわけですが、土曜日もいまひとつペースが掴めないというかしっくりこない。土曜日の夜くらいから完全に休日モードに入って日曜日を満喫します。

そして月曜日が来て、またいまひとつ調子出ない、のループになってます。

どうもこの切替が無駄な気がして、どうせなら月一回切替でいけたら楽なのになーとか思ってます。

毎月GW

月休八日にして八日連続で休んだら毎月GWなわけです。

旅行に行っても良いし、家事するのも良いし、育児に励むのも良いし、自己研鑽の時間に充てるもよし。やはり連続で8日間の休みがあればまとまったことができるので、あれやこれやとやりたい事が広がります。

平日に旅行に行けば、予約も取りやすいし、費用も安く済みそうです。

あの連休前のワクワク感を毎月味わえると思うと仕事も気合入ります:D

冷静に考えると社会人になってから連続で八日間休んだことが記憶に無いですね。下手すると引退するか(もしくは無職になるか)まで無いとか思うとそれはそれで寂しい気も。。。

出勤日の土日は集中

出勤日の土日は周りが休んでいるので、TELやメールもほとんど無く、集中して作業することができます。

これはかなりはかどります。

月休八日にするとイマイチなこと

家族や友人など週休二日の人と予定が合わない

世の中は週休二日で回っているので、そういった人と予定が合わなくなります。

特に家族が問題で、子供と休みが合わないのは結構イタイです。

まあ運動会とか、ここぞというときは出勤日を振り替えて休めば良いと思うのですが、毎週それをやると、結局週休二日だよね、となりそうな気もしてます。

# 家族に軽くこの話題を振ってみましたが、見事に猛反対されました><

休日八日でも平日だと結局休めないのでは?

たしかにこの危惧はあるのですが、社内でシフトを組んで順番に休んだり、打ち合わせ等はスケジュールを調整するなどすれば、開発の仕事なら何とかなりそうな気もします。まあこれは職種次第ですね。

休日の分散化にも

節電のために大手企業では、この夏、土日を休日とせず、平日にずらして電気利用の分散をはかるようです。

こうした動きから、休日の取り方も週休二日の画一的なものだけではなく、それぞれのニーズに合わせた多様な方式が広がると良いですね。

今後はそうした分散した休日を見込んだ新たなビジネスが出てくるかも。

Webシステム開発に便利な7つのツール

この記事の所要時間: 98

Webシステム開発で使っている便利なツールをあげてみました。

あらためて社内の開発環境を見直す機会があったので、使っているツールを並べてみました。こうして見ると色々なツールを使って開発をしていますね。わりと定番系なものが多いですが、良かったら参考にどうぞ。

1. Apache / PostgreSQL / PHP

Mac OS X に MacPorts でインストールしたApache / PostgreSQL / PHP 環境を使って開発をしています。

PHPは5.3、PostgreSQLは8.4 or 9.0です。

ただ旧バージョンのPHPを使ったり、Linux でなければ動かないモジュールを使うこともあるので、その際は社内のCentOSサーバにSSHで入って開発したりもします。

Vimを使ってるので、SSHで入ればどのサーバでも開発できるのは利点ですね。

Mac を使い出して、しばらくはこれで良かったのですが、たまにLinux環境が欲しい時があったり、社内スタッフと開発環境を揃えることを考えると、vmwareでLAPP環境を構築しておいて、それをみんなで共有するほうが良いかもしれません。

2. Vim

開発エディタにはVimを使っています。

昔はWindowsのPeggyを使っていたのですが、サーバにSSHで入ってメンテナンスする時にVimでもたもたするのがいやだったのと、何よりVimで颯爽とコードを書くのがかっこ良さそうだったのでメインで使うようになりました。

シェルの延長上で使えて、起動にストレスが無いですね。基本コマンドは手に馴染んでいるので、純粋に「書く」という行為については文句無いです。IDE並とは言わないですが、拡張していけば補完なんかもそれなりに効きます。

一度覚えておけば、Unix系を使う限りは下手すれば一生ものになるので楽できますね。

ただ絶対にVimじゃなきゃイヤだということも無くて、最近はNetBeansも気になったりもしてます。(Vimプラグインとかあるみたいだし)

http://www.vim.org/

3. xdebug

xdebug

PHPで開発している人にはおなじみのxdebugを入れてます。

インストールするだけで、PHPのエラーメッセージを見やすくしたり、スタックトレースを表示してくれたり、var_dump()した時が見やすくなったりで開発する時には嬉しい機能満載です。

例えば、PHPエラーが見やすくなって、スタックトレースが表示されたり。

xdebug_php_error

例えば、var_dump()で変数をダンプすると見やすくなってたり。

xdebug_var_dump_array

オブジェクトなら、インスタンス変数のアクセス権も表示してくれます。

xdebug_var_dump_object

他にも実行コードがトレースできたり、コードカバレッジを計測できたりと、とても重宝しています。

xdebug は pecl コマンドでインストールできます。

$ sudo pecl install xdebug

もちろん yum でもインストールすることもできます。

$ sudo yum install php-pecl-xdebug

PHPで開発する人ならぜひ開発環境に入れてみてください。

xdebug

4. Firefox

Firefox ブラウザ無料ダウンロード

Webを見るときのブラウザはChromeとFirefoxを併用していますが、やはりWebシステム開発に使うならFirefoxがメインです。

理由はアドオンが充実していることです。もちろんChromeでも同様のことができると思うのですが、使い慣れているということとFirefoxにしか無いアドオンがあるのが大きいですね。

豊富なアドオンの中でも特によく使うものをあげてみました。

4-1. Firebug

言うまでもなく定番のツールですね。

表示されているHTMLタグを確認したり、CSSを修正したり、JavaScriptのデバッグに使ったりと機能満載なのですが、Webシステム開発という意味では「ネット」が便利です。

ここを開くとブラウザからWebサーバへどのようなHTTP通信を行っているかが分かります。あるページを読み込むと画像やCSSが次々と読み込まれるのが分かります。

firebug_1

さらに各行をクリックするとヘッダを含む、リクエスト、レスポンスの内容が確認できます。

firebug_2

POSTの内容も見やすいです。

firebug_3

Firebug :: Add-ons for Firefox

4-2. Selenium IDE

自動ブラウザテストツールです。

Selenium IDEを使うとブラウザでの操作、入力を記録することができ、何度でも同じ操作を繰り返すことができます。さらにページやURL、Cookieなどの内容が想定されている値になっているかを検証することができます。

特に複雑な入力を伴うような購入フォームやユーザ登録などは、操作を記録してテストケースを作成しておくと、開発途中で動作確認するときに同じ操作を人がするのではなくツールにさせることができて、効率的です。

操作さえ慣れればかなり適用範囲の広いツールなので、Webシステムを開発する人でまだ使っていない人は一度試してみてください。

Selenium IDE

4-3. FireMobileSimulator

携帯電話対応のWebシステム開発では欠かせないツールです。

このツールを使うと擬似的に各キャリア、各機種の携帯電話からのアクセスを行うことができます。膨大な機種データが登録されており、新機種への対応も随時行われています。

画面サイズや絵文字表示などもシミュレートしてくれるので表示についても確認できます。(もちろん最終的には実機テストが必要ですが)

FireMobileSimulator.org

5. SimpleTest / PHPUnit

PHPでユニットテストを行うツールです。

SimpleTestはCakePHPで開発するときに使っています。それ以外で開発するときはPHPUnitを使うようにしています。

ユニットテストの効能については様々な情報があり、あえてここで触れる必要はないと思いますが、個人的に感じているメリットが2つあります。

5-1. 安心感を得る

テストを書いて、いつでもテストを実行できる環境を作っておくとそのコードが想定どおりに動く安心感が得られます。リファクタリングなどでコードを書き換える時もそうですが、開発が終了して何ヶ月か経った後でもそのコードが確実に動くことが保証できます。(もちろんテストを書いた範囲においては、ですが)

あと他人(数ヶ月後の自分を含む)が書いたコードがどのような動作を想定したものかを掴むことができます。

こうした書いたコードに対する安心感を得られるのが大きいです。

5-2. テストしやすいコード=独立性の高いコードを書くようになる

ユニットテストを書きだすと分かるのですが、メソッド内で様々なクラスと密結合になっていて様々な処理を詰め込んでいるとテストが書きづらくなります。

テストを書く段でそういった密結合を解きほぐしていって、メソッド毎の処理を小さな単に分けていくと、テストが書きやすくなり、自然と独立性の高い実装となっていきます。こうした独立性の高い実装はその役割がはっきりしているので再利用が容易となります。

独立性の高いコード、疎結合なコードを書くための訓練といういう意味でもテストコードを書くというのは効果があると思います。

とはいえ、やはりテストを書くのが面倒な場面はあるので、今はいかに効率的に(手間をかけずに)テストが書けるかを模索しています。

SimpleTest – Unit Testing for PHP
PHPUnit Manual

6. Redmine

社内の開発タスク管理にはRedmineを使ってます。

3,4年くらい前にBTSを導入しようとして、TracやMantisなども検討したのですが、複数プロジェクトが管理できるのとGUIが取っ付きやすそうだったので、Redmineを導入しました。

まだ今の使い方が正解かどうかは分からないですが、ざっくりとしたタスク単位でチケットを発行しています。チケットには仕様の詳細までは書いていないことの方が多くて、実際にアサインする時に打ち合わせで説明しています。

このあたりをどう活用しているのかは他の人と情報共有したいところですね。

Redmineの機能としては、やっぱりGitやSubversionなどのSCMと連携できて、コミットとチケットを関連付けられるのが便利ですね。チケットに対する変更差分をブラウザでさっと確認できます。

SCMを初めて使う人にとっても、commit / push した内容がブラウザで確認できるので分かりやすいみたいです。

http://redmine.jp/

7. Git / Subversion

ソースコードは、Git / Subversion で管理しています。

SCMはCVSから使いはじめました。その頃は一人で開発をやっていましたが、変更履歴や差分が取れるし、開発環境とテストサーバなど複数の箇所で同じソースが簡単に取得できるので、それ以来利用しています。(当時使っていたPeggy ProにCVS連携が付いていたのも一つのきっかけになりました。)

それからSubversionを使い出して、CVSのソースはSubversionに移行しました。スタッフが入って、複数人での開発になってからはさらにツールの重要性が増しました。誰がどう変更したかを間違いなく把握できるので、自分が書いたコードという意識も高まりますし、疑問点があってもすぐに書いた本人に聞くことができます。

そういえば、Redmineを使い出したのもSubversion連携があったというのもありますね。

そして昨年くらいからGitを使い出しました。まだベストプラクティスが決まらず、本来の分散リポジトリという部分は生かせていないですが、基本操作は浸透してきたので、そろそろ色々と模索していこうと思います。

Git – Fast Version Control System
Apache Subversion

ツールの提供者に感謝!

こうしてあらためて見ると普段多くのツールを活用して開発を行っていることが分かります。

ここで挙げたツールはいずれもオープンソースで配布されているものであり、無償で利用することができます。当然ながこうしたツールは誰かが開発しているもので、さらにテストをしたり、マニュアルを書いたり、それを翻訳する人がいたり、と多くの人の力で提供されています。

今後も感謝の気持ちを忘れず、どんどん活用していきたいですね。

Home > アーカイブ > 2011-06

検索
フィード
メタ情報

Return to page top