Ruby 2.0以降ではデフォルトのエンコーディングがutf-8になったため、マジックコメントが不要になりました。(utf-8でスクリプトを書くのであれば)
本記事はRuby 1.9以前の場合、と考えてください。
みなさんご存知だと思いますが、日本語を含むRubyスクリプトの場合、ファイルの先頭にファイルのエンコーディングを表すマジックコメントがないとエラーになります。
require 'rspec'
describe 'Japanese' do
subject {'日本語'}
it {should == '日本語'}
end
# 実行結果(エラーになる)
$ rspec encoding_spec.rb
/Users/mypc/.rvm/gems/ruby-1.9.3-p194/gems/rspec-core-2.11.1/lib/rspec/core/configuration.rb:780:in `load': /Users/mypc/dev/sandbox/encoding_spec.rb:4: invalid multibyte char (US-ASCII) (SyntaxError)
/Users/mypc/dev/sandbox/encoding_spec.rb:4: invalid multibyte char (US-ASCII)
/Users/mypc/dev/sandbox/encoding_spec.rb:4: syntax error, unexpected $end, expecting '}'
subject(:japanese) {'日本語'}
^
from /Users/mypc/.rvm/gems/ruby-1.9.3-p194/gems/rspec-core-2.11.1/lib/rspec/core/configuration.rb:780:in `block in load_spec_files'
from /Users/mypc/.rvm/gems/ruby-1.9.3-p194/gems/rspec-core-2.11.1/lib/rspec/core/configuration.rb:780:in `map'
from /Users/mypc/.rvm/gems/ruby-1.9.3-p194/gems/rspec-core-2.11.1/lib/rspec/core/configuration.rb:780:in `load_spec_files'
from /Users/mypc/.rvm/gems/ruby-1.9.3-p194/gems/rspec-core-2.11.1/lib/rspec/core/command_line.rb:22:in `run'
from /Users/mypc/.rvm/gems/ruby-1.9.3-p194/gems/rspec-core-2.11.1/lib/rspec/core/runner.rb:69:in `run'
from /Users/mypc/.rvm/gems/ruby-1.9.3-p194/gems/rspec-core-2.11.1/lib/rspec/core/runner.rb:8:in `block in autorun'
###マジックコメントは"# -*- encoding: utf-8 -*-"だけじゃない!
ネットの情報を見ていると、エンコーディングを指定するマジックコメントは、# -*- encoding: utf-8 -*-
のように書かれていることが多いので、これを使っている人も多いと思います。
が!この書式が必須というわけではありません。
実は # coding: utf-8
だけでもOKなんです。
# coding: utf-8
require 'rspec'
describe 'Japanese' do
subject {'日本語'}
it {should == '日本語'}
end
# 実行結果(ちゃんと動く)
$ rspec encoding_spec.rb
.
Finished in 0.00042 seconds
1 example, 0 failures
ちなみに、coding
の前には任意のプレフィックスを付けられるので、# encoding: utf-8
と書いても正しく動きます。
また、大文字小文字を区別しないので、以下のようなマジックコメントでも動作します。
# HOGEHOGECODING: UTF-8
require 'rspec'
describe 'Japanese' do
subject {'日本語'}
it {should == '日本語'}
end
###おまけ
ネットのサンプルコードとかでよく見かける -*-
は、Emacsで使われる「エンコーディング指定プラグラマ」というものみたいです。
チームで開発するなら、Emacs固有のおまじないを埋め込むのはどうなんですかね〜??・・・なんて発言すると、宗教戦争が起きそうなので聞かなかったことにしてください。
というわけで、Rubyのエンコーディング指定に関するちょっとしたトリビア(?)でした!
###参考文献
プログラミング言語Ruby
http://www.amazon.co.jp/dp/4873113946
Emacsのエンコーディング指定プラグマを挿入する
http://d.hatena.ne.jp/syohex/20091002/1254496402