タグ

ブックマーク / blog.willnet.in (34)

  • Rails Developers Meetup で綺麗なテストコードの書き方について発表した - おもしろwebサービス開発日記

    昨日のRails Developers Meetupで綺麗なテストコードの書き方について発表してきました。 Rails Developers Meetup #1(東京会場) - connpass 資料はこちら 余談 もともと数年前くらいから、テストコードの書き方についてまとめたいなーと思っていたのですがなかなかキッカケがなくて手を付けられていませんでした。今回のミートアップ駆動で一通り形にするところまでいけて今とてもスッキリした気持ちです 😇 もっと多くの人にテストコードの書き方を意識してもらいたいので、また機会があればどこかで喋りたいですね。 昨日発表した内容はGitHubリポジトリにまとめたものの一部です。綺麗なテストコードの書き方について詳しく知りたい方は下記のリンクからどうぞ。 willnet/rspec-style-guide お願い 今回まとめた内容はあくまで僕が考えるテスト

    Rails Developers Meetup で綺麗なテストコードの書き方について発表した - おもしろwebサービス開発日記
    taka222
    taka222 2017/05/19
  • Rails 5.x について発表した - おもしろwebサービス開発日記

    昨日開催された、Increments ++ Tech TalkにてRails 5.xというタイトルの話をしました。 内容はWEB+DB PRESSの連載ではページ数の関係で載せられなかったRails 5.0のトピックと、Rails 5.1で入る(入りそう)な機能の話です。分量が多くなってしまい、いろいろ端折りながら喋りました。 スライド中でも触れていますが、発売中のWEB+DB PRESS Vol.93でRails 5のメジャーな変更について取り上げ済みですので、気になる方はぜひ一読ください。 WEB+DB PRESS Vol.93posted with amazlet at 16.08.19原田 騎郎 吉羽 龍太郎 松浦 隼人 須藤 涼介 生沼 一公 森下 雅章 前島 真一 鍛治 匠一 伊藤 直也 のざき ひろふみ うらがみ 高山 温 佐々木 健一 わかめ まさひろ ひげぽん 遠藤 雅伸

    Rails 5.x について発表した - おもしろwebサービス開発日記
    taka222
    taka222 2016/08/19
  • ginza.rb 第33回で Rails 5 の新機能について学んだ - おもしろwebサービス開発日記

    3/15は ginza.rb の33回目のミートアップでした。 Ginza.rb 第33回 もうすぐやってくる!Rails 5を見ておこう - Ginza.rb | Doorkeeper 前回のミートアップ時に、きっと Rails 5.0 がリリースされているだろうと思い Rails 5.0 をテーマとして設定しましたが、見事に期待が外れましたね>< 未完成のリリースノートを読みつつ、主にメジャーな機能について内容を確認していきました。ざっとメモ書きを載せます。何か間違っている点などありましたら教えていただけると嬉しいです! Ruby on Rails 5.0 Release Notes — Ruby on Rails Guides ActionCable ご存知 websocket 用 pubsubサーバとして postgres と redis に対応している Basecamp のチャッ

    ginza.rb 第33回で Rails 5 の新機能について学んだ - おもしろwebサービス開発日記
    taka222
    taka222 2016/03/23
  • 権限管理のgemで良いのはどれ? - おもしろwebサービス開発日記

    昨日は ginza.rb 31回目のミートアップでした。 Ginza.rb 第31回 ユーザの権限管理どうしてます? - Ginza.rb | Doorkeeper @kyuden_ さんに、現状の二大認可 gem である cancancan や pundit、それらの問題点を解決するために作った banken について発表してもらいました。 感想 個人的には pundit のリソースベースでの権限管理は悪くないと思っています。ただスライドで書かれているような、Admin::UsersControlller と UsersController で処理を分けたい時などのエッジケースで回避策を模索しなきゃいけないのはだるいですね。banken だと、コントローラベースなのでコード記述量は増えてしまうのですがその分ハマりどころが減るので、そのトレードオフを考慮しつつ案件によって使い分けるのがいい

    権限管理のgemで良いのはどれ? - おもしろwebサービス開発日記
    taka222
    taka222 2016/01/20
  • Rails 4.2 で postgresql を使う場合の注意事項 - おもしろwebサービス開発日記

    Rails 4.2 では、DB の string 型が255文字制限ではなくなりました。もともとあまり意味がなかったらしいです(詳しい人補足求む)。対象は postgresqlsqlite で、mysql は対象外です。 PostgreSQL, remove varchar limit. by senny · Pull Request #14579 · rails/rails Rails 4.2 以降は、string は文字数制限未指定 の character varying 型に変換されます。ただそれって、text 型と何が違うんでしょうね。 と、調べた限りでは違いはなさそうでした。 string - PostgreSQL: Difference between text and varchar (character varying) - Stack Overflow ちなみに R

    Rails 4.2 で postgresql を使う場合の注意事項 - おもしろwebサービス開発日記
    taka222
    taka222 2015/09/06
  • Rails で fat model を避けるための、あまり知られていない方法について - おもしろwebサービス開発日記

    このエントリで書いた内容は、ほぼ Growing Rails Applications in Practice の内容が元になっています。英語ですが、ここで挙げた内容以外にもコードを綺麗に保つテクニックが書かれており、かつページ数も少なく読みやすいです。コードを綺麗に保つのが好きな方は一読してみることをおすすめします。 はじめに Rails で fat model を避けるための方法は、7 Patterns to Refactor Fat ActiveRecord Models を始めとして、多くのやり方が存在します*1。 validation や callback は ActiveRecord(以下AR) を継承せずとも利用することができます。7 Patterns to Refactor Fat ActiveRecord Models の 「3. Extract Form Objects

    Rails で fat model を避けるための、あまり知られていない方法について - おもしろwebサービス開発日記
    taka222
    taka222 2015/08/24
  • ActiveJob はまだちょっと使うには早いかも - おもしろwebサービス開発日記

    Rails 4.2 から導入された ActiveJob は、sidekiq や resque などのバックグラウンドジョブ系 gem を、同じ利用方法で扱えるようにしてくれます。 これは便利だなーと思い、sidekiq を ActiveJob を通じて使ってみたのですが、しばらく使った後に「まだ格的に使うのは早いかも」と感じました。 リトライ機能が貧弱 sidekiq は、ジョブが失敗した時にリトライする機能があります。失敗するたびに次にリトライする間隔が伸び、一定回数失敗したら完全に失敗として扱われます。リトライ間隔や、完全に失敗になるまでの回数はもちろん変更可能です。 Web上でリトライしているジョブや完全に失敗したジョブを確認することもできます。 ActiveJob を使うと、この細やかなリトライ機能を失うことになります。例えば、次のように例外を拾って再度キューにジョブを入れること

    ActiveJob はまだちょっと使うには早いかも - おもしろwebサービス開発日記
    taka222
    taka222 2015/07/24
  • find_by_sql したレコードで preload する方法 - おもしろwebサービス開発日記

    どうしても AR の query methods だけでは要求を満たせない場合の最後の手段として、find_by_sql メソッドがあります。皆さんよく使ってると思うのですが、戻り値のレコードからさらに association をロードしようとすると N+1 になるケースがあります。かといって User.preload(:comments).find_by_sql(sql) のようにしても期待通りには動きません。単純に preload 部分が無視されるだけです。 ではどのように書いたらよいでしょうか。 次のように書くと期待通りに動きます(Rails 4.2.1 で試しています)。 records = User.find_by_sql(sql) ActiveRecord::Associations::Preloader.new.preload( records, :comments ) re

    find_by_sql したレコードで preload する方法 - おもしろwebサービス開発日記
    taka222
    taka222 2015/06/15
  • Rails で DB の Time 型を扱う - おもしろwebサービス開発日記

    Rails では、DB の Time 型 を扱うことができます。これは日付を必要とせず、時間だけを格納したいときに使います。 定義方法は、他の型と同じく add_column メソッドなどで time を指定するだけです。 add_column :users, :lunch_time, :time ただ、これを使おうとするにはちょっとしたノウハウが必要です。 RubyRails には、時間のみを扱うクラスはありません。DB の Time 型は Ruby の Time オブジェクトに変換されます。Time オブジェクトは年月日の情報を持っています。その際、タイムゾーンは utc (正確には ActiveRecord::Base.default_timezone で設定されたタイムゾーン) として扱われます。 lunch_time カラムに 12:00 が格納されていた場合、次のような

    Rails で DB の Time 型を扱う - おもしろwebサービス開発日記
    taka222
    taka222 2015/06/12
  • 最近の Rack サーバ事情について - おもしろwebサービス開発日記

    先月、heroku推しサーバが unicorn から puma に変わったという発表がありました。unicorn だとスロークライアントの影響を受けやすいというのが理由なようです。 もう少し詳しく調べてみましょう。 そもそもスロークライアントってなに その名の通り遅い回線のクライアントです。3G環境のモバイル端末などが該当します。 「unicorn だとスロークライアントの影響を受けやすい」とは unicorn はプロセスモデルのサーバであり、blocking I/O モデルを採用しています。つまり、クライアントとの通信中プロセスが専有されるということです。 例えば unicorn がワーカプロセスを3つ立ち上げていて、そこへ通信完了に10分かかるようなスロークライアントが3つ接続されたら…、続くクライアントはスロークライアントの通信が完了するまで実行を待たなければならなくなります。プ

    最近の Rack サーバ事情について - おもしろwebサービス開発日記
    taka222
    taka222 2015/02/25
  • 僕が参考にしている Ruby, Rails の情報源まとめ(海外ブログ編) - おもしろwebサービス開発日記

    昨日 @bekkou68 さんに「前島さんってどうやってRubyRails関連の情報を収集しているんですか?」って聞かれたのでまとめてみます。とりあえず海外のブログ限定で。日ブログ編は気が向いたらやります…。 RailsCasts 有名すぎて説明不要かもしれませんね。毎週2つ(うち1つは有料購読が必要)の Rails 関連動画をアップロードしてくれているサイトです。良質な情報を定期的に届けてくれるすばらしいサイトですね。1ヶ月9ドル払って有料購読する価値は間違いなくあると断言できます。動画中で紹介しているライブラリの情報もすばらしいですが、コード例もかなりRailsっぽく綺麗に書かれていて大変参考になります。 RubyFlow いろいろなRuby開発者のブログの更新情報をまとめたブログ。簡単な紹介文に各ブログのリンクがくっついているような形式です。日によってばらつきがありますが、だいた

    僕が参考にしている Ruby, Rails の情報源まとめ(海外ブログ編) - おもしろwebサービス開発日記
    taka222
    taka222 2014/09/26
  • ゆるふわ Development Club というサークルができた - おもしろwebサービス開発日記

    僕は個人でコツコツとwebサービスを作っているのですが、実際はチームで開発するほうが好きです。GitHub 上でミサワや寿司ゆきを貼ったり、チャットで機能の相談をしたり、雑談したりしながら開発を進める。やったことがある人なら、きっとその楽しさを理解してもらえるのではないでしょうか。 当たり前ですが、個人で開発するとなるとそうはいきません。チームで開発する楽しさを覚えてしまうと個人の開発は味気なくて物足りないです。 モチベーションの維持も課題です。納期や他者の目がないと、際限なく脇道にそれることができてしまいます。一人だとなかなか開発が進まない…><。 個人だけどチームっぽく楽しく開発を進めたい。 そこでポエムに、「僕みたいに個人で開発をしている人たちを集めたら、チームっぽい開発ができるのでは?」という内容を書いたところ、色々あってサークルが出来ました。 ゆるふわ Development C

    ゆるふわ Development Club というサークルができた - おもしろwebサービス開発日記
    taka222
    taka222 2014/09/26
  • rails new のデフォルトオプションを設定しよう - おもしろwebサービス開発日記

    みなさんは ~/.railsrc 使ってますか? rails new したときのオプションを書いておけるファイルです。Rails 3.2 から使えます。 僕は test-unit を基的に使わないし、rails new のタイミングで bundle install が走るのが嫌なので次のように設定しています。デフォルトの設定を書いておくことで、何も考えずに rails new できるので便利です。 -T --skip-bundle -T が Test::Unit 系のファイル生成のスキップ、--skip-bundle が bundle install のスキップです。rails new -h とすると他のオプションも見れます。 たまに ~/.railsrc を使わずに rails new したくなる時もあります。そんな時は次のように、--no-rc オプションを利用するとよいでしょう。

    rails new のデフォルトオプションを設定しよう - おもしろwebサービス開発日記
    taka222
    taka222 2014/06/22
  • RSpec 3 時代の設定ファイル rails_helper.rb について - おもしろwebサービス開発日記

    rspec-rails、3.0.1 がリリースされていますね。インストールして rails g rspec:install とすると、spec/rails_helper.rb という見慣れないファイルが作成されます。これは一体何でしょうか。 rspec-rails のREADMEを読むと、これからは spec/rails_helper.rb に Rails 特有の設定を書き、spec/spec_helper.rbには RSpec の全体的な設定を書く、というようにお作法が変わるそうです。これによって、Railsを必要としないテストを書きやすくなるんだとか。 というわけで、これまで require 'spec_helper' としていた箇所の大部分は require 'rails_helper' に置換してあげる必要がありそうですね。パーフェクト Ruby on Rails のテストの章は

    RSpec 3 時代の設定ファイル rails_helper.rb について - おもしろwebサービス開発日記
    taka222
    taka222 2014/06/11
  • パーフェクト Ruby on Rails のサンプルアプリケーションを Github 上で公開しました - おもしろwebサービス開発日記

    パーフェクトRuby on Rails 中の第6章で取り扱っている題材、イベント開催支援系のRailsアプリケーション awesome_events のソースコードを Github 上で公開しました。 ソースコードは技術評論社さんのサポートページからダウンロードすることもできますが、やっぱり Github から持ってこれたほうがいいですよね。 さて awesome_events とはどんなアプリケーションでしょうか。すごくざっくり書くと、Doorkeeper や ATND の簡略版です。 使っている gem は、Rails を普段使っている人から見たらかなり普通な感じ。特筆すべきなのは carrierwave と ransack くらいでしょうか。omniauth で「Twitterログイン」機能を作ったりもしています。 gem 'rails', '4.1.1' gem 'sqlite3'

    パーフェクト Ruby on Rails のサンプルアプリケーションを Github 上で公開しました - おもしろwebサービス開発日記
    taka222
    taka222 2014/06/02
  • パーフェクト Ruby on Rails という本を書きました - おもしろwebサービス開発日記

    ここのところブログの更新頻度が下がっていたのはそういうことです。 @sugamasao、@udzura、@joker1007と共同で書きました。 パーフェクト Ruby on Railsposted with amazlet at 14.05.02すが まさお 前島 真一 近藤 宇智朗 橋立 友宏 技術評論社 売り上げランキング: 272 Amazon.co.jpで詳細を見る 執筆経緯 個人的な発端は去年の9月くらい。当時常駐していた会社のメンバーたちでランチ行く途中、@udzuraさんに「Railsを書く話があるんですが興味あります?」と聞かれたので、査読でもお願いされるのかなと思いながら「興味ありますよー」と答えたらいつの間にか著者になっていました。とはいえ、もともとRailsは一回書いてみたいと思っていたので結果オーライ。 どんななの このは、著者陣たちが「Railsを始

    パーフェクト Ruby on Rails という本を書きました - おもしろwebサービス開発日記
    taka222
    taka222 2014/05/03
  • Rails 4.1.0 で新しく導入された便利メソッド - おもしろwebサービス開発日記

    Rails(ActiveSupport) は標準クラスを拡張した便利メソッド群を提供してくれています。時々これは使わないなー…という微妙なやつもありますが、僕はけっこう好きです。 Rails 4.1.0 で新しく入ったそんなメソッドをまとめます。 Numeric#in_milliseconds 数値をミリ秒の単位に合わせて返す。 1.hour.in_milliseconds #=> 3600000 実装は単に1000倍しているだけ。 def in_milliseconds self * 1000 end すごくたまに使うかもしれない。 Date#middle_of_day, DateTime#middle_of_day, Time#middle_of_day 昼の12時を返す。 date = Date.today date.middle_of_day => Sat, 19 Apr 2014

    Rails 4.1.0 で新しく導入された便利メソッド - おもしろwebサービス開発日記
    taka222
    taka222 2014/04/21
  • tachikoma を使って毎日自動で bundle update - おもしろwebサービス開発日記

    sanemat さんが作っている tachikoma という gem があります。tachikoma の機能は簡単に言うと「github の指定のプロジェクトbundle update して、差分を pull request してくれる rake タスク」です。cron や jenkins などで定期的に実行するようにすると、依存する gem のバージョンを常に最新に保つことができます。べんり! そんなべんりな tachikoma なのですが、ドキュメントが分かりづらくて損をしている気がします…><。すこしでも足しになるように、僕が作っている revenger というプロジェクト(github 上のプライベートリポジトリに置いてある)の tachikoma 設定手順をまとめましたのでご参考あれ。 前提 github のプライベートリポジトリで管理してる jenkins サーバ上で定期実

    tachikoma を使って毎日自動で bundle update - おもしろwebサービス開発日記
    taka222
    taka222 2013/09/25
    ”tachikoma を使って毎日自動で bundle update - willnet.in”
  • rake_shared_context を 0.1.0 にバージョンアップした - おもしろwebサービス開発日記

    rake_shared_context という、rake タスクをテストする際にべんりな shared context を gem にしたものがあります。これをバージョンアップしました。 バージョンアップしたときに RubyGems.org を確認したら、地味に 2000 ダウンロードされていて驚きました>< 変更点 rails に依存しているコードを修正して、padrino など他のフレームワークでも使えるようにした 任意のディレクトリの rake タスクをテスト出来るようにした(これまでは Rails.root/lib/tasks/*.rake 決め打ちだった) 例 下記のようにすると、/path/to/rake ディレクトリ配下の rake タスクをロードします。 RakeSharedContext.rake_dir = '/path/to/rake'

    rake_shared_context を 0.1.0 にバージョンアップした - おもしろwebサービス開発日記
    taka222
    taka222 2013/09/03
    ”rake_shared_context を 0.1.0 にバージョンアップした - willnet.in”
  • ランダムで日本人の名前を返す gem を作った - おもしろwebサービス開発日記

    gimei という、ランダムで日人の名前を返す gem を作りました。 似たようなライブラリに faker があります。faker は人の名前だけではなく、住所やメールアドレスやユーザ名や電話番号など、たくさんのジャンルのダミーデータを返してくれるすごい gem です。しかも i18n に対応しており、yaml ファイルを定義すれば日語も使えます。 じゃあ faker でいいじゃん!って思いますよね。しかし一つだけ問題がありまして…。ふりがなが使えないのです。 そこでgimeiです。gimeiは下記のような形でふりがな(フリガナ)に対応しています。 gimei = Gimei.new gimei.kanji #=> "斎藤 陽菜" gimei.hiragana #=> "さいとう はるな" gimei.katakana #=> "サイトウ ハルナ" gimei.last.kanji #

    ランダムで日本人の名前を返す gem を作った - おもしろwebサービス開発日記
    taka222
    taka222 2013/07/11