sakura icon indicating copy to clipboard operation
sakura copied to clipboard

マクロの Python 対応

Open beru opened this issue 2 years ago • 24 comments

PR の目的

サクラエディタのマクロを Python で書けるようにする事が目的です。

カテゴリ

  • 機能追加

PR の背景

サクラエディタは WSH(JScript, VBScript)マクロ と PPAマクロが使えます。PPAマクロは 32bit 版のみ対応です。 最近Pythonが広く使われるようになっているので、それに対応したくなりました。

このPRでは LoadLibrary したDLLから GetProcAddress を使って明示的なリンクでシンボルを探して使用する事で、ビルド環境にPythonが無くてもビルド出来るようにしています。

PR のメリット

  • Pythonでマクロが書けるようになります。
  • Pythonのエコシステムを間接的に使う事が出来ます。

PR のデメリット (トレードオフとかあれば)

仕様・動作説明

メニューの ツール > 名前を指定してマクロ実行 を選ぶとファイルダイアログが表示されますが、そこで拡張子が *.py の Python ファイルを選べるようにしました。

Python スクリプト側では import SakuraEditor と記述してそのモジュールの関数を使ってサクラエディタのコマンドやマクロ関数を呼び出す事が出来ます。

テスト内容

from time import time,ctime
import SakuraEditor

#SakuraEditor.FileNew()
#SakuraEditor.FileOpen("", 0, 0, "C:\\")
#SakuraEditor.GetFilename()
clipboard = SakuraEditor.GetClipboard()
SakuraEditor.AddTail("clipboard : " + clipboard)

print('Today is', ctime(time()))

開発時には上記のようなPythonスクリプトのファイルを指定して実行確認を行いました。

PR の影響範囲

マクロ関連

関連 issue, PR

#1327

参考資料

https://docs.python.org/3/extending/embedding.html

beru avatar Oct 02 '22 16:10 beru

:white_check_mark: Build sakura 1.0.4182 completed (commit https://github.com/sakura-editor/sakura/commit/175294c129 by @beru)

AppVeyorBot avatar Oct 02 '22 17:10 AppVeyorBot

:x: Build sakura 1.0.4183 failed (commit https://github.com/sakura-editor/sakura/commit/4bed86e126 by @beru)

AppVeyorBot avatar Oct 10 '22 12:10 AppVeyorBot

:white_check_mark: Build sakura 1.0.4184 completed (commit https://github.com/sakura-editor/sakura/commit/9f6b5024cf by @beru)

AppVeyorBot avatar Oct 10 '22 14:10 AppVeyorBot

:white_check_mark: Build sakura 1.0.4185 completed (commit https://github.com/sakura-editor/sakura/commit/2496668abb by @beru)

AppVeyorBot avatar Oct 10 '22 15:10 AppVeyorBot

:white_check_mark: Build sakura 1.0.4186 completed (commit https://github.com/sakura-editor/sakura/commit/2c648564d8 by @beru)

AppVeyorBot avatar Oct 10 '22 19:10 AppVeyorBot

:white_check_mark: Build sakura 1.0.4187 completed (commit https://github.com/sakura-editor/sakura/commit/ee22350f6b by @beru)

AppVeyorBot avatar Oct 10 '22 20:10 AppVeyorBot

:white_check_mark: Build sakura 1.0.4188 completed (commit https://github.com/sakura-editor/sakura/commit/c73651a02d by @beru)

AppVeyorBot avatar Oct 11 '22 13:10 AppVeyorBot

:white_check_mark: Build sakura 1.0.4189 completed (commit https://github.com/sakura-editor/sakura/commit/eaad38d484 by @beru)

AppVeyorBot avatar Oct 11 '22 13:10 AppVeyorBot

:white_check_mark: Build sakura 1.0.4204 completed (commit https://github.com/sakura-editor/sakura/commit/bae93df920 by @beru)

AppVeyorBot avatar Dec 04 '22 16:12 AppVeyorBot

:white_check_mark: Build sakura 1.0.4205 completed (commit https://github.com/sakura-editor/sakura/commit/a7b366d02a by @beru)

AppVeyorBot avatar Dec 04 '22 17:12 AppVeyorBot

仕様の疑問点です。

import SakuraEditor

#SakuraEditor.FileNew()
  1. import SakuraEditorの記述は必須ですか? javascriptとかだと不要なので、合わせたほうが良い気がしました。
  2. #SakuraEditor#は必須ですか? pythonに詳しくないからか、見たことない書き方でした。

berryzplus avatar Dec 15 '22 23:12 berryzplus

CIのチェックに関して。

  1. CodeFactorの指摘(関数の複雑度高過ぎ×2件) 対応無理なのでスルーでよい認識。
  2. SonarCloudの指摘(コードカバレッジ8割未達、CodeSmell多数) カバレッジ8割クリアは厳しいが、修正部分に対して3%はあまりに低いような。 CodeSmellはスルーしてよい認識。

結局、何をもってOKにしますか?になりそう。

berryzplus avatar Dec 18 '22 10:12 berryzplus

@berryzplus さん

仕様の疑問点です。

import SakuraEditor

#SakuraEditor.FileNew()
  1. import SakuraEditorの記述は必須ですか? javascriptとかだと不要なので、合わせたほうが良い気がしました。

CPythonMacroManager::ExecKeyMacro の実装に手を入れる事で不要にすることは出来るかもしれません。

  1. #SakuraEditor#は必須ですか? pythonに詳しくないからか、見たことない書き方でした。

Python では行コメントに # 文字を使います。shell script といっしょですね。

beru avatar Dec 19 '22 11:12 beru

@berryzplus さん

結局、何をもってOKにしますか?になりそう。

おおまかには、Pythonスクリプトで書いたサクラエディタのマクロを実行できる環境が整った段階でOKじゃないかなと思います。

動作確認に関しては、どのバージョンのPythonから動作するか、マクロの関数とコマンドが一通りの問題無く動くのかの確認等をした方が良さそうですが、これはPR作成者がまず行うべきですね。

ユーザーが使う際にサクラエディタのインストールだけでなく追加でPythonのインストールも必要になるので、少し導入に敷居があるかもしれないですね。

beru avatar Dec 19 '22 12:12 beru

  1. import SakuraEditorの記述は必須ですか? javascriptとかだと不要なので、合わせたほうが良い気がしました。

CPythonMacroManager::ExecKeyMacro の実装に手を入れる事で不要にすることは出来るかもしれません。

これは「どっちがいい?」と聞いてます。

「やりたい」「やりたくない」「どっちでもいい」があって、 「実装する」「実装しない」「そのうち実装するかもしれない」があると思います。

かなり面倒だと思うので「やらん」でOKです。 pipの話を持ち出すとややこしいんですが、将来的にやる想定なら「やらん」が正しい気がします。

2. #SakuraEditor#は必須ですか? pythonに詳しくないからか、見たことない書き方でした。

Python では行コメントに # 文字を使います。shell script といっしょですね。

これはコードを読み違えてたのでスルーしてもらって大丈夫です。

結局、何をもってOKにしますか?になりそう。

おおまかには、Pythonスクリプトで書いたサクラエディタのマクロを実行できる環境が整った段階でOKじゃないかなと思います。

動作確認に関しては、どのバージョンのPythonから動作するか、マクロの関数とコマンドが一通りの問題無く動くのかの確認等をした方が良さそうですが、これはPR作成者がまず行うべきですね。

「マクロの関数とコマンドが一通り問題なく動く」を確認する方法をどうしましょう。

python + appium でRPAできないか検討してみてますが、 いったんは手動確認するしかないかなぁと思ってます。 ターゲットのpythonバージョンは最新(か、公式でサポートされている最古のバージョン)でよいと思います。

ユーザーが使う際にサクラエディタのインストールだけでなく追加でPythonのインストールも必要になるので、少し導入に敷居があるかもしれないですね。

CIでのテスト、開発時に行うテストに限定して考えれば、最新のpythonインタープリタがインストールされているを前提して進めて良い気がします。python使わない人がpythonマクロ使うとも思えないのでインストーラーへの組み込みは後回しでよいと思います。

berryzplus avatar Dec 19 '22 12:12 berryzplus

これは「どっちがいい?」と聞いてます。

「やりたい」「やりたくない」「どっちでもいい」があって、 「実装する」「実装しない」「そのうち実装するかもしれない」があると思います。

かなり面倒だと思うので「やらん」でOKです。 pipの話を持ち出すとややこしいんですが、将来的にやる想定なら「やらん」が正しい気がします。

私個人の意見としては「どっちでもいい」です。そういえばマクロのPython対応をするとなるとヘルプの更新も必要になりそうですね。

「マクロの関数とコマンドが一通り問題なく動く」を確認する方法をどうしましょう。

python + appium でRPAできないか検討してみてますが、 いったんは手動確認するしかないかなぁと思ってます。 ターゲットのpythonバージョンは最新(か、公式でサポートされている最古のバージョン)でよいと思います。

手動確認を考えていました。テスト結果のEvidenceが自己申告になりますが…。

Python + Appium でGUI自動操作して確認は出来ると思いますが、それを使ったテストケースの用意とパスがPRのマージに必要、という条件を設定してほしくはないです。個人的には、新しいハードルを追加で用意してそれをクリアしないと駄目、というように決めるのはPRがマージされるペースが落ちてしまうのでやってほしくないです。

CIでのテスト、開発時に行うテストに限定して考えれば、最新のpythonインタープリタがインストールされているを前提して進めて良い気がします。python使わない人がpythonマクロ使うとも思えないのでインストーラーへの組み込みは後回しでよいと思います。

CIでのテストに関しては、CIのサービスが用意している最新のPythonを使うので良さそうですね。

開発時に行うテストに関してはPython必須にはしたくないです。

サクラエディタのインストーラーにPythonランタイムを組み込むことは考えていません。Portable Winpythonを使う事で可能かもしれませんが、容量が無駄に増えてしまうのは好ましくありません。

beru avatar Dec 20 '22 03:12 beru

私個人の意見としては「どっちでもいい」です。

はい。では「やらない」で。 当面それで問題ないように思います。

そういえばマクロのPython対応をするとなるとヘルプの更新も必要になりそうですね。

ヘルプは今回触らないで良い気がします。

手動確認を考えていました。テスト結果のEvidenceが自己申告になりますが…。

何を確認したかが残れば、手動確認でよいです。 確認に使用したpythonスクリプトは必須ではないと思います。

このPRがマージされるまでに機能テストのPR(python必須)を出すかも知れませんが、連携させる必要はないと思ってます。

berryzplus avatar Dec 20 '22 16:12 berryzplus

:white_check_mark: Build sakura 1.0.4219 completed (commit https://github.com/sakura-editor/sakura/commit/4498c98ac3 by @beru)

AppVeyorBot avatar Dec 20 '22 23:12 AppVeyorBot

:white_check_mark: Build sakura 1.0.4220 completed (commit https://github.com/sakura-editor/sakura/commit/252c50badd by @beru)

AppVeyorBot avatar Dec 21 '22 00:12 AppVeyorBot

:white_check_mark: Build sakura 1.0.4221 completed (commit https://github.com/sakura-editor/sakura/commit/d9ffc5fa5d by @beru)

AppVeyorBot avatar Dec 22 '22 15:12 AppVeyorBot