Memo/Ruby

https://dexlab.net:443/pukiwiki/index.php?Memo/Ruby
 


Ruby

  • オブジェクト指向スクリプト言語 Ruby
  • Ruby - Wikipedia
    • Ruby(ルビー)は、まつもとゆきひろ(通称Matz)により開発されたオブジェクト指向スクリプト言語であり、従来Perlなどのスクリプト言語が用いられてきた領域でのオブジェクト指向プログラミングを実現する。Rubyは当初1993年2月24日に生まれ、1995年12月にfj上で発表された。名称のRubyは、プログラミング言語Perlが6月の誕生石であるPearl(真珠)と同じ発音をすることから、まつもとの同僚の誕生石(7月)のルビーを取って名付けられた。

rbenv でrubyのバージョン切り替え

  • rvmはアンインストールしておく
  • gemも消えるので注意
  • MacOSX: (Lionのrubyは1.8.7。 2.0.0を入れる場合)
    brew update
    brew install rbenv ruby-build
    
    rbenv install -l
    rbenv install 2.0.0-p645
    
    # インストールされているバージョンの確認
    rbenv versions
    * system (set by /Users/user01/.rbenv/version)
      2.0.0-p645
    
    # ユーザのデフォルトrubyバージョンを切り替え
    rbenv global 2.0.0-p645
    
    # カレントディレクトリのバージョンを切り替える場合
    rbenv local 2.0.0-p645
    
    # パスを追加
    echo 'eval "$(rbenv init -)"' >> ~/.profile
    source ~/.profile
    • rubyのアンインストール
      rbenv uninstall 2.1.2
    • rbenvのアンインストール
      brew uninstall rbenv
      rm -rf ~/.rbenv
  • bundlerのインストール(rbenv exec ... でrbenvのRubyを明示的に指定する)
    rbenv exec gem install bundler

rvmを読み込まないようにする

/etc/profile.d/rvm.sh がログインする度に読み込まれるが、rpmで入れていたバージョンを常に使いたい場合に無効にできる


rubyバージョンをシステムバージョンに戻す

rvm use system

gemファイルの依存性を表示

gem dependency aws-sdk                                                                  
Gem aws-sdk-1.7.1
  httparty (~> 0.7)
  json (~> 1.4)
  nokogiri (>= 1.4.4)
  uuidtools (~> 2.1)

デバッグ


スタックトレースの取得

  • caller.join()で呼び出し元を取得できる
    vi test.rb
    ----
    def test
            STDERR.puts caller.join("\n")
    end
    
    test()
    ----
    
    # 実行
    ruby test.rb 
    test.rb:5:in `<main>'

irb(interactive ruby)

library irb

irb は Interactive Ruby の略です。 irb を使うと、Ruby の式を標準入力から簡単に入力・実行することができます。

  • 環境
    • CentOS6.3 x86_64
    • rvm 1.16.6
    • ruby 1.9.2p290
  • 設定
    rvmsudo gem install rubygems what_methods wirble
    
    vi ~/.irbrc
    ----
    require 'rubygems'
    require 'pp'
    require 'irb/completion' # TABで入力補完
    require 'what_methods' # メソッドが分からないときに .what? で教えてくれる
    require 'wirble' # シンタックスハイライト、TABによる入力補完
    
    IRB.conf[:AUTO_INDENT] = true
    IRB.conf[:EVAL_HISTORY] = 100 # 実行結果の履歴 __[n]
    IRB.conf[:SAVE_HISTORY] = 1000 # 上下キーでヒストリーを呼び出し
    IRB.conf[:HISTORY_FILE] = "#{ENV['HOME']}/.irb_history"
    
    # start wirble (with color)
    Wirble.init
    Wirble.colorize
    ----
  • 実行
    irb
    
    # 時間を調べる
    1.9.2-p290 :001 > Time.now
     => 2012-10-05 12:12:24 0900
    
    # "hoge"文字列の長さで 4 を返すメソッドを知りたい
    1.9.2-p290 :001 > "hoge".what? 4
    "hoge".length == 4
    "hoge".size == 4
    "hoge".bytesize == 4
     => [:length, :size, :bytesize]
    
    # 3.14 の小数点切り捨て 4 を返すメソッドを知りたい
    1.9.2-p290 :015 > 3.14.what? 4                                                                                                   
    3.14.ceil == 4
     => [:ceil] 
    
    # 実行結果を __[n] でヒストリーから呼び出せる
    1.9.2-p290 :001 > 1+2
     => 3 
    1.9.2-p290 :002 > "var" + "foo"
     => "varfoo" 
    1.9.2-p290 :003 > __[1]
     => 3 
    1.9.2-p290 :004 > __[2]
     => "varfoo"
    
    # 終了
    1.9.2-p290 :001 > quit

RVMのアンインストール

rvm seppuku
# globalに入っている場合はsudoを付ける
sudo rvm seppuku
sudo rm /etc/profile.d/rvm.sh
# ~/.rvm , ~/.bashrc の中, ~/.bash_profile の中が消えているか確認

RVM(Ruby Version Manager) で複数バージョンのRubyを共存

  • RVM unix環境で複数のRubyバージョンをインストール、共存させるツール
    • ユーザ毎に異なるruby, rails等を指定できる
  • rvmのインストール
    sudo yum -y install bash awk sed grep which ls cp tar curl gunzip bunzip2 git subversion
    
    # シングルユーザにインストールする場合: ~/.rvm/
    curl -L https://get.rvm.io | bash -s stable
    source ~/.bash_profile
    
    # マルチユーザにインストールする場合: /usr/local/rvm/
    sudo curl -L https://get.rvm.io | bash -s stable
    source /etc/profile.d/rvm.sh
    
    # 必要パッケージ確認
    rvm requirements
    
    # rvmでインストールできるパッケージ一覧
    rvm list known
    
    # MRI Rubies
    [ruby-]1.8.6[-p420]
    [ruby-]1.8.7[-p370]
    [ruby-]1.9.1[-p431]
    [ruby-]1.9.2-p180
    [ruby-]1.9.2-p290
    [ruby-]1.9.2-p318
    [ruby-]1.9.2[-p320]
    [ruby-]1.9.2-head
    [ruby-]1.9.3-preview1
    [ruby-]1.9.3-rc1
    [ruby-]1.9.3-p0
    [ruby-]1.9.3-p125
    [ruby-]1.9.3[-p194]
    [ruby-]1.9.3-head
    ruby-head
    ...
  • rubyのインストール
    # herokuに合わせてrubyをインストール(1.9.3だとtapsでエラー db:pushが失敗する)
    yes | rvm install ruby-1.9.2-p290
    
    # デフォルトを1.9.2に指定。ユーザ毎に実行する必要がある
    rvm use ruby-1.9.2-p290 --default
    
    # 1.9.3の場合は、libyaml-develが必要
    yum -y --enablerepo=epel install libyaml-devel
    
    # 確認
    ruby -v
    ruby 1.9.2p290 (2011-07-09 revision 32553) [x86_64-linux]
    
    which ruby
    /usr/local/rvm/rubies/ruby-1.9.2-p290/bin/ruby
  • railsのインストール
    gem -v 1.8.24
    
    gem list
    *** LOCAL GEMS ***
    
    bundler (1.2.1)
    rake (0.9.2.2)
    rubygems-bundler (1.1.0)
    rvm (1.11.3.5)
    
    # railsインストール
    gem install rails
    
    # バージョン確認
    rails -v
    Rails 3.2.8
  • rubyを切り替えた場合、gemも切り替わっているため、別途インストールが必要
  • sudoの代わりにrvmsudoがある
    rvmsudo gem install rails

CentOS5.8上にRuby1.9, RubyGems1.8.24, Rails 3.2.2をインストール

  • CentOS5.8 x86_64
    • yumでインストールしたruby1.8.5, rubygems1.3.2ではrailsインストール時に止まってしまった(すごく遅い?)
  1. root, /tmpで作業
    sudo su -
    cd /tmp
  2. checkinstall, yamlのインストール。CentOS5.8ではrpmforgeからcheckinstallのインストールは出来なくなった
    yum --enablerepo=epel install yaml libyaml-devel
    wget http://futuremix.org/downloads/checkinstall-1.6.1-1.src.rpm
    wget http://futuremix.org/downloads/checkinstall-1.6.1-1.x86_64.rpm
    rpm -ivh checkinstall-1.6.1-1.x86_64.rpm
  • RubyのRPM作成とインストール。ruby-1.9.3-p194インストールすると、rubygems1.8.23も含まれていた
    cd /tmp/
    wget ftp://ftp.ruby-lang.org/pub/ruby/1.9/ruby-1.9.3-p194.tar.gz
    tar xvfz ruby-1.9.3-p194.tar.gz
    cd ruby-1.9.3-p194
    ./configure
    make
    
    #Rubyのパッケージ化
    checkinstall --fstrans=no
    
    Should I create a default set of package docs?  [y]: y
    
    Slackware [S], RPM [R] or Debian [D]? R
    
    >> ruby-1.9.3-p194
    
    #インストール
    rpm -Uvh --nomd5 /usr/src/redhat/RPMS/x86_64/ruby-1.9.3-p194-1.x86_64.rpm
    
    ruby -v
    ruby 1.9.3p194 (2012-04-20 revision 35410) [x86_64-linux]
  • gemを最新に更新
    gem update --system
    
    gem -v                                                                              
    1.8.24
  • ドキュメントをインストール
    gem install rdoc rdoc-data
    rdoc-data --install
    mkdir -p /usr/local/lib/ruby/gems/1.9.1/gems/bigdecimal-1.1.0
    mkdir -p /usr/local/lib/ruby/gems/1.9.1/gems/io-console-0.3
    mkdir -p /usr/local/lib/ruby/gems/1.9.1/gems/json-1.5.4
    mkdir -p /usr/local/lib/ruby/gems/1.9.1/gems/minitest-2.5.1
    gem rdoc --all --overwrite
  • Railsのインストール
    gem install rails
    
    rails -v
    Rails 3.2.2

Logger

  • サンプル
    require 'logger'
    
    logger = Logger.new(STDERR)
    logger.level = Logger::WARN
    logger.progname = File.expand_path(__FILE__)
    logger.datetime_format = "%Y-%m-%d %H:%M:%S"

fog クラウドサービスライブラリ

  • install
    sudo yum install ruby rubygems libxml2-devel libxslt-devel -y
    sudo gem install fog yajl-ruby

[WARNING] MultiJson? is using the default adapter

  • CentOS6.3 x86_64, ruby-1.8.7, rubygems-1.3.7 環境で以下のワーニング。パフォーマンス向上のために別のJSONライブラリをインストール推奨のようだ
    [WARNING] MultiJson is using the default adapter (ok_json). We recommend loading a different JSON library to improve performance.
    nil
  • yajl-rubyをインストール
    sudo gem install yajl-ruby

RubyGems?

  • wikipedia - RubyGems

    RubyGems?は、Ruby言語用のパッケージ管理システムであり、Rubyのプログラムと("gem" と呼ばれる)ライブラリの配布用標準フォーマットを提供している。gemを容易に管理でき、gemを配布するサーバの機能も持つ。Rubyバージョン1.9以降では標準ライブラリの一部となっている。

  • インストール
    • Ruby 1.9以上なら標準で付属
  • すべてアンインストール
    gem uninstall $(gem list --no-versions)

セキュリティ

相対パスでも絶対パスでもrequire

  • ファイル構成例
    bin/example.rb
    lib/hoge.rb
  • bin/example.rb
    require File::expand_path('../lib/hoge', File.dirname(__FILE__))

関数名の取得

	# 呼び出し元関数情報を取得
	# 
	# @note
	# - p parse_caller(caller.first)
	def parse_caller(at)
	  if /^(.+?):(\d+)(?::in `(.*)')?/ =~ at
	    file = $1
	    line = $2.to_i
	    method = $3
	    return [file, line, method]
	  end
	end

	# 実行中関数名を取得
	def function_name
		return caller.first.scan(/`(.*)'/).to_s
	end

定数

__LINE__
__FILE__

便利関数

  • p print_r(変数)みたいなもの
    print x.inspect() と同等

標準入出力

STDIN
STDOUT
STDERR
$stdin
$stdout = $defout
$stderr = $deferr
  • 出力
    STDOUT.print x
    STDERR.print x
    $stdout.print x
    $stderr.print x
  • 標準エラーを標準出力へ変更
    $stderr = $stdout

vim設定

  • rubyの慣例に従い、2タブにする
    mkdir -p ~/.vim/{ftdetect,syntax}
    
    cat >> ~/.vim/ftdetect/ruby.vim << 'EOS'
    " detect ruby filetype
    au BufRead,BufNewFile *.rb              set filetype=ruby
    EOS
    
    cat >> ~/.vim/syntax/ruby.vim << 'EOS'
    set expandtab
    set tabstop=2 shiftwidth=2 softtabstop=2
    set autoindent
    EOS

チートシート


添付ファイル: filerackspace-dns.rb 519件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2018-09-15 (土) 07:31:38 (35d)