====== Ruby - 基礎 ======
ここでの解説はRuby 2.00を前提にしています。
===== インストール(MacOS 10.7,10.8,10.9) =====
$ ./configure --prefix=/usr/local --with-opt-dir=/usr/local --enable-shared --enable-pthread
$ make
$ sudo make install
Mac OSの一部ではrubyのインストールは正常終了してもgemを使う時に以下のようなエラーが発生する。
$ gem install json
ERROR: Loading command: install (LoadError)
cannot load such file -- openssl
ERROR: While executing gem ... (NoMethodError)
undefined method `invoke_with_build_args' for nil:NilClass
これはOpenSSLのバージョンが古いことに起因しているらしいので、まず最新のOpenSSLをインストールする。
* [[https://www.openssl.org/source/openssl-1.0.2d.tar.gz|openssl-1.0.2d.tar.gz]]
$ ./configure darwin64-x86_64-cc --prefix=/usr/local --openssldir=/usr/local/openssl
$ make
$ sudo make install
その後、--with-opt-dir=/usr/localオプションを使用してRubyを再度インストール。
$ ./configure --prefix=/usr/local --with-opt-dir=/usr/local --enable-shared --enable-pthread
$ make
$ sudo make install
===== インストール(MacOS 10.5,10.6) =====
$ ./configure --prefix=/usr/local --enable-shared --enable-pthread
$ make
$ sudo make install
gem実行時に以下のエラーが出た場合は、LibYAMLをインストールして環境変数を設定した後、Rubyを再度インストールすることで解決する。
It seems your ruby installation is missing psych (for YAML output).
To eliminate this warning, please install libyaml and reinstall your ruby.
* **[[http://pyyaml.org/wiki/LibYAML|LibYAML]]**
$ ./configure
$ make
$ sudo make install
環境変数に以下を加える。
export DYLD_LIBRARY_PATH=/usr/local/lib:$DYLD_LIBRARY_PATH
===== インストール(Windows 7 64bit) =====
以下よりRuby 2.0.0-p0 (x64)とDevKit-mingw64-64-4.7.2-20130224-1432-sfx.exeをダウンロード。
* **[[http://rubyinstaller.org/downloads/|RubyInstaller]]**
それぞれRubyはC:/usr、DevKitはC:/DevKitにインストール。
Windowsの環境変数「PATH」に以下を追加。
C:\usr\bin;C:\usr\lib;C:\usr\include;C:\DevKit\bin;C:\DevKit\lib;C:\DevKit\include;C:\DevKit\mingw\bin;C:\DevKit\mingw\lib;C:\DevKit\mingw\include
DevKitの設定
$ cd C:/DevKit
$ ruby dk.rb init
C:/DevKit/config.ymlができるので以下のように編集。
# This configuration file contains the absolute path locations of all
# installed Rubies to be enhanced to work with the DevKit. This config
# file is generated by the 'ruby dk.rb init' step and may be modified
# before running the 'ruby dk.rb install' step. To include any installed
# Rubies that were not automagically discovered, simply add a line below
# the triple hyphens with the absolute path to the Ruby root directory.
#
# Example:
#
# ---
# - C:/ruby19trunk
# - C:/ruby192dev
#
---
- C:/usr
以下コマンドを実行して反映。
$ ruby dk.rb install
Gemでriとrdocをインストールしないように設定。\\
C:/Users//.gemrc を作成して以下を追加。
gem: --no-ri --no-rdoc
===== ソースファイルの文字コードを指定する =====
#!/usr/bin/ruby
# coding: utf-8
===== ファイル/ディレクトリ操作 =====
==== ファイル入出力時の文字コードを指定する ====
#!/usr/bin/ruby
# coding: utf-8
# 入力
file = File.open("Shift_JIS.txt","r:sjis")
# 処理
file.close
# 出力
file = File.open("Shift_JIS.txt","w:sjis")
# 処理
file.close
==== 多階層ディレクトリの作成方法 ====
#!/usr/bin/ruby
# coding: utf-8
path = "/AAA/BBB/CCC/DDD/EEE"
FileUtils.mkpath(path)
=== オプション一覧 ===
^オプション^効果^
|:mode |パーミッションを8進数で指定(Example: 0777)|
|:noop |trueを指定すると実際の処理は行わない|
|:verbose|trueを指定すると標準出力に詳細を出力|
=== オプション使用例 ===
# ディレクトリ作成時のパーミッションを指定通りにするため予めumaskに0を設定
File.umask(0)
FileUtils.mkpath(path,{:mode => 0777, :noop => true, :verbose => true})
===== トランスコーディング =====
#!/usr/bin/ruby
# coding: utf-8
# UTF-8文字列
strings_utf8 = "あいうえお"
puts strings_utf8.encoding # => #
# SJIS変換
strings_sjis = strings_utf8.encode("sjis")
puts strings_sjis.encoding # => #
但し、変換後の文字コードでは使用できない文字が含まれていると、エラーになる。\\
__以下のように不正文字を置換文字列で置換えることで対処できる。__
#!/usr/bin/ruby
# coding: utf-8
# UTF-8文字列
strings_utf8 = "SJISでは使用できない文字 => ©"
puts strings_utf8.encoding # => #
# SJIS変換
strings_sjis = strings_utf8.encode("sjis", undef: :replace, replace: "?>")
puts strings_sjis.encoding # => #
===== オブジェクト指向 =====
==== アクセサメソッド ====
# ゲッターメソッドを生成
attr_reader :name
# セッターメソッドを生成
attr_writer :name
# ゲッターメソッド/セッターメソッドを生成
attr_accessor :name
# ------------------------------------------------------
class Test
# ------------------------------------------------------
attr_reader :name1
attr_writer :name2
attr_accessor :name3
# --------------------------------------------------
def initialize(name1,name2,name3)
# --------------------------------------------------
@name1 = name1
@name2 = name2
@name3 = name3
end
end
test = Test.new("MyName1","MyName2","MyName3")
test.name1 = "NewName1" # ERROR: Read Only
puts test.name1 # -> MyName1
test.name2 = "NewName2" # OK
puts test.name2 # ERROR: Write Only
test.name3 = "NewName3" # OK
puts test.name3 # -> NewName3