[ 新規に投稿する ]

上書き保存で .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 や push を行い、状態 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 [ コメントを投稿する ]
  そういうご意見があるということで参考にさせていただきます。
[ ]

[ 新規に投稿する ]