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

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

  • 秀丸マクロとIronRubyの連携

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

    ダウンロード

    hmRb.zipファイル。ver 1.551
    └更新日 2017/09/04
  • 動作環境

    • 秀丸

      秀丸エディタ ver8.66以上

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

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

    • Microsoft .NET

      .NET Framework 4.0以上。

    • 秀丸エディタ 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コンポーネント系」を実行した例
    • ユニークな言語「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);
      

    • .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の採用は慎重に!!

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

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

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

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

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

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

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

  • ライセンス

    • hmRb

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

      ソースの場所

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

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