Eclipse + RDTプラグインを使用したRuby開発



Ruby Development Using Eclipse Rdt Plugin



http://blog.cnlidc.com/?p=124

まず、なぜRubyを使うのですか?

では、なぜ多くのJava開発者がRubyを心配しているのでしょうか。 10年前に日本で作成された汎用スクリプト言語であるRubyは、純粋なオブジェクト指向言語です。 Javaテクノロジとは異なり、Rubyのすべてがオブジェクトです。 Rubyの構文は、主にSmalltalk、Python、Adaに由来します。 Javaプログラミング言語と同様に、Rubyは単一継承言語ですが、クロージャ(匿名の内部クラスと見なすことができます)やミックスイン(インターフェイスと同様)など、Javaテクノロジでは実装されていない高度な機能を提供します。 、ただしクラスに緩くバインドされています)。 Rubyは移植性も高く、すべての主要なオペレーティングシステムで動作します。

現在、Rubyは非常に人気があります。人々はそれをさまざまなタイプのアプリケーションに適用し始めています。解釈され、動的型付けを使用するため、実行時にJavaで実装するのが難しいトリックを実装できます。動的型付けと表現力豊かな構文の驚くべき機能の1つは、Rubyでドメイン固有言語(DSL)を作成する機能です。これにより、元の言語の文法から離れて、より高いレベルの抽象化に取り組むことができます。 Ruby onRailsは、データベースベースのWebアプリケーションを作成するためのフレームワークであり、Rubyの能力も示しています。 RubyのMakeとAntのバージョンとしてのRakeは、この言語の強力なアプリケーションのもう1つの証拠です。

Rubyを使用するもう1つの理由は、すべてのプログラミング愛好家がRubyを使用していることです。多くのJavaプロ(Glenn Vanderburg、Bruce Tate、Martin Fowlerなど)が現在Rubyを使用しています。すべての開発をRubyに変える予定がない場合でも、この言語は一見の価値があります。

Rubyの開発を制限する主な要因の1つは、Rubyが優れた開発環境を欠いていることです(Emacsを学びたくない人のために)。今日、RDTはすべてを変えました、そしてEclipseで実験することは最高です。

第二に、インストール

Rubyを使用する前に、Rubyインタープリター、対応するライブラリー、およびRuby開発環境をインストールする必要があります。

第三に、Rubyを入手する

Rubyはすべての主要なプラットフォームで利用できます。実際、LinuxまたはCygwinディストリビューションにすでに含まれている可能性があります。コマンドプロンプトを開き、「Ruby-v」と入力してください。
バージョン番号を取得したら、準備ができています。それ以外の場合は、選択したプラットフォームの配布パッケージを確認する必要があります。

Windowsを実行している場合は、選択が簡単です。 RubyForgeは、SourceForgeのRuby固有の同等物として、Windows上でRuby環境を構築するために使用されるOne-ClickRubyInstallerと呼ばれるプロジェクトを持っています。 FreeRideと呼ばれるIDEなどの他のツールも含まれていますが、RDTを使用している場合は、インストールプロセス中にこれをスキップできます。

第四に、ドキュメントを取得します

新しい言語を使い始めるときは、ドキュメントと関連する参考資料が重要です。 Rubyドキュメントのオンラインリファレンス資料はメインのRubyWebサイトで入手できますが、これらのドキュメントは少し古くなっています(Ruby 1.6用であり、現在のバージョンは1.8.2です)。問題は、更新されたドキュメントがまだ日本語から翻訳されていないことです。ただし、Ruby-doc.orgで最新のヘルプドキュメントを見つけることができます。 APIレベルのドキュメント(Javadocに相当)、およびその他のチュートリアルや書籍が含まれています。

真面目なRuby開発者の方は、プログラミングを最高に体験するために、 『Programming Ruby:The Pragmatic Programmer's Guide』(Dave ThomasとAndyHuntによる)を読む必要があります。これは、RubyおよびRubyライブラリをプログラミングするための古典的なガイドです。この本を入手した場合は、DaveThomasによる「RubyonRailsを使用したアジャイル開発」という本も参照できます。これはRubyonRailsの入門書です。

V.RDTの取得

これで、コンピュータに優れたヘルプドキュメントがインストールされたRubyが機能しているので、RDTをインストールする必要があります。これは、コードを編集するときに慣れている可能性のある多くの機能を提供するEclipseプラグインです。 RDTは標準のEclipseプラグインであるため、zipファイルをEclipseフォルダーに直接抽出して、ドキュメント内のパスにある他のすべてを処理できます。

これで、Rubyプロジェクトを作成する準備が整いました(図1を参照)。


図1.新しいRubyプロジェクトの作成


Javaと比較して、Rubyは名前とディレクトリ構造に関してそれほど厳密ではありません。 Rubyでプロジェクトを作成すると、実際には1つのディレクトリと1つのプロジェクトファイルのみが作成されます(Rubyにはクラスパスがないため、.classpathファイルは必要ありません)。 Javaテクノロジとのもう1つの重要な違いは、Rubyプロジェクトウィザードが明示的なsrcおよびbinディレクトリを作成しないことです。 Rubyは解釈されるため、出力フォルダーはありません。小さなプロジェクトがある場合は、Rubyソースファイルをプロジェクトファイルと同じフォルダーに置くことができます。または、独自のディレクトリ階層を作成することもできます。 RubyはJavaと比較してこれをほとんど気にしないことがわかります。

次に、Rubyソースファイルを作成します。 Rubyソースファイルを作成するための特定のウィザードはありません。 Javaテクノロジと比較すると、Rubyソースファイルは必要な構造が少ないため、Rubyファイルを作成するには、プロジェクトを右クリックして新しいファイルを作成する必要があります(下の図2を参照)。


図2.Rubyソースファイルの作成



ファイルに標準拡張子.rbを追加することを忘れないでください(これは通常のRuby拡張子です)。 Rubyファイルを作成すると、図3に示すRubyビューが開きます。


図3.Rubyファイルを作成するとRubyビューが起動します

Rubyは、アウトラインビューも提供します(Javaが提供するものと同様)。 Javaに対応するものと同様に、Rubyソースファイルの要素間を移動できます。図4では、raise_salary_byメソッドがアウトラインビューとソースビューの両方で強調表示されています。


図4.このアウトラインビューは、ソースファイルのナビゲーションを実装します



他の複雑なプラグインと同様に、RDTでは[ウィンドウ]> [設定]ダイアログからカスタム機能を追加することもできます。このカスタムダイアログを図5に示します。


図5.カスタマイズのためのRDTインストールの「設定」

パラメータの選択[設定]メニュー項目を使用すると、構文の強調表示や書式設定(Rubyの世界の標準のインデントは4つのスペースではなく、2つのスペースであるため、いくつかの調整を準備してください)などを変更できます。また、エディターテンプレートをカスタマイズして、独自のインタープリターを選択することもできます。

6、RDTエディター

Javaの世界では、高度なエディター機能に慣れています。そのため、同じサポートを提供していない他の環境に移動することは困難です。 RubyIDEに欠けている機能の1つは、コンテンツアシスタント(状況依存の識別子ルックアップ機能を提供する)がないことです。幸い、RDTエディターには、図6に示すように、Rubyコードのコンテンツヘルパーが含まれています。


図6.RDTエディターはコンテンツアシスタントを提供します

Rubyでは、変数またはメソッドの戻り値に型を割り当てることはできず、実行時に識別子コンテキストが型を決定します。 Rubyは、愛情を込めて「ダックタイピング」と呼ばれる方法を導入しています。このアプローチの考え方は、いんちきメッセージを受け入れる場合、それは「アヒル」でなければならないということです。これは、強く型付けされた言語にすでに慣れているユーザーを妨げるようであり、この緩く型付けされた結合は、Ruby言語のより強力な機能のいくつかをサポートできます。たとえば、Rubyで例外ハンドラーを作成できます。存在しないメソッドを呼び出すときにアクティブ化すると、例外ハンドラーがメソッドを処理してから呼び出します。このメタプログラミングレベルは、強く型付けされた言語で実装するのは困難です。

コンテンツヘルパーの復元機能は、Rubyが識別子を使用するときに特定の命名規則を使用することです。たとえば、Rubyでは、すべてのメンバー変数は最初に使用されたときに存在し、名前の最初の文字として@記号で識別されます。 Content Assistantを使用してメンバー変数を検索する場合は、@と入力できるため、メンバー変数のみを表示できます。


図7.Rubyヘルプコンテンツアシスタントの命名規則



動的型付けは、Rubyの状況依存の問題を依然として妨げます。図7では、有効なメンバー変数は、メソッド宣言のすぐ上に表示される変数、つまり@ name、@ salary、および@hire_yearのみです。 Content Assistantによって提供される他のメンバーの一部は、別のクラス(後で定義)からのものです。現在、RDTエディターは、すべての正しい構文をフィルター処理するほど複雑ではありませんが、意味的に正しくないエントリーをフィルター処理します。

セブン、実行とデバッグ

IDEの機能の1つは、ビルドしたアプリケーションを同じ環境で実行およびデバッグすることです。 RDTは、これらの機能の両方を有効にできます。

8、通訳を指定します

このタスクの実装は、Rubyの上部にある[Windows]> [設定]ダイアログと[インストールされているインタープリター]エントリにあります。
Rubyはインタプリタ言語であるため、RDTでアプリケーションを実行またはデバッグする前に、インタプリタを環境に関連付ける必要があります。この関連付けは、Rubyの上部にある[Windows]> [設定]ダイアログの[インストール済みインタープリター]エントリにあります。


図8.Rubyインタープリターと環境の関連付け

使用しているRubyバージョンの場合、「場所」テキストフィールドをbinディレクトリにポイントする必要があります。そうすると、RDTは他のすべての必要な情報を選択します。インタプリタを関連付けると、アプリケーションを実行する準備が整います。

9、Rubyアプリケーションを実行します

Rubyアプリケーションの実行は、実際にはJavaアプリケーションの実行と似ています。図9に示すように、[実行]メニューを使用して実行構成を作成できます。


図9.RDTでの実行構成の作成

アプリケーションを実行すると、RDTは制御をRubyインタープリターに切り替えてから、図10に示すように、Eclipseワークスペースの下部にあるコンソールウィンドウでアプリケーションを実行します。


図10.RDT内でのRubyアプリケーションの実行

この例は、コンソールアプリケーションを実行する方法を示していますが、他の種類のアプリケーション(GUIプログラムなど)を実行する方法も同じです。

X.RDTを使用したデバッグ

IDEの実装に必要な最も重要な機能の1つは、アプリケーションを効果的にデバッグする機能です。 Rubyインタープリターにはコマンドラインデバッガーが含まれていますが、今日のグラフィックツールの時代にコマンドラインデバッガーを使用するのは誰ですか?幸い、Rubyインタープリターは特定の(構成可能な)ポートを介してデバッグ情報をブロードキャストし、RDTなどのツールはポートをリッスンして、開発者が期待するタイプのデバッグサポートを提供できます。

RDTでRubyアプリケーションをデバッグするには、上記で作成した実行構成と同じようにデバッグ構成を作成する必要があります。次に、左側の溝をクリックし、デバッガーを使用してアプリケーションを起動することにより、ブレークポイントを設定できます。 Javaテクノロジと同様に、IDEはデバッグビューに切り替えるかどうかを尋ねます。必要に応じて、以下の図11に示すようなものが表示されます。


図11.RDTでのRubyアプリケーションのデバッグ

RDTは、Javaテクノロジのデバッグと同じデバッグレベルをサポートします。左上のグリッドは現在実行中のスレッドを示し、右上のグリッドは変数の値を示します。 Javaプログラミング言語と同様に、オブジェクトをさらに分析して、固有のメンバー変数値を確認できます。左中央のグリッドには現在実行中のアプリケーションのソースコードが表示され、右中央のグリッドにはアウトラインビューが表示されます。ここではエディターとして機能し、識別子をタップしてナビゲートできます。デバッグウィンドウの下部には、ポート1098でRubyインタープリターによってブロードキャストされたデバッグ情報が表示され、RDTはこのポートでデバッグ情報をリッスンします。

デバッガーのサポートはRDTの機能です。優れたRubyサポートを備えたエディターを使用している場合でも、アプリケーションのデバッグにはコマンドラインデバッガーを使用する必要があります。完全に機能するデバッガーを使用すると、ソフトウェアの生産性が大幅に向上します。

XI、テスト

Java開発者が実装しなければならない最も難しいRuby機能の1つは、動的型付けです。強く型付けされた言語に慣れている場合、動的型付けは少し混乱しているように見えます。 DTは、さまざまな高度なメタプログラミング手法を可能にします。これは、強く型付けされた言語で実装するのは困難または不可能です。もちろん、コンパイル時の型チェックのセキュリティ設定を破棄することもできます。それで、2つの世界の最良の組み合わせを達成する方法はありますか?

単体テストはすべての言語で実装する必要がありますが、動的言語では特に重要です。ユニットテストは、コンパイル以上のものを明らかにします。実際、単体テストとコンパイルの関係についての見方を変える必要があります。最近、上級ソフトウェア開発の専門家は、「今後5年間で、単体テストの弱い実装としてコンパイルを使用する」と考えています。単体テストは検証を提供できます。エンコードは、入力の文法チェックだけでなく、時間どおりに実装されます。

Rubyの世界では単体テストが非常に重要であることを考えると、RDTで単体テストを簡単に実行できるようにする必要があります。確かにそうです!ユニットテストはRubyに含まれているため、他の拡張機能をダウンロードする必要はありません。 Rubyライブラリには、TestCaseクラスとTestSuiteの概念が含まれています。 Test :: Unit :: TestCaseからテストをサブクラス化して、他のRubyクラスと同じように単体テストを作成できます。リスト1は、Employeeクラスのインスタンスです。

リスト1.従業員クラス
クラス従業員
def initialize(name、salary、hire_year)
@name = name
@ salary =給与
@hire_year = Hire_year
終わり
attr_reader:name、:salary、:hire_year
def raise_salary_by(perc)
@salary + =(@ salary *(分* 0.01))
終わり
def to_s
'名前は#{@ name}、給与は#{@ salary}、' + '雇用年は#{@ hire_year}'
終わり
終わり
対応する単体テストは次のとおりです。

リスト2.Employeeクラスに対応する単体テスト
'test / unit / testcase'が必要
'test / unit / autorunner'が必要です
'hr'が必要
クラスTestEmployee@@ Test_Salary = 2500
defセットアップ
@emp = Employee.new( 'Homer'、@@ Test_Salary、2003)
終わり
def test_raise_salary
@ emp.raise_salary_by(10)
期待値=(@@ Test_Salary * 0.10)+ @@ Test_Salary
assert(expected == @ emp.salary)
終わり
終わり
この単体テストを実行するには、図12に示すように、単体テストクラスの実行構成をTest :: Unitタイプとして作成します。


図12.RDTには、Test :: UnitRun構成が含まれています

このテストを実行すると、左下隅にあるJUnitのようなグリッドなど、Javaユニットテストと同じサポート要素が得られます。


図13.IDEで実行されている単体テストの例

RubyでTestSuiteを作成することもできます。 TestSuitesは、TestSuiteを返すスイートメソッドを定義するRubyクラスです。このTestSuiteは、各TestCaseで自動的に定義されるスイートで構成されています。リスト3は、いくつかのクラスのTestSuiteの例です。

リスト3.いくつかのクラスの例TestSuite
'test / unit / testsuite'が必要です
'test / unit / ui / tk / testrunner'が必要です
'test / unit / ui / console / testrunner'が必要です
'TestEmployee'が必要
'TestManager'が必要
クラスTestSuite_AllTests
def self.suite
suite = Test :: Unit :: TestSuite.new( 'HR Tests')
後<< TestEmployee.suite
後<< TestManager.suite
リターンスイート
終わり
終わり
#Test :: Unit :: UI :: Tk :: TestRunner.run(TestSuite_AllTests)
Test :: Unit :: UI :: Console :: TestRunner.run(TestSuite_AllTests)
単一のTestCaseを実行する前の例とは異なり、ここでのスイートはスタンドアロンアプリケーションとして実行されます。 Rubyには、TestSuiteの結果を表示する2つの方法があります。 1つ目は「コンソールテストランナー」で、結果をコンソールに出力します。 2つ目は「TkTestRunner」です。これは、テストの結果を表示するための使い慣れたダイアログを作成します。図14は、TkTestSuiteダイアログを示しています。


図14.グラフィカルなTestSuiteダイアログ

12、新しいバージョンでの改善

RDTの現在のバージョンは0.50です。現在、その開発者はバージョン0.60を開発しています。次のリリースで改善される側面は次のとおりです。

・コード折り畳み-クラスとメソッドのコード折り畳みを提供します。

・アウトラインビュー-ローカル変数のサポートなど、より詳細な情報を提供します。

・RIビュー-RDTビューからRubyのriツールを使用します。

・タスクタグ-TODO、FIXMEなどの構成可能なキーワードのRubyコメントの形式でタスクを作成します。

・エディターの改善-中括弧、括弧、一重引用符/二重引用符を自動的に追加し、より優れたコードヘルパーがあります。

•インスペクターショートカット-オブジェクトのすべてのメソッド、グローバル定数などの表示など、デバッグセッション中に頻繁に使用されるインスペクターに構成可能なショートカットを提供します。

次のバージョンでは、JRubyバイトコードコンパイラをより有効に活用します。 JRubyは、RubyコードをJavaバイトコードにコンパイルできるようにするプロジェクトです。これは、RDTの将来のバージョンがEclipseの世界に追加しやすくなり、さらに優れたサポートを提供することを意味します。

13、まとめ

Rubyは最終的に業界の専門家によって認識され、適用されます。この理由の一部は、Ruby onRailsプロジェクトの成功によるものです。それでは、Rubyを「競争ツールボックス」に追加することを検討しましょう。もちろん、RDTはあなたをフィールドに参加させる重要な要素でもあります。


元の住所[]