ruby

Rails で gem を導入するときに最低限やること

普通にみんなやっていることだと思うけど、自分が gem を入れるときに最低限やることをまとめてみた。 何かしらの方法で探してきた gem を「導入するかどうか」の判断をするときにやることです。 やること一覧 今後もメンテされそうかを調べる README を 全…

rake notes で TODO が増え過ぎたら CI で検知できるように拡張する

Rails アプリから機能を gem 化する方法の実例を1つ公開してみる。 sinsoku.hatenablog.com rake notes を拡張する rake notes で Rails アプリ内の "OPTIMIZE|FIXME|TODO" を一覧表示できるが、これを拡張する。 ソースコードの探し方 rails/rails のリポジ…

Rails アプリから汎用的な機能を gem 化する方法

これから Rails 用の gem を作ってみたい人向けの内容。 gem 化する 実は下記のようなコードを置くだけで RubyGems に登録しなくても、 gem として認識される。 Gemfile gem 'hello_world', path: 'lib/hello_world' lib/hello_world/hello_world.gemspec # …

Rails の link_to_if にブロックを渡したときの挙動が分かりにくいので注意

Rails の link_to_if にブロックを渡したときの挙動が分かりづらいので、使う場合の注意点をまとめてみました。 TL;DR ブロックの内容を条件によってリンクにしたい場合は capture を使うのがシンプルで良いです。 <% body = capture do %> <%= image_tag 'i…

tachikoma_ai を v0.3.0 にアップデートしました #mokumoku_onsen

7/16(土)〜18(月)の2泊3日で開発合宿に参加していて、前々からやりたかった tachikoma_ai の gem のアップデートをしました。 開発合宿について、詳しくは id:niwatako さんが記事を書かれているので、興味ある方はそちらを参照して下さい。 niwatako.hatena…

Gemfile を指定して RSpec を実行する方法

毎回、忘れて困るのでメモ。 bundle install $ bundle install --gemfile=gemfiles/rails_5.gemspec BUNDLE_GEMFILE=gemfiles/rails_5.gemfile bundle install でも動くっぽい。 bundle exec $ BUNDLE_GEMFILE=gemfiles/rails_5.gemfile bundle exec rspec …

tachikoma の PR にバージョン比較URLを追加する TachikomaAI という gem を作った

アップデートされた gem の内容を確認するの面倒だったので、作った。 リポジトリ sinsoku/tachikoma_ai これは何? 定期的に bundle update してくれる sanemat/tachikoma にバージョン比較のコメントを追加する gem です。 インストール方法 Gemfile に ge…

Rails でパラメータを別モデルにして、バリデーションできるようにする

ブログをサボりすぎているので、備忘録でも書くようにしておく。 やったこと ちょっと詳細書くのが難しいんだけど、処理自体を抽象化して扱おうとしたら、こうなった。 module Task class Base attr_reader :args def self.arguments(&block) klass = Class.…

Ruby で SSH 鍵を生成する方法

Rails で Web 上から SSH 鍵を生成したくなったけど、方法がなかなか見つからなかったから書いておく。備忘録。 コード Gemfile に gem 'net-ssh' を追加して、↓みたいなモデルを作ればうまくできた。 class SslKey < ActiveRecord::Base belongs_to :user v…

Rails の Routing で get や match を効果的に使う方法

Rails では Resource Routing: the Rails Default とあり、基本的には resources もしくは resource を使います。 では、 get や match はどういう時に使うのか? について、私が使ってる例を3つ紹介します。 1. gem などで使う場合 intridea/omniauth のよ…

Rails で RESTful Web API をシンプルに保つ設計

Rails で RESTful な Web API を作る場合、色々な方法があると思います。 今回、私が API を作るときによくやっている設計をブログに書いてみます。 コード 説明するより、コードを見てもらった方が早いと思うので、コードを書く。 # config/routes.rb names…

gemのバグを踏んだときにどうやって立ち向かうのか

最近、 colszowka/simplecov のバグを踏みました。 こうやって 不運にもバグを踏んでしまった 運よくOSSに貢献できるチャンスを得てしまったときの原因調査の方法などを紹介します。 今回のバグ simplecov はカバレッジ率を計測するgemで、以前から便利に使…

rubocop v0.35.1 でruby 2.3のSafe navigation operator(&.) を使うとunexpected token tDOTが発生する

タイトルの通り、 &. を使うとエラーが出てたので対応方法を紹介します。 Inspecting 1 file E Offenses: app/models/user.rb:11:21: E: unexpected token tDOT user.piyo if user&.admin? ^ 1 file inspected, 1 offense detected 対応 1 bbatsov/rubocop …

rake notesを使ってTODOが多くなったらCIで検知する

コード内で長い年月熟成されたTODOに頭を抱えているRailsエンジニアの方々、お疲れ様です。 これ以上のTODOが生まれないように、CIで検知するためのコード書いたので、参考にどうぞ。 参考 rails/source_annotation_extractor.rb at master · rails/rails ht…

ActiveRecord::Callbacks をfactory_girlで綺麗にstubする方法

ActiveRecord::Callbacks は便利なのですが、テストでモデルを作るたびにメール送信の処理が動いたり、別モデルが生成されると困る。 このあたりをthoughtbot/factory_girlを使って綺麗に書く方法を紹介します。 コード FactoryGirl.define do factory :user…

OmniAuthを拡張して、ストラテジの一覧を取得する

intridea/omniauth はFacebook, Twitter, GitHub, など色々なストラテジに対応しています。 List of Strategies を見ると、とても多いのが分かると思います。 OmniAuth.strategies 自分のアプリで対応しているストラテジ*1の一覧は OmniAuth.strategies で取…

mini_style というgemを作りました #fwbar

Forkwell Bar #4 で mini_style というgemを作りました。 インストール方法 Gemfileに mini_style を入れて、 bundle install で入ります。 何ができる? 手抜きして、README.md からコピペ。 style('alert') # => 'alert' style('alert', 'alert-danger': !…

RubyのProcを引数付きで実行する4つの方法

Procにこんな実行の方法があったなんて知らなかったのでメモ。 引用 self[*arg] -> () call(*arg) -> () self === *arg -> () yield(*arg) -> () 手続きオブジェクトを実行してその結果を返します。 引数の渡され方はオブジェクトの生成方法によって異なりま…

seedデータをmigrationで差分管理できるgem "JewelSeed" を作りました

railsでは標準だとデータベースに必要な初期値の設定にdb/seeds.rbを使います。 ただ、db/seeds.rbだとデータの追加・変更や、再実行などが難しくなりがちです。 で、この辺りを便利にするgemはThe Ruby Toolboxで探すといくつかあります。 Seed-fu Ruby Too…

マイグレーションファイルをweb上で編集するgem "ponytail" を作りました

ponytail とは? Railsのマイグレーションファイルをweb上で作成したり、web上でマイグレーション・ロールバックを実行できるようにするgemです。 インストール方法 Gemfileの:developmentのgroupにgemを追加し、bundle installしてください。 group :develo…

paiza でコードを書くときのコツ(Rubyで標準入出力に関するテストのやり方のメモ)

ふと、自分のプログラミング力を測りたくて、 paiza の問題を解いてみました。 paiza とは IT/Webプログラマー 転職のpaiza [パイザ] http://paiza.jp/ 詳しくはリンク先を読んでもらえれば分かるかと。要約すると web上で出題された問題に対して、コードを…