Railsの予約語はこんなにたくさん

今日はカラム名に(つまりモデルのattributeに)使ってはいけない単語を使ってしまい、時間をロスしてしまったのでメモしておきます。

一般にプログラミング言語には識別子(つまり変数などの名前)として使ってはいけない単語、”予約語”がありますね。英語では単にkeywordと言いますが。Ruby自体の予約語ももちろんありますが、Railsを使う場合にはRails予約語*1も意識する必要があるわけです。

調べてみたら本家のWikiReservedWords in Ruby on Railsというページがありました。また、このページを元に完全な?予約語リストを作ったエントリもありました。

見てみると、つい使ってしまいそうな単語がちらほらありますね。例えば「Task」とかいうモデルはいかにもありそう。テーブルのカラムに使えないのは「connection」「format」「key」「session」「template」など。SQL予約語も考えると「catalog」とか「group」も使えなくなるのか…。

これら予約語との衝突を避ける方法として挙げられているのが、適当なprefixを付ける方法です。たとえばプロジェクトの頭文字をつけるとか。まあ、無難ですね。

*1:構文解析エンジンにひっかかるわけではないので、そういう意味での(狭義の)「予約語」ではないが、”フレームワークの作り上使えない”ということで広義の予約語と言って問題ないと思う