その他
    ホーム 技術発信 DoRuby 【Rails】gem ‘global’の使い方【global】
    【Rails】gem ‘global’の使い方【global】
     

    【Rails】gem ‘global’の使い方【global】

    この記事はアピリッツの技術ブログ「DoRuby」から移行した記事です。情報が古い可能性がありますのでご注意ください。

    環境ごとに値を設定する場合よくgem ‘config’が使われますが、個人的にgem ‘global’の方が使いやすいと思うので紹介します。

    gem ‘config’との違い

    gem ‘config’との大きな違いは.ymlファイルの持ち方です。

    gem ‘config’

    config/settings.yml
    config/settings/development.yml
    config/settings/production.yml
    config/settings/test.yml
    

    config/settings.yml

    web_domain: localhost
    api_domain: api.local
    

    config/settings/production.yml

    web_domain: web.com
    api_domain: api.com
    

    gem ‘config’は環境ごとに.ymlを持つのに対し、gem ‘global’は機能ごとや値の種類ごとにファイルを持つ形になります。

    gem ‘global’

    config/global/domains.yml

    default:
      web: localhost
      api: api.local
    
    development:
      web: localhost
      api: api.local
    
    production:
      web: web.com
      api: api.com
    
    test:
      web: test.com
      api: api.test.com
    

    導入方法

    1.Gemfileにgem ‘global’の追記

    gem 'global'
    

    2.config/initializers/global.rbの作成

    Global.configure do |config|
      config.environment = Rails.env.to_s
      config.config_directory = Rails.root.join('config/global').to_s
    end
    

    使い方

    基本

    > Rails.env
    => "development"
    
    > Global.domains
    => { "api" => "api.local", "web" => "localhost" }
    
    > Global.domains.api
    =>"api.local"
    
    > Rails.env
    => "production"
    
    > Global.domains
    => { "api" => "api.com", "web" => "web.com" }
    
    > Global.domains.api
    =>"api.com"
    

    名前空間付き

    config/global/name_space/domains.yml

    > Global.name_space.domains
    => { "api" => "api.com", "web" => "web.com" }
    
    > Global.name_space.domains.api
    => "api.com"
    

    ネストを入れる

    config/global/domains.yml

    default:
      nest:
        web: localhost
        api: api.local
    
    development:
      nest:
        web: localhost
        api: api.local
    
    production:
      nest:
        web: web.com
        api: api.com
    
    test:
      nest:
        web: test.com
        api: api.test.com
    
    > Global.domains.nest
    => { "api" => "api.com", "web" => "web.com" }
    
    > Global.domains.nest.api
    => "api.com"
    

    ERB

    config/global/domains.yml

    default:
      web: localhost<%= 1 + 2 %>
      api: api.local
    
    > Global.domains.web
    => "localhost3"
    

    リロード

    > Global.reload!
    

    他にもjavascriptで使えたりするのでぜひ使ってみてください。