最終更新日 2021-03-21

pythonをマクロ(.mac)に埋め込むか or マクロの外に(.py)として記述するか

強力な開発環境の利点を活かすためにも、.pyファイルと.macファイルは分けるのが良い

色々と思考錯誤した結果、他の言語ならまだしも、Pythonに限っては、
この「秀丸マクロ内にPythonを直接記述する」といったことはあまりオススメしません。

1つは、「pythonはインデント自体が文法に含まれる」ため、
pythonを十分フォローするIDE(Visual Studioなど)や、
pythonを十分にフォローするエディタ(Visual Studio Codeなど)を利用した方が
開発が格段に捗ります。
また、python層でエラーが発生した場合でも、エラーメッセージがわかりやすいものとなります。

秀丸マクロがここに入り込むと、逆にこういった補完や高度なリアルタイム分析が機能しなくなります。

そのため、もし、.macにpythonを埋め込むとしても、
「.pyとして独立して制作し、完成した後、最後に.mac内にコピペする」
といった形となるでしょう。

当サイト上のhmPython3のサンプルの例では、ページ面節約の都合上、
多くの例において、「秀丸マクロの中」に直接「Pythonの記述」を埋め込んでいますが、
本来は別々のファイルとすることをオススメします。

秀丸マクロ内に直接Pythonを埋め込んだ例

mytest.mac
#DLL = loaddll( hidemarudir + @"\hmPython3" );

#r = dllfuncw(#DLL, "DoString", R"PY(
from hmPython import hm
 
import random
r = random.random()

ret = [ x*2 for x in range(1, 10) ]
hm.debuginfo( ret )

# 秀丸マクロ変数の「date」という定義済みの値を使う
hm.debuginfo( hm.Macro.Var["date"] )

hm.Macro.Var["$mes"] = "秀丸のマクロの変数「$mes」へと値を代入";

# Python側から秀丸マクロを実行する
hm.Macro.Eval(r'''
    message $mes;
''')

)PY"
);

freedll(#DLL);

秀丸マクロからはimportだけして、Pythonファイルは別ファイルにした例

mytest.mac
#DLL = loaddll( hidemarudir + @"\hmPython3" );
#r = dllfuncw(#DLL, "DoString", "import mytest");
freedll(#DLL);
mytest.py
from hmPython import hm
 
import random
r = random.random()

ret = [ x*2 for x in range(1, 10) ]
hm.debuginfo( ret )

# 秀丸マクロ変数の「date」という定義済みの値を使う
hm.debuginfo( hm.Macro.Var["date"] )

hm.Macro.Var["$mes"] = "秀丸のマクロの変数「$mes」へと値を代入";

# Python側から秀丸マクロを実行する
hm.Macro.Eval(r'''
    message $mes;
''')