Ruby

クラス名の文字列からクラスを取得する方法

Ruby では、Module.const_get メソッドで、文字列からモジュールやクラスを取得できる。プラグイン機構をもつアプリを作るときに使えそうなので、メモしておく。 # coding: utf-8 class Hello def greet(name) puts "Hello, #{name}." end end # トップレベ…

Capistrano で Ruby と chef のインストールを自動化

アプリサーバーで使うパッケージのセットアップを chef-solo で自動化できたけど、Ruby と chef をインストールする作業は手作業のまま。この部分も自動化したい。 そこで Capistrano を使って Ruby と chef をインストールするスクリプトを書いてみた。 # c…

chef-solo で環境構築を自動化する練習メモ

はじめに さくら VPS に Rails アプリをデプロイするために、Nginx や MySQL やらインストールしてみたけど、同じ作業を VMware Player+CentOS でテストするときにやるかもしれない。さらには、将来 Amazon EC2 を使うときにも。今から環境構築は自動化して…

Windows でシンボリックリンクを作成してまわる Ruby スクリプトのメモ

32bit 用と 64bit 用に分けてビルドが必要な .NET ソリューションがあるんだけど、諸悪の根源である SQLite のライブラリを差し替えてビルドするのが面倒なので、ディレクトリを2つ作ることにした。32bit 用と 64bit 用にディレクトリを分けて、32bit 用デ…

Rails で Lazy high charts を使ってチャートを実装してみた

はじめに Rails アプリでチャートを実装したくて、The Ruby Toolbox で Rails プラグインを探してみた。 The Ruby Toolbox - Graphing 上記のページによると、Lazy high charts、Googlecharts、Open flash chart、Gruff の4強みたいだ。Gruff はサーバー側で…

event_calendar プラグインを使って Rails でイケてるカレンダーを実装してみた

はじめに Rails3.2 で開発しているアプリにカレンダーを追加したい。それも、プロトタイプをサクッと作りたいので、プラグインを使ってみる。カレンダーを実装するプラグインでは、Ruby Toolbox によると event_calendar が人気のようだ。 The Ruby Toolbox …

Ruby で Amazon Product Advertising API を試してみた

Ruby で Amazon Product Advertising API を試したくなって gem を漁ってみたら、amazon-aaws と amazon-ecs の2つを見つけた。どちらも API を素直にラップしていて筋が良さそうだったけど、amazon-aaws の方は AccessKey や SecretKey を .amazonrc ってい…

複数画像からScanSnap Organizer で検索可能PDFに変換可能なPDFを作成するRubyスクリプト

ScanSnap を買って以降、書籍を読み終わると分解して PDF にしてきました ただ、PDF 形式で読み取る場合、途中で読み取りに失敗したら最初からやり直しなので、失敗しようものなら一気にやる気がなくなってしまいます。オライリーの本なんて鬼門です。ページ…

rbenv と ruby-build を使って Ruby の環境を構築してみた

はじめに 先日 CentOS6 にソースコードから Ruby1.9.3 をインストールしたけど、将来 Ruby2.0 とか出たときに、複数のバージョンの Ruby を共存させたくなるはず。Ruby のバージョン管理ツールを使うべきだったな。やり直し。 Ruby のバージョン管理ツールは…

CentOS6 に Ruby1.9.3 をインストールする手順

CentOS6 には Ruby1.9 のパッケージが無いから、Ruby1.9 を使うためにはソースコードからコンパイルする必要がある。でも、yum でインストールできないとなると、更新や削除したいとき不便。パッケージ化してインストールしたい。そこで、checkinstall を使…

Rails3 でタグ機能の実装

Rails を使った開発で、アプリにタグ機能を実装する場合、これまでは acts-as-taggable 系のプラグインが定番でした。acts-as-taggable とか acts-as-taggable-on とか、acts-as-taggable-on-steroid とか。まだあった気がする。で、今回 Rails3 で開発して…

.NET プロジェクトのリリース作業を Rake で自動化

.NET で開発しているプロジェクトのソースコードをチェックアウトして、ビルドして、出来あがったアセンブリを公開用リポジトリにコミット、という作業を MSBuild で自動化してました。でもいい加減、条件分岐とかループとか MSBuild でやるの面倒になったの…

OmniAuth と Warden を WardenOmniAuth で連携してみた

Twitter の OAuth を使って認証するのに OmniAuth を使ってみたけど、Warden と組み合わせるのが定番みたいです。Warden と組み合わせると、ログイン成功後のユーザー情報をセッションにつめたり、ログアウトしたり、といった処理を Warden に任せられます。…

Ruby でベンチマーク計測

Java のサーブレットコンテナ、まぁ Jetty なんですけど、Jetty の HTTP サーバーとしての性能がどれくらいか分かる資料が無かったので、Ruby でベンチマークを計測するスクリプトを書いてみました。ついでにサーブレットも計測しています。benchmark モジュ…

Sequel でマイグレーション

Sequel にはマイグレーション機能があるので、Rails と同じようにテーブルの作成やスキーマ変更ができます。サンプル程度ならアプリケーションのファイルに create_table べた書きでいいけど、ちゃんとしたサービス作るときはマイグレーションを使ったほうが…

Sinatra + OmniAuth で Twitter の OAuth を試してみた

Sinatra アプリの認証に Warden を使おうとしてたけど、「ユーザー名とパスワードを自前で保存したくない」と思い直して、OAuth や OpenID を検討し始めました。Twitter や Facebook や GitHub など、いろんな OAuth に対応したいから、使うライブラリは Omn…

Sequel::Model でキャストできない値をセットしたら例外が発生するのを抑制してみる

例えば、Sequel::Model を使って次のようなクラスを定義したとします。 # coding: utf-8 require "sequel" DB = Sequel.sqlite("test.db") DB.create_table? :records do primary_key :id Date :date String :summary Float :kcal DateTime :created_at end …

Sinatra+Warden で作ったアプリを Rspec でテストする

先日、Test::Unit を使って、Sinatra+Warden で作られたサンプルのテストを書きました。でも、Ruby でテストを書くなら、Test::Unit よりも Rspec の方が人気だし、自分好みです。せっかくなんで、Rspec でも同様のテストを書いてみます。 # coding: utf-8 r…

SinatraとWardenで作ったアプリを Test::Unit でテストする

Sinatra は手軽に Web アプリが書けるので、ペラサイト程度なら、テストを書かずにサクっと作り上げることが多いです。私の場合は。だけど、認証が絡んで複雑になってきたら、テストが無いと不安になります。精神衛生的にテストは必要。テストが有るのと無い…

jQuery Mobile でフォームを submit 後にリダイレクトするとロケーションが変わらない

jQuery Mobile を使った Web アプリ開発で、 フォームの submit で非同期に POST リクエストを送信 サーバー側でフォームデータを処理した後リダイレクトを返す クライアント側でリダイレクト先にページ遷移 という処理を実装するとき、data-role="page" を…

Sinatra アプリケーションに Warden で認証を実装する

Warden は Rack アプリケーションで認証を実装するときの定番です。だけど、ネットで見つかるのは OmniAuth と組み合わせるサンプルが比較的多め。 Warden を使ったサンプルで、自分にとってわりやすいものが見つからなかったので、試しに書いてみました。Si…

Sequel::Models を使って CRUD とバリデーションを試してみた

はじめに Ruby のリハビリということで、Sequel で CRUD 処理を行うコードを書いてみました。Sequel::Model を使って、バリデーションにも挑戦しています。 下準備 テーブルの作成と、モデルの定義。データベースにはオンメモリ SQLite を使います。 require…

Rails3 の ActiveRecord で WHERE 部分に OR を含んだクエリを発行する方法

Rails3 の ActiveRecord で、WHERE 部分に OR を使ったクエリを発行するには、ActiveRecord::Base#arel_table を使って、条件を組み立てればいい。 # フォローしているユーザーのアクティビティを取得する def user_stream(user) friendships = Friendship.w…

64bit Windows7 で RMagick をインストールする手順

64bit の Windows7 に RMagick をインストールするのに結構苦労したので、やった手順をメモしておく。 RailsInstaller で Ruby1.9 諸々をインストール。 ImageMagick の Windows 用インストーラーを下記ページから入手してインストール。 ImageMagick: Insta…

やる夫が Rack についても学ぶそうです(Rack ミドルウェア編)

/ ̄ ̄\ / _ノ \ | ( ●)(●) | (__人__) | ` ⌒´ノ 次は Rack ミドルウェアだ。 | } ヽ } ヽ、.,__ __ノ _, 、 -― ''"::l:::::::\ー-..,ノ,、.゙,i 、 /;;;;;;::゙:':、::::::::::::|_:::;、>、_ l|||||゙!:゙、-、_ 丿;;;;;;;;;;;:::::i::::::::::::::/::::::…

やる夫が Rack についても学ぶそうです(Rack::Request/Rack::Response編)

/ ̄ ̄ ̄\ / ─ ─ \ / (●) (●) \. Rack アプリケーションはリクエスト(Hash)を受け取って、 | (__人__) | レスポンス(Array)を返すのはわかったお。 \ ` ⌒´ / / \ ____ / \ / ─ ─\ / (●) (●) \ Hash や Array だとコード書くの…

やる夫が Rack についても学ぶそうです

やる夫で学ぶ WSGI - present の続編(?)。 / ̄ ̄\ / _ノ \ | ( ●)(●) | (__人__) | ` ⌒´ノ 先日、Python の WSGI について説明した。 | } Python 以外の言語にも、WSGI みたいなものは存在する。 ヽ } たとえば Ruby なら Rack だ。 ヽ、.,__ __…

Ruby + ERB でコードジェネレータ

仕様変更でテーブル定義が変更されたときに、テーブルに対応するデータクラスや ViewModel を手作業で修正するのは非常に面倒なので、Ruby でコードジェネレータを作成してみた。テンプレートエンジンには erb を採用。Visual Studio には T4 テンプレートが…

RubyでWebAPIのレスポンスにXMLを出力するいい方法ないかなぁ

Ruby で Sinatra を使って Web API を作るとき、レスポンスの XML は erb を使って出力しています。 例えば <Response> <Items> <% @items.each do |item| %> <Item> <Id><%= h item.id %></Id> <Name><%= h item.name %></Name> </Item> <% end %> </Items> </Response> こんな感じのテンプレートを用意。 そして get '/items/' do #…

GAE/JRuby がすごく速くなっている件

Ruby で Google App Engine 用アプリを開発できる「appengine-jruby」っていう gem があるんですが、これを久しぶりに更新したら、すごく速くなっていて驚きました!何が速くなったかっていうと、初回ロードがすごく速くなっています。以前は表示されるまで…