[要望]レジストリヘルプNo.38894
fzok4234 さん 21/04/27 23:48
 
毎度お世話になっております。

さて、秀丸エディタの環境設定についてですが、設定が保存されているレジストリ
HKEY_CURRENT_USER\Software\Hidemaruo\Hidemaru
HKEY_CURRENT_USER\Software\Hidemaruo\HmJre
内の書式を完全に文書化した「レジストリヘルプ」を秀丸エディタに同梱してもらい
たいのですが、
よろしいでしょうか。

というのは、ユーザーが行った「動作環境」などの環境設定が原因で秀丸エディタが
保護違反などで
起動できなくなるバグが発生したときに、直前に行った環境設定を元に戻す操作を行
って復旧させる
必要があるためです。

当方で別件で報告したバグ
https://www.maruo.co.jp/turukame/3/x10363_.html?a=9#10363
では、保護違反を引き起こすマクロを「自動起動マクロ」に登録してしまったため、
秀丸エディタを
起動することすらできなくなり、「自動起動マクロ」ダイアログの項目を元に戻すこ
とが不可能と
なってしまいました。そこで、自動起動マクロのレジストリデータ
Key   = HKEY_CURRENT_USER\Software\Hidemaruo\Hidemaru\Env
Value = EventMacroActive
Type  = REG_SZ
などを長さ0の文字列に修正することで何とか復旧させることができました。

このことから、環境設定の変更後に起動すらできなくなるようなバグが発生したとき
に「レジストリを
手作業で修正する」ためにレジストリの書式を知る必要性を思い知らされました。特
に今回は、REG_SZ値に
マクロのパスがそのまま格納されていたため容易に復旧させることが可能でしたが、
これがもしREG_DWORD値の
フラグデータやREG_BINARY値のバイトデータだった場合は編集が極めて困難なため、
HKEY_CURRENT_USER\Software\Hidemaruo\Hidemaru
キーに含まれている大切な環境設定をキーごと丸ごと破棄しないといけない事態に陥
っていたかも
しれません。

このようなことから、レジストリデータの書式、とりわけフラグやバイトデータの構
造をわかりやすく
解説したヘルプファイルを同梱していただければ大変助かります。記述方法はなるべ
く「動作環境」などの
ダイアログの各項目と1対1の対応となるようにして、C言語やWin32プログラミングの
知識が無くても
理解できるように記述し、緊急時にユーザーがすぐ対応できるよう配慮された内容に
なるようお願い申し
上げます。



[ ]
RE:38894 [要望]レジストリヘルプNo.38895
でるもんたいいじま さん 21/04/28 04:34
 
こんにちは、でるもんた・いいじまです。

> さて、秀丸エディタの環境設定についてですが、設定が保存されているレジストリ
> HKEY_CURRENT_USER\Software\Hidemaruo\Hidemaru
> HKEY_CURRENT_USER\Software\Hidemaruo\HmJre
> 内の書式を完全に文書化した「レジストリヘルプ」を秀丸エディタに
> 同梱してもらいたいのですが、よろしいでしょうか。

「完全に」という点には反対します。秀丸側の都合で仕様変更したく
なっても永久に不可能になり、メンテナンスに支障をきたします。

> というのは、ユーザーが行った「動作環境」などの環境設定が原因で
> 秀丸エディタが保護違反などで起動できなくなるバグが発生したときに、
> 直前に行った環境設定を元に戻す操作を行って復旧させる必要があるためです。

ということ「だけ」が目的であれば、そもそもバグが出ること自体が
超レアケースですので、「アナタが勝手にやっていれはいい、それだけの
こと」と言わざるを得ません。

> 当方で別件で報告したバグ
> https://www.maruo.co.jp/turukame/3/x10363_.html?a=9#10363
> では、保護違反を引き起こすマクロを「自動起動マクロ」に登録して
> しまったため、秀丸エディタを起動することすらできなくなり、

このケースの場合、問題のマクロファイルを削除(または移動)してから
秀丸を起動すれば解決するのではないですか?
世の中どんなアプリでも、設定ファイルが壊れた時は大昔からこういう
方法で解決してきたのですよ。

> C言語やWin32プログラミングの知識が無くても理解できるように記述し、

その時点で無理な注文です。
自分で考えてREG_BINARYを操作する」という時点で、16進数・\0・リトル
エンディアンの知識は必須です。

それについての解説をわざわざ読まなければ理解できないレベルの人に
レジストリをいじらせたら「ヘルプに書いてあった通りのことをしたら
壊れた。弁償汁。」と言い出す人が確実に出てくるでしょうし、実際、
過去にそういう口調で高圧的にクレームを言う人を何人も見てきました。

☆ ☆ ☆

というかfzok4234さん、なんでわざわざ秀丸にこだわるんですかね?
オーブンソースのエディタをどこかから引っ張ってきて、納得のいくまで
とことんいじり倒したほうがハッピーになれるんじゃないですか?
Visual Studio Code あたりはどうですか?

秀丸の30年の歴史を(結果的にでも)頭から全否定するような主張には
賛同しかねますし、担当さんはやんわりと流していますが個人的には
反感しか覚えません。

[ ]
RE:38895 [要望]レジストリヘルプNo.38897
fzok4234 さん 21/04/28 09:01
 
> 「完全に」という点には反対します。秀丸側の都合で仕様変更したく
> なっても永久に不可能になり、メンテナンスに支障をきたします。

一応、互換性維持のためレジストリ書式も度々仕様変更されることはないと
いう前提での話です。マクロ構文など、アップデートに伴う機能追加を行う
場合でも極力互換性を維持しようと努力されている様子がうかがえます。

> そもそもバグが出ること自体が超レアケースですので、「アナタが勝手に
> やっていれはいい、それだけのこと」と言わざるを得ません。

本会議室への投稿を読んでいると、「○○したら保護違反が出ました。dumpを
メールでお送りします。」というやり取りを結構見ているような気がします。
保護違反で落ちるようなバグは決して「レアケース」とは言えないのでは
ないでしょうか。

> このケースの場合、問題のマクロファイルを削除(または移動)してから
> 秀丸を起動すれば解決するのではないですか?
> 世の中どんなアプリでも、設定ファイルが壊れた時は大昔からこういう
> 方法で解決してきたのですよ。

今回のようなマクロ等のファイルに起因する場合はこの方法でも対処できます。
しかし、環境設定を特定の状態にしただけで保護違反で落ちるようになった場合、
カスタマイズしつくされた自分/自社だけの設定をキーごと削除する以外に
復旧する手段がなくなることも考えられます。いちいち環境設定をいじるたびに
設定をバックアップする慎重なユーザーだけがいるとは考えられないわけ
ですし。

> 16進数・\0・リトルエンディアンの知識は必須です。

ここら辺の知識は秀丸マクロも含めてどのプログラミング言語のユーザーに
とっても必要なものと思われます。ここで取り上げたのはあくまで「C言語+
Win32 API」のみについてであります。JavaやPythonなど世の中にはたくさん
プログラミング言語があります。それらのユーザーが皆「Win32 APIでの
ネイティブ開発」を行っているわけではありません。C言語未経験あるいは
ネイティブ開発未経験のユーザーにいきなり「HINSTANCEとかLPSTRなどの
Win32特有の型を含むC言語の構造体」の様式でREG_BINARY値内のデータ構造を
示してもすぐ理解でできるはずがありません。2進数/16進数/U+0000/エンディアンの
知識ぐらいは秀丸マクロのユーザーでも持ち合わせていると思われますので、
これらを知っているユーザーならだれでも理解できる様式でデータ構造を
示してもらえればとの思いで述べさせていただいた次第であります。

> それについての解説をわざわざ読まなければ理解できないレベルの人に
> レジストリをいじらせたら「ヘルプに書いてあった通りのことをしたら
> 壊れた。弁償汁。」と言い出す人が確実に出てくるでしょうし、実際、
> 過去にそういう口調で高圧的にクレームを言う人を何人も見てきました。

もちろん、レジストリを直接操作することは傷口を広げるリスクがある行為であり、
ユーザーはこのことに同意したうえで修正を行うことになります。

> 秀丸の30年の歴史を(結果的にでも)頭から全否定するような主張には
> 賛同しかねますし、担当さんはやんわりと流していますが個人的には
> 反感しか覚えません。

上記で述べましたが、秀丸では「互換性維持」の努力が非常に多くみられます。
当方でも、なるべくこのことを尊重したうえで要望や機能改善を本会議室で
申し出るよう心がけています。決して秀丸の秀丸の長い歴史を全否定しようと
しているわけではございません。



[ ]
RE:38894 [要望]レジストリヘルプNo.38898
秀丸担当 さん 21/04/28 09:22
 

レジストリの詳細については、できたらあまり公開された固定の仕様にはしたくない
ところです。
昔はマクロで、「検索での表示」に相当するオプションの点滅表示/範囲選択のレジ
ストリを書き換えてenvchangedするという手法があったりしましたが、今はsetcompa
tiblemodeでできるようになっていたりします。
持ち出しキットで動作中や、ストアアプリ版の場合はレジストリをいじることはでき
ないです。

自動起動マクロについては、問題になりやすいのは新規作成直後だと思いますが、新
規作成直後のマクロは、Shiftを押しながらの起動で無効化できます。
それでもうまくいかない場合は、でるもんたいいじまさんも言われる通り、マクロフ
ァイルそのものを移動させたりするといいと思います。

[ ]
RE:38898 [要望]レジストリヘルプNo.38899
fzok4234 さん 21/04/28 10:11
 
回答ありがとうございます。

> レジストリの詳細については、できたらあまり公開された固定の仕様には
> したくないところです。

レジストリの書式は時々仕様変更しているのでしょうか。もし仕様変更が
あったときはバージョンアップの際に自動でレジストリを書き換えて対処
を行っていることを意味しているのでしょうか。

> 自動起動マクロについては、問題になりやすいのは新規作成直後だと思い
> ますが、新規作成直後のマクロは、Shiftを押しながらの起動で無効化
> できます。
> それでもうまくいかない場合は、でるもんたいいじまさんも言われる通り、
> マクロファイルそのものを移動させたりするといいと思います。

対処方法の提示ありがとうございます。今回は少し焦って「設定を元に戻そう」と
思ってレジストリを直接修正しました。次回からはマクロファイルを名前変更する
ことで対処しようと思います。

ただ、今後もし仮に環境設定を特定の状態にしただけで保護違反が起きるバグが
発生した場合、やはりレジストリの手直しが必要になってくると思います。
「動作設定」ダイアログの操作のみならずウィンドウサイズやペイン表示の
変更など、あらゆる環境設定の前に「設定内容の保存/復元」を実行するのは
極めて非効率であるので、何らかの緊急時の救済手段があればと思います。


[ ]
RE:38899 [要望]レジストリヘルプNo.38900
Iranoan さん 21/04/28 11:54
 
fzok4234 さんこんにちは、Iranoan です
> ただ、今後もし仮に環境設定を特定の状態にしただけで保護違反が起きるバグが
> 発生した場合、やはりレジストリの手直しが必要になってくると思います。
> 「動作設定」ダイアログの操作のみならずウィンドウサイズやペイン表示の
> 変更など、あらゆる環境設定の前に「設定内容の保存/復元」を実行するのは
> 極めて非効率であるので、何らかの緊急時の救済手段があればと思います。
同じ一ユーザーの立場からすると、この意見には一理あるとは思います

ただそれと同時に情報が公開されても、ほとんどのユーザーにはほぼ恩恵がないだけ
で、ドキュメントの作成・保守の観点から開発側に費用対効果の余り無い作業を強い
ることになると思います

なぜ恩恵がないかというと
・レジストリ・エディタを使わないライト・ユーザーにとっては、情報が公開されて
もハードルが高いし、他の問題を起こすリスクが高い
・それだけでなく、レジストリの直接操作が推奨されている、という間違ったメッ
セージを与えかねない
・一方、レジストリ・エディタを使うヘビー・ユーザなら、元々レジストリ・エディ
タに有るレジストリのバックアップ、リストア機能を使えば済む
と思うからです

加えて保護違反で落ちるマクロをを起動時の自動マクロに設定するケースはかなりの
レア・ケースかと…

[ ]
RE:38900 [要望]レジストリヘルプNo.38901
秀丸担当 さん 21/04/28 13:04
 

レジストリのデータは基本的に互換性を保とうとしていますが、たまに旧バージョン
から引き継いで新しいデータにして、古いほうは使わないようにしている箇所もあり
ます。
複数の秀丸エディタのうち最初だけ読み込んで、2番目以降は読み込まないようなも
のもあったりします。
緊急時の自動起動マクロの場合は前述の通りですが、もし他の設定でどうしようもな
くなった場合は、レジストリの該当箇所を案内できればこちらから案内するか、レジ
ストリエディタでエクスポートできればしたうえでアンインストールしたりするしか
ないと思います。

[ ]
RE:38901 [要望]レジストリヘルプNo.38902
fzok4234 さん 21/04/28 13:25
 
環境設定に起因する保護違反発生時にユーザーがレジストリを直接操作せずに
直前に行った設定を元に戻せるよう、エディタ本内のウィンドウを鼓動させずに
「動作環境」や「メニュー編集」などの各種ダイアログだけを表示させたり、
ウインドウサイズなどダイアログを持たない設定は新たに専用ダイアログを用意して
表示させる起動オプションを設ける方法ならどうでしょうか。

ダイアログの項目操作やウインドウサイズのドラッグ操作の度にレジストリを
エクスポートしておくのは非現実的な事だと思います。


[ ]
RE:38902 [要望]レジストリヘルプNo.38903
秀丸担当 さん 21/04/28 16:01
 

本体を起動せずに設定を出す方法として、常駐秀丸エディタのタスクバーの隅のアイ
コンを右クリックして、動作環境を出す方法があります。
現状であるのは動作環境だけです。
動作環境以外にも他の設定があったらいいかもしれません。
そういうこともできたらいいので、ご意見参考に致します。

[ ]
RE:38901 [要望]レジストリヘルプNo.38906
fzok4234 さん 21/05/06 04:42
 
> レジストリの詳細については、できたらあまり「公開された固定の仕様」にはした
>くないところです。
>
> レジストリのデータは基本的に互換性を保とうとしていますが、たまに旧バージョ
>ンから引き継いで
> 新しいデータにして、古いほうは使わないようにしている箇所もあります。
> 複数の秀丸エディタのうち最初だけ読み込んで、2番目以降は読み込まないような
>ものもあったりします。

レジストリの書式がバージョンごとに変わる可能性のある「不定の仕様」であること
は理解できました。

ただ、この状態だとバグ発生時に自力で復旧できない問題のほかに
・環境設定をユーザー/管理者が自動で管理できない。
というもう1つの問題にもつながります。実際、マクロの設定系の各文は「ファイル
タイプ別の設定」関係や
「キー割り当て」関係にしか対応しておらず、「動作環境」や「メニュー編集」など
他の設定操作を
自動で行えません。あるいは、「検索履歴」などの各種プライバシー履歴の中から特
定の文字列を
抽出して列挙するといったことも不可能です。

また「設定内容の保存/復元」コマンドは、レジストリの値をそのまま丸ごと.reg形
式で保存するため、
結局生のレジストリを操作することと等価となり、書式がバージョンごとに変わり得
る「不定の仕様」と
なってしまいます。

このようなことから、レジストリを直接操作しなくても設定を管理するための
・マクロの文/キーワード/関数。
・設定をインポート/エクスポートするためのテキストファイル。.reg形式ではなく
なるべくXMLやJSONと
  いった規格化された形式のUnicodeテキストで、バージョンアップでの下位互換性
を保証した書式にする。
  ちなみにXMLは特別なライブラリ無しでWSHや.NET Frameworkで読み書き可能。
といった「公開された固定の仕様」の設定管理手段はやはり必要なのではと思います。

もちろん、環境設定そのものをレジストリに保存すること自体は、互換性の維持や動
作の高速化と
いった観点からこれを根こそぎ否定するわけではありません。機能の追加/変更を行
うためのレジストリの
仕様変更も大いに結構だと思います。

問題点は、レジストリが「非公開の不定の仕様」であるが故に設定の管理の自動化が
極めて困難となり、
ユーザー/IT管理者による環境設定の管理作業の負担軽減策が奪われてしまっている
ことにあります。

「動作環境」などの各ダイアログなどの全項目の設定の自動化手段を「一度に全て次
バージョンで設置」などと
するのは、当然御社の開発体制に大きな負担となる無謀なことです。このため、重要
性の高い設定項目を
ピックアップしながらバージョンアップの度に少量ずつ対応させてもらえればと思っ
ています。



[ ]
RE:38906 [要望]レジストリヘルプNo.38908
秀丸担当 さん 21/05/06 15:28
 

そういうこともできたらいいということで、ご意見参考にします。

ちなみに変わることがあったというような具体例としては、ファイルヒストリが20個
固定だったのを増やしたときに「HKCU\SOFTWARE\Hidemaruo\Hidemaru\Hidemaru.dat\
Open」を「コンピューター\HKEY_CURRENT_USER\SOFTWARE\Hidemaruo\Hidemaru\Hidem
aru.dat\FileHist」にしたとか、各種ウィンドウサイズを覚えるのをピクセルからDP
I対応にしたとかです。
検索ヒストリも拡張したりしています。
ヒストリにアクセスするとかであれば、getfilehistとかgetsearchhistなどがあり、
これで互換性が保たれます。

マクロファイル用のフォルダや、マクロ登録やキー割り当てなど、主な環境に関する
ことは、極力変わらないようにしています。
後に環境変数の展開に対応したので、環境変数を書いて下位バージョンにすると非互
換になってしまいますが、下位から上位にするぶんにはずっと互換があります。書き
換える場所をそのままにすることを優先したことになります。
マクロファイル用のフォルダ:
HKCU\SOFTWARE\Hidemaruo\Hidemaru\Env\MacroPath
マクロ登録やキー割り当て:
HKCU\SOFTWARE\Hidemaruo\Hidemaru\Assign.dat
自動起動マクロについては、HKCU\SOFTWARE\Hidemaruo\Hidemaru\Env配下のEventか
ら始まるものです。
基本的に変わらないもののほうが多いです。


[ ]
RE:38908 [要望]レジストリヘルプNo.38909
fzok4234 さん 21/05/06 20:39
 
> ちなみに変わることがあったというような具体例としては、ファイルヒストリが
> 20個固定だったのを増やしたときに「HKCU\SOFTWARE\Hidemaruo\Hidemaru\Hidemar
>u.dat\Open」を
> 「コンピューター\HKEY_CURRENT_USER\SOFTWARE\Hidemaruo\Hidemaru\Hidemaru.da
>t\FileHist」にしたとか、
> 各種ウィンドウサイズを覚えるのをピクセルからDPI対応にしたとかです。
> 検索ヒストリも拡張したりしています。

意外と破壊的な仕様変更を行ってきていたのですね。実のところ、当方でレジストリ
の変化を
調べて独自の設定管理ツールを作ることも考えていました。これほど大きな変化だと
思わぬ問題が発生していたのかもしれませんね。


[ ]