上書き保存で .editorconfig が適用されなNo.42164
Fzok4234 さん 25/08/22 12:06
 
毎度お世話になっております。Fzok4234 です。

さて、.editorconfig が適用されるタイミングについてですが、新規に作成したファ
イルを保存する際、
上書き保存の操作を何度繰り返しても .editorconfig での指定が適用されません。
適用させるためには
一度ファイルを閉じてから再度開いた後で上書き保存の操作を行う必要があります。

このため、保存したファイルのエンコードがユーザーが意図したものと異なってしま
う場合が生じて、
Git など別アプリで対象ファイルのエンコードが明示的に指定されている場合では、
文字化けによって
最悪内容が消失するなどトラブルにつながりかねない状態です。

----------------------------------------------------------------------------
--------------------

再現手順についてです。

まず準備として、「動作環境」->「環境」->「editorconfig」は、
 editorconfigの検出 : ON
 タブ幅等の体裁     : 適用する
 エンコードの種類   : 適用する
として .editorconfig が自動で適用されるようにします。

また、「動作環境」->「エンコード1」の「標準のエンコードの種類」は
 エンコードの種類 : Unicode(UTF-8)
 改行コード       : 改行=LF
 BOMの有無        : なし
として全てのファイルに対するデフォルトのエンコードを設定します。

次に、テストする対象ファイルの拡張子 .test に対応する「ファイルタイプ別の設
定」->「保存・読込み」の
「エンコードの種類の指定」は
 自動判定 , 改行=自動 , BOM自動
として、.test ファイルのエンコードが自動判定になるようにします。

一方、.editorconfig は
 root = true
 
 [*.test]
 charset     = utf-16le
 end_of_line = crlf
として、.test ファイルのエンコードを全ファイルのデフォルトエンコードとは異な
るものに設定します。

このとき同時に、.gitattributes は
 *.test text eol=crlf working-tree-encoding=UTF-16
として Git での .test ファイルのエンコードの指定を .editorconfig の物と一致
させる必要があります。

そして、実際にファイルを編集・保存していきます。まず、コマンドプロンプトなどで
 hidemaru "Test.test"
として対象の Test.test ファイルを開きます。このとき、Test.test はまだ存在し
ていない状態とします。

まず、開いた秀丸エディタ上に半角英数で
 a
と入力してから上書き保存コマンドを実行します。この状態のことを「状態 1 」と
呼びます。

このとき、Test.test が新規に保存されて、その内容は Byte 形式で
 61 0A
となっています。すなわち、UTF-8 / BOM 無し / LF となっていてデフォルトのエン
コードの状態であり、
.editorconfig の設定は適用されていません。

次に、そのまま内容を
 b
と書き換えてから上書き保存します。このとき Byte 形式では
 62 0A
となっていて UTF-8 / BOM 無し / LF のままで .editorconfig は適用されない状態
です。

さらに、内容を
 c
として上書きしても Byte 形式は
 63 0A
となってしまって、状態 1 では何度上書きを行っても .editorconfig が一切適用さ
れないことが分かります。

ここで、一旦 Test.test ファイルを閉じます。そして改めて
 hidemaru "Test.test"
コマンドで開き直します。秀丸エディタが開いて、内容が
 c
となっていることを確認したら、上書き保存コマンドを実行します。この状態のこと
を「状態 2 」と呼びます。

このとき Byte 形式では
 FF FE 63 00 0D 00 0A 00
となっていて UTF-16LE / BOM 有り / CRLF に変わったことが分かります。すなわ
ち、.editorconfig で指定した
エンコードがここで初めて適用されたことになります。

さらに、内容を
 d
として上書きすると Byte 形式は
 FF FE 64 00 0D 00 0A 00
となって UTF-16LE / BOM 有り / CRLF のエンコードで継続して保存されます。すな
わち、状態 2 では
.editorconfig の指定が必ず適用されることが分かります。

----------------------------------------------------------------------------
--------------------

この結果から分かることは、同じ 1 つのファイルが、誤ったエンコードの 状態 1
と意図された正しいエンコードの
状態 2 という 2 つの異なるフォーマットになりうるということです。当然、一時的
とはいえファイルの
フォーマットが不正な状態になることでトラブルの引き金となります。

例えば、上記の Test.test ファイルを一度 状態 1 のときに Git で commit や pus
h を行い、状態 2 に遷移した
後でも commit して、その後に両者のコミットを行き来するようなブランチ操作を行
ってしまったら、
状態 1 が文字化け状態となって 状態 2 との整合性が失われてしまいます。こうな
ってしまったら、過去の
コミットに遡ってリポジトリを修復する作業は大変煩雑になります。

----------------------------------------------------------------------------
--------------------

このような問題を回避するために、新規作成したファイルの上書き保存の段階から .
editorconfig の適用の
強制を自動的に行いたいのですが、どうすればよいのでしょうか?

問題への対処法のご教示よろしくお願い申し上げます。



[ ]
RE:42164 上書き保存で .editorconfig がNo.42167
秀丸担当 さん 25/08/22 17:12
 
ご指摘ありがとうございます。
確かに新規ファイル名を指定して起動した場合は適用されませんでした。
ここでも適用できたらより良いと思います。
editorconfigの適用具合は、エディタや設定などによってまちまちなのと、ファイル
名変更コマンドやマクロのsaveasなどもできないので、あらゆる場面で最優先にフィ
ルタリングするというのは難しいかもしれません。
補助的なものという位置づけにしたいところです。
実在するファイルを開いたときや、名前を付けて保存のダイアログのときなど、現状
の適用範囲をヘルプに書いておこうと思います。

[ ]
RE:42167 上書き保存で .editorconfig がNo.42207
Fzok4234 さん 25/09/16 14:21
 
回答ありがとうございます。返事が遅くなってすみません。


> 確かに新規ファイル名を指定して起動した場合は適用されませんでした。
> ここでも適用できたらより良いと思います。

後で確認できたことですが、
 hidemaru "Test.test"
のコマンドラインなどで新規に開いたファイルは、
 「上書き保存」
     ↓
 「再読み込み」
     ↓
 「上書き保存」
とすることで、.editorconfig が適用された空ファイルにすることができます。

ただ、ファイルを開いた後でいちいちこの 3 個のコマンドを実行するのは面倒であ
ることと、チームの
メンバーがこのコマンドの実行を忘れるミスが発生しうることから、やはり新規オー
プンの段階で既に
.editorconfig が適用された状態になっていることが望ましいです。

----------------------------------------------------------------------------
--------------------

> editorconfigの適用具合は、エディタや設定などによってまちまちなのと、ファイ
>ル名変更コマンドや
> マクロのsaveasなどもできないので、あらゆる場面で最優先にフィルタリングする
>というのは難しいかも
> しれません。
>
> 補助的なものという位置づけにしたいところです。

デフォルトの状態ではこの従来通りの動作でも構わないと思います。当方でもその通
りだと納得いたします。
ただし、あくまで「標準的な動作」という意味でのことです。秀丸エディタを勤務先
の開発環境として使用して
いないとか、リポジトリを GitHub で Public にしていないとか、要はファイルフ
ォーマットの不整合で
他人に迷惑をかける恐れがない人なら、この「標準的な動作」で特に問題はないでし
ょう。

だが、現実にはそうはいきません。そもそもリポジトリに .editorconfig が置かれ
ているということは、
大抵の場合、チームメンバーなどリポジトリへ commit または push する権限を持つ
全てのユーザーに対して、
 「ファイルのエンコードなどのフォーマットを必ず揃えよ !!」
という強制力を伴った強い意志表明がリポジトリのオーナーから出されていることを
意味します。

よって、この従来通りの動作のままだと非常に都合が悪いこともあるため、せめて
「動作環境」または
「ファイルタイプ別の設定」で、新規オープン時に .editorconfig を強制適用する
オプションを新しく設けて、
ユーザーが動作を選択できるようにしてほしいです。こうすれば、ユーザーが一度設
定の操作を行うだけで
ファイルフォーマットの同一性が確実になり、前述の 3 個のコマンドを忘れるヒ
ューマンエラーが原因で
リポジトリ内のファイルフォーマットに不整合が起きるリスクが大幅に軽減できます。

どうかよろしくお願いいたします。



[ ]
RE:42207 上書き保存で .editorconfig がNo.42209
秀丸担当 さん 25/09/16 16:00
 
そういうご意見があるということで参考にさせていただきます。

[ ]
RE:42209 上書き保存で .editorconfig がNo.42247
Fzok4234 さん 25/10/14 17:06
 
早速の対応ありがとうございます。

9.50β9 にて、「動作環境」->「環境」->「editorconfig」の
「editorconfigの検出(ファイル名指定の新規作成時)」で、「タブ幅等の体裁」お
よび「エンコードの種類」
を両方とも「適用する」にすることで、
 hidemaru "app.cs"
とかのコマンドライン一つで最初から .editorconfig が適用された状態でファイル
が新規作成できるように
なりました。

これで、ファイルの体裁やエンコードなどのフォーマットのミスが大幅に減ります。
重ね重ねどうも
ありがとうございました。



[ ]