hmRb (秀丸マクロ用 .NET Framework ライブラリ via IronRuby)

IronRubyを用いて、秀丸マクロで「.NET Frameworkの多くの機能をシームレスに近い形で利用する」ためのライブラリとなります。

秀丸マクロとIronRubyの連携

  • HTMLにJavaScriptを埋め込むような感覚で、秀丸マクロにIronRubyを文字列として埋め込むことが出来ます。
    複数個所に埋め込んでも、記述の内容は持続性を持っています。
    又、HTMLに対するJavaScript同様に、中に埋め込むのではなく、ファイルの外に記述してもかまいません。

ダウンロード

Windowsのbit数ではなく、秀丸のビット数 Windows OSが64bit版か32bit版かは関係ありません。秀丸エディタが32bit版か64bit版かでダウンロード対象を選択してください。

動作環境

  • 秀丸

    秀丸エディタ ver8.73以上

  • Microsoft VC++ 再頒布可能パッケージ

    Visual Studio 2017 C++ ランタイム
    x86版をインストールしたことが無い方はインストールしてください。
    お手持ちのOSが64bitか32bitかには関わりなく、x86版のインストールが必要です。

  • Microsoft .NET

    .NET Framework 4.0以上。

  • IronRuby

    インストールしなくとも動作自体はしますが、その際は、.NETのライブラリのみを使うことが出来る形となります。
    では Ironruby.msi のインストーラーが見つからないと思いますので、https://github.com/komiyamma/ironruby から取得してください。 )
    各種セッティングを自動で行うためには、「IronRuby.msi」で経由でインストールする必要があります。

  • 秀丸エディタ 64bit版について

    秀丸エディタ64bit版をご利用の方は、hmRb_x64.zipをダウンロードし、hmRb.dllを差し替えてください。
    (又、この場合は、Microsoft VC++ 再頒布可能パッケージは、64bit版をインストールしてください。)

  • 秀丸エディタ ストアアプリ版について

    hmRbはストアアプリ版でも利用することが出来ます。
    (但しデスクトップ版に比べてhmRbの起動が少し遅くなります。)
    詳細は左メニューのストアアプリ版での利用などを参照してください。

インストール

  • hmRb.zipを解凍する。
  • 「hmRb.dll」と「IronRuby.Libraries.dll」を秀丸エディタのディレクトリ内(hidemaru.exeと同じ場所)へと コピーする。
    (原則的には、hidemaru.exeと同じ場所である必要があります。これは.NET FrameWorkのdllを動作させる仕組みに拠るためです。)

特徴

  • .NET Frameworkの多くの機能が利用可能。

    秀丸マクロから「.NET FrameWork」の「System.Windows.Formsコンポーネント系」を実行した例
    PICTURE
  • ユニークな言語「IronRuby」

    プログラミング言語としては「Ruby」派生の1つとなる「IronRuby」となります。
    「IronRuby」は、かつてMicrosoftによって「Visual Studio 2010」にて正式にサポートされた言語です。
    (※但し、それ以降はサポートされていません。又、IronRubyプロジェクトは事実上停止しています。)

利用シーン

  • マクロ内で豊富な.NETのAPIの機能を利用したい!!

    WindowsのAPIを綺麗に使いやすくした .NETを 秀丸マクロで取り扱うことが出来ます。

    • 文字列処理
    • ウィンドウズの各機能へのアクセス
    • 各種GUIコンポーネントやイベントハンドラ
    • インターネット上のデータの取得
    • 各種ファイル処理
    • 並列スレッド
    • 簡易な数学計算

    に至るまで、.NET Frameworkにアクセス可能です。

  • 秀丸エディタ 8.66 以降では、IronRubyをそのままマクロ内に記述出来る!!

    秀丸エディタ 8.66にて、「ヒアドキュメント」が実装されたため、
    IronRubyをそのままマクロ内に記述出来るようになりました。(エスケープ等の必要性がなくなりました!)
    詳細は後述されています。

  • Rubyから秀丸マクロの変数やシンボルにアクセス出来る!! 秀丸マクロも実行できる!!

    この機能により、「秀丸マクロならでわの機能」と「IronRubyの性能」が融合し、飛躍的に実装の幅が広がりました。

  • Rubyにある、あの正規表現が必要だ!! なければ生きていけない!!

    あのPerl方式の正規表現があるだけでも利用価値があります。

  • 秀丸マクロの言語としてのパワーが弱い!! 圧倒的なグラマーが欲しい!!

    Ruby 1.9.2とほぼ互換の文法となります。
    Rubyとしては古くなってしまいましたが、組み込み言語としては十分に過ぎるほどの文法と言えるでしょう。

秀丸マクロの代替言語としては最もポテンシャルが高い

  • エディタのマクロで比較的使用頻度が高い正規表現が使いやすい

    IronPythonには言語そのものには高度な正規表現がありませんが、IronRubyにはそれがあります。
    エディタ向けのスクリプト言語としては、この点は評価ポイントが高いのです。

  • NGenを利用すると、起動が非常に速い

    IronRuby.Libraries.dllをNGenで登録することで、
    実行時にひっかかりを体感できないほど速くなります。

  • IronPythonには及ばないが、.NETとの融合性がそこそこ高い

    .NETのクラスをruby層で継承するなども可能です。

  • C#などで独自に作った.dllが読み込みしやすい

    元々用意されている.NETのクラスのみならず、
    独自に自作したマネージドのファイルも非常に読み込みしやすくなっています。

  • スクリプトを切り貼りしてインデントが崩れてもOK

    Pythonですと、切り貼りしているうちにインデントが崩れてエラーになってしまいますが、
    Rubyではその心配がありません。

  • 2つのdllで動作する!!

    hmPy同様、hmRb.dllとIronRuby.Libraries.dllの2つのdllだけで動作し、
    他の独立したインタプリタは必要ありません。 又、秀丸マクロと同じプロセス空間で動作していますので、ガッチリ秀丸と完全連携します。

ファイルの文字コード

hmRbは「秀丸マクロ」「.rbファイル」共に
「utf-8(BOM有)」もしくは「utf-16(BOM有)」で記述することを想定
しています。
(.rbファイルに限っては「utf-8(BOM無)」にも対応しています。)

「w付き」関数を利用のこと

「dllfuncではなく、必ず「dllfuncw」を、dllfuncstrではなく、「dllfuncstrw」を使ってください。

一番簡単なソース例

「秀丸マクロ・マクロ変数」「Ruby」「.NET Framework」をまぜこぜに出来るため、非常に強力なパワーがあります。

  • .NET FrameWorkを使って、ダイアログ表示

    #RB = loaddll( hidemarudir + @"\hmRb.dll" );
    
    $message = "秀丸からのメッセージ";
    $title = "秀丸からのタイトル";
    
    #_ = dllfuncw(#RB, "DoString", R"IRONRUBY(
    require "mscorlib"
    load_assembly "System"
    load_assembly "System.Windows.Forms"
    
    include System::Windows::Forms
    
    if "表示" =~ /表/
        MessageBox.Show( $hm.Macro.Var['$message'], $hm.Macro.Var['$title'], MessageBoxButtons.YesNoCancel )
    end
    )IRONRUBY"
    );
    
    freedll(#RB);
    

    PICTURE

  • .NET FrameWorkを使って、秀丸とインタラクティブに機能するフォームの例

    #RB = loaddll( hidemarudir + @"\hmRb.dll" );
    
    #_ = dllfuncw(  #RB, "DoString", R"IRONRUBY(
    require 'mscorlib'
    load_assembly "System.Windows.Forms"
    load_assembly "System.Drawing"
    
    include System::Windows::Forms
    include System::Drawing
    
    $result_from_ruby = $hm.Macro.Var['date']; # 秀丸マクロの「date」シンボルの文字列
    
    class IronRubyForm < Form
    
      def initialize()
        self.Text = 'こんにちわ'
        self.Size = Size.new(400, 200)
        @btn = Button.new
        @btn.Location = Point.new(16, 16)
        @btn.Width = 200
        @btn.Text = "クリック"
        @btn.Click { |sender, e| self.btn_Click(sender, e) }
    
        @count = 0;
    
        self.Controls.Add(@btn)
      end
    
      def btn_Click(sender, e)
        @count += 1;
          $hm.Macro.Var['$count'] = @count.to_s
          MessageBox.Show( "今開いているファイルは…\n" + $hm.Macro.Var['filename2'] );
    
          $hm.Macro.Eval <<-'MACRO'
            // アウトプット枠へ出力
            #OP = loaddll("HmOutputPane.dll");
            #ret = dllfunc(#OP, "Output",hidemaruhandle(0), $count);
            freedll(#OP);
          MACRO
      end
    
    end
    
    
    f = IronRubyForm.new
    f.ShowDialog
    
    )IRONRUBY"
    );
    
    freedll( #RB );
            

注意点

  • 「Rubyの標準ライブラリ」に相当するもののほとんどは、hmRb/IronRubyには標準では搭載していません。
    そのほとんどのものは.NET Frameworkと機能がかぶるためです。.NET Frameworkライブラリを積極的に活用しましょう。
    ( 但し、IronRuby 1.1.3「msiインストーラー」でインストールしておけば、パス登録や必要な設定がされるため、
    hmRbからでもIronRubyの標準ライブラリを自動的に使うことが出来ます。
    (ironruby.msi インストーラーが見つからない場合、https://github.com/komiyamma/ironruby から取得してください)
    )
    IronRuby.msi はマイクロソフトのApache2 ライセンスとなります。

IronRubyの採用は慎重に!!

いい点ばかりではありません。注意すべき点もあります。

  • マイクロソフトのIDEでのサポートは無い

    マイクロソフトによるサポートがずっと続いているIronPythonとは異なり、
    IronRubyはVisual Studio 2010でデビューしたもの、その後組み入れは終了してしまいました。
    又、IronRubyの更新は2012年以降停滞しているため、今後更新されないであろうことが予想されます

Rubyとして捉えるのではなく秀丸マクロの代替言語として

Rubyとして捉えるのではなく、

  • .NETのライブラリもほとんど全て利用可能で
    (IronRubyが更新されなくとも、.NETの将来のバージョン、およびそれらを前提としたライブラリ群は利用可能です。
    よって将来のライブラリの恩恵は受けることが出来ます)
  • 秀丸マクロそのものが実行可能で
  • 秀丸マクロの変数にも自由に読み取り・書き込みが可能で
  • Rubyにそっくりな強力な文法をもち、もう文法が変化することはない。

そんな「Rubyそっくりの秀丸マクロの代替強化言語」が提供された、と捉えるのがよいのではないでしょうか。

ライセンス

  • hmRb

    hmRbは、Apache License 2.0となります。

    ソースの場所

    • Githubにソースがあります。

      (※ Githubでリポジトリの「サブディレクトリ」だけをダウンロードする簡単な方法は、こちら)

  • IronRuby

    IronRubyについても、Apache License 2.0です。
    詳細は、http://ironruby.net/を見てください。