Skip to content

Instantly share code, notes, and snippets.

@i09158knct
Last active October 4, 2015 07:47
Show Gist options
  • Save i09158knct/2603196 to your computer and use it in GitHub Desktop.
Save i09158knct/2603196 to your computer and use it in GitHub Desktop.
Rubyプログラムの実行について (文字コード関連は1.9時代の話。2.0からはデフォルトで文字コードはUTF-8であると見なされるようになったので、マジックコメントなどを書かなくても問題ない)

###Rubyプログラムの実行について

Rubyプログラムの実行は簡単。 適当にrbファイルを作って

puts "hello, world"

とでも書き込んで保存してやり、

$ ruby aaa.rb

とシェルに打ちこめば実行される。 ( $は端末からの入力を表す。以下同様 )

ただし、Ruby 1.9 からは日本語などのマルチバイト文字を使っている場合エラーが出る。

つまり

puts "はろーわーるど"

などと書かれたスクリプトファイルを実行しようとすると

$ ruby aaa.rb 
aaa.rb:1: invalid multibyte char (US-ASCII)

のようにエラーが出て実行できない。 これを解決するためには、そのスクリプトの先頭行にマジックコメントでファイルの文字コードを指定する必要がある。

# coding: utf-8
puts "はろーわーるど"

こんな感じ。

ちなみにこの文字コード指定は、「coding: 文字コード」という文字列さえ入っていればどうでもいいらしく、たとえばemacsの自動保存のように

# -*- coding: utf-8 -*-
puts "はろーわーるど"

のような形式であっても問題なく動く。

Rubyの文字列のエンコードのことについてはこの記事が分かりやすい。

簡単に言うと、ASCII文字以外の文字をプログラム中に使っていると、Rubyがその文字の文字コードを正しく認識できないので、先頭行で文字コードを指定しておかなければならない、ということ。


####余談:もうひとつの実行方法

Rubyも他のスクリプト言語と同じように、ファイルの先頭の#!(シバン)に実行環境のパスを書いておくことでもそのファイルを実行できるようになる。

実行環境のパスは、

$ which ruby

とシェルに入力することで分かる。whichは、引数で指定されたコマンドが置いてある場所を出力するUNIXコマンドである。

出力は次のようになる。

/Users/user/.rvm/rubies/ruby-1.9.2-p290/bin/ruby

このパスをrbファイルの先頭にシバンを付けて書いておいてやれば、rubyコマンドを使わずにそのrbファイルを実行できるようになる。

#! /Users/user/.rvm/rubies/ruby-1.9.2-p290/bin/ruby
# -*- coding: utf-8 -*-
puts "はろーわーるど"

ただし、ファイルに実行権限が与えられていない場合はまだ動かない。

$ ./aaa.rb    
zsh: permission denied: ./aaa.rb

chmodコマンドで実行権限を付加する必要がある。

$ chmod +x aaa.rb

これでちゃんと動く。

$ ./aaa.rb 
はろーわーるど
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment