Memo/Ruby

http://dexlab.net/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を入れる場合)
    1. brew update
    2. brew install rbenv ruby-build
    3.  
    4. rbenv install -l
    5. rbenv install 2.0.0-p645
    6.  
    7. # インストールされているバージョンの確認
    8. rbenv versions
    9. * system (set by /Users/user01/.rbenv/version)
    10.   2.0.0-p645
    11.  
    12. # ユーザのデフォルトrubyバージョンを切り替え
    13. rbenv global 2.0.0-p645
    14.  
    15. # カレントディレクトリのバージョンを切り替える場合
    16. rbenv local 2.0.0-p645
    17.  
    18. # パスを追加
    19. echo 'eval "$(rbenv init -)"' >> ~/.profile
    20. source ~/.profile
    • rubyのアンインストール
      1. rbenv uninstall 2.1.2
    • rbenvのアンインストール
      1. brew uninstall rbenv
      2. rm -rf ~/.rbenv
  • bundlerのインストール(rbenv exec ... でrbenvのRubyを明示的に指定する)
    1. rbenv exec gem install bundler

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

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


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

  1. rvm use system

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

  1. gem dependency aws-sdk                                                                  
  2. Gem aws-sdk-1.7.1
  3.   httparty (~> 0.7)
  4.   json (~> 1.4)
  5.   nokogiri (>= 1.4.4)
  6.   uuidtools (~> 2.1)

デバッグ


スタックトレースの取得

  • caller.join()で呼び出し元を取得できる
    1. vi test.rb
    2. ----
    3. def test
    4.         STDERR.puts caller.join("\n")
    5. end
    6.  
    7. test()
    8. ----
    9.  
    10. # 実行
    11. ruby test.rb
    12. 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
  • 設定
    1. rvmsudo gem install rubygems what_methods wirble
    2.  
    3. vi ~/.irbrc
    4. ----
    5. require 'rubygems'
    6. require 'pp'
    7. require 'irb/completion' # TABで入力補完
    8. require 'what_methods' # メソッドが分からないときに .what? で教えてくれる
    9. require 'wirble' # シンタックスハイライト、TABによる入力補完
    10.  
    11. IRB.conf[:AUTO_INDENT] = true
    12. IRB.conf[:EVAL_HISTORY] = 100 # 実行結果の履歴 __[n]
    13. IRB.conf[:SAVE_HISTORY] = 1000 # 上下キーでヒストリーを呼び出し
    14. IRB.conf[:HISTORY_FILE] = "#{ENV['HOME']}/.irb_history"
    15.  
    16. # start wirble (with color)
    17. Wirble.init
    18. Wirble.colorize
    19. ----
  • 実行
    1. irb
    2.  
    3. # 時間を調べる
    4. 1.9.2-p290 :001 > Time.now
    5.  => 2012-10-05 12:12:24 0900
    6.  
    7. # "hoge"文字列の長さで 4 を返すメソッドを知りたい
    8. 1.9.2-p290 :001 > "hoge".what? 4
    9. "hoge".length == 4
    10. "hoge".size == 4
    11. "hoge".bytesize == 4
    12.  => [:length, :size, :bytesize]
    13.  
    14. # 3.14 の小数点切り捨て 4 を返すメソッドを知りたい
    15. 1.9.2-p290 :015 > 3.14.what? 4                                                                                                   
    16. 3.14.ceil == 4
    17.  => [:ceil] 
    18.  
    19. # 実行結果を __[n] でヒストリーから呼び出せる
    20. 1.9.2-p290 :001 > 1+2
    21.  => 3 
    22. 1.9.2-p290 :002 > "var" + "foo"
    23.  => "varfoo" 
    24. 1.9.2-p290 :003 > __[1]
    25.  => 3 
    26. 1.9.2-p290 :004 > __[2]
    27.  => "varfoo"
    28.  
    29. # 終了
    30. 1.9.2-p290 :001 > quit

RVMのアンインストール

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

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

  • RVM unix環境で複数のRubyバージョンをインストール、共存させるツール
    • ユーザ毎に異なるruby, rails等を指定できる
  • rvmのインストール
    1. sudo yum -y install bash awk sed grep which ls cp tar curl gunzip bunzip2 git subversion
    2.  
    3. # シングルユーザにインストールする場合: ~/.rvm/
    4. curl -L https://get.rvm.io | bash -s stable
    5. source ~/.bash_profile
    6.  
    7. # マルチユーザにインストールする場合: /usr/local/rvm/
    8. sudo curl -L https://get.rvm.io | bash -s stable
    9. source /etc/profile.d/rvm.sh
    10.  
    11. # 必要パッケージ確認
    12. rvm requirements
    13.  
    14. # rvmでインストールできるパッケージ一覧
    15. rvm list known
    16.  
    17. # MRI Rubies
    18. [ruby-]1.8.6[-p420]
    19. [ruby-]1.8.7[-p370]
    20. [ruby-]1.9.1[-p431]
    21. [ruby-]1.9.2-p180
    22. [ruby-]1.9.2-p290
    23. [ruby-]1.9.2-p318
    24. [ruby-]1.9.2[-p320]
    25. [ruby-]1.9.2-head
    26. [ruby-]1.9.3-preview1
    27. [ruby-]1.9.3-rc1
    28. [ruby-]1.9.3-p0
    29. [ruby-]1.9.3-p125
    30. [ruby-]1.9.3[-p194]
    31. [ruby-]1.9.3-head
    32. ruby-head
    33. ...
  • rubyのインストール
    1. # herokuに合わせてrubyをインストール(1.9.3だとtapsでエラー db:pushが失敗する)
    2. yes | rvm install ruby-1.9.2-p290
    3.  
    4. # デフォルトを1.9.2に指定。ユーザ毎に実行する必要がある
    5. rvm use ruby-1.9.2-p290 --default
    6.  
    7. # 1.9.3の場合は、libyaml-develが必要
    8. yum -y --enablerepo=epel install libyaml-devel
    9.  
    10. # 確認
    11. ruby -v
    12. ruby 1.9.2p290 (2011-07-09 revision 32553) [x86_64-linux]
    13.  
    14. which ruby
    15. /usr/local/rvm/rubies/ruby-1.9.2-p290/bin/ruby
  • railsのインストール
    1. gem -v 1.8.24
    2.  
    3. gem list
    4. *** LOCAL GEMS ***
    5.  
    6. bundler (1.2.1)
    7. rake (0.9.2.2)
    8. rubygems-bundler (1.1.0)
    9. rvm (1.11.3.5)
    10.  
    11. # railsインストール
    12. gem install rails
    13.  
    14. # バージョン確認
    15. rails -v
    16. Rails 3.2.8
  • rubyを切り替えた場合、gemも切り替わっているため、別途インストールが必要
  • sudoの代わりにrvmsudoがある
    1. 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で作業
    1. sudo su -
    2. cd /tmp
  2. checkinstall, yamlのインストール。CentOS5.8ではrpmforgeからcheckinstallのインストールは出来なくなった
    1. yum --enablerepo=epel install yaml libyaml-devel
    2. wget http://futuremix.org/downloads/checkinstall-1.6.1-1.src.rpm
    3. wget http://futuremix.org/downloads/checkinstall-1.6.1-1.x86_64.rpm
    4. rpm -ivh checkinstall-1.6.1-1.x86_64.rpm
  • RubyのRPM作成とインストール。ruby-1.9.3-p194インストールすると、rubygems1.8.23も含まれていた
    1. cd /tmp/
    2. wget ftp://ftp.ruby-lang.org/pub/ruby/1.9/ruby-1.9.3-p194.tar.gz
    3. tar xvfz ruby-1.9.3-p194.tar.gz
    4. cd ruby-1.9.3-p194
    5. ./configure
    6. make
    7.  
    8. #Rubyのパッケージ化
    9. checkinstall --fstrans=no
    10.  
    11. Should I create a default set of package docs?  [y]: y
    12.  
    13. Slackware [S], RPM [R] or Debian [D]? R
    14.  
    15. >> ruby-1.9.3-p194
    16.  
    17. #インストール
    18. rpm -Uvh --nomd5 /usr/src/redhat/RPMS/x86_64/ruby-1.9.3-p194-1.x86_64.rpm
    19.  
    20. ruby -v
    21. ruby 1.9.3p194 (2012-04-20 revision 35410) [x86_64-linux]
  • gemを最新に更新
    1. gem update --system
    2.  
    3. gem -v                                                                             
    4. 1.8.24
  • ドキュメントをインストール
    1. gem install rdoc rdoc-data
    2. rdoc-data --install
    3. mkdir -p /usr/local/lib/ruby/gems/1.9.1/gems/bigdecimal-1.1.0
    4. mkdir -p /usr/local/lib/ruby/gems/1.9.1/gems/io-console-0.3
    5. mkdir -p /usr/local/lib/ruby/gems/1.9.1/gems/json-1.5.4
    6. mkdir -p /usr/local/lib/ruby/gems/1.9.1/gems/minitest-2.5.1
    7. gem rdoc --all --overwrite
  • Railsのインストール
    1. gem install rails
    2.  
    3. rails -v
    4. Rails 3.2.2

Logger

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

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

  • install
    1. sudo yum install ruby rubygems libxml2-devel libxslt-devel -y
    2. 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ライブラリをインストール推奨のようだ
    1. [WARNING] MultiJson is using the default adapter (ok_json). We recommend loading a different JSON library to improve performance.
    2. nil
  • yajl-rubyをインストール
    1. sudo gem install yajl-ruby

RubyGems?

  • wikipedia - RubyGems

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

  • インストール
    • Ruby 1.9以上なら標準で付属
  • すべてアンインストール
    1. 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__))

関数名の取得

  1. # 呼び出し元関数情報を取得
  2. #
  3. # @note
  4. # - p parse_caller(caller.first)
  5. def parse_caller(at)
  6.  if /^(.+?):(\d+)(?::in `(.*)')?/ =~ at
  7.    file = $1
  8.    line = $2.to_i
  9.    method = $3
  10.    return [file, line, method]
  11.  end
  12. end
  13.  
  14. # 実行中関数名を取得
  15. def function_name
  16. return caller.first.scan(/`(.*)'/).to_s
  17. end

定数

__LINE__
__FILE__

便利関数

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

標準入出力

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

vim設定

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

チートシート


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

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2018-08-17 (金) 14:26:05 (4d)