RubyPython、これはいいものだ

| Comments

rubyのパッケージ管理に、bundlerを使い始めてから
どんなパッケージを利用しているのかに興味を持つようになりました。
そんな中、どーにも気になるパッケージ名があったのです。

その名も・・・(゚A゚;)ゴクリ

RubyPython

名前だけで見れば、これは恐らく
スマフォに例えれば、iOS&Andoroid。いやiOroid
企業に例えれば、Google&Apple。いやGoople
食べ物に例えれば、カツカレー

などと、茶番はここまでにして、Let’s Try

まずはPython側で、呼び出される簡単なメソッドを実装します。

  • ただのprint文
  • 引数と戻り値を持ったprint文

を、関数として定義します

(called_ruby.py) download
1
2
3
4
5
6
def print_python():
    print "python:"

def print_python_with_argument( arg1 ):
    print "python:", arg1
    return arg1

そして、Ruby側で呼び出す処理を記述します。

  • Pythonのクラス(cPickle)の呼び出し、とメソッド実行
  • 自作したPythonモジュールの読み込み
  • “ただのprint文”の呼び出し
  • “引数と戻り値を持ったprint文”の呼び出し

を、定義します

(call_python.rb) download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#!/usr/bin/env ruby
# -*- encoding: utf-8 -*-
require "rubypython"

RubyPython.start

puts 'Pythonのクラスを呼び出す'
cPickle = RubyPython.import("cPickle")
p cPickle.dumps("Testing RubyPython.").rubify

puts 'Pythonの自作メソッドを呼び出す'
dir = File.dirname(__FILE__)
sys = RubyPython.import 'sys'
sys.path.append File.join(dir, '.')
called_ruby = RubyPython.import("called_ruby")
called_ruby.print_python

puts called_ruby.print_python_with_argument!( arg1: "Ruby String" ).rubify
puts called_ruby.print_python_with_argument!( arg1: 1234 ).rubify

RubyPython.stop

これを実行すると

Pythonのクラスを呼び出す
S'Testing RubyPython.'
p1
.
Pythonの自作メソッドを呼び出す
python:
python: Ruby String
Ruby String
python: 1234
1234

おぉ!

RubyからPythonの呼び出し、簡単な引数の受け渡しが出来る事
あっさり確認出来ました。

流石に、Rubyのコード中にPyhotnが記述できる訳ではないみたいです。
RubyからPythonを呼び出す需要があるかは解りません。
が、競うより共存の方に時間を使うほうが価値があるかも?と思います。

RubyPythonは、PythonからRubyを実行したり、例外をRubyで処理したり等沢山の機能があるようです。
続く。。。かも?