タグ

ブックマーク / blog.mah-lab.com (14)

  • ActiveRecordのmergeは使える子 | mah365

    mergeはmergeでもHashじゃなくてActiveRecord::SpawnMethodsのmergeなのです。 join先のテーブルの条件で絞り込みたい class Entry < ActiveRecord::Base has_many :comments end class Comment < ActiveRecord::Base belongs_to :entry end 例えばブログのエントリーの公開・非公開がいつでも切り替えられるとして、非公開になっているブログのコメントを抽出したいな、と思ったとします。 公開・非公開かはentriesテーブルのpublished_atカラムにDateTimeがセットされているかされていないかで分かるとすると、以下のようなコードになると思います。 Comment.joins(:entry).where(entries: { publishe

    ActiveRecordのmergeは使える子 | mah365
    taka222
    taka222 2015/09/16
  • Railsで外部JavaScriptライブラリなどのAssetを管理するなら、bower-railsが便利 | mah365

    みなさま、Railsで外部のJavaScriptライブラリ、例えばUnderscore.jsなどを管理するとき、どんな方法を使っていますか? ファイルを落としてきてvendor/以下につっこんでますか? でもそれだと、いざバージョンアップしようと思ったときに面倒ですし、バグがあるのでバージョンを戻したい、といったときにも不便です。そもそもバージョンを管理できていません。 そんなとき、JSの世界ではBowerというツールでライブラリを管理します。Rubyの世界でのBundlerのようなものです。これをRailsで簡単に使えるようにしたのがbower-railsです。 使い方 事前に用意するもの Railsの環境があることは前提にして、他に以下のセットアップが必要です。 node.js bower このセットアップについては「Bower入門(基礎編)」という記事で分かりやすくまとめられています

    Railsで外部JavaScriptライブラリなどのAssetを管理するなら、bower-railsが便利 | mah365
    taka222
    taka222 2015/01/27
  • AngularJSとRailsの丁度良い関係を探る:コード解説編 | mah365

    以前投稿したAngularJSとRailsの丁度良い関係を探るという記事のコード解説編です。前回はざっくりとしたアーキテクチャの紹介のみにとどめていたので、このエントリでサンプルコードの詳細について解説します。 バージョン情報 ruby 2.1.3 rails 4.1.7 devise 3.2.4 angularjs 1.3.2 ディレクトリ構造 app以下のディレクトリ構造は以下のような形です。 app ├── assets │   ├── images │   ├── javascripts │   │   ├── app │   │   │   └── tasks │   │   │   ├── tasks.controller.js.erb │   │   │   ├── tasks.html.erb │   │   │   ├── tasks.js.erb │   │   │  

    AngularJSとRailsの丁度良い関係を探る:コード解説編 | mah365
    taka222
    taka222 2015/01/11
  • AngularJSとRailsの丁度良い関係を探る | mah365

    AngularJSとRailsのインテグレーションと言うと、やれ「RailsAPIに専念してビューは全部AngularJSだ!」という極端な話になりがちな気がするのですが、それだとRailsの良いところが活かせませんよね。AngularJSの持ち味はDOM操作三昧で複雑になりがちな画面を良い感じにコーディングできるところにあると思うので、そういう画面でだけAngularJSを使ってはどうか?というのが今回のアイデアです。 丁度良い感じに使う そういう訳で今回作ったサンプルのアプリとソースコードがこちらになります。 https://todo-rails-sample.herokuapp.com/ https://github.com/mahm/todo-rails/ ユーザー認証はふっつーにdeviseを使って、Todoを編集する画面だけAngularJSを利用している、という感じのサンプ

    AngularJSとRailsの丁度良い関係を探る | mah365
    taka222
    taka222 2015/01/11
  • インスタンスメソッドとクラスメソッドはどのようにして使い分けるべきか?(Rubyの場合) | mah365

    Rubyといったオブジェクト指向言語を学ぶと、メソッドの定義方法としてインスタンスメソッドとクラスメソッドという2通りの定義方法があることを学ぶと思います。しかし、言語自体のガイドブックには「定義方法にインスタンスメソッドとクラスメソッドがある」と書いてあるだけで、大抵その使い分けについては書かれていません。 そういう訳で、このエントリではその使い分けについて少し考えてみたいと思います。理論的に厳密な使い分けを目指すというよりは、そもそも使い分けの検討が全くつかない!という方に向けて、その指針の一助となることを目指します。 インスタンスメソッドとクラスメソッドとはそもそものところ、Rubyといった「オブジェクト指向の考え方」を実装した言語の機能です。その機能がなぜあるのか?というそもそものところは、オブジェクト指向の考え方にさかのぼることになります。 そこで、インスタンスメソッドとクラスメ

    インスタンスメソッドとクラスメソッドはどのようにして使い分けるべきか?(Rubyの場合) | mah365
    taka222
    taka222 2014/11/16
  • Writing Fast Rubyというスライドが良い | mah365

    ちょっとしたコードの書き方でパフォーマンスが変わることがあります。リーダビリティを重視する向きからすれば小手先のテクニックに映るかも知れないのですが、リーダビリティを維持しながらちゃんとしたパフォーマンスを出すためにも、テクニックを知ることは大事なことだと思うのです。 結構違うもんですなー というわけで、そんなテクニックをまとめたスライドがWriting Fast Ruby。見ていて参考になったのでメモ。 たとえば引数に&blockをとってcallするよりも、yieldの方が5倍速い、とか、 def slow(&block) block.call end def fast yield end mapにブロックを渡すよりも、シンボルを渡す方が20%速い、とか (1..100).map {|i| i.to_s} (1..100).map(&:to_s) mapしてからflattenを呼び出すよ

    Writing Fast Rubyというスライドが良い | mah365
    taka222
    taka222 2014/09/28
  • Railsのアプリがちょっと速くなるかも知れない?Gemたち | mah365

    Improve Rails performance by adding a few gemsでRailsのアプリがちょっと速くなるかも知れないGemが紹介されていたので、早速試してみました。 どんなGemRailsのViewのエスケープ処理を高速化するescape_utils みんな大好きblank?メソッドの処理を高速化するfast_blank JSONに関する処理を高速化するoj OJは個人的には定番でしたが、それ以外は知らないGemでした。 Railsアプリのテストの実行速度で前後比較してみた 小規模ではあるもののテストが充実しているアプリで、上記のGemを使用している場合と使用していない場合とで比較してみました。Rails4.0.5で、Ruby2.0.0の環境。 使用前:Finished in 117.683018 seconds 使用後:Finished in 101.366

    Railsのアプリがちょっと速くなるかも知れない?Gemたち | mah365
    taka222
    taka222 2014/06/29
  • 自動的にEager Loadingしてくれるようになる「Goldiloader」というGemが良い感じ | mah365

    RailsでのDBへのクエリの組み立ては常にN+1問題との戦いですよね。N+1が発生すると大幅にパフォーマンスがダウンしてしまうので、適切な事前ロードをいかに行えるかがプログラマの腕の見せどころになります。 でもそれって質でしょうか? DBにクエリを投げる部分の実装の詳細なのでは? クエリが空気読めばいいじゃん!という「Goldiloader」 「それって実装の質じゃないよね。詳細だよね。それはクエリを投げる部分(ActiveRecord)が空気読めばいいんじゃね?」 そんな思想で現れたGemGoldiloaderです。Gemfileに加えるだけで勝手にEager Loadingしてくれるようになります。 このGembundleせずに以下のコードを叩くと、eachでpostsが呼ばれるたびにロードを繰り返してしまうのですが・・・ > blogs = Blogs.limit(5).t

    自動的にEager Loadingしてくれるようになる「Goldiloader」というGemが良い感じ | mah365
    taka222
    taka222 2014/06/24
  • 4色ほど指定するだけでTwitter Bootstrapの配色を良い感じにしてくれるSass | mah365

    そんなSassが町田先生のCustomizedTwitterBootstrapに含まれていたので、これをTwitter Bootstrap3に対応させてみたのでした。 ソース こちらが良い感じにしてくれるベースの変数です。 $base-color、$main-color、$accent-color、$base-text-colorを決めることで良い感じにしてくれます。僕は下のファイルみたいなテイストが好きです。ほんわかしている。仕事では使えない感じがある。 実際に読み込むときには、Twitter Bootstrapより先に変数を読み込んでおきます。 //--------------------------------------------------------- // Color Scheme for Bootstrap @import colors/try @import color

    4色ほど指定するだけでTwitter Bootstrapの配色を良い感じにしてくれるSass | mah365
    taka222
    taka222 2014/06/02
  • Rubyをより良く書けるようになるための課題演習のつくりかた | mah365

    実戦的なコードの書き方は、どのようにして身に付くものなのでしょうか? 文法を覚えること? それともオブジェクト指向言語であれば、オブジェクト指向自体を学ぶこと? 見方を変えて、関数型のエッセンスを学ぶこと? アンチパターン プログラミングを学ぼうとするときに、プログラミング言語自体を完璧に学ぼうとするのは、無駄ではないのですがそんなに効率的ではない気がしています。 Ruby技術者認定試験【Gold】模擬問題 例えば上記の問題集をきっちり解けるようになると、Ruby自体の振る舞いについては、はっきり分かるようになりますよね。ただ、仕様を聞いて「これを作ろう!」と思ったときに、やり方に困るのではないでしょうか。 「Rubyでプログラミングできるようになりたい」という要望は、「Rubyというプログラミング言語を学びたい」のではなく、「Rubyという生産性が高いと言われている言語を使ってプログラミ

    Rubyをより良く書けるようになるための課題演習のつくりかた | mah365
    taka222
    taka222 2014/05/05
  • Rubyプログラマの発想 | mah365

    「Lisp脳」の謎に迫る – Schemeプログラマの発想という僕の好きな記事があるのですが、Rubyプログラマの発想も同じだなーと、ふと思いました。 データの加工として考える 1から100までの数をプリントするプログラムを書け。ただし3の倍数のときは数の代わりに「Fizz」と、5の倍数のときは「Buzz」とプリントし、3と5両方の倍数の場合には「FizzBuzz」とプリントすること。 記事ではこの実装の例(手続き型)として、こんなコードが載っていますが、 (do ((x 1 (inc! x))) ((>= x 100) x) (cond ((= (modulo x 15) 0) (print "FizzBuzz")) ((= (modulo x 5) 0) (print "Buzz")) ((= (modulo x 3) 0) (print "Fizz")) (else (print (

    Rubyプログラマの発想 | mah365
    taka222
    taka222 2014/04/21
  • Githubのプライベートリポジトリでも無料で使えるCI、Werckerを使ってrails newからHerokuのデプロイまでやってみる | mah365

    SaaSのCIと言えばTravis CIやCircle CIといったサービスが有名ですが、いずれにしてもプライベートリポジトリを使う場合は有料なのです。しょうがないよね、商売だもんね。でもCI入れたいなぁ。 そんな中、GithubだろうがBitbucketだろうがプライベートリポジトリでも無料で使っていいよ!というβ期間中のCI、Werckerが僕の周辺で話題になっていたので、触ってみました。画面もスゲー使いやすい上に、ハマりどころもなく、これはひょっとしてひょっとするんじゃないの?という期待を込めて、rails newからRailsアプリをHerokuにデプロイするまえのチュートリアルを作ってみました。みなさんもこの記事を参考に、ぜひ使ってみてください。 この記事のゴール Githubにpushしたら自動的にWercker上でRSpecのテストが動くこと Werckerでのテストに成功し

    Githubのプライベートリポジトリでも無料で使えるCI、Werckerを使ってrails newからHerokuのデプロイまでやってみる | mah365
    taka222
    taka222 2014/01/08
  • 大規模Rails開発を蝕む5つのアンチパターン | mah365

    Railsでアプリを作っていると、最初の立ち上がりは速いものの、コードが多くなってくると結構散らかってきますよね。そんな中、5 ARCHIRECTURE ANTI-PATTERNS AND SOLUTIONS FOR LARGE RAILS APPSという記事を見つけたので、ご紹介します。 1. 複数の責務を持つサービスクラスがある 業務別の処理をサービスクラスという形で分割したときの話ですね。ActiveRecordのクラスに直接仕事をさせるのではなく、プレーンなクラスに業務処理をまとめて、そこからだけActiveRecordのクラスのオブジェクトにアクセスするという考え方です。 で、業務別の処理をサービスクラスにまとめたのは良いんだけど、「これもこの業務だよね」という感じで、どんどんサービスクラスに処理を追加していくと、単一責任の原則に違反してしまうし、混沌とするので、良くないよねと。

    大規模Rails開発を蝕む5つのアンチパターン | mah365
    taka222
    taka222 2014/01/04
  • イマドキ、Ruby on Railsで開発するならエディタはRubyMineだよね? 6出たよー! | mah365

    社内の8割方の人間を敵に回すタイトルです。RubyMineを使いはじめてから、かれこれ1年が経ちますが、もうRubyMine無しではRuby on Rails使えません。それぐらいに便利なので、そろそろちゃんとご紹介しようと思うのです。 ちなみに僕は、 vimEmacs → Sublime Text → RubyMine(今ココ!) という感じにエディタを渡り歩いています。 6になって、最強が更に最強になった つい先日、RubyMineがメジャーバージョンアップして6になりました。これにより以下の機能が加わり、より最強になりました。 IDEの中でターミナルを開けるように Zeusを標準で扱えるように(どうせならSpringもサポートして欲しかったけど・・・) 「今までできなかったのかよ!」とツッコミを受けかねない機能追加なのですが、いちいちウィンドウを切り替えてターミナル叩きながらコ

    イマドキ、Ruby on Railsで開発するならエディタはRubyMineだよね? 6出たよー! | mah365
    taka222
    taka222 2013/12/10
  • 1