Home > 開発環境

開発環境 Archive

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

この記事の所要時間: 356

古くなった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 apach2
$ 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 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

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

ツールの提供者に感謝!

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

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

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

Firefox4 に Selenium IDE をインストールする

この記事の所要時間: 18

滋賀に開発合宿に来てます。

Firefox4にSelenium IDEをインストールしようとしてハマったのでメモ。

  1. Firefox4にAdd-on Compatibility Reporterをインストール
  2. Selenium DownloadsからSelenium IDE(http://release.seleniumhq.org/selenium-ide/1.0.10/selenium-ide-1.0.10.xpi)[2011/05/07時点]をダウンロード
  3. ダウンロードしたxpiファイルをFirefox4のウィンドウにドラッグ
  4. いつものインストール確認画面が表示されるので、確認してインストール。

この手順では、Add-on Compatibility ReporterでFirefoxのバージョンチェックを無効にして、Selenium IDEをインストールしています。試した限りでは、問題無く動きました。

いずれSelenium IDE自体がFirefox4に正式対応して普通にインストールできるようになると思うんですが、他のプラグインでも同じことがありそうなので覚えておくと良いですね。(ただバージョンチェックを無効にするので利用はご自身の責任でお願いします。)

@nntsugu さんありがとうございますー。

Mac+Google日本語入力でATOKショートカットキーで変換する

この記事の所要時間: 039

Mac+Google日本語入力でATOKのキーバインドで変換する方法です。

MacBookAirには、普段使っているATOKではなく、Google日本語入力を入れてるのですが、「CTRL+(u/I/o/p)」で「かな<->カナ<->半角カナ<->英字」といった変換ができず困っていました。

ごまかしごまかしF6-10を使っていたのですが、これまでのクセが抜けず、いらいらしていました。

今日こそ何とかするぞ!と意気込んで調べてみたところ、普通に設定がありました。。。

Google日本語入力の設定を開きます。(画面は英語版です)

keymap styleを「ATOK」に変更すればok。

なんでもっと早く気づかないか。

僕が一番Macを上手く使えるんだ

この記事の所要時間: 233

ついについについに長年憧れていたMacを注文しました。

初Macは13インチMacBook Pro(+SSD)にしました。今から到着が楽しみでしようがありません:-D

注文してすっかり浮かれていたのですが、ふと大事なことに気付きました。

未Macユーザな時間は人生でもうわずかしか残されていないことに。

Macユーザとしてその世界観を堪能してしまうと、きっと今抱いている憧れの念(妄想とも言う)は良くも悪くも消えてしまいます。

そこでそんなピュアな妄想をここに残しておこうと思います。

Macイメージ

画面が美しい

とにかく画面がキレイ。勉強会なんかで良く見せびらかされるんですが、とにかくキレイ。あれは間違い無くそそられる。

フォントが美しい

とにかくフォントがキレイ。勉強会なんかで良く見せびらかされるんですが、とにかくキレイ。あれは間違い無くそそらる。

エフェクトが美しい

とにかくエフェクトがキレイ。勉強会なんかで良く見せびらかされるんですが、とにかくキレイ。あれは間違い無くそそらる。

まあとにかく「○○が美しい」が、10個くらい並びそうな勢い。

プレゼンがいけてる

そうだ、あいつのプレゼンがいけてるのはKeynoteだからだ。

連帯意識

Macユーザというだけで何だか仲良くなれそう。Snow Leopard入れた入れてないで大盛り上がり。

Windows7でも盛り上がろうよ。

爆弾マーク

何だかんだ言っても不安定だったりする。

でもそこで怒り狂うのはMacファンじゃない。「こないだ爆弾出ちゃってさー」と軽いノリで話せるのがマカー。出来の悪い子ほどかわいいって奴。

Unixベース

そそられまくり。CUI環境とGUI環境の見事な調和。ランチャー?かなんかでグリグリとアプリを起動したかと思うと、ターミナルからVimを起動して颯爽とコーディング。うーんギーク。

反MS。反Windows。

Mac(Apple)への愛情故に敵対するMS勢には異常なまでの敵対心を燃やす。

仕事ではWindows使ってるのに「MS○そ」とか言ってしまう。Winユーザにもやさしくね。

歴史が好き

Macユーザはその遍歴を語るのが好き。

これまで色々な人に聞いたおかげで、触ったことも無いNEXTSTEPの思い出が頭の中で構築されそうな勢い。

とにかくおしゃれ

Mac持ってるだけでおしゃれ。クリエイターっぽい。

カフェでカバンから取り出すPCはレッツノートじゃなくてMacだよね。

持ち歩くのは重い

やっぱり持ち歩くには重い。だって今時のWinノートなら1kg切ってるよ?

いやいやそうじゃない。MacBookの重みでAppleの想いをズシッと感じるのだ。

イメージ画像

そんなわけで

いよいよマカーの仲間入りなわけです。妄想がどこまで現実となるのでしょうか。

いつの日かタイトルのようなセリフが言えるようにMac道を邁進したいと思います。

ああー楽しみ。

今見ているURLを手軽に携帯に移せるFirefox拡張-Mobile Barcode-

この記事の所要時間: 156

携帯サイトの開発中にPCで見ているページを携帯で見たい時ってありません?

これまではURLをメールで送ったりしてたのですが、これが意外と面倒だったります。なんとかならんかなあ、と思ってたところで、知ったのがMobile Barcodeです。

Mobile BarcodeでURLのQRコード生成

Mobile Barcodeは名前から想像できるとおり、今アドレスバーに表示されているURLをQRコードで表示してくれる拡張です。

操作も簡単で、ステータスバー右にある「Barcode」の部分にマウスカーソルを当てるだけでQRコードを表示してくれます。あとはQRコードを携帯のバーコードリーダーで読めばokです。

最近の携帯のバーコードリーダーは精度も上がっていて、瞬時に認識してくれるので楽チンですね。

QRコード生成は外部サイトを利用

ただ1つ気をつけないといけないのが、この拡張は自身でQRコードを生成しているのではなく、mobilecodes.nokia.comのQRコード作成サービスを利用している点です。

つまり一度このサイトにURLが送られることになるので、外部に出すとマズいURLには使わない方が安全かと。(悪用されることは無いかもしれませんが)

# 中の人もそこが気になっているようで、addon単体でQRコードを生成する方法があれば、教えて欲しいとの事です。

その場でURLを共有したい時に便利

先日も携帯サイトの打ち合わせ時にPC上で開発サイトを見ながら話を進めていました。ただやはり実機で確認するのが一番という事でQRコードを表示して、各自の携帯で読んで貰いました。こういう場合メールだと各自のアドレスを知る必要がありますが、QRコード読み取りならそういった情報を知る必要がありません。

邪魔にはならないので入れておくと便利ですよ:-D

Mobile Barcoder

2008/08/21 追記:
vectorさん情報で、外部サイト通信を行わない、QR Code という拡張があるようです。
こちらはURLが漏れるリスクが無いですし生成も早いので、かなりいけてます!

これに含まれている、JavaScriptでQRコードを生成するライブラリが気になります。:-D

PHPソースからドキュメントを生成するツール

この記事の所要時間: 524

PHPソースからドキュメントを生成する主要な3ツールを試してみました。どのツールもそれほど深くは調べていないのでインストール+アルファ程度の設定変更で試しています。

環境はCentOS4.4+PHP5.2.3です。

phpDocumentor

PHPでできたツールです。pearコマンドでインストールできることもあって、PHPのドキュメントジェネレータとして人気があります。

  • インストール

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

CODE:
  1. $ pear install --alldeps phpdocumentor

  • ドキュメント生成

phpdocコマンドで生成します。とりあえずドキュメントを生成するだけなら設定ファイルの変更は不要です。

CODE:
  1. ./src 以下のPHPファイルを対象に ./doc 以下にドキュメントを生成
  2. $ phpdoc -t ./doc -d ./src

[参考サイト]

Doxygen

C++でできたツールです。DoxygenはC/C++、Javaをはじめ様々な言語についてドキュメントを生成することができます。どちらかと言うと、C/C++、Java、Pythonがメインのツールですが、PHPでも十分なドキュメントを生成することができます。

  • インストール

CentOS4用はRPMがあるのでyumコマンドでインストールできます。

CODE:
  1. $ sudo yum install Doxygen

ただRPMは1.3.9ですので、最新版(1.5.3)がよければソースからインストールします。

CODE:
  1. $ tar zxvf doxygen-1.5.3.src.tar.gz
  2. $ cd doxygen-1.5.3
  3. $ ./configure
  4. $ make
  5. $ sudo make install

  • ドキュメント生成

まず設定ファイルを生成します。-gで生成する設定ファイルのファイル名を指定します。ファイル名を指定しなければDoxyfileという設定ファイルがカレントディレクトリに生成されます。

CODE:
  1. $ doxygen -g [config]

次に設定ファイルを編集します。下記は最低限変更した方が良いと思う項目です。

CODE:
  1. $ vi Doxyfile
CODE:
  1. # ドキュメント出力ディレクトリ(省略すればカレントディレクトリに出力)
  2. # => doc ディレクトリに出力
  3. #OUTPUT_DIRECTORY =
  4. OUTPUT_DIRECTORY = doc
  5.  
  6. # ソースディレクトリ(省略すればカレントディレクトリ)
  7. # => src ディレクトリ以下のファイルを解析
  8. #INPUT =
  9. INPUT = src
  10.  
  11. # 再帰的にソースディレクトリを解析する
  12. # => 再帰する(YESにしないとINPUTで指定したディレクトリのみ解析する)
  13. #RECURSIVE = NO
  14. RECURSIVE = YES
  15.  
  16. # ソースコードページを生成する
  17. # => ソースコードページを生成
  18. #SOURCE_BROWSER = NO
  19. SOURCE_BROWSER = YES
  20.  
  21. # ソースコードページにてコメントを削除する
  22. # => ソースコードページにコメント出力
  23. #STRIP_CODE_COMMENTS = YES
  24. STRIP_CODE_COMMENTS = NO

ドキュメント生成コマンドを実行するとドキュメントが生成されます。

CODE:
  1. $ doxygen Doxyfile

[参考サイト]

PHPXRef

Perlでできたツールです。phpDocumentorやDoxygenとは少し毛色が異なり、クラス図などは表示されません。上記2ツールはクラス構造などをドキュメント化しますが、PHPXRefはソースコード自体をドキュメント化するのを目的としています。

  • インストール

PHPXref - The PHP Cross Referencing Documentation Utilityから最新版ソース(0.7)をダウンロードして展開するだけでokです。

CODE:
  1. $ tar zxvf phpxref-0.7.tar.gz
  2. $ cd phpxref-0.7

  • ドキュメント生成

設定ファイルを編集します。展開したディレクトリ内にあるphpxref.cfgが設定ファイルになります。

CODE:
  1. $ vi phpxref.cfg
CODE:
  1. # ソースディレクトリ(省略すればカレントディレクトリ)
  2. SOURCE=src
  3.  
  4. # ドキュメント出力ディレクトリ(省略すればカレントディレクトリに出力)
  5. OUTPUT=doc

ドキュメント生成コマンドを実行するとドキュメントが生成されます。

CODE:
  1. $ ./phpxref.pl

[参考サイト]

出力サンプル

CakePHP1.1.17.5612のソースを各ツールで出力してみました。

クラス構造を確認するならDoxygenが、ファイル構造を確認するならPHPXRefが良さそうです。ただDoxygenにはクセがあるようで、PEARパッケージのようにファイル名とクラス名が異なる場合は上手く生成ができませんでした。(良い方法があればどなたかヘルプを・・・;-))

svn log –xml

この記事の所要時間: 131

Yesterday I was struggling trying to get svn log to display the results for a certain user and this was very annoying.. then I jumped on #svn on freenode, and someone mentionned svn log --xml

SVN log-per-user parser using SimpleXML - David Coallier

svn logをXMLで出力できるんですね。知りませんでした。。。

試しにCakePHP1.1.xリポジトリのログを出力してみました。

$ svn log --verbose --limit 10 --xml
XML:
  1. <?xml version="1.0"?>
  2. <log>
  3. <logentry
  4.    revision="4693">
  5. <author>phpnut</author>
  6. <date>2007-03-27T04:32:47.490451Z</date>
  7. <paths>
  8. <path
  9.    action="M">/branches/1.1.x.x/cake/config/config.php</path>
  10. <path
  11.    action="M">/trunk/cake/1.1.x.x/cake/config/config.php</path>
  12. <path
  13.    action="M">/branches/1.1.x.x/cake/VERSION.txt</path>
  14. <path
  15.    action="M">/trunk/cake/1.1.x.x/cake/libs/session.php</path>
  16. <path
  17.    action="M">/trunk/cake/1.1.x.x/cake/VERSION.txt</path>
  18. </paths>
  19. <msg>Merging fixes into the trunk
  20.  
  21. Revision: [4692]
  22. Merging fix for Ticket #2295</msg>
  23. </logentry>
  24. </log>

SimpleXmlElementなんかでパースすればすぐに使えそうです。さて何に使おうかなー。

PHPソースからフローチャートを生成する

この記事の所要時間: 054

Visustin - Flow chart generator sofware

PHPのソースからフローチャートを生成するツールです。

対応している言語はPHPの他にC/C++、Java、VBといった主要な言語はもちろんのこと、さらにPerlやPythonといったLL系の言語も網羅されています。(Rubyはまだのようです)

デモ版でCakePHPのソース[cake/dispatcher.php]からフローチャート生成してみました。

visustin_flowchart

※デモ版ではプリントアウト・エクスポートといった出力ができないので画面をキャプチャしています。

フローチャートの他にUMLのアクティビティー図も生成できます。

visustin_activity

ソースの規模にもよりますが、生成した図は画面で見るには大きいですし、デバッグやコードレビュー時に参考資料として使えそうなので、やはりプリントアウト機能は欲しいです。実用するには有料版を購入する必要があるという事ですね。

# 自分が書いたソースが図になると何だか嬉しいです。:-)

PHPUnitでMockオブジェクトを使う2

この記事の所要時間: 338

PHPUnitでMockオブジェクトを使うで紹介したMockオブジェクトですが、これは元クラスを継承しているわけではないので当然ながら元クラスの実装は使えません。

ただテストする場面によっては、基本は元クラスの振る舞いをして、一部のメソッドだけMockにしたいという場合があります。

そこで元クラスを継承したMockオブジェクトを作ってみます。

元クラス

PHP:
  1. <?php
  2. class Hoge {
  3.   // このメソッドはそのまま
  4.   function execute() {
  5.     if ($this->request()) {
  6.       // OK
  7.       return 1;
  8.     } else {
  9.       // NG
  10.       return -1;
  11.     }
  12.   }
  13.  
  14.   // このメソッドをMockにしたい
  15.   function request(&$db) {
  16.     $db->query();
  17.     sleep(100);
  18.     return true;
  19.   }
  20. }
  21. ?>

テストケース

Mockオブジェクトをテストケースに書いています。単にHogeクラスを継承してrequest()をオーバーライドするだけです。

PHP:
  1. <?php
  2. require_once 'PHPUnit.php';
  3. require_once 'Hoge.php';
  4.  
  5. class MockHoge extends Hoge {
  6.   function request() {
  7.     return true;
  8.   }
  9. }
  10.  
  11. class HogeTest extends PHPUnit_TestCase {
  12.   function testExecute() {
  13.     $obj = new MockHoge();
  14.     $this->assertTrue($obj->execute());
  15.   }
  16. }
  17.  
  18. $suite = new PHPUnit_TestSuite('HogeTest');
  19. $result = PHPUnit::run($suite);
  20. echo $result->toString();
  21. ?>

テストケース-返り値を設定

こちらではMockHogeに変数を追加して、インスタンス変数に応じてrequest()メソッドの返り値が変わるようにしています。

PHP:
  1. <?php
  2. require_once 'PHPUnit.php';
  3. require_once 'Hoge.php';
  4.  
  5. class MockHoge extends Hoge {
  6.   var $mockRequestValue;
  7.  
  8.   function request() {
  9.     return $this->mockRequestValue;
  10.   }
  11. }
  12.  
  13. class HogeTest extends PHPUnit_TestCase {
  14.   function testExecute() {
  15.     $obj = new MockHoge();
  16.  
  17.     $obj->mockRequestValue = true;
  18.     $this->assertEquals(1, $obj->execute());
  19.     $obj->mockRequestValue = false;
  20.     $this->assertEquals(-1, $obj->execute());
  21.   }
  22. }
  23.  
  24. $suite = new PHPUnit_TestSuite('HogeTest');
  25. $result = PHPUnit::run($suite);
  26. echo $result->toString();
  27. ?>

この方法では(Mockオブジェクト用の)コンポーネントは必要ないので手軽にMockオブジェクトを使う事ができます。また元クラスの実装を生かせるのでこの例のように一部だけを変えたい場合には有用です。

SimpleTestのようなMockオブジェクトとケースバイケースで使い分けるのが良いですね。

ホーム > 開発環境

検索
フィード
メタ情報

Return to page top