ActiveRecord::Base#touchでレコードの数だけupdateがコールされてしまうのをひとまとめにしてくれる「Activerecord::DelayTouching」

Pocket

子レコードにbelongs_to :parent, touch: trueなどと宣言した場合、親レコードにaccepts_nested_attributes_for :childrenと宣言した上で親レコードを更新すると、子レコードの数だけUPDATE文が実行される動きになる。本来1回で済むはずのUPDATEの実行がN-1回分余計に実行されるわけで、これをひとまとめにしてくれるGemがactiverecord-delay_touchingなのです。

Continue reading…

データをマイグレーションする「nondestructive_migrations」

Pocket

Railsアプリを運用していると、DBスキーマの変更にあわせてデータも移し替えたりしたいこと、ありますよね。時には、DBスキーマと関係なく、一律データをリフレッシュさせるためにバッチを流したりすることもあるかと思います。

そういう場合はRakeタスクなんかを作成して流すと思うのですが、一度きり流すものをRakeタスクにするのも何だかなーと思うのと、かといってコンソールで直接流すのもなんだかなーという気持ちがあります。それを解決するのがnondestructive_migrationsです。

Continue reading…

Rails Style Guideに載っていることが分かれば大体Rails書ける気がする

Pocket

Rails Style Guideに載っていることが分かれば大体Rails書ける気がしました。もちろん実際に書けるというのと、知識として知るのは全く別のことだと思うのですが、知識としては要点がかなりおさえられている気がしました。

Continue reading…

Rails4.2から関連のバリデーションをちょっと気持ちよく書ける

Pocket

Rails4.2 betaが出ましたねー。Sidekiqのようなジョブが標準で使えるようになったり(ActiveJob)、ActiveRecordのfindを爆速にしてくれるAdequateRecordが搭載されたり、かなり期待の高まっているバージョンです。

Continue reading…

Railsのapp/views以下をS3に置いてリリース無しにViewを変更できる「s3_rails」

Pocket

「いちいちちょっとしたViewの変更をリリースするの面倒だから、app/viewsごとS3に置いて管理できるようにしちゃえば良いじゃん」という、何ともマジかよ的な発想を実現できるGemがs3_railsです。

Continue reading…

Rails4にバージョンアップしてRSpecでハマったこと

Pocket

Rails4にバージョンアップしようとして、RSpecが通らなくなって午前中ずっとハマっていました。。

Continue reading…

JSON-RPC 2.0に準拠したAPIをRails4で実装する

Pocket

HTTPで通信するAPIはRESTで設計するのが定石ですが、利用者から見ると不便な場合があります。

RESTは設計に強い制約を与えるため、多人数で開発するときでも設計の一貫性を確保することができるのが利点です。更に一定のパターンに従っている分、既存のRESTクライアントを使って手軽にAPIを利用した機能を実装できるのも魅力的です。

しかし設計がRESTに従う分、例えばいくつかの処理をまとめてトランザクションとして扱いたい、といった場合に、インターフェースを独自に拡張しなくてはいけない状況に立たされることがあります。そもそもRESTだとAPIの単位が細かすぎて、利用者から見て使いにくい、といったケースもあります。

そういった場合はRPC(Remote Procedure Call)でAPIを設計することを検討してみても良いかも知れません。RPCの中でもJSON-RPCという仕様が比較的実装しやすそうだったので、試しにRails4でJSON-RPCの振る舞いを実装してみました。RPCはXMLで通信するのが一般的なようですが、今時はJSONで通信したいですよね。

Continue reading…

happyhours.ioのコードはRailsのコードリーディングの材料として良いかも

Pocket

プロジェクトにおけるメンバーの作業時間を計測することができるhappyhours.ioというサービスがあるのですが、こちらのコードがGithubで公開されています。いわゆるRailsのコードといった感じの装いなので、Railsのコードリーディングの材料に調度良いのではないかと思います。

Continue reading…

Propono&AWSでSOAを構築する

Pocket

いくつかのRailsアプリをHTTPのAPI経由で連携するアプリなんかを構築していたりするのですが、「それ、なんてSOA?」とPropono: Pub/Sub for Rubyを読んで気づきました。

Continue reading…