mysqld_multiを使って同一マシンに複数のMySQLサーバを立てる

業務で複数MySQLの開発環境が必要になりました。VM作っても良かったのですが、いちいち立ち上げたくなかったのと、Mac1台で完結させたかったのでTwitterでその旨つぶやいたら、とある方からmysqld_multiというものを教えて頂きました。

私はHomebrewでMySQL5.1を入れていたのですが、

$ ll /usr/local/Cellar/mysql51/5.1.58/bin/ | grep mysqld_multi
-r-xr-xr-x  1 dataich  staff    24334 11  1 14:17 mysqld_multi

おお、既に入ってました。

でmy.cnfに設定を書いてあげます。[mysqld1][mysqld2][mysqld3]という感じでオプショングループを書いてあげてそれぞれの設定を記述します。

この状態で

$ mysqld_multi start

とすれば全部立ち上がります。
またマニュアルにもありますが、特定のサーバだけ立ち上げることも可能です。

なんで今まで知らなかったのかと後悔してます。
まあアプリ側がちゃんとポート指定に対応していないと残念なことにはなりますが、非常に便利に使えそうです。
ちなみにWindows開発環境では、多分別の社員さんが書いてくれると思います。

Facebooktwitterlinkedintumblrmail

OpenCOBOL活用セミナーで生みの親の西田さんと

OSSコンソーシアムに OSS COBOL ワーキンググループが設立されました(「【プレスリリース】OSS COBOL支援プロジェクト立ち上げ – OSSコンソーシアム」をご参照ください)。

これにともない、『フルオープンソースでCOBOLの基幹システムを実現!OpenCOBOL活用セミナー』が1/25に開催されました。長崎県からは長崎県総務部政策監の島村秀世様と弊社の峰松が長崎県での取り組みや展開について話しました。

ご参加いただいた皆様、ありがとうございました。

さて、堅い感じはおわり。本題にはいりますよー。

OpenCOBOLの生みの親、西田圭介さんに今回のセミナーのことを峰松からお話していたらなんとご本人が参加してくださったんです!

懇親会で二人が話してたところにちょっとお邪魔してパチリ(左が峰松、右が西田さんです)。

西田さんは現在、BizMobile株式会社のCTOだそうです。

OpenCOBOL開発当時のお話や著書『Googleを支える技術-‾巨大システムの内側の世界-』についてお話したり、OpenCOBOLの可能性について語りあったりととても楽しいひとときでした!

付記:
プレゼン直前にPowerPointが落ちて作っていた資料がほとんど消える。プレゼンの途中にプロジェクターへの接続がきれる。終了予定時間がすぎてからデモを始める。峰松は今回も絶好調でした。ざっつ、えんたーてぃなー。

Facebooktwitterlinkedintumblrmail

PHPでbundlerぽいことを行うOnion、Composer

pear.phpunit.de/PHPUnitを依存関係として設定する前提で、OnionComposerを使ってみました。

Onion

PEARモジュールのビルド、コンパイル、そして今回の目的であるbundler的なことを簡単に行えます。

インストール

homebrewの場合

gistにFormulaを置きましたので使ってください。

# brew install --HEAD https://raw.github.com/gist/1594321/6769fa97864462c4813f06bbb08760630ba7c87f/onion.rb
brew install --HEAD https://raw.github.com/gist/1594321/onion.rb
# 2012/02/07 修正 実行ファイルがonion.pharからonionに変更になりましたので、Formulaを修正しました。
直接

onion.pharをパスの通ったディレクトリに置いて、実行権限を与えるだけ。

# curl https://github.com/c9s/Onion/raw/master/onion > ~/bin/onion 
curl -s http://install.onionphp.org/ | sh
# 2012/02/07 修正 インストール方法が変更されてました。

使用方法

onion_sample
|– vendor
|– package.ini

プロジェクト直下にpackage.iniを作成し、ここに依存関係などを記述します。
packageセクションにあるname、desc、version、authorは必須となっています。(そもそもOnionはPEARパッケージを作る際にも使うためだと思われます。) requireセクションに使用したいPEARパッケージを記述します。 上記の状態で下記コマンドを実行することで、vendorディレクトリにPEARパッケージがインストールされます。

$ onion -d bundle

いやー、インストールから実行まで非常に手軽。この手軽さが素晴らしいです。

Composer

こちらもbundler的な事を行えるのですが、Onionよりもその依存関係部分に注力したパッケージマネージャといった感じです。 PEARだけに限らず、gitのリポジトリを依存関係として指定したりもできます。ただその辺りはあまり調べていないので、今回はPEARパッケージのみ使う前提で試して見ました。

インストール

brew install --HEAD https://raw.github.com/gist/1574469/composer.rb

使用方法

composer_sample
|– vendor
|– composer.json

プロジェクト直下にcomposer.jsonを作成し、ここに依存関係などを記述します。

上記の状態で下記コマンドを実行することで、vendorディレクトリにPEARパッケージがインストールされます。

$ composer.phar install

ComposerはPEARモジュール以外も扱うためか、PEARモジュールそのものを扱うのに設定ファイルが少々複雑になります。
今回はpear.phpunit.de/PHPUnitを依存関係として設定していますが、まずそのためにrepositoriesにチャンネルを設定する必要があります。そこまではいいのですが、PHPUnitがpear.symfony-project.com/YAMLに依存しているので、そのチャンネルも記述しておく必要があります。つまり依存関係にある全てのチャンネルを設定しておく必要があるみたいです。これどうにかならないのでしょうか。

雑感としてはPEARモジュールさえ扱えればいいのであれば、Onionの方が簡単だと思いました。対してComposerはPEARモジュール以外にも使えるので、今後に期待できるのはComposerだと思いますが、現状は用途に合わせてといったところでしょう。また気になる動きとして、OnionのGithubリポジトリにcomposer-supportというブランチがあるのが楽しみです。

Facebooktwitterlinkedintumblrmail

これだけで一応使える git-svn 入門

やぁやぁ、村部です。

分散バージョン管理はBazaarをずっと使っていましたが、世の流れには逆らえず現在やっているプロジェクトではGitを使うことにしました。

ソースコードを管理するのであればGitは強力ですしね。EclipseでもNetbeansでも使えるのも魅力。

ただし、中央リポジトリはSubversionです。ドキュメントも同じリポジトリ管理したいのでSubversionが便利なのです。

既に社内でgit-svnでの運用実績もありますので安心(Bazaar使いたい時はbzr-svnでやれますしね)。

社内Git派閥の方に聞いた所「基本trunkでやるなら下記覚えておけばOK」とのこと。

## ローカルでのコミット
git add .
git commit

## SVNへのコミット
git svn rebase  #一旦SVNのリポジトリから取り込み
git svn dcommit #ローカルの変更を反映

しばらく使ってみて不便に感じたのが git commit 直後でないと git svn rebase や git svn dcommit ができないこと。すこしでも修正しているとだめ。 タースーケーテー

「git stash があるよ」

変更を退避するコマンドだそうです。てなわけでSVNへのコミットの基本はこんな感じ。

git stash save -u #commitしてない変更を退避
git svn rebase
git svn dcommit
git stash pop #退避から取り出し

git stash save の -u オプションは –include-untracked の省略形。add していない変更も退避します。
「このオプションを付けてないとよくわからないトラブルになりがち」だそうなのでつけときましょう。

以上、これだけで一応使える git-svn 入門でした。

※2012-03-21 追記
git stash save の -u オプションについてですが、新しいファイルを作成、編集してるときにadd前にこのオプションをつけて save すると pop 時にコンフリクトすることが多いです。その場合コンフリクトを解消するにはコンフリクトしているファイルをすべて削除(または他の場所に移動)して再度 pop します。正常に pop する前に git stash drop すると編集していたファイルを失って泣くことになるのでご注意を。
ということで一概に -u をつけたほうがいいとは言えないようです。

Facebooktwitterlinkedintumblrmail

phpenv+php-build+pyrusでの複数バージョンPHP管理など

必要なもの

  • phpenv
    PHPのバージョン切り替え(切り替えるのみ、PHPのインストールはできない。rbenvを流用)
  • php-build
    複数バージョンPHPのインストールマネージャ
  • Pyrus
    PEAR後継パッケージマネージャ

phpenvのインストール

$ curl https://raw.github.com/CHH/phpenv/master/bin/phpenv-install.sh | sh
Installing phpenv in /Users/dataich/.phpenv
remote: Counting objects: 1008, done.
remote: Compressing objects: 100% (422/422), done.
remote: Total 1008 (delta 633), reused 928 (delta 558)
Receiving objects: 100% (1008/1008), 135.47 KiB | 124 KiB/s, done.
Resolving deltas: 100% (633/633), done.
Success.

Now add /Users/dataich/.phpenv/bin to your $PATH, add "eval $(phpenv init -)" at the end of your ~/.bashrc and restart your shell to use phpenv.

最後の行で言われたとおり、.bashrcに追記します。

$ vi ~/.bashrc
export PATH="/Users/dataich/.phpenv/bin:$PATH"
eval "$(phpenv init -)"

phpenvは~/.phpenv以下にインストールされており、~/.phpenv/versionsにバージョンごとのPHPをインストールしてやることで切り替えが可能になります。

php-buildのインストール

$ git clone https://github.com/CHH/php-build.git
$ cd php-build
$ ./install.sh
Installing php-build in /usr/local
- Creating Directories... Done.
- Copying files... Done.

これで必要なもののインストールは完了です。また、現状はインストールできるPHPバージョンが増えたりした場合は、git pullして./install.shを再度実行しないといけないと思います。

php-buildを使用してPHPをインストール

まずはインストール可能なバージョンを調べます。

$ php-build --definitions
5.2.17
5.3.2
5.3.6
5.3.8
5.3.9RC3
5.3snapshot
5.4.0RC1
5.4.0RC2
5.4.0RC3
5.4.0RC4
5.4.0alpha3
5.4.0beta1
5.4.0beta2
5.4snapshot

では上記から好きなバージョンを選んでインストールしています。今回は業務で必須なので5.3.8を。

とその前にApacheモジュールどうする?

php-buildはApacheモジュールのビルドに対応していません(GitHubにIssueにはFeatureとして登録されてます。)。
ソースを読んでみるconfigure_optionを呼び出してあげればよさそうです。なのでdefinitionsに定義してあるスクリプトに変更を入れてあげます。このdefinitions配下にあるスクリプトはいろいろビルド方法を調整する時に使えそうです(pyrusじゃなくてpear使いたかったらwith_pear書いて、install_pyrusコメントアウトするとか。)

$ vi /usr/local/share/php-build/definitions/5.3.8
configure_option "--with-apxs2" "/usr/local/Cellar/httpd/2.2.21/sbin/apxs" #この行を追加する。apxsへのパスは環境に応じて置き換えてください。
install_package "http://www.php.net/distributions/php-5.3.8.tar.bz2"
install_pyrus

install_xdebug "2.1.2"

まあPHPをビルドする度にlibphp5.soを上書きしてしまうだろうということと、phpenvで切り替えた時どうするのっていうのはありますが・・・。

気をとりなおしてphp-buildを使用してPHPをインストール

ではphp-buildを使用して5.3.8をインストールします。プレフィックスには~/.phpenv/versions/5.3.8を指定します。実はここでちょっとはまったのですが、最後の引数はプレフィックスなのでフルパスである必要があります。

$ php-build 5.3.8 ~/.phpenv/versions/5.3.8
Loaded pyrus Plugin.
Loaded xdebug Plugin.
php.ini-production gets used as php.ini

Building 5.3.8 into /Users/dataich/.phpenv/versions/5.3.8

[Downloading]: http://www.php.net/distributions/php-5.3.8.tar.bz2
[Configure]: /usr/local/bin/../tmp/php-build/source/5.3.8
[Make]: /usr/local/bin/../tmp/php-build/source/5.3.8
[Pyrus]: Downloading from http://pear2.php.net/pyrus.phar
[Pyrus]: Installing executable in /Users/dataich/.phpenv/versions/5.3.8/bin/pyrus
[XDebug]: Downloading http://xdebug.org/files/xdebug-2.1.2.tgz
[XDebug]: Compiling in /usr/local/bin/../tmp/php-build/source/xdebug-2.1.2
[XDebug]: Installing XDebug configuration in /Users/dataich/.phpenv/versions/5.3.8/etc/conf.d/xdebug.ini
[XDebug]: Cleaning up.
[Info]: The Log File is not empty, but the Build did not fail. Maybe just warnings got logged. You can review the log in /usr/local/bin/../var/log/php-build/error.5.3.8.20120106174319.log
[Success]: Built 5.3.8 successfully.

ちなみにphp.iniは~/.phpenv/versions/5.3.8/etc配下のを使うようになっています。また~/.phpenv/versions/5.3.8/etc/conf.d配下のものも読むようになっており、xdebug.iniなどが置いてあります。バージョンごとにiniファイルを持っているので便利です。

phpenvを使ってみる

ではphpenvにて切り替えられるバージョンを調べてみます。

$ phpenv versions
5.3.8

先ほどインスールした5.3.8が使用できる状態になっていますので、グローバルに使うようにします。

$ phpenv global 5.3.8
$ phpenv versions
* 5.3.8 (set by /Users/dataich/.rbenv-version)
$ php -v
PHP 5.3.8 (cli) (built: Jan 11 2012 23:20:46)
Copyright (c) 1997-2011 The PHP Group
Zend Engine v2.3.0, Copyright (c) 1998-2011 Zend Technologies
with Xdebug v2.1.2, Copyright (c) 2002-2011, by Derick Rethans

また、下記のようにlocalを使うとカレントディレクトリに.rbenv-versionというファイルが作られ、そのディレクトリ配下では一度指定したバージョンが使われるようになります。

$ phpenv local 5.4snapshot

phpenv rehashコマンド

phpenvでは.phpenv/shims/にパスを通すようになっており、そこを介してexecutableなコマンドを実行したりします。

$ ll .phpenv/shims

何もないはずです。ここを構築するにはrehashを使います。

$ phpenv rehash
$ ll .phpenv/shims/
total 56
-rwxr-xr-x 7 dataich staff 102 1 11 23:31 phar
-rwxr-xr-x 7 dataich staff 102 1 11 23:31 phar.phar
-rwxr-xr-x 7 dataich staff 102 1 11 23:31 php
-rwxr-xr-x 7 dataich staff 102 1 11 23:31 php-config
-rwxr-xr-x 7 dataich staff 102 1 11 23:31 phpize
-rwxr-xr-x 7 dataich staff 102 1 11 23:31 pyrus
-rwxr-xr-x 7 dataich staff 102 1 11 23:31 pyrus.phar

これを実行することでインストールされているPHPやPEARモジュールの実体を探してきて、シムリンクぽいシェルスクリプトが作成されます。新しいバージョンのPHPや、phpunitなどの実行モジュールをインストールした後には実行しておきましょう。

Pyrus

で次にPyrusです。PEARの後継にあたるパッケージマネージャです。使ってみます。
php-buildでインストールした際に既に使えるようになっています。

$ pyrus config-show
Pyrus version 2.0.0a3 SHA-1: BE7EA9D171AE3873F1BBAF692EEE9165BB14BD5D
Using PEAR installation found at /Users/dataich/.phpenv/versions/5.3.8/pyrus
System paths:
php_dir => /Users/dataich/.phpenv/versions/5.3.8/pyrus/php
ext_dir => /Users/dataich/.phpenv/versions/5.3.8/lib/php/extensions/no-debug-non-zts-20090626
cfg_dir => /Users/dataich/.phpenv/versions/5.3.8/pyrus/cfg
doc_dir => /Users/dataich/.phpenv/versions/5.3.8/pyrus/docs
bin_dir => /Users/dataich/.phpenv/versions/5.3.8/bin/
data_dir => /Users/dataich/.phpenv/versions/5.3.8/pyrus/data
www_dir => /Users/dataich/.phpenv/versions/5.3.8/pyrus/www
test_dir => /Users/dataich/.phpenv/versions/5.3.8/pyrus/tests
src_dir => /Users/dataich/.phpenv/versions/5.3.8/pyrus/src
php_bin => /Users/dataich/.phpenv/versions/5.3.8/bin/php
php_ini => /Users/dataich/.phpenv/versions/5.3.8/etc/php.ini
php_prefix => /Users/dataich/.phpenv/versions/5.3.8/bin/
php_suffix =>
...

パッケージのインストール先ディレクトリ等がphpenvで指定している現在のバージョン配下になっています、素晴らしい!これでPEARモジュールは現在使用中のPHPのバージョン配下に収まることになります。

pyrusコマンドは第一引数にディレクトリを渡してやることで、そのディレクトリローカルなパッケージ管理ができるようになるので、非常に便利です。ただphp-buildが生成するshimにバグがあって、使えない状態だったのですが、作者さんに投げたところ数時間で対応していただきました、これで常用できそうです。
#35: Cannot use pyrus locally – Issues – CHH/php-build – GitHub

ただし現状Pyrusだとプロジェクトローカルなインストールは簡単なのですが、依存関係の設定ファイルだけリポジトリに上げておいて、コマンド一発で全部インストールみたいなことが難しいです。package.xmlを作ればできるようなのですが、そもそもPEARモジュールのビルド用ぽくて、扱いが難しいです。次のエントリーではその辺りを上手く解決してくれる、Onion、Composer辺り扱ってみます。

参考

phpenv で複数の PHP 環境を管理する
php-build で PHP 5.4.0 beta1 をビルドする
Using Pyrus To Manage PEAR Installable Vendor Libs

Facebooktwitterlinkedintumblrmail

EclipseプラグインJavaEditorへの機能追加編

EclipseプラグインのJavaEditorへの機能追加について書いていきます。

今回は次のようになっているソースを

String aaaa = null;
String b = null;
String ccc = null;

イコールの位置で整形する機能を追加してみます。

1.プロジェクト作成する。
 1)Eclipseプラグインの作り方基本編を見てこの手順でプロジェクトを作成してください。
  今回からActivatorにはちゃんとしたパッケージを指定します。
パッケージ
  今回はテンプレートは選択しません。
テンプレートは選択しない

2.plugin.xmlの編集
 1)拡張タブを選択します。
拡張タブ
 2)追加ボタンを押します。
追加ボタンを押す
 3)ポップアップメニューとして出す予定なので「org.eclipse.ui.popupMenus」を選択します。
ポップアップメニュー
 4)「org.eclipse.ui.popupMenus」の上で右クリックし以下のように選択します。
eclipse
 5)以下のように値を入力します。
  JavaEditorのIDは「#CompilationUnitEditorContext」になります。
eclipse
 6)追加したメニューの上で右クリックしactionを登録します。
  これはこのメニューを選択したときどのclassが実行されるかなどを登録します。
action
 7)追加したアクションには以下のように記述します。
  idとclassには「com.lancard.editor.action.FormatAction」
  menubarpathには「additions」と書きます。
アクション

2.クラスの作成
 1)「com.lancard.editor.action.FormatAction」を作成します。
クラスを作成
 2)コードは以下のように書きます。

package com.lancard.editor.action;

import org.eclipse.jface.action.IAction;
import org.eclipse.jface.text.BadLocationException;
import org.eclipse.jface.text.IDocument;
import org.eclipse.jface.text.ITextSelection;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.ISelectionProvider;
import org.eclipse.ui.IEditorActionDelegate;
import org.eclipse.ui.IEditorPart;
import org.eclipse.ui.texteditor.IDocumentProvider;
import org.eclipse.ui.texteditor.ITextEditor;

public class FormatAction implements IEditorActionDelegate {
private IEditorPart targetEditor = null;
public void run(IAction action) {
ITextEditor textEditor = (ITextEditor)targetEditor;
ISelectionProvider selectionProvider = textEditor.getSelectionProvider();
ISelection selection = selectionProvider.getSelection();
ITextSelection textSelection = (ITextSelection)selection;
textSelection.getStartLine();
try{
execute(textSelection.getStartLine(),textSelection.getEndLine());
}catch(BadLocationException e){
//ログとか出したほうがいい。
}
}
private void execute(int startLine,int endLine) throws BadLocationException {
ITextEditor textEditor = (ITextEditor)targetEditor;
IDocumentProvider provider = textEditor.getDocumentProvider();
IDocument document = provider.getDocument(textEditor.getEditorInput());
int maxIndex = 0;
for(int line=startLine;line<=endLine;line++){
int length = document.getLineLength(line);
int offset = document.getLineOffset(line);
String value = document.get(offset, length);
int equalsIndex = value.indexOf("=");
if(equalsIndex<0){
continue;
}
if(equalsIndex>maxIndex){
maxIndex = equalsIndex;
}
}

for(int line=startLine;line<=endLine;line++){
int length = document.getLineLength(line);
int offset = document.getLineOffset(line);
String value = document.get(offset, length);
int equalsIndex = value.indexOf("=");
if(equalsIndex<0){
continue;
}
if(equalsIndex

 3)一部見つからないクラスが出ると思います。
見つからないクラス
 4)plugin.xmlに依存関係を登録します。
  依存関係のタブを開きます。
依存関係
  以下のように2つ登録します。
登録

3.実行してみる
 1)適当にjavaファイルを作ります。
 2)エディター上で右クリックします。
 3)以下のようにメニューに機能が追加されていれば成功です。
機能

4.使ってみる
 1)整形する範囲を選択します。
使ってみる
 2)ランカードコム整形を押します。
実行後
  整形されていたら成功です。

5.プラグインファイルの作成
 1)エクスポートウィザードを実行します。
  plugin.xmlの概要タブの右下のボタンを押します。
エクスポートウィザード
 2)以下のように入力し、完了を押したら完成です。
エクスポート
 3)あとは解凍してpluginフォルダの中にあるjarファイルを自分のEclipseのpluginフォルダに入れたら
  あなただけの独自機能の追加されたEclipseを使うことが出来ます。

6.ソースの説明
 すごく簡単なソースなので、読めばわかると思うので今回はここまでです。
 あとすぐ作りたかったので適当に書いたのですが、もうちょっと奇麗にかけるところがあるかもしれないです・・。

Facebooktwitterlinkedintumblrmail

Eclipseプラグインの作り方基本編

Eclipseのプラグインの作り方基本編

1.注意

Eclipseはプラグイン開発用に新しくダウンロードしたEclipseにしたほうがいいです。

仕事で使っている色々入っているEclipseだとめんどくさいことになりがちです。

とりあえず、ここに書いてある内容がならない場合は新しく入れた方がいいです。

今回はEclipseをダウンロードして日本語化しただけのものを使います。

 

2.プラグインプロジェクトを作る
1)パッケージエクスプローラ上で右クリック→新規→その他を選択
新規からその他
2)プラグイン開発からプラグイン・プロジェクトを選択
プラグイン・プロジェクトを選択
3)プロジェクト名に「HelloWorld」と入力します。Eclipseバージョンは書いてある通りターゲットとするEclipseのバージョンになります。
今回はそのままにしておきます。
HelloWorld
4)ここは今回は変更しませんが、重要ポイントになります。
①実行環境はターゲットとなるJavaのバージョンになります。これを高くしすぎているといろんな人に使ってもらえなくなります。
 (Eclipseのバージョンもそうです。)
②リッチクライアントプリケーションを作成を「はい」にすると、Eclipse内で動くPluginと違い独立したソフトウェアになります。
プラグイン作成
5)ここは普通は何も選択する必要はないのですが、どうやって作るのかわからないときのサンプルとしてや
さっさと作りたい場合に使うといいと思います。
今回はHello,Worldを選択します。
Hello,Worldを選択
6)ここはHello,Worldのアクションクラスの設定です。ここはこのままで問題ありません。完了ボタンを押します。
そのままでOK
7)パースペクティブを変更しますか?と出てくると思いますが、「はい」でいいです。
プラグイン開発のパースペクティブのほうが便利です。
以上でプラグインは完成です。

3.実行してみる
1)赤わく部分を押します。
実行
2)もう一つEclipseが立ち上がって、メニューに「サンプルメニュー」というのがついていたら成功です。
サンプルメニュー

4.最後に説明
重要なファイルはActivator.javaとplugin.xmlとbuild.propertiesになります。
①Activator.javaはプラグインそのものを表すクラスになります。
②plugin.xmlはある意味最も重要でここに書く設定で既存プラグインに機能を追加したりしていきます。
③build.propertiesはプラグインにはライブラリーを伴うことが多いのでその設定を書いたりします。
説明

Facebooktwitterlinkedintumblrmail

PHPUnit_Storyで振舞駆動開発なテストを書いてみた

テスト対象としてEntryクラスを作成しました。

  • ステータス(下書き・公開済・削除)を持つ。
  • 初期ステータスは下書き
  • ステータスはメソッドを通じて変更できる。

まずはテスト駆動開発なテストを行う簡単なテストケースを書いてみました。こんなコードになります。

実行結果はこうなります。
$ phpunit --debug EntryTest.php 
PHPUnit 3.6.2 by Sebastian Bergmann.


Starting test 'EntryTest::testStatus'.
.

Time: 0 seconds, Memory: 5.50Mb

OK (1 test, 3 assertions)

これを振舞駆動開発なテストで書きなおしてみました。PHPUnit_Extensions_Story_TestCaseをextendsし、runGiven、runWhen、runThenを実装する必要があります。

実行結果はこうです。なんかそれっぽくなりました
$ phpunit --debug --verbose --printer PHPUnit_Extensions_Story_ResultPrinter_Text EntrySpec.php
PHPUnit 3.6.2 by Sebastian Bergmann.

EntrySpec
 [x] Status for new entry is draft

   Given New Entry 
    Then Status should be draft

 [x] Status after publish entry is published

   Given Some Entry 
    When publish Entry 
    Then Status should be published

 [x] Status after delete entry is deleted

   Given Some Entry 
    When delete Entry 
    Then Status should be deleted

Scenarios: 3, Failed: 0, Skipped: 0, Incomplete: 0.

パッと見、コード量が多くなってしまいましたが、テスト対象がサンプル程度なので。実装が増えてきたときに、runGiven、runWhen、runThenを良い感じに使いまわせるようにすると、効果大きそうです。
ちなみにPHPUnit、PHPUnit_StoryともにPEARでサクッとインストール可能です。

Facebooktwitterlinkedintumblrmail

OSC2011 Fukuoka ありがとうございました

12/3(土)に筑紫女学園大学で行われた『オープンソースカンファレンス 2011 Fukuoka』に出展して参りました。

今回、福岡ということで知った顔が多くて(福岡のコミュニティ、Rubyビジネスコモンズのスタッフをしていたり、他の勉強会やイベントにもちょくちょく参加してますので)心強かったです。
また、今年は各地のOSCに参加していますので遠方から来られた方々にも見慣れた顔が増えて参りました。

今回はセミナーも私が話させていただきました。スライドにちょっとした(まど☆マギ)ネタを入れているのですが、今回、ついに元ネタを知っている方がいないという状況が発生!

「いいかげんあきらめようか。いやしかし」

と葛藤中です(このネタのせいでスライド公開できなかったりするしなぁ。いやしかし)

そんなわたしの悲しみを表現するだれもいないブースの写真。

中央に赤くみえる梅ヶ枝餅がおしゃれポイントです。

まぁ、ブースの準備が終わったときにとった写真なのでだれもいないのは当然なんですが。
今回、現地は私一人でしたので写真がこれしかないのでした。

通常、あまり入れないような会場でいろいろとおもしろかったのですが、ライトニングトーク・閉会式の会場が礼拝堂(らいはいどう)であまりの神々しさに度肝をぬかれたのはいい思い出です。

ただ、女子大の学食を体験できなかったのは心残り(一人だったのでブースを離れるわけにもいかず昼食は梅ヶ枝餅をパクつきました)

それから、出展してるとセミナーを見れないのがつらいなぁとか、ライトニングトークネタもつくろうかなぁとか思いました。

Facebooktwitterlinkedintumblrmail

OSC2011 Tokyo/Fall セミナー無事に(?)終了しました

無事にセミナーが終了しました(会場のディスプレイへのPCの接続でトラブったようですが)。
終了時間直前に写真を撮りに行ったのですが、いい感じで質疑応答が行われておりました。

ありがとうございました。

Facebooktwitterlinkedintumblrmail