定数は一度設定したら変更しないことを前提とした値の入れ物です。プログラム全体で共通して使う設定値や、変わらない値を管理するために使います。Rubyでは大文字で始まる名前を付けることで定数を定義できます。この記事では定数の基本から実践的な使い方まで詳しく解説します。
基本的な使い方
Rubyでは大文字で始まる名前(通常はすべて大文字)で定数を定義します。慣例としてアンダースコアで単語を区切るSCREAMING_SNAKE_CASEが使われます。
# 定数の定義
MAX_RETRY = 3
TAX_RATE = 0.10
APP_NAME = 'MyRubyApp'
puts "アプリ名: #{APP_NAME}"
puts "税率: #{TAX_RATE}"
puts "最大リトライ回数: #{MAX_RETRY}"アプリ名: MyRubyApp
税率: 0.1
最大リトライ回数: 3定数名はすべて大文字で書くのが一般的です。これにより、コードを読む人が「この値は変更されない」とすぐに理解できます。
定数の再代入
Rubyでは定数に再代入しようとすると警告が出ますが、実際には再代入できてしまいます。これはRubyの特徴的な仕様です。
VERSION = '1.0'
puts VERSION
VERSION = '2.0' # 警告: already initialized constant VERSION
puts VERSION1.0
2.0他の言語(JavaやC++など)では定数の再代入はエラーになりますが、Rubyでは警告(warning)が表示されるだけで実行は続行されます。しかし、定数を再代入するのは良いプログラミング習慣ではありません。定数は「変更しない」という約束事として扱いましょう。
実践的な使い方
設定値を定数で管理
アプリケーションの設定値を定数として定義しておくと、変更箇所が1か所で済み、メンテナンスが容易になります。
# アプリケーション設定
DB_HOST = 'localhost'
DB_PORT = 5432
MAX_CONNECTIONS = 10
puts "データベース接続先: #{DB_HOST}:#{DB_PORT}"
puts "最大接続数: #{MAX_CONNECTIONS}"データベース接続先: localhost:5432
最大接続数: 10配列やハッシュの定数
定数には配列やハッシュも代入できます。ただし、定数の中身(要素)は変更できてしまうため注意が必要です。freezeメソッドを使うと完全に変更不可にできます。
# 配列の定数
COLORS = ['赤', '青', '緑'].freeze
puts COLORS.inspect
# ハッシュの定数
STATUS = {
active: '有効',
inactive: '無効',
pending: '保留'
}.freeze
puts STATUS[:active]
puts STATUS[:pending]["赤", "青", "緑"]
有効
保留freezeを付けることで、定数の中身を変更しようとした場合にエラーが発生するようになります。定数として使う配列やハッシュにはfreezeを付けるのがベストプラクティスです。
プログラムの実行中に値が変わらないものは定数、変わるものは変数を使いましょう。税率、最大値、アプリ名などの設定値は定数で管理すると、コードの意図が明確になり保守性が向上します。
配列やハッシュを定数に代入しただけでは、中身の変更は防げません。COLORS = ['赤', '青'].freezeのようにfreezeを付けて、完全に変更不可にしましょう。
まとめ
- 定数は大文字で始まる名前で定義する(慣例はSCREAMING_SNAKE_CASE)
- Rubyでは定数に再代入すると警告は出るがエラーにはならない
- 変更しない値(設定値など)は定数で管理するとコードが明確になる
- 配列やハッシュの定数には
freezeを付けて変更不可にする - 定数はプログラムの設定や固定値の管理に積極的に活用する