IronRubyとは?開発者はRailsでどのように使用しますか?

7000 ワード

Ruby分子のIronRuby
IronRubyはマイクロソフトのRubyで実現された.NETアーキテクチャの良好なインタラクティブ性は世界で知られている.Ironという名前は実は「Implementation running on.NET」の頭文字の略です..NETの共通言語ランタイムとMono(非公式)はいずれもIronRubyをサポートできる.動的言語の実行に関するいくつかの問題(例えばCLR上のRuby)を明らかにする必要はありません.これはDLR(動的言語の実行時)が解決します.DLRは、CLR上で動的言語サポート能力を提供するための技術的手段である.
マイクロソフトのオープンソースソフトウェアに対する承諾の一部として、IronRubyとDLRは、マイクロソフトのパブリックライセンス(Microsoft Public License)に従うことを前提に、GitHubとCodePlexからそれぞれ取得することができます.設計当初から、IronRubyの目標はWindowsプラットフォーム上のRubyの実現の第一選択となり、自然に良好な互換性と優れた性能を提供することであった.本論文を作成する際,IronRubyのRubySpec通過率は86%に達した.逆にMRIを見てみましょう.その通過率は98%です.合格率はまだ不足しているが、テストから見ると、IronRubyの性能はMRI 1.8よりずっと優れている(4倍以上高い).このテスト結果はAntonia Cangianoが彼のRubyテストキットを実行した後に与えられたものだ.
良好な互換性と優れた性能を持つだけでなく、IronRubyの切り札はそれと.NET標準ライブラリおよび.NETプログラムセット(assembly)間の良好なインタラクティブ能力.「require」文を1つだけでルビーコードで使用できます.NETアーキテクチャとクラス.この重要な機能はこのようにRuby標準ライブラリに基づいてIronRubyコードに「自動」に導入される.requireの後ろは何でもいいです.NETプログラムセットの名前.RubyでWindows Formを作成し、Rubyと.NETはどのようにシームレスに統合されていますか:

require 'System.Windows.Forms'
System::Windows::Forms::Form.new.show

ir(IronRuby解釈器)を実行すると、標準的なWindows Formが画面に表示されます.空のFormですが、2行のコードだけでどれだけ期待できますか?ここでのコードの美しさは、C#やVBよりも少ないコードで同じことをする必要があることです.この新しいFormに制御ロジックをプログラム的に追加することも想像できます.

require 'System.Windows.Forms'
form = System::Windows::Forms::Form.new
lbl = System::Windows::Forms::Label.new
lbl.text = "foo"
form.controls.add(lbl)
form.show

静的言語と動的言語のコードを比較するのは非常に難しいことですが、上記のコードがC#でどのようになるべきかを見てみましょう.

using System;
using System.Windows.Forms;
namespace MyWinFormsApplication
{
    static class Program
    {
        static void Main()
        {
            Form form = new Form();
            Label lbl = new Label();
            lbl.Text = "foo";
            form.Controls.Add(lbl);
            form.Show();
        }
    }
}

いくつかあります.NETフレームワークの経験のある開発者は,C#またはVBプログラムのオブジェクトがコンパイルされるとCLRオブジェクトとして存在することを認識する.つまり、どんなことでもできる.NET CLI(共通言語インフラストラクチャ)のインタラクティブなプログラムは、これらのオブジェクトにアクセスできます.この特徴により、開発者はVB、C++またはPowerShellのC#クラスと方法に対処することができる(逆も同様である).NETコードはローカルコードにコンパイルされず、CIL(共通中間言語)と呼ばれる中間言語に変換される.残念なことに、CILは静的タイプの言語ですが、私が前に紹介したように、DLRがCLRやRubyのような動的言語のインタラクション能力をどのように提供できるかの鍵です.
.NETプログラムセットの方法は、IronRubyにおいて、よく知られているruby小文字(controls.addなど)と、従来のC#アルパカ峰形式(ToStringなど)の2つの形式で表すことができる.ルビーはほとんどいないからだ.NET言語における属性概念(CLRではフィールド)であるため、IronRubyでの属性はアクセス方法とアクセス方法(例えばfoo.bar()とfooである.bar=(x))の形式が存在します.以下のC#ネーミングスペースとPersonクラスをMyClassLibraryにコンパイルするとします.dllファイル:

namespace MyClassLibrary
{
    public class Person
    {
        public string Name { get; set; }
        public string Introduce()
        {
            return String.Format("Hi, I'm {0}", Name);
        }
    }
}

このdllをIronRubyで使用する方法を説明します.

require 'MyClassLibrary.dll'
me = MyClassLibrary::Person.new
me # => MyClassLibrary.Person
me.name = "Edd"
me.name #=> 'Edd'
me.introduce # => 'Hi, I'm Edd'

この純粋なインタラクション能力は,開発者がいくつかのメタプログラム設計の場でRubyコードを多重化するのに役立つ.
注意:大文字と小文字に注意!IronRubyで自分のものを使いたいならNETプログラムセット、保証してください.NETコードのネーミングスペースとクラス名は正しい大文字のアルパカ表現を使用している.NETクラスはRubyクラスに直接変換することができ,ネーミングスペースはRubyモジュールとして表され,Rubyでは両者とも大文字のアルパカ表現が用いられる.もしあなたの.NETコードの名前はこのような表現ではなく,両者を結びつけることができず,Rubyコードでは使用できない.
IronRubyメタプログラミング
メタプログラミング(Metaprogramming)の科学と芸術は長い文章を書くことができ、特にRubyではメタプログラミングの楽しみを十分に楽しむことができます.あなたが望むように、IronRubyでは、自分の想像力を存分に発揮し、動的な言語で使えるものをすべて使うことができます.Rubyで信頼できるclassを使用する方法を見てみましょう.evalは、前の例のPersonクラスを処理します.

require 'MyClassLibrary.dll'
me = MyClassLibrary::Person.new
me.name = "Edd"
MyClassLibrary::Person.class_eval do
    define_method(:shout) do |text|
        "#{name} shouts: #{text.upcase}!"
    end
end
puts me.shout("Hello, world") #=> "Edd shouts: HELLO, WORLD!"

前の例に示すように、ir(IronRuby解釈器)はこのコードを実行します.IronRubyが「思いもよらない、できない」言語であることを証明する証拠がもっとほしいなら、典型的なRails-esqueをmixinとして使用します.私たちがここでずっと使っているのはC#で書かれたクラスであることを覚えておいてください.

require 'MyClassLibrary.dll'
me = MyClassLibrary::Person.new
module ActsAsHungry
    def self.included(base)
        puts "I'm hungry..."
    end
    
    def tummy_contents
        @tummy_contents ||= []
    end
    
    def eat(foodstuff)
        tummy_contents << foodstuff
        puts "*Burp*"
    end
end

MyClassLibrary::Person.class_eval do
    include ActsAsHungry
end

me.eat("cheeseburger")

どうやってirailsを制御しますか?
本題に戻りましょう.ほとんどのRuby開発者はRailsのフレームワークに詳しいと思いますが、Railsに惹かれていると仮定してRuby言語を使うほうがいいかもしれません.
簡単に言えば、IronRubyの互換性は非常に優れており、Railsプログラムを完璧に実行することができます.しかし、いくつかのことを説明しなければなりません.そうしないと、あいまいな文が開発者を霧にさらす可能性があります.これは私の初心に反しています.私は知っていて、これらの知識を知ってから、あなたはすぐにあなたのRuby応用の中でこれらを大量に試したいかもしれません.NETインタラクティブな機能なので、ここで注意しなければならないことがあります.
  • IronRubyには、iirb、igen、irake、irailsと呼ばれるirb、gem、rake、railsに代わる独自のスクリプトがあります.公式Rubyをインストールする必要がある場合は、これらを覚えて見分けなければならないかもしれません.
  • IronRuby公式サイトによると、これらのスクリプトは廃棄され、-SIDでirを呼び出すことができます.

  • 他のRubyインストーラとは独立しているため、IronRubyはRubyGemsを共有しません(igemリストを呼び出すことで反映することもできます).実際には実現できますが.
  • SQLiteは急速に開発で最も人気のあるデータベースとなった.IronRubyでは、sqlite 3-rubyは正常に動作しません.sqlite 3-ironruby gemがインストールされていることを確認してください.

  • 注意:MSI IronRubyインストールパッケージは、IronRubyを「C:/Program Files/IronRuby x.x」の下に解放します.このようにIronRubyをインストールする場合は、スクリプトがパス名を解析できないという問題を回避するために、他のディレクトリに影響を与えない(ただしPATH変数を更新する必要もある)ようにインストールすることをお勧めします.
    前述したように、IronRubyは現在、Ruby 1.8.6との互換性が非常に優れている.そのため、IronRubyで既存のRailsアプリケーションを実行しても問題はありません(irを使用してスクリプトまたはサーバスクリプトを実行して自分で観察してください).
    Windowsに対応するソフトウェアをすでに導入している場合は、IronRubyはironruby-sqlserver gemを通じて良好な利用ができます.NETインタラクティブはSQL Serverサポート(Windows統合セキュリティメカニズムのサポートも可能)を提供し、このgemにはRailsが所有しているライブラリとは異なるDBIライブラリ、ironruby-dbiが必要ですが、ironruby-sqlserverがこのライブラリが存在するかどうかを確認することは喜ばしいことです.Database.ymlのこのアダプタの構成は次のとおりです.
    
    development:
      mode: ADONET
      adapter: sqlserver
      host: HOSTNAME\INSTANCE
      database: application_development
      integrated_security: true

    少し多く言うと、これは実はルビーon RailsでIronRubyを使う多くの利点の中の氷山の一角にすぎない.工業生産環境でこれらの応用を実行することは大きな課題である.なぜなら、IISやWindows Azureに導入することができ、後者はクラウドプラットフォームであり、上で任意のベースを実行することができるからである.NETのWebアプリケーションまたはサービス.
    これらの言語を混ぜ合わせた明確な動的言語のメリットに気づいてほしい.例えば.NETフレームワークの下にあるRuby言語.もしかすると、「IronRubyでASP.NET MVCアプリを書いてもいいですか?」あるいは「IronRubyと他の技術の互換性はどうですか?例えばSilverlightやその上位技術がブラウザ外アプリケーションサービスのWPFですか?」これらの質問の答えを探したり、IronRubyに対するいくつかの理解を明らかにしたりしたい場合は、IronRubyの公式サイトからより多くの資料を見つけることができます.
    英文原文:What's IronRuby,and How Do I Put It on Rails?