技術顧問が語る最新Ruby on Rails/Vue.js iCARE Dev Meetup #12 で話すスライドです https://icare.connpass.com/event/183716/

Rails Developer Meetup 2019での発表資料です!可読性の高いテストコードを書くためのコツについて話しました
jquery-ujsからrails-ujsの移行、特に気をつけることないと思ってたけどajax:successなどのイベントのコールバックに渡される引数が違うな— willnet (@netwillnet) 2017年7月15日 jquery-ujs だと data, status, xhr rails-ujs だと event だけ レスポンスの情報がほしいときは event.detailの中をみる document.body.addEventListener('ajax:success', function(event) { var detail = event.detail; var data = detail[0], status = detail[1], xhr = detail[2]; }) 参考 jquery-ujs/rails.js at master · rails/jq
こんにちは。メドピアのRuby(Rails)化をお手伝いしている@willnetです。最近はよくリファクタリングをしています。 今回は、最近僕がリファクタリングしている内容についてまとめようと思います。 メドピアではFat Model/Controllerを避けるために、rubocopの設定を利用しクラスの行数が300行以下になるよう制限しています*1。最近300行を超えるモデルが出てきたので、一部の処理を別のクラスに切り出し始めました。 このとき、Railsが提供している機能であるconcernsを利用すると楽に行数を減らすことができますが、それだとrubocopの指摘を回避できるという意味しかないので、なるべく委譲(composition)を利用して処理を別クラスに移していっています*2。 複数モデルにまたがる処理を切り出す Railsアプリケーションを書いていると、複数のモデルを一度
Rails 4.2 から導入された ActiveJob は、sidekiq や resque などのバックグラウンドジョブ系 gem を、同じ利用方法で扱えるようにしてくれます。 これは便利だなーと思い、sidekiq を ActiveJob を通じて使ってみたのですが、しばらく使った後に「まだ本格的に使うのは早いかも」と感じました。 リトライ機能が貧弱 sidekiq は、ジョブが失敗した時にリトライする機能があります。失敗するたびに次にリトライする間隔が伸び、一定回数失敗したら完全に失敗として扱われます。リトライ間隔や、完全に失敗になるまでの回数はもちろん変更可能です。 Web上でリトライしているジョブや完全に失敗したジョブを確認することもできます。 ActiveJob を使うと、この細やかなリトライ機能を失うことになります。例えば、次のように例外を拾って再度キューにジョブを入れること
pronto gem introduction for continuous static program analysis
ゆるふわ Development Club #とは 趣味で開発をしている人たちで集まってそれぞれの作っているものを見せ合ったり、 相談したり、ときにはコードレビューし合ったりするサークルです。 対象者 個人で何かプロダクト (Web やアプリなど) を作っている人。 エンジニア、デザイナなどの役割は問いません。 活動内容 idobata にそれぞれのプロダクトのコミットログを流す。 プライベートリポジトリのコラボレータに追加し合ってコードを見せ合ったりする。 PR にレビューしてみたりする。 詰まったところを相談したり、教え合ったりする。 たまにハッカソンや開発や合宿などをする。 つい高まって一緒に何か作り始まったりする。 加入方法 以下のリポジトリにプルリクエストを送ってください。 yurufuwa/members お問い合わせ先 / 主催者 Satoshi Ebisawa / 海老沢
僕が作った gem の中で、ダントツにダウンロード数が多い rake_shared_context という gem のバージョンを 0.2.1 に上げました。0.1.0 にバージョンアップしたときから8000ダウンロードくらいされてるみたいなんですが、その間何かあったんですかね…。 0.2.1 と 0.2.0 のバージョン間の違いは殆ど無くて、RSpec 3.0 のお作法に対応しただけです。ただ、RSpec 2.x 系との互換性も保っておきたいので、両方のバージョンでテストできる環境を整える必要がありました。 そこで appraisal というステキな gem を使います。この gem は、今回のような依存ライブラリのバージョンが複数ある場合のテスト環境を整えてくれます。詳細は README 見るとよくわかるのですが、テストしたいバージョンごとに Gemfile を作り、それを切り替えてテ
RailsCasts とは RailsCasts は超有名なので知っている人も多いと思いますが、念のため以前書いた紹介文を再掲します。 毎週2つ(うち1つは有料購読が必要)の Rails 関連動画をアップロードしてくれているサイトです。良質な情報を定期的に届けてくれるすばらしいサイトですね。1ヶ月9ドル払って有料購読する価値は間違いなくあると断言できます。動画中で紹介しているライブラリの情報もすばらしいですが、コード例もかなりRailsっぽく綺麗に書かれていて大変参考になります。 僕が参考にしている Ruby, Rails の情報源まとめ(海外ブログ編) - willnet.in RailsCasts の podcast を登録しよう もしあなたが Rails 使いなら RailsCasts の全エピソードをなめるように視聴するべきなのですが、仕事が忙しかったりするとつい見逃してしまい、結
例えば User モデルで devise を設定したとき、ログイン用のパスは /users/sign_in、ログアウトは /users/sign_out になります。個人的には /login /logout の方が好みなのでroutes.rb を下記のようにしました。 devise_for :users, skip: [:sessions] devise_scope :user do get 'login' => 'devise/sessions#new' post 'login' => 'devise/sessions#create' get 'logout' => 'devise/sessions#destroy' end 1行目の devise_for :users, skip: [:sessions] でデフォルトのログイン関連のパスを削除して、その後で /login /logou
revenger とは? 「忘れないようにメモしておこう」とブログや twitter 、evernote などにメモを残しても、結局見返さなかった、メモしたこと自体忘れてしまった。そんなことはありませんか? revenger は、そんなあなたの復習ライフをサポートします。 復習メモを残そう revenger で書いたメモは、全て「復習メモ」になります。復習メモは、レビューページに何度も現れます。レビューページをチェックして、知識を自分の頭の中に定着させましょう! 習慣づけのサポート revenger にアクセスすること自体を忘れてしまったら元も子もありません。そこで revenger では、過去に書いた復習メモを一つ添えてリマインダメールをあなたに送ります。新しい習慣を定着させるのは大変ですが、頑張りましょう!
しばらく前に表題の gem を作りました。 willnet/rake_shared_context 中身はただの shared_context です。これは僕のオリジナルな gem ではなくて、thoughtbot 社のブログに書かれた shared_context のコードをほぼそのまま gem にした感じです。毎回 rake タスクをテストするためにブログからコピペしてくるのが面倒になったので作りました。 これを使うと下記のような rake タスクがあったときに # lib/tasks/reports.rake namespace :reports do desc "Generate report" task :generate => :environment do ReportGenerator.generate end end 下記のような感じで rake タスクのテストを書くこと
ransack はちょう便利な検索用 gem です。パラメータの name 属性で検索条件を定義できるので、多数の検索項目があってスクラッチで検索ロジックをつくるのがしんどいギョームwebアプリなどで絶大な威力を発揮します。 ただ一つの問題はドキュメントがとても貧弱だというところ。現状では細かい使い方について知りたければ、 デモアプリ を見ながら挙動を推察して行くしかないというお粗末さです…。でもやっぱり便利なので、なんとか情報をまとめて使えるようにしておきたい所存。気力が続かなかったので簡易的なまとめになりましたが載せておきます>< 基本的な使い方については下記のリンク先をご覧ください。 #370 Ransack - RailsCasts Basic Searching · ernie/ransack Wiki custom predicates 独自の predicate を設定できま
以前作った Rspec で rake タスクをテストする用の gem に初の pull request が来たので取り込んで 0.0.2 にバージョンアップしました。 これまで(0.0.1)は、テスト対象の rake ファイルのみを読み込む仕様にしていたため、テスト対象外のファイルに定義された rake タスクを呼ぶことができませんでした。0.0.2 ではそれが解消されます。 # 別ファイルに other:task が設定されている前提で # reports:generate をテストする例 require 'spec_helper' describe "reports:generate" do include_context "rake" its(:prerequisites) { should include("environment") } it "generates the rep
メモ発掘したので貼っておく。だれか良い案あったら教えてください>< 現状 下記のように戻り値と副作用でdescribeを分けて対処している。でもちょう見栄え悪い… describe '#register' do describe "戻り値" do subject { user.regisger } it '...' end describe "副作用" do subject do user.register user end it '...' end end 解決案 そもそもそういうメソッドを書かずに、副作用だけ、もしくは副作用無しで戻り値だけのメソッドで分けるのがよい? 追記 なんかこれだと自分以外の人に意味通じなさそうなのでサンプルコード修正しました。戻り値と副作用でsubjectが異なるのでわざわざ分けてる次第です。全部フラットに書いてもいいのですが it の中身が膨れるからあまりや
ruby1.9.3-p374 がつい先日リリースされましたね。最近テストが謎の segfault で落ちまくっていて困っていたのですが、このリリースでそのあたりが解消されているらしいのこと。なので早く brew upgrade したかったのですが「brew だと ruby-build の変更が反映されるの遅い」というのを何処かで聞いていたので github から clone する方式に切り替えました。 rbenvをbrew版からgithubの方に代えた— willnetさん (@netwillnet) 1月 17, 2013 するとこんなアドバイスが。 @netwillnet brew install --HEAD ruby-build じゃマズいすか?— Hiroyuki Moritaさん (@chiastolite) 1月 17, 2013 ためしに下記のようにコマンドを打ったら gi
みなさん、 timecop 使ってますか?timecop は、テストで時間を扱う時に必須と言えるライブラリです。テスト中の時間を止めたり(Timecop.freeze)時間を移動させたり(Timecop.travel)できます。似たようなライブラリとして delorean があります。RailsCasts でも紹介されています。 さて、timecop の README には下記のようなコード例が書いてあります。 t = Time.local(2008, 9, 1, 10, 5, 0) Timecop.travel(t) 僕はこれまで上記のように書くしか方法が無いと思っていたのですが、今日下記のようにも書けることに気づきました。 Timecop.travel(2008, 9, 1, 10, 5, 0) また、ブロックを使うこともできます。 Timecop.travel(2008, 9, 1,
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く