サービス関連
Heroku
- Ruby 界で有名な PasS である。
- Rack に対応した Web アプリケーションのプラットフォームとして利用できる。
- heroku 上では 1 プロセスに相当する単位を特別な用語を使い 1 dyno と呼ぶ。
- 以下の手順を踏んでサービスにアクセスできるようにする。
- 「Heroku を始めよう!」の 1 ~ 3 を参考に、サインアップ/ツールインストール/ログインする。
- gem install heroku を実行する。
- サービスへのアクセスは基本的に heroku コマンドで行う。
- Web 管理画面からリソースにアクセスもできる。
- 基本的な考え方は以下の通り。以下を実現する Heroku の実行基盤をランタイムスタックと呼ぶ。
- バックエンドは Amazon EC2 である。
- 情報が少なかったので独自に情報を整理する。
Cedar
- 情報が少なかったので独自に情報を整理する。
- Cedar について
Bamboo
- heroku の旧式のランタイムスタック*2である。
- Cedar の1世代前で、Argent よりも1世代後。
- 既に非推奨。
Aspen
- heroku の旧式のランタイムスタック*3である。
- Bamboo の1世代前。
- 既に非推奨。
Sqale
- Rack アプリケーションに対応したホスティングサービスである。
- 参考
NIFTY Colud C4SA
- ニフティが提供するアプリケーション開発プラットフォームである。
- 参考
Web アプリケーション関連
Rack
- Ruby のための Web サーバと Web アプリケーションの標準的インターフェイスを提供するツール/ライブラリである。
- Rack(ラック/棚)に Web アプリケーションを載せるイメージで、Web サーバに Ruby の Web アプリケーションを配置できる。
- gem install rack でインストールする。
- Web アプリケーションの標準的なインターフェイスなので、対応していれば各種サーバで同じように動かすことが可能である*4。
- 拡張子 ru というファイルに Web アプリケーションの構成を記述する。
- コマンド名は rackup である。
- 参考
- メインサイト - Rack: a Ruby Webserver Interface
- File: SPEC ― Documentation for rack/rack (master)
- Rack の仕様である。英語。
- Rack解説を試みて失敗しつつも晒す、の巻 - KoshigoeBLOG
- Rack の仕様を日本語に訳しているページである。
- Route 477 - Rack 日本語リファレンス
- Route 477 - 5分でわかるRack
以下、Rack に関する個人的見解です。
- Rack を直接利用して Web アプリケーションを作れるが、Rack に対応した Web アプリケーションフレームワークを使って開発するのが通常だと思う。
- Rack 対応の Web アプリケーションフレームワークを使えば自然と Rack に対応することになり、Rack の大部分は隠蔽されるため詳細を知っている必要は薄い。
- 個人的に重要だと思うのは以下の2点である。
- Rack Middleware の存在と機構。
- 対象の Web アプリケーションがとある環境で動くのか否かを判断するための材料。
Rack Middleware とは?
- Web アプリケーションの非機能要件を拡張してくれるモジュールのこと。
- use というキーワードで Web アプリケーションに組み込む。
- use というキーワードが出てきたら、それが Rack Middleware を組み込んでいると思って良い。
- Rack Middleware には Rack 標準のものもあれば、各種 Web アプリケーションフレームワーク/ライブラリが用意してくれるものもある。
- 明示的に自分で組み込むものもあれば、Web アプリケーションフレームワークが機能実現のために自動で組み込むものもある。
- Rack Middleware は Web アプリケーションの処理の前後に独自の処理を割り込ませることができる機構および機構を使って実装したモジュールである。
- ブラウザからのリクエストや、ブラウザへのレスポンスを加工できる。
- これによりアクセス制限や Basic 認証や例外発生時のページ表示、レスポンスの圧縮処理などを実現できる。
- Rack Middleware はもちろん Ruby のコードなので、その他にも任意の処理ができる。
- これによりプロファイリングなどができる。
- ブラウザからのリクエストや、ブラウザへのレスポンスを加工できる。
- 参考
- Contributed Rack Middleware and Utilities - rack/rack-contrib - GitHub
- Rack 標準(?)のミドルウェアの一覧である(英語)。
- Contributed Rack Middleware and Utilities - rack/rack-contrib - GitHub
対象の Web アプリケーションがとある環境で動くのか否かを判断するための材料。
以下のような表現が使われていることがあるので、その意味を理解していると Web アプリケーションサーバを動かせるかどうかが判断できます。
- 環境(Web アプリケーションサーバや各種サービス)に Rack が対応している。
- rackup コマンドでサーバを起動できるという意味である。
- 環境(Web アプリケーションサーバや各種サービス)が Rack に対応しているの違い。
- Web アプリケーションサーバが起動時*5に Rack アプリケーションを自動で認識して起動してくれるという意味である。
- Web アプリケーションフレームワークが Rack に対応している。
- Web アプリケーションで作った Web アプリケーションは Rack 対応の各種サーバで動かせるという意味である。
- Web アプリケーションが Rack に対応している。
- Web アプリケーションが Rack 対応の各種サーバで動かせるという意味である。
以下、事例です。
- 環境に関して
- Web アプリフレームワークに関して
- Ruby on Rails や Sinatra は Rack に対応しているので、これらの Web アプリケーションフレームワークで作った Web アプリケーションは Rack 対応の環境で動かせる。
- Web アプリケーションに関して
- Redmine や tDiary などは、Rack に対応しているので Rack 対応の環境で動かせる。
Web アプリケーションフレームワーク
Ruby on Rails
- Ruby 界では言わずと知れた有名な Web アプリケーションフレームワークである。
- バージョン 2.3 から Rack に対応している。
- gem install rails でインストールする。
- Ruby on Rails は単なるライブラリではなく、複数の依存ライブラリの上に成り立っている。
- rails というコマンドを持ち、ソースコードの自動生成機能を持つ。
- 自動生成したソースコードには Rakefile や Gemfile を含み、rake や Bundler を利用し、開発を行う。
- MVC の全てをサポートする。
- バージョン 3.0 から Merb と統合した。そのため Ruby on Rails 2 系と 3 系には互換性が無いので注意が必要である。
- 参考
- メインサイト - Ruby on Rails
- Ruby on Rails入門
- Railsドキュメント
Sinatra
- Ruby on Rails も有名な Web アプリケーションフレームワークだが、Sinatra も有名な Web アプリケーションフレームワークである。
- Sinatra の特徴は Ruby にメソッドを追加した DSL として定義されている点である。
- Rack に対応している。
- gem install sinatra でインストールする。
- ruby コマンドで作った Web アプリケーションのスクリプトを実行すると 4567 ポートで簡単に動かすこともできる。
- メインサイトが複数言語翻訳されており、日本語の情報も充実している。
- MVC ではない。強いて言うならば MVC の C(Controller)のみをサポートしているというようなイメージである。
- 独自にまとめた情報
- 参考
- メインサイト - Sinatra
- Sinatra: README(Japanese)
- Sinatra: README の日本語バージョンである。
- 残念ながら README 以外は日本語化されていないようなので、より詳しい内容は英語のメインサイトを読む必要がある。
- Sinatra Book(英語)
Goliath
- 非同期*6 Web アプリケーションフレームワークである。
- Rack に対応している。
- Ruby 1.9 以上が必要である。
- gem install sinatra でインストールする。
- ruby コマンドで作った Web アプリケーションのスクリプトを実行すると 9000 ポートで簡単に動かすこともできる。
- 参考
- メインサイト - Goliath
Merb
- Ruby on Rails と統合(Ruby on Rails 3.0)し、既に存在しない Web アプリケーションフレームワークである。
- たまに名前が出てくるので記載した。
その他(名前だけ見たもの)
- Padrino
- Ramaze
Web アプリケーションサーバ
WEBrick
- 単純な HTTP Web サーバ の機能を提供するライブラリである。
- Ruby 1.8 以降、標準で利用できる。
- ライブラリなので単独で起動することはなく、その他のライブラリやツールに取り込まれて使われることが多い。
- 当たり前だが自分のアプリケーションに組み込んで使うことも可能である。
- 参考
- メインサイト(?) - library webrick(Ruby 1.9.3)
Mongrel
- 名前をよく見かけるわりにはメインサイトが見つからなかったりするので、他の Web アプリケーションサーバに取って代わられた気配がある(2012/02/14 時点)。
- 参考
- メインサイト - 見つからない!?
Thin
- Mongrel のスピードとセキュリティを参考に作られた高性能 Ruby サーバである。
- Rack 対応の Web アプリケーションサーバである。
- 参考
- メインサイト - Thin - yet another web server
その他(名前だけ見たもの)
- Unicorn
- Puma
- Rainbows!
Web アプリケーションサーバサポートモジュール
Passenger
- Web アプリケーションのレスポンスを改善するサーバサポートモジュールである。
- 単純な CGI として Ruby の Web アプリケーションを起動すると毎動作ごとに Ruby プロセスの起動に時間が掛かってしまいレスポンスが遅くなってしまう問題を解決してくれる。
- ''Windows はサポートしない…との回答がある。
- 参考
Web アプリケーションでのユーザ認証
Rack::Auth
- Rack が標準で持っているユーザ認証用の Rack Middleware である。
- 標準で Basic 認証(Rack::Auth::Basic)とDigest 認証(Rack::Auth::Digest::MD5)と OpenID(Rack::Auth::OpenID)による認証をサポートする。
- ユーザ名とパスワードによる認証を行うエントリーポイントを提供してくれる。
- エントリーポイントの提供だけで、認証の許可/却下を判断するロジックの定義は開発者が行うものである。
- 当然としてユーザの管理機能もない。
- 認証後は、Web アプリケーション内でユーザ名の参照が可能である。
- ユーザ名の参照は Rack Environment からキー「'REMOTE_USER'」を使って行う。
- ユーザ認証に必要な最小限の機能のみを提供してくれるものであり、要件に見たない場合は別の方法を使う必要がある。
- 独自にまとめた情報
Warden
- ユーザを認証するためのエントリーポイントを提供してくれる Rack Middleware ライブラリである。
- 認証したユーザの情報を格納し、格納したユーザ情報にアクセスする仕組みを提供してくれる。
- 認証方法のことをストラテジーと呼び、各種ストラテジーを組み込む仕組みを提供してくれる。
- Warden 自体は仕組みの提供だけであり、「ユーザ」「ストラテジー」の定義を一切持たない。
- 例えば「ユーザとはユーザ名とパスワードとメールアドレスを持つものである」という定義もないし、ユーザの情報をファイルやデータベースで管理するという機能なども当然としてない。ユーザの定義は開発者が行うものである。
- 認証方法(Warden でいうところのストラテジー)として「Basic 認証」や「ダイジェスト認証」も何もない。ストラテジーの定義は開発者が行うものである。
- Warden のメインサイトにあるサンプルには password や Users など、もしかしたらこういう機能があるのかな?と思うような単語がサンプルに書いてあるが、これらは仮想のものであって、決して Warden 自体が持っている機能ではなく、こういうものを開発して使うものですという事例である。
- 「ユーザ」「ストラテジー」の定義は、開発者が自分で開発するか、各種拡張ライブラリが存在するのでそれらを利用する。
- Warden は認証のための基盤であり、各種ライブラリに隠蔽されている場合がある。
- gem install warden でインストールする。
- 通常は各種ストラテジーを提供するライブラリと組み合わせて使うことになるため、それらのインストール時に Warden はインストールされる。
- 独自にまとめた情報
- 参考
- メインサイト - hassox/warden - GitHub
- Sinatra アプリケーションに Warden で認証を実装する - present
- Sinatra 専用ではあるが、Warden を直接利用した単純なサンプルが日本語で紹介されている。
Devise
- Warden をベースにした Ruby on Rails 用の Web アプリケーション認証を実現する総合ライブラリである。
- Web アプリケーション認証に関わる一般的な機能全般をサポートする。
- ユーザ認証に関わるユーザ情報のデータベース管理はあたりまえ。
- メールによる認証や、メールでのパスワードリセットなどもサポートする。
- ログイン情報を格納してくれたり、ログインを複数回失敗した場合にはユーザをロックする機能なんかもサポートする。
- これら機能はモジュール化されており、選択して利用できる。
- Warden をベースにしていると言っているのだから Ruby on Rails 以外の Rack#rack ベースの Web アプリケーションフレームワークでも使えるのではないかと想像する。
- しかし、Ruby on Rails にどこまで依存しているのかは使ってみてないので不明。想像するに以下の点で Ruby on Rails と結合しているのではないかと想像している。
- コントローラーやモデルなどのコード自動生成
- データベースアクセス(ActiveRecord)
- メール送信(ActionMailer)
- 参考
その他(調査中)
- Authlogic
- sorcery
その他(非推奨)
調査していて、既に古く、利用が推奨されないと思ったもの(主観的)。もしくはメインサイトにて明確に非推奨であることが宣言されているもの。
- Restful Authentication
- Merbful Authentication
- Merb-Auth
Web アプリケーションのテスト
Rack::Test
- Rack アプリケーションのテストをサポートするライブラリである。
- gem install rack-test でインストールする。
- 既存のテスティングフレームワークで作ったテストケースに include Rack::Test::Methods とすることで機能を追加して利用する。
- テストケース内で get や post などのリクエストの送信と、last_response によるレスポンスの検証ができる。
- 参考
- メインサイト - Rack::Test
- ramaze-users.jp - Rack::Test
その他
どれも Rack::Test を拡張(?)し、より高度な検証を可能とするテスティングフレームワークなのではないかと思う。
特にレスポンスの検証に関して Rack::Test はボディを文字列としてしかみていないが、HTML として検証しやすく設計されている(のではないかと想像している)。
モバイル/スマートフォン対応
jpmobile
- ユーザエージェントからアクセス元の端末を判断し、入出力の調整をサポートしてくれるライブラリである。
- gem install jpmobile でインストールする。
- 基本機能は Rack Middleware として提供される。
- その他、Ruby on Rails を中心に機能が提供されている。Sinatra への機能提供もある。
- 参考
- メインサイト - jpmobile/jpmobile - GitHub
- 参考書籍
- - Ruby on Rails 3で作る - jpmobileによるモバイルサイト構築
- Ruby on Rails で作るとあるが、Sinatra に関しても一部記載がある。
- - Ruby on Rails 3で作る - jpmobileによるモバイルサイト構築
非同期/定期処理関連
Delayed Job(delayed_job, Delayed::Job, DJ)
- バックグラウンドで長時間タスクを非同期実行するパターンをカプセル化したライブラリである。
- 基本的に Ruby on Rails と組み合わせて使う。バックエンドに必要なライブラリについては以下のページを参照すること。
- 恐らく Ruby の遅延処理系の中では古い部類に入る。
- 参考
- メインサイト - collectiveidea/delayed_job - GitHub
Resque
- rescue(レスキュー)と queue(キュー)を掛け合わせて Resque という名前を使っている。
- Key-Value ストアの Redis をバックに使ったライブラリである。
- Delayed Job の着想を取り入れていると言っているので Delayed Job の後継*7と考えられる。
- 参考
- メインサイト - defunkt/resque - GitHub
resque-scheduler
- Resque に cron ジョブと同じような機能を拡張追加するライブラリである。
- gem install resque-scheduler でインストールが必要である。
- Rake でライブラリを読み込み、特別なタスクを定義して利用する。
- 参考
clockwork
- cron の代替となる機能を単独で提供してくれる軽量のツール/ライブラリである。
- gem install clockwork でインストールが必要である。
- clockwork コマンドという独自のコマンドで実行する。
- every, handler, Numeric#seconds, Numeric#minites, Numeric#hour, Numeric#day メソッドを組合せて定期実行をプログラムし、clockwork コマンドでそれを実行する。
- 独自にまとめた情報
- 参考
- メインサイト - tomykaira / clockwork - GitHub
- 日本人(ToMmY)がメンテナをしている模様である。
データベース関連
リレーショナルデータベース(汎用)
ActiveRecord
- 各種データベースをサポートする O/R マッパーライブラリである。
- 各種データベース用にアダプターが用意されており、設定によりアダプターを切り替えることで各種データベースを扱える。
- O/R マッパーなので SQL を書かないのが基本的である。
- Active Record という用語自体はデザインパターンの1つでもある。
- 参考
- メインサイト - Ruby on Rails からはまだ完全に独立していないようで、ActiveRecord 単体としてのメインサイトは無い。
DataMapper
- 各種データベースをサポートする O/R マッパーライブラリである。
- gem install data_mapper でインストールする。ネイティブコードを含むため Windows 環境でインストールする場合、事前に DEVELOPMENT KIT のセットアップが必要である。
- 各種データベース用にアダプターが用意されており、設定によりアダプターを切り替えることで各種データベースを扱える。
- アダプターは本体とは別に用意されているので、必要に応じて別途入れる必要がある。
- 調査中。
- 独自にまとめた情報
- 参考
- メインサイト - DataMapper - DataMapper
DataObjects
- 各種データベースをサポートする汎用データベースアクセスライブラリである。
- 各種データベース用に do_xxx という名前のアダプターが用意されており、設定によりアダプターを切り替えることで各種データベースを扱える。
- SQL を書いて実行する。
- DataMapper は、本ライブラリをベースにデータベースにアクセスしている。
- 参考
Sequel
- 各種データベースをサポートする SQL 文の生成/実行補助ライブラリである。
- 各種データベース用にアダプターが用意されており、設定によりアダプターを切り替えることで各種データベースを扱える。
- メソッドチェーンにより SQL をオブジェクト構造体として扱えるのが特徴である。
- 構造体を自由に再構築できるため、柔軟性が高い。
- 構造体がデータベース毎の差異を隠蔽/吸収してくれる。
- O/R マッパーではない。
- 参考
リレーショナルデータベース(MySQL)
mysql(=MySQL/Ruby)
- MySQL にアクセスする機能を提供する主流ライブラリの1つである。
- gem install mysql でインストールが必要である。
- 環境依存のネイティブコードを必要とするので、実行環境のセットアップが必要である。
- SQL を書いて実行する。SQL は MySQL 独自の文法に従う。
- Prepared Statement に対応している。
- ActiveRecord でアダプターが提供されており、MySQL にアクセスする際の標準バックエンドライブラリの1つである。
- 以降の開発はバグフィックスのみと宣言されており、利用はあまり推奨されていない。
- 参考
- メインサイト - luislavena/mysql-gem · GitHub
mysql2
- MySQL にアクセスする機能を提供する主流ライブラリの1つである。
- gem install mysql2 でインストールが必要である。
- 環境依存のネイティブコードを必要とするので、実行環境のセットアップが必要である。
- SQL を書いて実行する。SQL は MySQL 独自の文法に従う。
- Prepared Statement に対応していない。代わりに SQL 埋め込み文字を安全なものにするエスケープ機能が提供されている。
- ActiveRecord でアダプターが提供されており、MySQL にアクセスする際の標準バックエンドライブラリの1つである。
- 参考
- メインサイト - brianmario/mysql2 · GitHub
mysqlplus
- MySQL にアクセスする機能を提供する主流ライブラリの1つである。
- gem install mysqlplus だけでは簡単にインストールできない(環境毎に対応が必要な模様で、すぐできなかったのでとりあえず調査中断)。
- 環境依存のネイティブコードを必要とするので、実行環境のセットアップが必要である。
- SQL を書いて実行する。SQL は MySQL 独自の文法に従う。
- MySQL への非同期アクセスによる高速化に力を入れている。
- ActiveRecord でアダプターは提供されていないが、特殊なコードを利用することで mysql2 と置き換えて利用できる。
- 参考
- メインサイト - oldmoe/mysqlplus · GitHub
Ruby/MySQL
- MySQL にアクセスする機能を提供するライブラリである。
- gem install ruby-mysql でインストールが必要である。
- 環境依存のネイティブコードを必要とせず、Pure Ruby で作られており*8、実行環境の複雑なセットアップが不要である。
- SQL を書いて実行する。SQL は MySQL 独自の文法に従う。
- Prepared Statement に対応している。
- 最新の ActiveRecord でアダプターが提供されていないため、MySQL にアクセスする際のバックエンドとして利用できない。
- 独自にまとめた情報
- 参考
- メインサイト - tmtm/ruby-mysql · GitHub
リレーショナルデータベース(Postgres)
pg
- PostgreSQL RDBMS にアクセスする機能を提供するライブラリである。
- gem install pg でインストールが必要である。
- 環境依存のネイティブコードを必要とするので、実行環境のセットアップが必要である。
- ActiveRecord でドライバ提供されており、Postgres にアクセスする際の標準バックエンドライブラリである。
- 独自にまとめた情報
- 参考
リレーショナルデータベース(SQLite3)
sqlite3
- SQLite(3.6.16 以上)にアクセスする機能を提供するライブラリである。
- gem install sqlite3 でインストールが必要である。
- 以前までは sqlite3-ruby という名前のパッケージだったが sqlite3 に名前が変更になった。
- 独自にまとめた情報
Key-Value ストア
Redis
- 文字列、ハッシュ、リスト、セット、順序付きセットを格納できる Key-Value ストアである。
- データの管理方法にはいくつかの選択肢がある。
- メモリ上で使う。
- 各種の方法*9でディスクに永続化する。
- 参考
- メインサイト - Redis
パッケージマネージメント関連
gem or gems
- gem とは英語で宝玉のことを表す。
- Ruby のライブラリを宝玉になぞらえて、Ruby のパッケージ1つ1つを gem と呼ぶ。
- gem の集まりを gems と呼ぶ。
- gems を管理するパッケージマネージメントである RubyGems のコマンド名が gem であり、これを指すこともある。
- gem list --remote でインストール可能なライブラリの一覧を取得できる。
- gem list --local でインストール済みライブラリの一覧を取得できる。
- gem にはライブラリだけではなく、コマンド拡張を含むものがある。
- gem には Pure Ruby のものと native コードを含むものがあり、native コードを含むものの中には事前の環境準備を必要とするものもある。
- 例)pg は Postgres を操作する gem であるが、Postgres の native コードを呼び出すため、Postgres 本体が事前にインストールされている必要がある。
RubyGems
- gem を管理するツール/ライブラリである。
- RubyGems を使うと gem のインストール/アンインストール/アップグレードなどができる。
- 依存関係の解決機能を有し、ライブラリインストール時、前提となるライブラリも同時にインストールしてくれる。
- Windows では初期状態でインストールされるが、UNIX ではインストールが必要である(※ 「Rubyクックブック ―エキスパートのための応用レシピ集」p.345 参照)。
- コマンド名は gem である。
- Ruby 1.8 では RubyGems によりインストールしたライブラリを利用するには require 'rubygems' が必要であった。
- Ruby 1.9 以降は RubyGems によりインストールしたライブラリは標準で利用できるので require 'rubygems' の記述は不要である。
- 参考
DEVELOPMENT KIT
- 環境依存の特殊な gem を Windows 環境にインストールする際に必要なツール群のこと。
- gem install コマンドで gem をインストールできなかった場合、DEVELOPMENT KIT をセットアップしてないことが原因の可能性がある。
- Windows にはない UNIX 系コマンド群を提供してくれる。
- ls や cat などの基本的なコマンド。
- make や gcc などのコンパイルコマンド。
- 独自にまとめた情報
Bundler
- Ruby アプリケーションで利用する gem を管理するツール/ライブラリである。
- Gemfile というファイルにアプリケーションで利用する gem を書いて利用する。
- アプリケーションが利用する gem を明示し、開発者間で共有できる。
- gem install bundler でインストールが必要である。
- コマンド名は bundle である。
- 独自にまとめた情報
- 参考
- メインサイト - Bundler: The best way to manage Ruby applications
- bundlerでgemをプロジェクトごとに管理する | クラスメソッド開発ブログ
- 基礎的なコマンドの利用方法である bundle init、bundle install、bundle exec までがまとめられている。
- ASCIIcasts - "Episode 245 - Bundlerでgemを作る"
- Bundler を使って RubyGems に自作の gem を公開する方法がまとめられている。
その他(RubyGems へ自作の gems を公開するためのサポートツール)
- newgem
- jeweler
- Bundler
主観的なお勧めは、最後の「Bundler」です。
実行環境関連
基本的な実行環境
MRI(別名として CRuby と呼ばれることもある)
- まつもとゆきひろによって開発されはじめたC言語による実装である。
- MRI は Matz' Ruby Implementation の略である。
REE(Ruby Enterprise Edition)
- エンタープライズ用に Ruby on Rails の動作性能向上を目的として開発されている実行環境である。
- 参考
- メインサイト - Welcome - Ruby Enterprise Edition
JRuby
- Java で書かれた Ruby 実行環境である。
- 参考
- メインサイト - Home - JRuby.org
Rubinius
- Ruby で書かれた Ruby 実行環境である。
- 参考
- メインサイト - Bubinius: Use Ruby
IronRuby
- .NET Framework 上で動作する Ruby の実装である。
- 独自にまとめた情報
- 参考
- メインサイト - IronRuby.net /
対話型 Ruby 実行環境
irb
- 標準入力から Ruby スクリプトを簡単に入力・実行する環境である。
- 標準で利用できる。
- コマンド名は irb である。
- irb は Interactive Ruby の略である。
pry
- irb と同じく標準入力から Ruby スクリプトを簡単に入力・実行する環境である。
- gem install pry でインストールが必要である。
- コマンド名は pry である。
- irb の後方互換でハイライトや入力補完などをしてくれる。
- その他にも irb には無い便利な機能が多数ある。
複数 Ruby 実行環境マネージャー
pik
- Windows 用の複数 Ruby 実行環境マネージャーである。
- 異なるバージョンの Ruby 実行環境をインストールでき、利用する Ruby 実行環境を簡単に切り替えできる。
- gem install pik でインストールする。
- コマンド名は pik である。
- 参考
rvm
- UNIX 用の複数 Ruby 実行環境マネージャーである。
- 異なるバージョンの Ruby 実行環境をインストールでき、利用する Ruby 実行環境を簡単に切り替えできる。
- 以下のコマンドでインストールする。
- gem install rvm
- rvm-install
- コマンド名は rvm である。
rbenv
- UNIX 用の複数 Ruby 実行環境マネージャーである。
- rvm よりも動作が軽く、rvm よりも rbenv が流行りつつある模様である。
その他(特殊)
foreman
- 複数のプロセスを管理する Ruby 上のツール/ライブラリである。
- Procfile というファイルに起動するアプリケーションを書いて利用する。
- gem install foreman でインストールする。
- コマンド名は foreman である。
- 情報があまり見つからなかったので、独自に情報を整理する。
ビルド関連
Rake
- Ruby 産のビルドツールである。
- 同様なツールに make や ant や SCon などが存在する。
- Rake の特徴は Ruby にメソッドを追加した DSL として定義されている点である。
- 追加されたメソッドがビルドツールの機能を提供してくれる。
- Ruby にメソッドを追加したものなので Ruby の全ての構文が使える。
- 標準で利用できる。
- コマンド名は rake である。
- rakefile, Rakefile, rakefile.rb, Rakefile.rb のいずれかのファイルにタスクを記述する。
- 独自にまとめた情報
- 参考
- メインサイト - Rake -- Ruby Make
バージョン管理システム関係
Git
- Ruby 界で良く使われているバージョン管理システムである。
- Ruby に特化しているわけではなく、一般的に使えるものだが、Ruby コミュニティーの多くのプロジェクトで使われている。
- 参考
- Pro Git - professional version control
- 「Pro Git」という本の日本語訳が読める。Git をこれから使い始めるという方には一読をお勧めする。
- Pro Git - professional version control
Grit
- Git にアクセスするためのライブラリである。
- gem install grit でインストールする。
- 参考
リポジトリーサービス
ここではいくつかのリポジトリサービスを挙げるが、以下のページに Git リポジトリを借りることのできるサービスの一覧がまとめられているのでそちらを参照を推奨する。
GitHub
- Git リポジトリを提供する有名なサービスである。
- 参考
- メインサイト - GitHub · Social Coding
bitbucket
- GitHub 同様 Git リポジトリを提供する有名なサービスである。
- Git 以外に Mercurial も使える。
- GitHub とは異なり、プライベートリポジトリが無料で作れ、容量も無制限である。
- 参考
- メインサイト - Free source code hosting ― Bitbucket
テスト関連
テスティングフレームワーク
Test::Unit
- Ruby 1.8 まで主力となっていたユニットテストライブラリである。
- Ruby 1.9 からは後述する minitest/unit によって置き換えられた。Ruby 1.9 で利用したい場合は RubyGems によるインストールが必要とドキュメントに記載がある。
- 各種 assert 文により実行結果を検証し、各種テスト結果(メソッド単位)の成否をレポートしてくれる。
- ruby コマンドで実行する。
minitest/unit
- Ruby 1.9 から Test::Unit を置き換える形で実装されたユニットテストライブラリである。
- Ruby 1.8 で利用する場合は、RubyGems によりインストールすれば利用できる(筆者は Ruby 1.8 と 1.9 の両方をサポートするためそのような利用方法をしている)。
- 各種 assert 文により実行結果を検証し、各種テスト結果(メソッド単位)の成否をレポートしてくれる。
- ruby コマンドで実行する。
RSpec
- テストをより仕様に近づけた記述で書くことを目指しているテストライブラリである。
- RSpec の特徴は Ruby にメソッドを追加した DSL として定義されている点である。
- テストの成否だけではなく、その他、各種出力することにも注力している。
- 様々なテスト関連ライブラリや周辺ツールを統合したり、標準サポートしたりといった試みを積極的に行っている。
- spec コマンドという独自のコマンドで実行する。
- 参考
その他
- Cucumber
- MiniTest::Spec
考察
- なぜテスティングフレームワークがたくさんあるのか?
古典的なテスティングフレームワークの主な需要はテストの自動化でした。
それは満たされ、より高度な需要として、テストコードの読みやすさの追及が行われています。
Ruby は DSL が作りやすい言語と言われています。
DSL によって、テストコードをいかに読み書きしやすくするか、考え方がいくつもあり、それらが方言となってたくさんのテスティングフレームワークが作られているのだと思います。
これら高度な読み書きの需要を満たすフレームワークの多くは、コードを英語表現に近づける試みとして行われています。
- どのテスティングフレームワークを使うか?
一番大事なことは、使うテスティングフレームワークは1つに絞りましょうということです。
少なくとも1つのプロダクト内で複数のテスティングフレームワークを混在させて使うことは避けましょう。混在させてしまうと管理が複雑になります。テストの読み書きはもちろん、実行やレポート出力などなど、大変になります。
これから覚え始めるのであれば、既に Test::Unit は縮退方向なので止めましょう。
xUnit の利用経験があり、勉強の初期コストを抑えて即時にユニットテストを書きたい場合は minitest/unit がおススメだと思います。
これから覚え始めるのであれば RSpec がおススメだと思います。英語に堪能であれば尚更です。周辺ツール(レポート出力等)のサポートも手厚いし、情報も多いと思います。
重要なので繰り返し書きますが、1つのプロダクト内で使うテスティングフレームワークは1つに絞りましょう。 ただし、利用する/しないはともかく他のテスティングフレームワークで作られたテストも読めるようにしておくと良いでしょう。
勉強するタイミングは、Ruby で作られた他のアプリケーションやライブラリのテストを読む必要に迫られたときで良いと思います。
- 個人的にはどうしてるの?
minitest/unit を使ってます。古典的なテスティングフレームワークから入っているからです。
1つのプロダクト内で使うテスティングフレームワークは1つに絞るという信念があるので、既に作っているプロダクトに対して新しく書くテストに新しいテスティングフレームワークを採用するつもりはありません。
もし移行の絶対の必要があれば、たぶん、全てのテストを書き直します。一括変換ツールは作ると思いますが。
レポート出力機能などのサポートが多少薄い気がします。カバレージを出力したいのですが、まだ実現できていません。これは調査不足が原因かもしれませんが、RSpec の情報は簡単に調べられた記憶があります。
モック
mocha
- メインサイト - File: README — Mocha 0.14.0
カバレージ関連
RCov(RCov - Code Coverage for Ruby)
- Ruby 1.8 では使えるが、Ruby 1.9 では使えない。
- gem install rcov でインストールする。ネイティブコードを含むため Windows 環境でインストールする場合、事前に DEVELOPMENT KIT のセットアップが必要である。
- rcov コマンドが使えるようになる。
- ruby コマンドの代わりに rcov コマンドを使うことでカバレージ(文網羅)*10を計測する。
- 計測結果は HTML を標準に、いくつかの出力形式が用意されている。
- 計測結果は蓄積が可能で、条件を変えて複数回実行した結果をまとめた計測結果が見れる。
- 独自にまとめた情報
- 参考
- メインサイト - relevance/rcov - GitHub
simplecov
- Ruby 1.9 では使えるが、Ruby 1.8 では使えない*11。
- gem install simplecov でインストールする。
- 参考
- メインサイト - colszowka/simplecov - GitHub
Guard
- ソースコードの変更を監視し、ソースコードの変更を検知して自動でテストを実行してくれるツール/ライブラリである。
- Guardfile というファイルに監視ルールを書いて利用する。
- Guardfile にはソースコードの変更に対して実行するテストコードの対応を記述する。
- gem install guard でインストールが必要である。
- その他、gem install guard-rspec など、テストライブラリに対応する gem のインストールも必要なようである。
- コマンド名は guard である。
- guard start で監視を開始する。
関連
プロセス監視
God
- プロセスの監視を行ってくれる Ruby のフレームワーク(ツール/ライブラリのセット)である。
- プロセスを監視し、監視対象のプロセスが停止した場合は再起動などを行ってくれる。
- Windows は未対応である。
- God の特徴は Ruby にメソッドを追加した DSL として定義されている点である。
- gem install god でインストールする。
- コマンド名は god である。
- これ以上のことはまだよくわかっていないが、可用性担保のために使えるフレームワークということで記載しておく。
- 参考
人名
まつもとゆきひろ
- プログラミング言語「Ruby」の開発者である。
- 通称 Matz と呼ばれるらしい。
David Heinemeier Hansson
- Web アプリケーションフレームワーク「Ruby on Rails」の開発者である。
- David Heinemeier Hansson の頭文字を並べて DHH と書かれていることが多い。
コメント
本ページの内容に関して何かコメントがある方は、以下に記入してください。
コメントはありません。 コメント/glossary