RubyWorld Conference 2011

RubyWorld Conference 2011に行ってきました。

RubyWorld Conference 2018


会場には、無線LANのアクセスポイントも用意されてたみたいです。(詳細は、公式の告知ページをご確認ください。)
あと、WiMAXも使えてました。電源も休憩ポイントに用意されてましたね。


以下、聞いたセッションのまとめを、いくつか書いておきます。

また、間違いなどありましたら、ご指摘いただければと。

続きを読む

ruby 1.9.2 + mysql2 の環境構築

※ devkitのインストールとかが面倒くさい人は、mysql2 の代わりに "ruby-mysql" というDBドライバを使ってもよいでしょう。ruby ネイティブなのですぐ使えます。


走り書きですが、Windows 上での、ruby 1.9.2 + mylsql2 0.2.13のインストール手順を簡単にメモしておきます。

  • rubyinstaller 1.9.2 を使って、ruby をインストール。手元の環境ではruby 1.9.2-p180 を使ってます。
  • rubyinstaller の devkit をインストール。 1.9.2-p180 に対応したバージョンをアーカイブリストから探してくる。
  • MySQLのインストールは、C\mysql\mysql51 とか、パスに空白が含まれない場所にする。
    • なお、データフォルダは、どこでもよい。
  • そのあと、devkit.bat を使って、コマンドプロンプトgccの環境を設定する。
  • そして、gem コマンドを実行し、mysql2をインストールする。もしかしたら、 --with-mysql-lib はなくても成功するかもしれない。
> gem install mysql2 -v 0.2.13 -- '--with-mysql-include="c:\mysql\mysql51\include" --with-mysql-lib="C:\mysql\mysql51\lib" --with-opt-lib="C:\mysql\mysql51\lib\opt"

mysql2 のバージョンですが、rails 3.0 系であれば、0.2.7 以降、0.3未満を使う必要があります。

0.3以上はRails 3.1 から使えるらしいです。

補足

もしインストールに失敗したら、"C:\Ruby192\lib\ruby\gems\1.9.1\gems\mysql2-0.2.11\ext\mysql2" とかの gem_make.out や mkmf.log に、ログが残ってます。

オプション指定に失敗してると、以下のように実行結果が表示されます。

>gem install mysql2 -v 0.2.12
Fetching: mysql2-0.2.12.gem (100%)
Building native extensions.  This could take a while...
ERROR:  Error installing mysql2:
        ERROR: Failed to build gem native extension.

        C:/Ruby192/bin/ruby.exe extconf.rb
checking for rb_thread_blocking_region()... yes
checking for main() in -llibmysql... no
*** extconf.rb failed ***
Could not create Makefile due to some reason, probably lack of
necessary libraries and/or headers.  Check the mkmf.log file for more
details.  You may need configuration options.

Provided configuration options:
        --with-opt-dir
        --without-opt-dir
        --with-opt-include
        --without-opt-include=${opt-dir}/include
        --with-opt-lib
        --without-opt-lib=${opt-dir}/lib
        --with-make-prog
        --without-make-prog
        --srcdir=.
        --curdir
        --ruby=C:/Ruby192/bin/ruby
        --with-mysql-dir
        --without-mysql-dir
        --with-mysql-include
        --without-mysql-include=${mysql-dir}/include
        --with-mysql-lib
        --without-mysql-lib=${mysql-dir}/lib
        --with-libmysqllib
        --without-libmysqllib


Gem files will remain installed in C:/Ruby192/lib/ruby/gems/1.9.1/gems/mysql2-0.
2.12 for inspection.
Results logged to C:/Ruby192/lib/ruby/gems/1.9.1/gems/mysql2-0.2.12/ext/mysql2/g
em_make.out

heroku の postgresql (shared plan) を使う

d:id:nshibazaki:20110724 の続きです。

前回デプロイしたアプリでは、自動で postgresql を使うように設定されてるようです。
特に、database.yml を設定しなくても。

今回は、DB周りの情報について少し調べたので、それをまとめてみます。

まだ、専用データベースについては試してないので、とりあえず情報を調べたって段階ですが。

参考資料

ここを参考にしてます。

http://devcenter.heroku.com/articles/database

このページには、専用DBの話やバックアップの話、パフォーマンスの話も載っています。
しかし、今回はそこは飛ばして、DBの設定方法だけに注目します。

また、Rails 初心者なので、コネクションプーリングとか、DB周りのチューニングの知識についても、特に考えないことにします。

Database の設定

config varの概要

DBの設定の話に入る前に、PaaS におけるアプリの作り方の特徴について少し説明します。

heroku には、config var ( Configuration and Config Vars | Heroku Dev Center )というのがあって、アプリ内の設定は、変数として指定するのだそうです

Java では、System#getProperty で取得するようなプロパティにあたるものです。

なぜ、こういう構成になってるか一応説明すると、ローカル環境とデプロイ環境では、DBなどに違うもの使います。そこで、アプリ内では、設定を変数を利用するという形にしておき、環境に応じて設定を切り替えられるようになってるそうです。

ちなみに、Java だとDIコンテナを使ことが多いと思います。しかし、DIコンテナ自体も複雑ですので、Java EEで作る複雑な構成を持つアプリじゃないと、かえって難しくしてる感じになっちゃいますね。

そういう意味で、RoRで設定を外部化するなら、変数という形で解決するとか、yaml でがんばる位で十分なんでしょうね。

SHARED_DATABASE_URL と DATABASE_URL

heroku に用意されているDBのURLは、この2つの変数に設定されています。
この変数の値を、database.yml に書いてあげることで、DBに使えるようになります。

DATABASE_URLの調べ方は、「heroku config」 コマンドで見るのが楽です。

(ちなみに、heroku console コマンドだと、ちょっとめんどくさいと思います。)

次に、この2つの変数について説明します。

SHARED_DATABASE_URL は、共有DBのURLです。
DATABASE_URL は、何もしてなければ、SHARED_DATABASE_URLと同じ値のはずです。
専用データベースを使う場合は、heroku pg:promote コマンドを使って手動で設定するようです。。

Heroku Postgres | Heroku Dev Center によると、
heroku pg:info コマンドで、利用可能なDBを一覧して、
heroku pg:promote コマンドで、DBを使う設定をするようです。

Using the DATABASE_URL environment variable (Rails)

専用データベースを使う場合:heroku console または、 heroku config でDATABASE_URL を確認します。

 "postgres://username:password@hostname/database"

これに対応するように、database.yml を設定します。

production: 
  encoding: unicode
  adapter: postgresql
  username: username
  port: 5432
  host: hostname
  database: database
  password: password

その後、git commit & git push heroku master して、heroku rake db:migate すれば、使えるようになります。

もし失敗したら、まずは http://devcenter.heroku.com/articles/database にある、「Common Issues Migrating to PostgreSQL」 とかFAQを見てみてください。

たとえば、テーブルがないって怒られたら、まずは、以下のコマンドを実行して、テーブルが存在するか確認してみてください。

$ heroku console

>> ActiveRecord::Base.connection.tables

Mac で heroku を触ってみる

d:id:nshibazaki:20110723 の続きです。

今日は、公式サイトのGetting Started の"Getting Your App on Heroku" のところをがんばります。
主に、使い方

サンプルアプリの作成

デプロイする前に、サンプルアプリの作成を行います。
ここでは簡単な、Message Board を作ります。

以下のコマンドを実行してください。

$ rails new myapp

$ rails generate scaffold message name:string text:string


それでは、本題であるデプロイ作業に移ります。

デプロイ手順

ここでは、以下のドキュメントを参照しています。

Getting Started with Heroku (Getting Your App on Heroku)
Getting Started on Heroku | Heroku Dev Center]

ここで説明するデプロイ手順は、以下のような流れになります。

  • Rakefileを修正する。
  • 1. Track your application with Git
  • 2. Set up your SSH keys
  • 3. Create your Heroku application
  • 4. Push your application to Heroku
  • 5. Bootstrap your database
Rakefileを修正する。

はじめに、"Getting Started with Heroku" には書いていませんが、Rakefile をいじらないと、heroku rake db:migrate に失敗します。

以下のように、Rakefilerequire 'rake/dsl_definition' を追記します。

require File.expand_path('../config/application', __FILE__)
require 'rake'
require 'rake/dsl_definition'
# (以下、省略)

参考URL:http://bit.ly/l7OZc1

1. Track your application with Git

git コマンドを実行し、アプリをgit のローカルリポジトリに追加します。

$ cd PATH/TO/MY_APP
$ git init

$ git add .
$ git commit -m "new app"
2. Set up your SSH keys

以下を参照し、git のSSH のpublic key を設定を行います。
github は使わないので、ssh-keygen の実行だけすればよいです。

sshのpublic key の生成方法、git の設定方法」(github)
Set up Git - GitHub Help (Mac 向け)

3. Create your Heroku application

heroku 側に、アプリを作成します。(git remote repository とかを含む)

ちなみに、heroku createは、初回実行時に、ユーザ名とかssh public key のkeypassとかを質問します。
入力すると、~/.heroku/credentials に、それらの情報が保存され、次回から質問されなくなります。

$ heroku create

コマンドを実行すると、Heroku のMyApp画面にアプリが追加されています。

Web URL は、heroku info コマンドでも確認できます。

$ heroku info
=== 
Web URL:        http://severe-xxxxx-???.heroku.com/
Git Repo:       git@heroku.com:severe-xxxxx-???.git
Dynos:          1
Workers:        0
Repo size:      5M
Slug size:      4M
Stack:          bamboo-mri-1.9.2
Data size:      (empty)
Addons:         Basic Logging, Shared Database 5MB
Owner:          myname@gmail.com

また、heroku open コマンドを実行すると、このWeb URL を開いてくれます。


4. Push your application to Heroku

アプリをデプロイします。

$ git push heroku master
5. Bootstrap your database
$ heroku rake db:migrate

$ heroku open # デプロイしたアプリをブラウザで表示する


これで、デプロイは完了です。

次の予定

次は、Getting Started with Rails 3.x on Heroku | Heroku Dev Center にあるコマンドをいじってみようと思います。

現状は、RDBにsqlite3 を使っています。なので、RDBpostgresql のshared db を使う方法を勉強します。
また、ログとかを参照したりするコマンドをいろいろ試してみます。

Macでheroku の開発環境をつくる

PaaS を試してみようと思ったので、有名どころのheroku を触ってみます。

まずは、触る準備をしたのでメモ。

この記事は、公式サイトの"Getting Started" を見ながら書いてます。
Getting Started on Heroku | Heroku Dev Center

前提環境としては、Mac OS X LionとかSnow Leopard ですが、Windows に関しても、わかる範囲で注記を入れておきます。

Linux はパッケージマネージャがあるはずなので、インストールで苦労するはずないと思います。Macの記述を参考にがんばってください。

インストールや準備にかかった時間

はじめに、作業全体にかかった時間を紹介します。

herokuアカウントの作成は、5分くらいでできます。
ここから作成→Cloud Application Platform | Heroku

あとは、環境のインストールにかかる時間ですが、
手元のMacBook Air '13 (Core 2 Duo 2GHz) だと、Xcode のインストールを除いて、大体1時間くらいだったでしょうか。
Xcode のインストールは、Mac App Store からのダウンロード時間がかかります。時間は環境やネットワークの状況によりけりですが、たぶん1時間かかると思います。

以降、インストール手順について説明します。

インストールするもの *1

開発環境に必要なものは以下の通りです。

  • Xcode (ライブラリのコンパイルなどをする。Snow Leopard と Lion とで、Xcode のバージョンが違います。Mac App Storeからインストールできます。Lionの方は、ver 4.1 が 無料でインストール可能です。)
  • rails 実行環境
    • rvm (Ruby Version Manager) *2
    • ruby 1.9.2 (OS X Lion の標準もこのバージョンですが、rvmを使っておいたほうがシステムが汚れなくてよいです。)
    • rails 3.x (手元の環境では、3.0.9 を使ってます。 3.0.5 以前だと、rake のバージョン指定にまつわる問題があるらしいです。詳細は各自で調べてみてください。)
  • git *3
  • Heroku gem (Heroku へアプリをデプロイなどするときの管理用コマンド)

rubyとかのインストール

rvm のインストール方法は、以下のような感じです。

$ bash < <(curl -s https://rvm.beginrescueend.com/install/rvm)     # rvm インストールスクリプトを実行
    (出力省略)

$ vi .bash_profile   # rvm のインストール手順に従って、設定を追加。

$ cat .bash_profile # 追加した設定を表示。
[[ -s "$HOME/.rvm/scripts/rvm" ]] && . "$HOME/.rvm/scripts/rvm" # Load RVM function

ruby 1.9.2 のインストールは、Heroku のGetting Started にあるように、以下のコマンドを実行すれば完了です。

$ rvm install 1.9.2 && rvm use 1.9.2 --default
    (出力省略)

$ ruby -v
ruby 1.9.2p290 (2011-07-09 revision 32553) [x86_64-darwin10.8.0]

Windows ユーザの方がruby実行環境を分けたい場合、rvmの代わりに、pik を用いる方法もあります。

git のインストール

homebrew を使ったgit のインストール

インストーラを使わない場合、自分でビルドするなどして、gitをインストールします。ここでは、homebrewを使ってビルド・インストールする方法を紹介します。

homebrew とは、MacPortsと同様のパッケージ管理システムです。

MacPortsとの違いは、Mac標準のコマンドはそのまま使い回すところです。Mac環境をほとんど壊さずに、不足するコマンドだけパッケージでビルド・インストールする感じです。

また、コンパイルするものも最小限になるので、環境構築もMacPortsに比べて早くできます。ディスク容量も節約できます。
自分は、MacPortsだと環境が競合起こしそうでめんどくさいし、インストールする際に、いろいろ環境をいじくるのがいやだったんで、homebrewにしました。

pythonmercurial とか rabbitmq とかのインストールもできるんで、git以外にもいろいろ勉強したい人にもおすすめです。

  • homebrew のインストール

homebrew のインストール環境・インストール手順は、ここでの説明はしません。(homebrewのインストールは10分もかからず終わるはずです。)

以下の注意点を読んでから、インストール作業を行ってください。

確認しましたら、インストール手順に従って作業してください。

GitHub - Homebrew/legacy-homebrew: 💀 The former home of Homebrew/homebrew (deprecated)

  • homebrew でgit をインストール

homebrew をインストールしたら、本題であるgit のインストールです。
1コマンドでインストールできます。

$ brew install git
==> Downloading http://kernel.org/pub/software/scm/git/git-1.7.5.2.tar.bz2
######################################################################## 100.0%
==> make prefix=/usr/local/Cellar/git/1.7.5.2 install
==> Downloading http://kernel.org/pub/software/scm/git/git-manpages-1.7.5.2.tar.
######################################################################## 100.0%
==> Downloading http://kernel.org/pub/software/scm/git/git-htmldocs-1.7.5.2.tar.
######################################################################## 100.0%
==> Caveats
Bash completion has been installed to:
  /usr/local/Cellar/git/1.7.5.2/etc/bash_completion.d/

Emacs support has been installed to:
  /usr/local/Cellar/git/1.7.5.2/share/doc/git-core/contrib/emacs/

The rest of the "contrib" has been installed to:
  /usr/local/Cellar/git/1.7.5.2/share/contrib
==> Summary
/usr/local/Cellar/git/1.7.5.2: 1059 files, 19M, built in 78 seconds

$ which git
/usr/local/bin/git
heroku gem のインストール

最後に、heroku 管理用コマンドのパッケージである、heroku gem をインストールします。

$ gem install heroku

とりあえず、環境構築はここまでです。

*1:なお、Windows とかの人でも、インストールするものは基本同じだと思います。Xcode に相当するものは、不要かと思います。

*2:Mac 標準のrubyと共存するには、rvmでrubyの処理系を共存させるのが一番楽です。Windows ユーザには、同様のツールとして pikがあります。こちらはgem パッケージになっています。

*3:Windows ユーザで、ChangeLog に日本語を使いたい方は、TortoiseGit を使ってください。コマンドプロンプトでgitを使うと、winの文字コードSJISで、git 内部の文字コードUTF-8なんで、文字化けします。またgitの方の文字コードを変えると、ソースを配布するときに他の人が文字化けで悩むことになるはずです。素直に、TGit 使うのが楽です。

Mule ESB 3のアーキテクチャについて

Mule の日本語情報が少しでも増やそうと思ったので、少しずつ書いていきたいと思います。

Mule ESB は、EIPのリファレンス実装を用意したインテグレーションフレームワークとして使えるESBです。

EIPのリファレンス実装なのは、Camel と同様ですね。


Enterprise Integration Patterns: Designing, Building, and Deploying Messaging Solutions (Addison-Wesley Signature Series (Fowler))

Enterprise Integration Patterns: Designing, Building, and Deploying Messaging Solutions (Addison-Wesley Signature Series (Fowler))

したがって、Mule のようなインテグレーションフレームワークを理解するには、EIPの3章くらいまでの内容を知っておく必要があります。
でないと、どんな問題を解決しようとしているか、ピンとこないと思います。

あるいは、Mule In Action の第1章を読んでもよいかもしれません。こちらは眠くなるのでおすすめできませんが。



本題に入ります。

Mule 3 がどう進化したのかが、MuleSoft社のブログで紹介されています。

以下の記事で、メッセージフローというのは、結局パイプラインの一形態だという説明をしています。
結局、メッセージフローというのは、POSAやEIPにある、Pipes and Filter Patten で実現されるべきものだったと。

それが、Mule 3のアーキテクチャのコンセプトです。

http://blogs.mulesoft.org/mule-3-architecture-part-1-back-to-basics/

http://blogs.mulesoft.org/mule-3-architecture-part-2-introducing-the-message-processor/

内部では、各オブジェクトがメソッドチェインされています。



こういうインタフェースの大きな変更はありましたが、後方互換性も考慮されています。
Mule 2系の設定ファイルは、ほとんど修正しなくても動くようになっているので。
(synchronous 属性とCXF周りは、互換性がありませんので注意)



ちなみに、Mule 2系のアーキテクチャについては、説明がややこしいので省略します。

アーキテクチャの思想を理解するだけで、相当時間がかかるし、理解してもうまく説明できないアーキテクチャだったりします。
また、アーキテクチャがわかったとしても、設定ファイルの書き方があまり直感的でないかもしれません。
なれるまで1ヶ月とかかかっちゃうかもしれませんね。