rbenv, ruby-build導入メモ

複数のバーションのrubyを切り替えられるようにするrbenvとruby-buildをインストールしてみたのでメモします。

まずは、homebrewでコマンド本体をインストールします。

% brew install rbenv ruby-build

インストール途中にシェルの設定が書かれているのでこの通り追加します。PATHの設定、補完関数の追加、rbenvコマンドの再定義などをしているようです。
2行目を~/.zshrcに追加すればいいのですが、zshの場合は$(rbenv init -)を$(rbenv init - zsh)に変えないとエラーが出るので注意です。

To enable shims and autocompletion add to your profile:
  if which rbenv > /dev/null; then eval "$(rbenv init -)"; fi

設定を読み直してエラーを吐かなければOKです。

% source .zshrc

次にRubyのビルドのための準備です。OSX標準のopensslとreadlineはアレらしいのでhomebrewからインストールします。

% brew install openssl
% brew link openssl
% brew install readline
% brew link readline

installサブコマンドを-l付きで実行するとインストール可能なrubyのバージョンが表示されるので、ここから選択します。JRubyも入っているんですね。

% rbenv install -l
Available versions:
(以下長いので適当に抽出)
  1.8.6-p420
  1.8.7-p249
  1.8.7-p302
  1.8.7-p370
  1.9.3-p286
  jruby-1.7.0
  maglev-1.0.0
  rbx-1.2.4
  rbx-2.0.0-dev
  ree-1.8.7-2012.02

先ほどインストールしたopensslとreadlineにリンクさせる為にオプションを付けてインストールコマンドを叩きます。

% CONFIGURE_OPTS="--with-readline-dir=$(brew --prefix readline) --with-openssl-dir=$(brew --prefix openssl)" rbenv install 1.9.3-p286

rbenvのrubyの切り替え方法は以下の3つがあります。

  • global そのユーザで有効
  • local そのディレクトリで有効
  • shell そのシェルで有効

今回は普段使うバージョンの選択なのでglobalサブコマンドでバージョンを指定します。 

% rbenv global 1.9.3-p286
% ruby --version
ruby 1.9.3p286 (2012-10-12 revision 37165) [x86_64-darwin12.2.1]

1.9.3p286を使うことができています。

仕組みはこちらで解説されていますが、~/.rbenv/versions以下に各バージョンのバイナリをインストールし、~/.rbenv/shims/に使用するバージョンのシンボリックリンクをおいてPATHを通しているようです。

またgemsetは上の3つの切り替え方法とは関係なく、現在選択しているrubyのバージョンに紐付いているようです。gemで実行コマンドをインストールするような操作をした場合、rbenv側で対応するシンボリックリンクを作成しなければならないため、コマンド実行前に

% rbenv rehash

を実行する一手間が必要になります。

キーバインドを調べる/一覧を表示

新しくキーバインドを設定する時に,空いているキーを探そうとして困ったのでメモっておく.

;; そのキーに割り当てられているコマンドを表示
M-x describe-key-briefly RET key

;; ドキュメントも表示する
M-x describe-key RET key

;; キーバインドの一覧を表示
M-x describe-bindings

Python文法メモ

本当にメモ書きです。

スクリプト文字コードの指定

# coding: UTF-8                                                                 

何もしない

pass  #  _(:3」 ∠)_ 

制御文

if文
x = 2
if x == 0:              # 括弧はいらない。
    print "x == 0"
elif x == 1:           # else ifでもなくelsifでもなくelifなのに注意。
    print "x == 1"
else:
    print u"その他"
while文
x = 0
while x < 10:
    print x
    x += 1
else:
    print u"breakでループを抜けなかったときに実行される"
for文
for i in range(10):
    print i
else:
    print u"breakでループを抜けなかったときに実行される"

ラムダ式

# 個人的に括弧を書きたくなる所なんだけど、こんなもんなんだろうか。
l = lambda x,y : x+y
print l(1,2)

関数定義

基本
def func1(a):
    print a

func1(1)  #=> 1
デフォルト引数とキーワード引数
def func2(a, b=1, c=2):
    print (a,b,c)

func2(0)  #=> (0, 1, 2)
func2(a=3,c=5)  #=> (3, 1, 5)
可変長引数
def func3(*args):
    print args

func3(3,4,5)  #=> (3, 4, 5)
dictで引数を受け取る
def func4(**args):
    print args

func4(a=6,b=7,c=8,d=9) #=> {'a': 6, 'c': 8, 'b': 7, 'd': 9}

クラス定義

# 親クラス
class ClassA:
    pass

# 子クラス
class ClassB(ClassA):
    # クラスのアトリビュート                                                                                                                                                           
    attr = 1

    def __init__(self):
        self.a = u"インスタンスのアトリビュート"
        print u"コンストラクタ"

    def method(self):
        return u"メソッド"

    def _private_method(self):
        return u"プライベート?メソッド"

# インスタンスの生成                                                                                                                                                                 
k = ClassB()

# メソッドの呼び出し                                                                                                                                                                 
print k.method()  #=> "メソッド"

例外

try:
    raise Exception("hoge")   # 投げる
except Exception, e:           # 受け取る
    print e
else:
    print u"例外が投げられなかったとき"
finally:
    print u"最後に実行"