|
毎度お世話になっております。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 の適用の
強制を自動的に行いたいのですが、どうすればよいのでしょうか?
問題への対処法のご教示よろしくお願い申し上げます。
|
|