Rubyの呼び出し制限privateとprotectedの違い

Rubyのリファレンスマニュアル(バージョンは2.1.0)によれば、Rubyの呼び出し制限(英語ではAccess Control)には、publicとprivate、protectedの3通りあり、その内容は次のとおり。

  • publicに設定されたメソッドは制限なしに呼び出せる。
  • privateに設定されたメソッドは関数形式でしか呼び出せない。
  • protectedに設定されたメソッドは、そのメソッドを持つオブジェクトがselfであるコンテキスト(メソッド定義式やinstance_eval)でのみ呼び出せる。

publicについては問題ないとしても、privateとprotectedの違いは、上記の説明だけではなかなか分かり難い。そこで、テスト用のプログラムを作り、具体的な動作を確認しながら両者の違いを検証してみた。

呼び出し制限privateの本質

先ずは、privateに設定されたメソッドについて考えるため、次のようなクラスを2つ定義する。ファイル名はsamples_private.rbとし、これをrubyのパスの通っている場所に保存する。

class Sample1

  def call_sample1
    sample1    # 関数形式での呼び出し
  end

  def call_sample1_with_receiver
    self.sample1    # レシーバー(self)形式での呼び出し
  end

  private
  
    def sample1
       p "只今privateメソッドテスト中!"
    end

end

class Sample2

  def call_sample1_from_sample2
    s1 = Sample1.new
    s1.call_sample1    # レシーバー形式での呼び出し
  end

  def call_sample1_from_sample2_without_receiver
    s1 = Sample1.new
    call_sample1    # 関数形式での呼び出し
  end

end

このファイル内のコメントにあるように、関数形式とは、レシーバーを指定しない形式のことをいう。

本来Rubyでは、レシーバーなしでのメソッド呼び出しはできない。このため、自クラス及びサブクラス内のメソッドの呼び出すためには、selfというレシーバーを用いなければならないのだが、例外的にselfレシーバーだけは省略できる。この省略形を関数形式と呼んでいる。

そこで、Sample1クラスでオブジェクトを作り、関数形式とレシーバー形式で、privateに設定されたsample1メソッドを呼び出すプログラムを作って検証してみた。
Continue Reading…

RVMによるRuby on Railsのアップグレード手順

Rubyのバージョン2.0.0p353、Rainlsの4.0.1がそれぞれリリースされたので、バージョンアップしてみた。なお、今回のリリースはRuby、Railsともにバグフィックスが中心。

RVMのアップグレードから始める

先ず初めに、次のコマンドで、RVM(Ruby Version Manager)をバージョンアップしておく。

$ rvm get header
$ rvm get latest

続いて、最新版のRubyをインストール

$ rvm install 2.0.0

次のコマンドで、最新バージョンがインストールされたことを確認。

$ rvm list

rvm_ruby200p353_01

最新バージョンの2.0.0-p353がインストールできていることが確認できたので、次のコマンドで、最新版をデフォルト(単にバージョンを切り替えるだけなら–defaultオプションは不要)にする。

$ rvm use 2.0.0-p353 --default

この状態で、Railsの最新版をインストールすれば作業は完了。オプションで、rdocドキュメントとriドキュメントをインストールしないように設定している。

$ gem install rails -v 4.0.1 --no-rdoc --no-ri

前世代の安定版ruby 1.9.3-p484も同時にリリースされているが、基本的なアップグレードの手順は上記と同じ。

Ruby on Rails 4.0正式リリースとBootstrapの正しい設定法

過去記事「Ruby on Rails 4.0RC1とBootstrapの設定」は、リリース候補1でBootstrapが使えなくなったために講じた応急処置的な方法だったが、その後、Rails 4.0が正式リリースされ、以前の設定法(本当はこちらが正統派)でBootstrapが簡単にセットアップできるようになった。以下、その設定法を手短にまとめてみた。

Rails 4.0のセットアップ

先ずは、RVMやrbenv等のRubyバージョン管理ツールで、最新バージョンが利用できる状態にしておく。現時点でのRubyの最新バージョンは、2.0.0.-p247。

準備が整ったら、Rails4.0をセットアップ。お試し用として新規プロジェクトtestを作る。

$ gem install rails --version 4.0.0 --no-ri --no-rdoc
$ rails new test

続いて、Gemfileをテキストエディタで開き、次の一行をアンコメント(行頭の#マークを外す)。

# gem 'therubyracer', platforms: :ruby

ここで、端末からbundle installコマンドを実行した後、rails serverコマンドを実行。

Rails40setup

http://localhost:3000にアクセスして、About your application’s environmentリンクをクリックして、Railsが正しくセットアップされているかどうかを確認する。
Continue Reading…

Debian 7.0 KDEとKubuntuにRVMをセットアップしてみた

Debian GNU/Linux 7.0 KDEとKubuntu(デスクトップ環境にKDEを採用したUbuntu派生ディストロ)にRVM(Ruby Version Manager)をセットアップしてみた。手順そのものは、過去の記事「RVMで作るRuby 2.0とRails 4.0ベータ1のお試し環境」とほとんど同じだが(現在のRubyの最新バージョンは2.0.0-p247で、Ruby on Railsもバージョン4.0.0が正式リリースされた)、デスクトップ環境がKDEということで、端末の設定方法が多少異なる。

Gnomeターミナルの場合(Xfceターミナルでも同じ)は、プロファイル編集画面で、「ログインシェルとしてコマンドを実行する」にチェックを入れるだけだったが、KDEではKonsoleがデフォルト端末なので、メニューから設定→現在のプロファイルを選択して、コマンド欄を/bin/bashから/bin/bash –loginに書き換える。

Konsole_Setting

この記事の内容は次の記事を参考にさせてもらった。

Ruby on Rails 4.0RC2のお試し環境(RVM編)

Rubyの2.0.0-p195のリリースに続いて、Rails 4.0もリリース候補2も出ているようなので、いつものごとくお試し環境を作ってみた。今回はバージョン管理ツールにRVMを使い、インストール作業はUbuntu13.04ローカル環境で行った。

先ずは、次のコマンドでRVMをアップデートしておく。

$ rvm get latest

まだ、RVMを導入していない場合は次のコマンドを実行。

$ sudo apt-get install curl
$ curl -L https://get.rvm.io | bash -s stable --ruby

続いて、Rubyの最新版2.0.0-p195をインストール。

$ rvm install 2.0.0-p195

“ruby -v”コマンドでRubyのバージョンを確認し、最新版に切り替わっていなければ、Rubyの最新のバージョンを切り替えておく。

$ rvm use 2.0.0-p195

Continue Reading…

Ruby on Rails 4.0RC1とBootstrapの設定

Ruby on Rails(以下Rails)4.0のリリース候補1がリリースされたので、Ubuntu13.04ローカル環境にセットアップしてみた。
Rails4.0を使うには、Rubyバージョン1.9.3以上(推奨のバージョンは2.0以上)が必要。例えば、複数バージョン管理ツールにrbenvを使っている場合は、端末から次のコマンドを打ち込む。使用するrubyのバージョンは最新版の2.0.0.-p0とする。

$ rbenv global 2.0.0-p0

続いて、次のコマンドでRails4.0RC1をインストール。

$ gem install rails --version 4.0.0.rc1 --no-ri --no-rdoc

試しに新しいプロジェクトtestを作ってみる。

$ rails new test

testフォルダ内に移動して、rails serverコマンドを打ち込むとエラーが出るのでテキストファイルでGemfileを開いて、次の一行(19行目あたり)をアンコメント(行頭の#を外す)する。

gem 'therubyracer', platforms: :ruby

bundle installコマンドの後、もう一度rails serverコマンドを打ち込むと、いつものようにビルトインサーバーが立ち上がる。ブラウザからhttp://localhost:3000にアクセスし、ページ上段のAbout your application’s environmentリンクをクリックすると、Ruby2.0上でRails4.0RC1が動いていることが確認できる。

Rails4RC1_Top02
Continue Reading…

RVMで作るRuby 2.0とRails 4.0ベータ1のお試し環境

Ruby2.0が正式リリースされ、Rails4.0も、ベータ1が公開された。そこで、Ubuntu12.10のローカル環境に、Ruby2.0とRails4.0b1のお試し環境を構築してみた。

Rubyの複数バージョン管理ツールRVMをインストール

Railsの安定版3.2とベータ版の4.0を共存させるために、Rubyの複数バージョン管理ツールRVM(Ruby Version Manager)のGemset(Rubyのバージョン毎にGemを一緒に切り替えてくれる機能)を利用する。

先ずは、RVMは、Curlコマンドを使ってインストールする。

$ curl -L https://get.rvm.io | bash -s stable --ruby

デフォルトでは、Rubyの最新版2.0がインストールされる。続いて、安定版のRails3.2に必要なRubyのバージョン1.9.3を次の要領で追加する。

$ rvm install 1.9.3

次のコマンドを実行すると、複数のRubyバージョンがインストールされたことが確認できる。

$ rvm list

実行結果は次のとおり。Rubyのバージョンに2.0.0-p0がセットされていて、デフォルトも2.0.0-p0となっていることが分かる。

RVMList01

Rubyのバージョンを1.9.3-p392に切り替えたい場合には、次のコマンドを実行する。最後のdefaultオプションをつけなければ、現在のバージョンの切り替えのみ(デフォルトは2.0.0-p0のまま)行える。

$ rvm use 1.9.3 --default

Continue Reading…

UbuntuにRuby on Railsを再インストール(rbenv編)

Rubyを最新版にしようとしたが、rbenv(複数のバージョンのRubyを管理するツール)でエラーが発生。rbenv installコマンドが実行できない。いろいろ調べてみたが、原因が分からないので、apt-getコマンドでrbenvとrubyをいったん削除。GitHubから最新版のrbenvをインストールしてみた。

$ git clone git://github.com/sstephenson/rbenv.git ~/.rbenv

インストールが完了したら、ホームディレクトリの.profileファイルにパスや初期化コマンドなどを書き込んでおく。

$ echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.profile
$ echo 'eval "$(rbenv init -)"' >> ~/.profile

zshを使っている場合は、上記のコマンド中の~/.profileを~/.zshrcに置き換えて実行する。シェルを再起動させると、設定が反映される。

$ exec $SHELL -l

続いて、ruby-buildのインストール。このツールは、rbenv installコマンドの実行時に自動的に呼び出されることになっているので、インストールは必須。

$ git clone git://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build

Continue Reading…