hmRb (秀丸マクロ用 .NET Framework ライブラリ via IronRuby)
IronRubyを用いて、秀丸マクロで「.NET Frameworkの多くの機能をシームレスに近い形で利用する 」ためのライブラリとなります。
ダウンロード
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の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.msi インストーラーが見つからない場合、https://github.com/komiyamma/ironruby から取得してください)
)
IronRuby.msi はマイクロソフトのApache2 ライセンスとなります。
IronRubyの採用は慎重に!!
いい点ばかりではありません。注意すべき点もあります。
Rubyとして捉えるのではなく秀丸マクロの代替言語として
Rubyとして捉えるのではなく、
.NETのライブラリもほとんど全て利用可能で
(IronRubyが更新されなくとも、.NETの将来のバージョン、およびそれらを前提としたライブラリ群は利用可能です。
よって将来のライブラリの恩恵は受けることが出来ます)
秀丸マクロそのものが実行可能で
秀丸マクロの変数にも自由に読み取り・書き込みが可能で
Rubyにそっくりな強力な文法をもち、もう文法が変化することはない。
そんな「Rubyそっくりの秀丸マクロの代替強化言語」が提供された、と捉えるのがよいのではないでしょうか。