143
137

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Last updated at Posted at 2012-12-26

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

143
137
2

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
  3. You can use dark theme
What you can do with signing up
143
137

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?