シュッと開発日記

学んだことのアウトプット。ポートフォリオ作ってます。

マジックナンバーをSettingsLogicを使ってまとめて定数化する

技術系YouTuberの勝又さんのサロンに私も入っているのですが、 そこで初学者向けに「マジックナンバーは定数化した方がいいよ!」という話が出ていたので、 調べてみて、実装してみました。

マジックナンバーとは

マジックナンバー」とはまずなんなのかと思い、ググったところ、 以下の記事が勉強になりました。

マジックナンバーの回避の手引き

まとめると

「実装した本人以外がソースをみたときに、 その数値がなんの為に使われているのかが分からない数字」

マジックナンバーとなるようですね。

enumとかでやっていることが、マジックナンバーの定数化というところでしょうか。

SettingLogic

configというgemもあるようですが、環境ごとにファイルを作成するみたいで、 今回の実装では、マジックナンバーをただ定数化したいだけで (なら直書きで定数を定義した方がいい気もしますが、) そんなに多くもないので、 SettingsLoigicを使って管理したいと思います。

# Gemfile

gem 'settingslogic'

bundle install

公式に設定ファイルはapp/models/settings.rbに書くべしとあったので、

# app/models/settings.rb

class Settings < Settingslogic
  config_source = Rails.root / 'config' / 'application.yml'
  source config_source.to_path
  namespace Rails.env
end

あとはconfig/application.ymlに定数を定義していきます。

# config/application.yml

defaults: &defaults
  page: 10
  post:
    long_name: 8
    long_description: 12
  ogp:
    base_image_path: './app/assets/images/base.png'
    gravity: 'center'
    text_position: '0,0'
    font: './app/assets/fonts/ipag.ttf'
    font_size: 30
    idention_count: 8
    row_limit: 8
development:
  <<: *defaults
test:
  <<: *defaults
production:
  <<: *defaults

マジックナンバー以外にも定数として使用していたものをまとめて定義しておきました。

以上でマジックナンバー等をまとめて定数化することができました。