2012年1月 のアーカイブ
mysqld_multiを使って同一マシンに複数のMySQLサーバを立てる
- 2012/01/30
- yoshida
業務で複数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開発環境では、多分別の社員さんが書いてくれると思います。
OpenCOBOL活用セミナーで生みの親の西田さんと
OSSコンソーシアムに OSS COBOL ワーキンググループが設立されました(「【プレスリリース】OSS COBOL支援プロジェクト立ち上げ – OSSコンソーシアム」をご参照ください)。
これにともない、『フルオープンソースでCOBOLの基幹システムを実現!OpenCOBOL活用セミナー』が1/25に開催されました。長崎県からは長崎県総務部政策監の島村秀世様と弊社の峰松が長崎県での取り組みや展開について話しました。
ご参加いただいた皆様、ありがとうございました。
さて、堅い感じはおわり。本題にはいりますよー。
OpenCOBOLの生みの親、西田圭介さんに今回のセミナーのことを峰松からお話していたらなんとご本人が参加してくださったんです!
懇親会で二人が話してたところにちょっとお邪魔してパチリ(左が峰松、右が西田さんです)。
西田さんは現在、BizMobile株式会社のCTOだそうです。
OpenCOBOL開発当時のお話や著書『Googleを支える技術-‾巨大システムの内側の世界-』についてお話したり、OpenCOBOLの可能性について語りあったりととても楽しいひとときでした!
付記:
プレゼン直前にPowerPointが落ちて作っていた資料がほとんど消える。プレゼンの途中にプロジェクターへの接続がきれる。終了予定時間がすぎてからデモを始める。峰松は今回も絶好調でした。ざっつ、えんたーてぃなー。
PHPでbundlerぽいことを行うOnion、Composer
- 2012/01/12
- yoshida
pear.phpunit.de/PHPUnitを依存関係として設定する前提で、Onion、Composerを使ってみました。
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というブランチがあるのが楽しみです。
これだけで一応使える 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 をつけたほうがいいとは言えないようです。
phpenv+php-build+pyrusでの複数バージョンPHP管理など
- 2012/01/12
- yoshida
必要なもの
- 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
