SlideShare a Scribd company logo
おすすめ gem の紹介
       @cho_co
  2012/05/22 開発 LT
gem とは?

• Ruby のライブラリをパッケージ化した
 もの

• PHP でいう pear みたいなもの
• パッケージ管理システム自体は
 RubyGems と呼ぶ
インストール


$ gem install rails
検索


$ gem search -r mysql
*** REMOTE GEMS ***

activerecord-jdbcmysql-adapter (1.2.2, 1.0.3 java)
activerecord-mysql-adapter-flags (0.0.3)
activerecord-mysql2-retry-ext (0.1.0)
activerecord-mysql2legacydb-adapter (0.2.0)
activerecord-mysql2spatial-adapter (0.4.2)
activerecord-mysqlspatial-adapter (0.4.1)
airblade-mysql_s3_backup (0.0.4)
aqueduct-mysql (0.1.0)
capistrano-mysqldump (1.06)
create_rails_mysql_db (0.2.3)
...
ローカル gem 一覧


$ gem list
*** LOCAL GEMS ***

abstract (1.0.0)
actionmailer (3.2.1)
actionpack (3.2.1)
activemodel (3.2.1)
activerecord (3.2.1)
activeresource (3.2.1)
activesupport (3.2.1)
addressable (2.2.8)
arel (3.0.0)
awesome_print (1.0.2)
...
rubygems.org
rubygems.org とは?
• http://rubygems.org/
• gem のホスティングサービス
• PHP でいう pear みたいなもの
• 38,948 gems
• 59,752 users
• gem install はデフォルトで rubygems を見に行く
bundler

• rubygems より上位レイヤーのパッケージ管
 理システム

• 必要となる gem を Gemfile に書いておく
# Gemfile
source 'https://rubygems.org'

gem 'rails’
gem 'mysql2'
...
インストール


# Gemfile に記述された gem をインストールする

$ bundle install
何がいいの?

• あの gem は開発環境には入っているけど、本
 番環境に入っていないのでアプリが動かな
 い!という問題を解消できる

• インストールするバージョンを固定できる
• gem 間の依存関係を解決してくれる
要は、Bundler は環境毎
の差異をなくしてくれる
   イカしたヤツ
おすすめ gems...

• curry-bu や今やっているプロジェクト
 で使用している主に Rails 向けの gem

• ここからが本題なはずなのですが時間
 がないので駆け足でいきます...
認証周り
Devise
• 多機能な認証用ライブラリ
• OmniAuth と組み合わせることで
  Facebook や Twitter などと OAuth 認証
  することができる


• ちょっと規模が大きい気もする
• https://github.com/plataformatec/
  devise
Database Authenticatable



• 一般的な(?)認証をしてくれる
• RESTful な URL ルーティングを生成
Registerable



• ユーザー登録、編集
• Database Authenticatable と組み合わ
 せて使用
Rememberable




• ログイン状態を保持
Confirmable



• ユーザー登録→送信されたメールの
 URL を踏んでもらって登録完了
Recoverable



• パスワードを忘れましたか?→送信さ
 れたメールによってパスワードをリ
 セット
CanCan
CanCan
AneCan
Shi-Ba
• 権限周りを色々やってくれる
• 管理者ユーザーの特権とか
• 「この投稿を作成したユーザーのみ削除ができ
  る」といったチェックをスマートに行える


• 認証は担当外なので Devise などと併用する必要
  がある


• https://github.com/ryanb/cancan
# app/models/ability.rb
class Ability
 include CanCan::Ability

 def initialize(user)
  user ||= User.new
  can :destroy, Post, user_id: user.id
 end
end

# app/controllers/posts_controller.rb
class PostsController < ApplicationController
 before_filter :authenticate_user!
 load_and_authorize_resource

# app/views/posts/edit.erb
<% if can? :destroy, @user %>
 <%= link_to '削除', posts, method: :delete %>
<% end %>
データベース周り
enum_column
• migration で enum 型を使用可能に
• これを使わなくても無理やり書けるが、
  schema.rb が varchar(0) とかになるので
  よろしくない


• https://github.com/electronick/
  enum_column
foreigner
• migrate ファイルに簡単に外部キー制約を記
  述


• add_foreign_key(:comments, :posts)
• execute メソッドを使用すれば SQL でも書
  けるがこちらのほうが楽


• https://github.com/matthuhiggins/
  foreigner
rails3_acts_as_paranoid
• 論理削除
• カラムに deleted_at を追加し、モデルに
  acts_as_paranoid と書くだけ


• https://github.com/goncalossilva/
  rails3_acts_as_paranoid
テスト周り
RSpec
• Test::Unit に代わるテスティングフレーム
  ワーク


• rspec-rails と一緒に使うと幸せになれる
• https://github.com/rspec/rspec
Capybara
• 統合テスト用テスティングフレームワーク
• フォームに値を入れて submit を押して、
  みたいなことを DSL で書ける


• https://github.com/jnicklas/capybara
Guard
• ファイルを編集したら自動でテストを実行
• https://github.com/guard/guard
Spork
• rake spec の起動遅すぎワロタ...
• DRb と呼ばれる分散オブジェクトプログ
  ラミング用のサーバーに Rails をロードし
  ておく


• 起動速すぎワロタ
• https://github.com/sporkrb/spork
便利なヤツら周り
CarrierWave
• 画像のアップロード(画像じゃなくても良い)
• 多機能(画像のリサイズやクロップなど)
• fog と一緒に使用することで、AWS S3、
  Google Storage などのストレージに簡単に
  画像を保存することができる


• https://github.com/jnicklas/carrierwave
Capistrano
• デプロイツール
• DSL で書ける
• ...が、慣れないと設定がだるい
• リモートサーバーでコマンドをたたける為、
  デプロイ以外でも使用可能(何かをインストー
  ルするとか)


• https://github.com/capistrano/capistrano
awesome_print
• p や pp よりオブジェクトを見やすく
  console に表示してくれる


• カスタマイズ可能
• https://github.com/michaeldv/
  awesome_print
おすすめ gem
良い感じな gem が
あったら教えて下さ
い。お願いします。
ご清聴ありがとうご
 ざいました。

More Related Content

おすすめ gem

Editor's Notes

  1. \n
  2. \n
  3. \n
  4. \n
  5. \n
  6. \n
  7. \n
  8. \n
  9. \n
  10. \n
  11. \n
  12. \n
  13. \n
  14. \n
  15. \n
  16. \n
  17. \n
  18. \n
  19. \n
  20. \n
  21. \n
  22. \n
  23. \n
  24. \n
  25. \n
  26. \n
  27. \n
  28. \n
  29. \n
  30. \n
  31. \n
  32. \n
  33. \n
  34. \n
  35. \n
  36. \n
  37. \n
  38. \n
  39. \n
  40. \n
  41. \n
  42. \n
  43. \n
  44. \n
  45. \n
  46. \n
  47. \n
  48. \n
  49. \n
  50. \n
  51. \n
  52. \n
  53. \n
  54. \n
  55. \n