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

Homebrew にコントリビュートした

あらすじ 前回、 naoty/todo というツールを Homebrew で配布しようとしたときにとある問題にハマった。 todo という名前を持つファイルが README.md や LICENSE のようなメタファイルとして判断されエラーが起きてしまうという問題だった。 Homebrew に Pul…

Homebrewで自作Formulaを作るときの落とし穴

naoty/todo という CLI ツールを Homebrew で配布しようとしたときにハマったことを書く。 naoty/todo は Go で書かれており、コンパイル済みのバイナリを GitHub Releases にアップロードしてそこから配信したいと思っていた。ドキュメント等を調べると以下…

CocoaPodsにコントリビュートした

開発中のiOSアプリでCocoaPodsでインストールしたライブラリのライセンス表示を実装する際に、とある理由でライセンスに表示したくない状況があった。いろいろ調べたところ、CocoaPodsが出力するPods-{ProjectName}-Acknowledgements.plistにMITといったライ…

Railsにコントリビュートした

Add `rake initializer` by naoty · Pull Request #19323 · rails/rails 軽い気持ちでpull requestを送ってみたら数十分後になんとmergeされてしまった。間違ってmasterブランチに送ってしまったため、おそらくrails 5で公開されることになる。 追加したのは…

ブランチごとにDB切り替えるヤツ作った

Gitのブランチ名をもとにActiveRecordが接続するDBを切り替えるRubygemを作った。 naoty/brancher 使い方 group :development do gem "brancher" end Gemfileに書いてbundle installするだけ。あとは自動的にブランチごとに別々のDBが使われるようになる。 c…

`rails s`読んだ

rails sでRailsサーバーが起動するまでに何が起きているのかを紐解くことでRailsとは何なのかを理解していきたい。今回読んでいくソースコードのコミットは2d9b9fb5b5f6015e66d3ad5cb96bc1ba117fd626だ。 TL;DR bin/rails sがユーザーによって実行される。 G…

activeadmin読んだ

activeadmin/activeadminを初めて使うことになったので、どういう仕組みになっているのか調べてみた。 TL;DR rails g active_admin:installを実行するとlib/generators/active_admin/install_generator.rbが実行され、ActiveAdmin.routes(self)がconfig/rout…

RailsのReloaderの仕組み

Resqueのworker上で実行されるコードが古いまま更新されないというような問題があって、意味もわからず書いたコードでなんとかその場を収めたんだけど、気持ち悪いのでRailsでいかにしてコードが更新されるのか調べてみることにした。 TL;DR 未定義の定数が…

RubyのWebSocketサーバー「pingpong」を作った

最近、「Working with TCP Sockets」って本を読んだ。Rubyでソケットと戯れつつ、7つくらいのWebサーバーのアーキテクチャを概観できるいい本だった。で、その中にイベント駆動モデルの実装とかノンブロッキングIOの実装について紹介されてて面白かったので…

mrb_valueについて調べてみた

昨日の続き。 mrubyのソースコードを読むと、mrb_valueという構造体がよく出てくるのでソースコードを追いかけて使い方を調べてみた。参照しているコミット番号は昨日と同じく「9663a7」です。 mrb_valueの定義 // include/mruby/value.h:40 typdef struct m…

mrubyで定義したクラスとメソッドをCから呼び出す

mrubyで書いた方がいいところはmrubyで書いてそうじゃないところはCで書く、という開発をするには、Cで定義した関数をRubyから実行させたり、逆にRubyで定義したクラスやメソッドをCから呼び出せるようにする必要があると思った。前者のような実装はmrbgems…

Railsに組み込むgemを作るためのTips

params_inquirerというgemを作りました。何ができるかと言うと、文で説明するのがなかなか難しいので、下のコードを見てください。 # users_controller.rb def index if params[:status].accepted? # params[:status] == 'accepted' と同じ @users = User.ac…

最近のテスト事情

むかしに比べると、かなりテストが書けるようになってきたし、TDDもだんだん慣れてきた。最近テスト書いてて便利だと思ったことについてメモっておく。 スタブを使ってbefore_filterをスキップする describe 'GET index' do context 'ログインしている場合' …

Hello, Sinatra! (1)

いまさらSinatraを始めてみた。 モチベ 個人で新しい何かを作り始めた。個人でやるからには、仕事じゃ使えないけど気になってる技術を使った方がいいので、RailsじゃなくてSinatraを使ってみることにした。 Railsやってると、あんまりRackとか下のレイヤーを…

ちゃんとテスト書き始めた話

テストのモチベ=怖いからやる 正直に白状すると、「これまでテスト書いたことない && 会社にテストの文化がない && テスト書いてる時間ない」っていう状況で、時間を割いてでもテストを書こうっていうモチベがなかなか湧かなかった。 そんななか、唯一、ハ…

Rails開発環境 2012夏

5月に「Rails開発環境 2012初夏」という記事を公開してそこそこ好評だったので、最近導入してLife-Changingだったツールを「2012夏」バージョンとして紹介しようと思います。今回紹介するのは以下の3つです。 pow + xip.io tmuxinator ctrlp.vim 1. pow + xi…

cui-about.meをリリースしました

使い方 $ curl http://cui-about.me/naoty name = naoty blog = http://naoty.hatenablog.com email = naoty.k@gmail.com github = naoty twitter = naoty_k CUI版のabout meです。 curlコマンドでユーザーのプロフィール情報をダウンロードできます。 詳し…

Gemfileを公開するサイト「Gemfile Freaks」を公開しました

Gemfileを公開するサイト「Gemfile Freaks」をおととい公開しました。土曜にだいたい作って、日曜にユーザー認証をつけました。前々からほしいと思っていたので、自分で作ることにしました。gemってどれを使っていいのかわかんないし、あの人のGemfileとか、…

rablを使ってRailsのAPIレスポンスを簡潔に定義する

コントローラでJSONレスポンスを定義する場合、 class EntriesController < ApplicationController respond_to :json def index @entries = Entry.all respond_with @entries.to_json(:only => :title, :body, :include => { :user => { :only => :name }, :…

Rails開発環境 2012初夏

Herokuに移行したり、便利なツールを見つけて開発環境を修正したところがあるので「2012初夏バージョン」として拙者の開発環境を晒します。最後にGemfileを載せておきますが、変更したポイントは「Herokuへのデプロイ」「ソースコード公開」「ブラウザのリロ…

Rails3.1でTwitter認証しTwitter APIを呼び出す

Gemfile gem 'devise' gem 'omniauth' gem 'twitter' config/initialisers/devise.rb Devise.setup do |config| config.omniauth :twitter, 'CONSUMER KEY', 'CONSUMER SECRET' end config/initializers/twitter.rb Twitter.configure do |config| config.co…

rvm installでyamlがmakeできない件

CentOS 5.5 x86_64 naoty$ sudo bash < <(curl -s https://raw.github.com/wayneeseguin/rvm/master/binscripts/rvm-installer ) naoty$ su - root# usermod -G wheel,rvm naoty root# exit naoty$ exit local$ ssh naoty$ sudo yum install -y gcc-c++ patc…

実行環境とBundler.require

Gemfile source 'http://rubygems.org' gem 'rails', '3.1.1' group :assets do gem 'sass-rails', '~> 3.1.4' gem 'coffee-rails', '~> 3.1.1' gem 'uglifier', '>= 1.0.3' end gem 'jquery-rails' group :development, :test do gem 'turn', :require => f…

production環境のみダイジェスト認証を有効にする

class ApplicationController < ActionController::Base USERS = { 'naoty' => 'coolguy' } protect_from_forgery before_filter { digest_authentication if Rails.env.production? } private def digest_authentication authenticate_or_request_with_http…

factory_girlを使ってスマートにseedデータを作成する

環境 rails 3.1.1 factory_girl 2.2.0 requireでfactory_girlとfactoryファイルすべてを読み込むと、seeds.rbでもfactory_girlが使えます。seeds.rbでfactory_girlを使うのは、テストと同じデータをブラウザでも確認できる、seeds.rbを非常に簡潔に書くこと…

さくらVPSでRailsを動かすまでのTodo

苦労の末、とうとうサーバーでRailsが動いたので、記念メモ。 どんどん加筆していく予定です。 プラン:さくらのVPS 512(いちばん安いやつ。月980円) OS:CentOS 5.5 x86_64 ruby 1.9.2 Rails 3.1.0 webサーバー:nginx appサーバー:unicorn DB:MySQL re…

deviseで確認メールが送られてこない件を解決

deviseのconfirmableによって確認メールを送信する機能をカンタンに実装できるんですが、なぜか、確認メールが送られてこない…件を解決したので、メモ。 # config/environments/development.rb # Don't care if the mailer can't send config.action_mailer.…

Rails3.1にjquery-uiを導入する

js app/assets/javascripts/application.jsに一行追加するだけ # app/assets/javascrypts/application.js // This is a manifest file that'll be compiled into including all the files listed below. // Add new JavaScript/Coffee code in separate file…

Rails3.0.xと3.1のrails newとrails generateの違い

1.rails new $ rails _3.0.10_ new sample-3.0.10 create create README create Rakefile create config.ru create .gitignore create Gemfile create app create app/controllers/application_controller.rb create app/helpers/application_helper.rb cr…

factory_girlでdeviseのメール通知をスキップする

Factory.define :user do |u| u.name 'naoty' u.email 'naoty.k@gmail.com' u.password 'naotynaoty' # skip confirmation u.confirmed_at Time.now end deviseには確認メールの送信をスキップするskip_confirmation!というメソッドがあるが、それをファクト…

rspec, factory_girl, spork, guardによる自動テスト環境の構築

こちらの記事を参考に自分で自動テスト環境を構築した記録です。この記事はすごく参考になりました。感謝です。 Rails3+RSpec2+Spork+Guard(guard-rspec,guard-cucumber)で最速のBDD(振舞駆動開発)環境を作る - Curiocity Drives me 0.環境 # Gemfile sour…

Rails3のDate.currentのソースコードリーディング

# config/application.rb module Hoge class Application < Rails::Application # Set Time.zone default to the specified zone and make Active Record auto-convert to this zone. # Run "rake -D time" for a list of tasks for finding time zone names…

脱初心者なRubyのループ処理の書き方

合計を計算する場合 # 初心者 count = 0 (1..10).each {|n| count += n} p count # 脱初心者 p (1..10).inject(0) {|count, n| count + n} 配列に特定の要素をいれる # 初心者 users = [] [1,2,3,4,5].each do |n| users << User.find(n) if n > 3 end # 脱…

class_evalとinstance_eval

以下のようなクラスとインスタンスについて考えていく。 Person = Class.new # Personクラスの作成(Classクラスのインスタンスの作成) naoty = Person.new # Personクラスのインスタンスの作成 今回はclass_evalとinstance_evalについて。どっちとも引数の…

特異クラスと特異メソッド

以下の3つのコードはすべて同じことをしている。 naoty = Person.new('naoty') # naotyはPersonクラスのインスタンス def naoty.greet # naotyというインスタンスに特異メソッドを定義 p 'Hello, my world!' end class Person # PersonはClassクラスのインス…

Moduleによるクラスの拡張

Module CoolModule # このModuleをインクルードしたクラスを引数にブロック内を実行 def self.included(class) # 第1引数のメソッドを第2引数以降を引数に実行 class.send :alias_method_chain, :hoge_method, :cool end # インクルードしたクラス内で定義(…

Dateクラスのタイムゾーンの不思議

$ date 2011年 7月20日 水曜日 00時46分27秒 JSTDate.current #=> Tue, 19 Jul 2011 Date.today #=> Wed, 20 Jul 2011 Date.currentはUTC、Date.todayはJSTを返すのだろうか?

MongoidのFxxkなdelete_allの実装に気をつけろ!

ruby-1.9.2-p180 :001 > User.delete_all(:name => "naoty") #=> 200 # 全消去…だと…!?まじ、Fucx! ruby-1.9.2-p180 :002 > User.delete_all(conditions: { name: "naoty" }) #=> 1 # 条件に合うドキュメントのみ削除 ruby-1.9.2-p180 :003 > User.where(…

MongoDBを使う際のRspecの設定メモ

MongoDBのORMとしてMongoidを使う場合。 # /Gemfile source 'http://rubygems.org' gem 'rails', '3.0.9' gem 'rake', '0.8.7' gem 'mongoid' gem 'bson_ext' gem 'rspec-rails' gem 'factory_girl_rails' 以下のようなエラーがおきた。 $ rake spec Mon Jul…

Rails3にrspecとfactory girlをインストールしたときのメモ

# /Gemfile gem 'rspec-rails' gem 'factory_girl_rails' $ bundle install --path vendor/bundle$ rails g rspec:install Mon Jul 18 21:51:37 [initandlisten] connection accepted from 127.0.0.1:50773 #1 Mon Jul 18 21:51:37 [conn1] end connection 1…

Classクラスに関する仮説

Object.class #=> Class Module.class #=> Class Class.class #=> Class Class.superclass #=> Module irbで上記のような結果を得たので、これよりClassクラスってこんな感じじゃないかと思った。あくまで仮説だけどねー。 class Class < Module Object = se…

ある条件であるクラスを追加するヘルパーメソッドつくりました

# application_helper.rb def tag_add_class_if(tag, conditions, cl, attributes = {}, &block) if conditions if attributes.keys.include?(:class) attributes[:class] += " #{cl}" else attributes.merge(:class => cl) end end content_tag tag, attrib…

ある条件でhiddenなHTMLタグを出力するヘルパーメソッドつくりました

# application_helper.rb def tag_hidden_if(tag, conditions, attributes = {}, &block) attributes = attributes.merge({'style' => 'display:none;'}) if conditions content_tag tag, attributes, &block end # index.html.erb <% @articles.each_with_i…

paramsでfindするときの簡単な書き方

# めんどい(´・ω・`) @user = User.find(params[:user_id]) if params[:user_id].present? # ① # カンタン(`・ω・´) @user = User.find_by_id(params[:user_id].presence) # ② find(id)とfind_by_id(id)の違いは、レコードが見つからなかったときに前者がRecordN…

アプリ(Titanium Mobile)とサーバー(Rails)間の通信

# /app/controllers/users_controller.rb class UsersController < ApplicationController def signin @user = User.create({:name => params[:name], :password => params[:password]}) respond_to do |format| format.json { render :json => @user.to_jso…

Rails 3のバッチ処理

$ rails runner [ファイル名] で実行します。ファイルは/script以下に配置します。今回は、一日の(投稿数、新規ユーザーなどの)カウントをリセットするバッチ処理を書いてみました。/script/reset_count.rb # encoding: utf-8 SomethingCool.all.each {|sc…

ルーティングヘルパーにパラメーターを付加する

link_to "メール送信", mail_user_path(:article_id => @article) ハードコーディングはなるべく回避するため、ルーティングヘルパーの使い方をマスターしたい。こっちの方がカッコイイし。

Rails3のルーティングの初歩

resources :users これで、基本的なアクション(index, show, new, create, edit, update, delete)のマッピングができる。 resources :users do get 'mail', :on => :member end 他にアクションを加えたい場合、ブロック内に「HTTP verb」「アクション名」…

Rails3でMongoidを使ってみる

0. 環境 Windows Vista Ruby 1.8.7 Rails 3.0.7 MongoDB 1.8.1 bundler 1.0.13 1. 新規アプリケーションの作成 rails new sample -O 「-O」(大文字のオー、これで2回やりなおした(´・ω・`))をつけると、config/database.ymlが生成されません。今回はmongo…

CSV出力の機能テスト

環境 Ruby 1.9.1 Rails 2.3.12 テストコードというものを昨日しった拙者 例として、任意の年のアクセス数をcsv形式で出力するexportというアクションを機能テストしたい。そこで、選択可能な過去5年間についてリクエストをだして出力をテストする。 require …