読者です 読者をやめる 読者になる 読者になる

Devise + OmniAuth + OmniAuth Facebookで Facebook 認証

はじめに Devise を使って実装した認証機能を、Facebook の OAuth を使ったものに変更したい。そこで OmniAuth と OminiAuth Facebook を導入して、認証機能を修正してみた。OmniAuth の Wiki 通りにやれば簡単にいくと思っていたら、ちょっと躓いたので、手…

外部に HTTP アクセスする機能の単体テストで WebMock 使ってみた

ブログの Feed をダウンロードする機能の単体テストで、いちいち本物の Feed にアクセスしたくない。テスト遅くなるし、Feed 更新されたらテスト結果変わっちゃうし。こういうときはスタブやモックの出番。WebMock という gem を使うことにした。 bblimke/we…

Evergreen を導入したばかりだけど Konacha に移行した

先日 Evergreen を導入したけど Evergreen は今メンテされてないってコメントで教えてもらった。確かに、README よく見たら書いてあるし…。完全に見落としてた。不覚。README のリンク先、Google グループのスレッドでは Konacha っていう Rails エンジンが…

Evergreen で Rails アプリの JavaScript を単体テストする

はじめに Rails アプリの JavaScript のテストは capybara(+capybara-webkit) を使えば一応できるけど、統合テストなのがね…。統合テストもちゃんと書くけど、やりたいのは JavaScript の単体テストなのに。 そこで Evergreen そんな中で最近知ったのが Ever…

ActiveRecordでテーブルの情報を取得する方法

Railsエンジンを作ってるとテーブル名や列情報を取得したいときがある。Railsアプリを作ってるときはあんまり無いけど。そんなとき用に、ActiveRecord にはテーブルの情報を取得するためのクラスメソッドが用意されている。テーブル名なら table_name、列情…

Subversion リポジトリを更新してビルドを実行する Rakefile 書いてみた

Ruby を Rails アプリ開発だけに使うのはもったいない。刺身タンポポ作業は Ruby でスクリプト書いてどんどん自動化しないと。というわけで、Ruby で Subversion のリポジトリを更新して、プロジェクトをビルドする作業を自動化してみた。Rake ファイルだけ…

Rails の Application Template を使ってアプリ新規作成時の刺身タンポポ作業を自動化

rails コマンドにこんな便利機能があったなんて…っ!qiita.comRails アプリを新規作成するとき、決まって次の作業をやっている。 rspec_rails インストール factory_girl_rails インストール Devise インストール ユーザー作成 管理ユーザー作成 RailsAdmin …

非同期処理のために DelayedJob を導入したメモ

メールの送信やランキング集計といった、時間がかかる(かもしれない)処理をバックグラウンドで実行したいので、手軽に導入できそうな DelayedJob を試してみた。 collectiveidea/delayed_job · GitHub DelayedJob をインストール Gemfile に gem 'delayed_jo…

Windows マシンで現在使っている RubyGems メモ

Windows では RailsInstaller を使ってインストールしたから、追加でインストールした gem をリストアップしておく。 RailsInstaller 一式 debugger awesome_print simplecov simplecov-rcov sinatra warden rspec factory_girl rspec-rails factory_girl_ra…

Fiber を使って Enumerable#lazy を再発明してみた

Ruby2.0 で追加されると噂の Enumerable#lazy は、Ruby で遅延リストが使えるようになる、個人的に待望の機能。map や select をメソッドチェーンしたとき、何度もループをぶん回すのが不満だったからなぁ。Enumerable#lazy は以前ちらっとソースコードを見…

acts_as_taggable_on でユーザーごとにタグを設定する方法

タグをユーザーごとに管理したいんだけど、acts_as_taggable_on では出来ないんだろうな、って勝手に思い込んでいたら、ReadMe に方法書いてあった。英語だからって拒否反応起こしてないで、ちゃんと ReadMe ぐらい読んでおけよ、自分。ReadMe に書いてある…

認証に Devise を使っている Rails アプリの Request Specs の書き方

認証に Devise を使っている Rails アプリ の Request Specs の書き方をネットで調べたら、ヒットしたのは Request Specs + Capybara の情報ばかりだった。今 Rails で作っているのは Web API だから、Capybara は要らないんだよな。Request Specs だけでい…

Ruby で HTTP サーバーを起動するワンライナー

RequireJS で遊んでいるんだけど、RequireJS では HTTP GET で依存しているモジュールを取得するから、デバッグするにも HTTP サーバーを起動しないといけない。このためだけに、HTTP サーバーをインストールするか、Sinatra でデバッグ用アプリ作れっていう…

JavaScript 以外での即時関数パターン

以前書いた次の記事を読み返していて思ったんだけど、 目から鱗が落ちた JavaScript の即時関数パターンの使い方 - present C# でも無名関数作れるから即時関数パターンできるよね。 using System; using System.Diagnostics; namespace ImmediateFunctionSa…

GitHub の NewsFeed みたいな機能を実装するための Rails プラグイン『TimelineFu』を使ってみた

GitHub の NewsFeed みたいな機能を実装したい party_boy を使ってフォロー機能を実装したら、フォローしているユーザーのアクティビティを表示したい、と思うのは自然なことだよね。NewsFeed みたいな機能を実装するための Rails プラグインに、『TimelineF…

Twitter みたいなフォロー機能を実装するための Rails プラグイン『party_boy』

Twitter みたいなフォロー機能を実装中 自分で一から作ってもいいけど、GitHub をぶらついていたら party_boy っていう面白そうな gem を見つけたので、これを使ってみる。 mnelson/party_boy · GitHub party_boy のインストール Gemfile に追加し、 gem "pa…

Rails3 で管理画面を作成するなら RailsAdmin で決まりかも

はじめに アプリの管理画面はユーザーに見せないから、Rails プラグインでサクッと作ってしまいたい。Rails で管理画面を生成できるプラグインは Typus、ActiveAdmin とかあるけど、個人的に RailsAdmin で決まりかな、って思ってる。 RailsAdmin の何がいい…

Ruby で Plagger の二番煎じを作って gem を公開してみた

Plagger の二番煎じを作ってみた いや、違うな。Pragger や Yapra や、最近では Automatic Ruby なんてのも出たから、五番煎じくらいか。 fragile | RubyGems.org | your community gem host ソースコードは GitHub で公開している。 tnakamura/fragile · Gi…

Ruby で RSS からリンクを抽出する方法

ブログなどの RSS をパースしてゴニョゴニョするための gem を探そうとしたけど、パーサなら Ruby1.9 の標準ライブラリで既に提供されていた。 require "rss" class RssInput def initialize(config) @url = config[:url] end def call result = RSS::Parser…

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

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 があるんですが、これを久しぶりに更新したら、すごく速くなっていて驚きました!何が速くなったかっていうと、初回ロードがすごく速くなっています。以前は表示されるまで…

Ruby でわんくまブログに記事を投稿する

Windows Live Spaces MetaWeblog API を使えば、わんくまブログに記事を投稿するプログラムが書けます。 Windows Live Spaces MetaWeblog API Ruby でわんくまブログに記事を投稿するサンプルがこちら。ユーザー名やパスワードは読み替えて下さい。 require …