RailsとかRubyとかのお勉強用


自分の備忘録を兼ねて書いておく

# Rails関連

## gem

### activerecord
[Active Record – Object-relational mapping in Rails](https://github.com/rails/rails/tree/master/activerecord)
RailsではなくActiveRecordだけ使いたいなら下記を参考に
[ActiveRecordを単独で使う](http://qiita.com/pocari/items/9e09a40638fe00abcdc4#1-8)

### activerecord-diff
https://github.com/tim/activerecord-diff
ActiveRecordのモデル同士で差分比較したいので使った
使いたいModelにincludeすればいいだけなのでお手軽
一時期[hashdiff](https://github.com/liufengyun/hashdiff)も検討した
が、[sequel](http://sequel.jeremyevans.net/)でhashdiff使ってスクリプト書こうとして面倒になってActiveRecordに乗り換えて使い出した

### activerecord-import
https://github.com/zdennis/activerecord-import
使いたかったんだけど、なんかエラーが出てうまくいかなかった
Oracleだとだめなのかな。。。？

## 読み物とか

### Ruby on Rails ガイド：体系的に Rails を学ぼう
http://railsguides.jp/
ActiveRecord使い出すにあたってとりあえずモデル関連を読んだ
あとは[Active Support コア拡張機能](http://railsguides.jp/active_support_core_extensions.html)とか読んでおくと、いろいろ発見がある

### Rails SQL Injection Examples
http://rails-sqli.org/
ActiveRecord便利だけど使い方間違えるとセキュリティ的にまずいからよんでおけ、というもの
ちょうどプレースホルダ使わずに`User.where("NAME LIKE '#{name}%'")`とかやっちゃってて焦って直した

### N+1問題 / Eager Loading とは - Rails Webook
http://ruby-rails.hatenadiary.com/entry/20141108/1415418367
リレーション設定したはいいものの、どうもパフォーマンスが出ない場合はこのケースかも
まあ、1件あたりはmsecでも積み重なれば大きいよね

---

# Ruby関連

## 読み物とか

### るびま
http://magazine.rubyist.net/
> 『Rubyist Magazine』、略して『るびま』は、日本 Ruby の会の有志による Rubyist の Rubyist による、Rubyist とそうでない人のためのウェブ雑誌です。

[標準添付ライブラリ紹介 【第 6 回】 委譲](http://magazine.rubyist.net/?0012-BundledLibraries)を何度も読んでる

### 最速Rubyリファレンスマニュアル検索！ | るりまサーチ
http://docs.ruby-lang.org/ja/search/

### サクサク引ける Rubyリファレンスマニュアル
http://miyamae.github.io/rubydoc-ja/
[最速Rubyリファレンスマニュアル検索！ | るりまサーチ](http://docs.ruby-lang.org/ja/search/)より手軽に引ける気がする

### RubyGems Guides for Japanese
http://rubygems-guides-jp.herokuapp.com/
翻訳は未完っぽいけど基礎的事項は十分かと

## gem

### pry
[pry/pry GitHub](https://github.com/pry/pry)
irbからこっちに変えて捗りだした
[Ruby - pryを使う - Qiita](http://qiita.com/k-ta-yamada/items/04be1e8721ceb58387d8)

### sequel
http://sequel.jeremyevans.net/
ORM
ActiveRecordに挫折してしばらく使ってた
ActiveRecord的なModelも作れて、ModelでいじりだしてからActiveRecordに乗り換えた

- DB直接いじる感じのこともできる
- いちいちモデル作らなくてもデータ取れる
- migration
  - http://sequel.jeremyevans.net/rdoc/files/doc/migration_rdoc.html
  - integerかtimestampか
  - integerのがシンプルでおススメとのこと
- transaction
  - http://sequel.jeremyevans.net/rdoc/files/doc/transactions_rdoc.html
  - transactionのオプションでrollbackとかあって、alwaysでつねにrollbackするようになったり
- conn
  - http://sequel.jeremyevans.net/rdoc/files/doc/opening_databases_rdoc.html
- チートシート
  - http://sequel.jeremyevans.net/rdoc/files/doc/cheat_sheet_rdoc.html
- sqliteのファイルなくても使えるっぽい
  - `DB = Sequel.sqlite`
  - http://sequel.jeremyevans.net/rdoc/files/doc/cheat_sheet_rdoc.html#label-Open+an+SQLite+memory+database
- モデルの作成
  - http://sequel.jeremyevans.net/rdoc/files/README_rdoc.html#label-Creating+new+records
  -  Model.create
  - Model.new
  - どちらもブロックを引数に取れる
- 削除とhook
  - deleteはhookしない
  - destroyはhookする
  - 上記に関連して、deleteはクエリ一発だけど、destroyはレコードごとにクエリ発行っぽい
  - http://sequel.jeremyevans.net/rdoc/files/README_rdoc.html#label-Deleting+records
- モデルのデフォルトスコープ？の設定
  - Model.set_dataset
  - http://sequel.jeremyevans.net/rdoc/files/README_rdoc.html#label-Sequel+Models
  - あれ？でもこっちかな？
  - http://sequel.jeremyevans.net/rdoc/files/README_rdoc.html#label-Extending+the+underlying+dataset
  - http://sequel.jeremyevans.net/rdoc/classes/Sequel/Model/ClassMethods.html#method-i-dataset_module

### hashdiff
https://github.com/liufengyun/hashdiff
データベースレコードの差分比較とかやりたくて、ORMに[sequel](http://sequel.jeremyevans.net/)を使っていたころに検討
結局ARに変更して[activerecord-diff](https://github.com/tim/activerecord-diff)に切り替えた
事前にModelをHashにすんのもなんか面倒だったし
単純にHash同士の比較ならば便利だと思う

### parallel
https://github.com/grosser/parallel
並列処理とかやってみたい、と使い出したけどwindowsだから`:in_processes`じゃなくて`:in_threads`しかできなかったして悩む