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

  • 概要

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

  • ダウンロード

    hmPy.zipファイル。ver 1.531
    └更新日 2017/07/22
  • 動作環境

    • 秀丸

      秀丸エディタ ver8.66以上

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

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

    • Microsoft .NET

      .NET Framework 4.0以上。

    • IronPython 2.7.7

      http://IronPython.net/より、
      IronPython 2.7.7を「.msiのインストーラーを利用して」インストールしてください。
      (※インストーラーを経由してインストールすることでアセンブリのGAC登録などがされます)

      正確に、このバージョン「2.7.7」である必要性があります。

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

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

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

      hmPyはストアアプリ版でも利用することが出来ます。詳細は左メニューのストアアプリ版での利用などを参照してください。

  • インストール

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

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

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

      プログラミング言語としては「Python」派生の1つとなる「IronPython」となります。
      「IronPython」はMicrosoftによって「Visual Studio 2010・2012・2013・2015・2017」にて正式にサポートされて続けている数少ない言語の1つです。

  • 利用シーン

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

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

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

      に至るまで、.NET Frameworkへと自由に美しくアクセス可能です。

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

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

    • 秀丸マクロの言語としてのパワーが弱い!! 汎用言語の記述力が欲しい!!

      IronPythonは、プログラミング上の「文法記述」としては、Python2.7とほぼ完全互換です。
      Pythonは世界中で、そして、あらゆる分野で利用される世界トップクラスの人気の言語です。

    • インプロセスで動作する!!

      これまで秀丸マクロライブラリなどに、よくあがっていたマクロ
      「別途インタプリタが別プロセスとして実行され、その実行結果を返します」
      といったものが大半でした。
      (例えば、別途Perlインタプリタが入っていれば、それを呼び出し、解釈し、結果をアウトプット枠に表示します、など)

      しかし、このhmPyは違います!!
      秀丸マクロと同じプロセス空間で動作していますので、ガッチリ秀丸と完全連携しています。

  • IronPythonである理由。

    1. 「ShiftJIS(CP932)との文字列やファイルのIOの文字コード」の変換を、可能な限り自然に隠ぺい的に行ってくれる
    2. .NET FrameWorkの大半の機能が自然な表記で使える
    3. 世界で10本の指には入るユーザー数が存在するプログラミング言語、もしくはその派生言語。
    4. 少なくとも1日あたり100万人以上の使用ユーザーが居るメジャーな開発環境で
      2017年現在、正式ツールとして組み入れられている。
    このすべて満たす「スクリプト言語」は、あらゆる言語の中で「IronPython」だけです。
  • 秀丸マクロとIronPythonの連携

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

    「a」に「3」、「b」に「10」を定義し、足しこんで表示。

      #PY = loaddll( hidemarudir + @"\hmPy.dll" );
      
      // 以下の文字列を「IronPythonの環境スコープへと追加書き込みし、追加分だけ実行する」
      #_ = dllfuncw(#PY, "DoString", R"IRONPYTHON(
      a = 3
      b = 10
      
      hm.Macro.Var["#a"] = a  # python空間 ⇒ 秀丸マクロ空間へ代入
      hm.Macro.Var["#b"] = b  # python空間 ⇒ 秀丸マクロ空間へ代入
      
      # 秀丸マクロとして文字列を評価して実行
      hm.Macro.Eval( r"""
          message(str(#a));
          message(str(#b));
      """
      );
      
      c = a + b
      hm.debuginfo(c)  # DebugMonitorに表示。
      
      hm.Macro.Var["#c"] = c  # python空間 ⇒ 秀丸マクロ空間へ代入
      
      )IRONPYTHON"
      );
      
      // 秀丸マクロ空間に代入されている変数は、当然pythonの外から見える
      message(str(#c));
      
      freedll(#PY);
      

    .NET FrameWork を使った簡単なソース例

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

      #PY = loaddll( hidemarudir + @"\hmPy.dll" );
       
      #_ = dllfuncw(#PY, "DoString", R"IRONPYTHON(
      
      import clr                 # .NETが使えるようにする。
      import System              #  Systemのシンボルを読み込み
      clr.AddReferenceByPartialName('System.Windows.Forms')  # System.Windows.Forms を使えるようにする。
      
      System.Windows.Forms.MessageBox.Show( "秀丸からのメッセージ", "秀丸からのタイトル", System.Windows.Forms.MessageBoxButtons.YesNoCancel )
      
      )IRONPYTHON"
      );
      
      freedll(#PY);
      

    フォームを利用した簡単な例

      #PY = loaddll( hidemarudir + @"\hmPy.dll" );
      
      #_ = dllfuncw(  #PY, "DoString", R"IRONPYTHON(
      import clr
      clr.AddReferenceByPartialName('System.Windows.Forms')
      clr.AddReferenceByPartialName('System.Drawing')
      
      from System.Windows.Forms import *
      from System.Drawing import *
      
      class IronPythonForm(Form):
      
        def __init__(self):
          self.Text = 'こんにちわ'
          self.Size = Size(400, 200)
          self.btn = Button()
          self.btn.Location = Point(16, 16)
          self.btn.Width = 200
          self.btn.Text = "クリック"
          self.btn.Click += self.btn_Click
      
          self.count = 0;
      
          self.Controls.Add(self.btn)
      
        def btn_Click(self, sender, e):
          self.count += 1
          hm.Macro.Var['$count'] = self.count # 秀丸マクロの$count変数にpythonのself.countの値をコピー
          MessageBox.Show( "今開いているファイルは…\n" + hm.Macro.Var['filename2'] );
      
          hm.Macro.Eval(r"""
            // アウトプット枠へ出力
            #OP = loaddll("HmOutputPane.dll");
            #ret = dllfunc(#OP, "Output",hidemaruhandle(0), $count);
            freedll(#OP);
          """)
      
      f = IronPythonForm()
      f.ShowDialog()
      
      )IRONPYTHON"
      );
      
      freedll( #PY );
      
  • その他解説

    • 左メニューに各解説を用意しました。
  • ライセンス

    • hmPy

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

      ソースの場所

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