Railsでpathによる言語設定を行う

ゴール

/books/new # 日本語ページ
/en/books/new # 英語ページ

でアクセスできる。

やること

config/routes.rbに以下を追加。localeをパスに含めても含めなくてもアクセスできるようになる。jaは不要ならつけない。

scope "(:locale)", locale: /en|ja/ do
  resources :books
end

config/initializers/locale.rbに以下を記述する。

I18n.available_locales = [:en, :ja]

I18n.default_locale = :ja

application_controller.rbに以下を追加。

class ApplicationController < ActionController::Base
  around_action :switch_locale

  def switch_locale(&action)
    locale = params[:locale] || I18n.default_locale
    I18n.with_locale(locale, &action)
  end
end

これで言語設定を切り替えることができる。コントローラでputs localeでログを出すと実際に切り替わっていることがわかる。/en/をつけるとlocaleが:enになっている。つけないとデフォルトの:jaになる。

言語切り替えボタンをつける

ユーザーが言語を切り替えられるように切り替え用のボタンをヘッダーにつける。English/日本語とか。

<%= link_to 'English', url_for(locale: :en) %>
<%= link_to '日本語', url_for(locale: nil) %>

ymlファイルの作成

config/locales/en.yml

en:
  hello: "Hello world"

config/locales/ja.yml

ja:
  hello: "こんにちは"

表示

言語を切り替えたいerbファイルで

<%= t("hello") %>

参考サイト

SentryでRailsのエラーをモニタリングする

個人開発のRailsのプロジェクトが増えてエラーに気付けないことがありそうなのでSenrtyを使ってみる。今回は無料で使える範囲で使用する。

Sentryに登録

まずはSentryにアクセスしてアカウントの登録を行う。

プロジェクトの作成

Railsを選択する。

Railsの設定

公式ページのConfigure Rails SDKを参考に必要なGemを入れる。Gemfileに以下を追加してbundle install.

gem "stackprof"
gem "sentry-ruby"
gem "sentry-rails"

config/initializers/sentry.rbファイルを作成する。dsnはcredentialに書いた。コードをオープンにしたり他の人が見る場合はdsnを直に書くのは微妙かもしれない。

Sentry.init do |config|
  config.dsn = Rails.application.credentials.sentry_dsn
  config.breadcrumbs_logger = [:active_support_logger, :http_logger]

  # Set traces_sample_rate to 1.0 to capture 100%
  # of transactions for performance monitoring.
  # We recommend adjusting this value in production.
  config.traces_sample_rate = 1.0
  # or
  config.traces_sampler = lambda do |context|
    true
  end
  # Set profiles_sample_rate to profile 100%
  # of sampled transactions.
  # We recommend adjusting this value in production.
  config.profiles_sample_rate = 1.0
end

heathページを作成

意図的にエラーが発生するページを作成する。

raise StandardError.new('test error')

エラーを発生させるとSentryにエラーが送られ、メールが届く。

Javascriptのエラー検知

RailsのエラーができたのでJavascriptのエラーも検知する。フロントの開発が多いとjsが原因で動かないが開発者は気づかないみたいなことが発生するのでjsのエラー検知もかなり大事。

Sentryでプロジェクトを作成する

左のメニューからProjects->Create Projectを選択する。

BROWSER JAVASCRIPTを選択してプロジェクトを作成する。

frameworkを使うか選択できるが、今回は選択しない。VueやReactを使っていたら選択した方が良い(と思う)。

Railsのjavascriptの設定

healthページを作成し、ボタンを押したらJSのエラーを発生させる。

erbファイルにscriptタグを追加。idはユーザーにバレるけど気にしなくて良いか…

<script
  src="https://js.sentry-cdn.com/649179e.min.js"
  crossorigin="anonymous"
></script>

ページにアクセスするとSentryにイベントが送られ、エラーが発生するとメールが来る。

終わりに

とても簡単に設定できた。Sentryすごい!