search
LoginSignup
140
Help us understand the problem. What are the problem?

More than 5 years have passed since last update.

posted at

updated at

Organization

衝撃の事実!? "# -*- encoding: utf-8 -*-"じゃなくてもいいんです!

Ruby 2.0以降ではデフォルトのエンコーディングがutf-8になったため、マジックコメントが不要になりました。(utf-8でスクリプトを書くのであれば)

本記事はRuby 1.9以前の場合、と考えてください。

参考:Ruby 2.0.0-p0 リリース


みなさんご存知だと思いますが、日本語を含むRubyスクリプトの場合、ファイルの先頭にファイルのエンコーディングを表すマジックコメントがないとエラーになります。

encoding_spec.rb
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なんです。

encoding_spec.rb
# 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と書いても正しく動きます。
また、大文字小文字を区別しないので、以下のようなマジックコメントでも動作します。

encoding_spec.rb
# 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

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
140
Help us understand the problem. What are the problem?