Ruby/Rails

`bin/webpack`を読んだ

webpackerを理解するため、rails g webpacker:installで追加されるbin/webpackや設定の中身を読むことにした。 bin/webpack newenv = { "NODE_PATH" => NODE_MODULES_PATH.shellescape } cmdline = ["yarn", "run", "webpack", "--", "--config", WEBPACK_CO…

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…