改行コードを変えるときは、「文章と論理行は同じ」と「保存バイトは変わった」を別々に検査します。画面ではLFもCRLFも同じ行替えに見えるため、設定欄が変わっただけで成功と判断すると、実ファイルが元の形式のままでも気づけません。
STUDIO-175の標本では4行の同一原稿をLF、CRLF、CRで物理保存し、各バイト数を測りました。さらにCRLF指定なのにLFのままだった失敗候補を残し、同じ候補をCRLFへ保存し直して再検査しました。設定応答、保存バイト、本文一致を分けて示します。
改行コードは本文語句ではなく行境界の表現である
LFは行境界を1バイトで、CRLFは二つの制御バイトで表します。通常のテキスト表示ではどちらも改行になるので、目視だけで区別できません。検索置換で見える文字を差し替える作業とも違います。必要なのはエディタの改行設定と、保存されたバイト列の確認です。
まず原本を退避し、納品先が要求する形式を作業票へ書きます。指定がない場合は、利用するOS、共同編集ツール、ビルド処理の規約を確認します。思い込みで全ファイルを統一すると、スクリプトや差分管理へ余計な変更を広げることがあります。
論理行と本文の基準値を先に固定する
入力はUTF-8の4行で、各行の末尾を含む論理境界は4個です。変換対象にはLF版を選び、冒頭、中ほど、末尾の文字列、4行、最終改行ありを固定しました。別にCRLF版とCR版も物理生成し、三形式が見た目ではなくバイトで区別できる標本にしました。
改行変換後に比較するのは、改行コードを正規化した本文です。文字、句読点、空行の位置、最終改行の有無を確認します。単純なファイルハッシュは改行バイトが変われば当然変わるため、本文一致の証明には正規化比較を、形式一致にはバイト検査を使います。
空行も本文構造の一部です。段落間の空行数を一覧にし、変換後に連続改行が増減していないかを照合します。行頭や行末の空白は表示で見落としやすいので、差分表示または不可視文字表示を補助に使い、勝手に整形しません。
タブ設定をCR+LFへ切り替える
専用ワークスペースで対象ファイルを rune tab open し、タブIDを特定しました。rune tab set-line-ending --line-ending CR+LF --dry-run で予定を確認し、その後に同じ指定を実行しました。応答上のlineEndingはCR+LFへ変わりました。
ここで分かるのは、開いているタブの設定値です。ディスク上の保存ファイルがCRLFになったことまでは証明しません。保存先を明記し、タブを保存して閉じ、別の検査でファイルを読み直す工程が必要です。dry-runの値だけを納品記録へ転記してはいけません。
失敗候補を残し、同じ条件で復旧する
最初の失敗状態はfailed-lf-preserved.txtへ物理LFで保存し、回復処理ではそのファイルを上書きしませんでした。失敗版は23バイト、CRLFペア0個、単独LF 4個、SHA256はffaff327ee4236568d751698436fccbc8a654a2b2d058170d90d2804d14f01efです。タブのCR+LF設定応答があっても、この閉じた失敗版はLFのままなので不合格です。
同じ四つの論理行を別パスrecovered-crlf.txtへ明示的にCRLFで保存しました。回復版は27バイト、CRLF 4個、単独LF 0個、SHA256は90e766165ae3981678ae48f2d98e2e46b1ce2e81f5da334dc1ef697db6831353です。Runeの閉じたファイル検査もCR+LFを返し、改行を正規化した本文は失敗版と一致しました。
さらにrecovered-crlf-repeat.txtへ独立再実行し、回復版と同じSHAを得ました。三ファイルはすべて別パスです。失敗版のSHAは回復版と異なり、現在もLFとして残っています。これで失敗、回復、再実行を後から同時に検査できます。
全行差分が出たら最終改行から調べる
内容比較が大きく崩れたように見える場合、まず比較ツールがLFとCRLFを別文字として扱っていないかを確認します。改行を正規化して本文を比較し、それでも差がある行だけを調べます。末尾の改行が追加または削除されると行数が1つ違って見えるため、最終改行の要件も作業票へ入れます。
文字化けが同時に起きた場合は、改行変換と文字コード変換を一度に実行しません。正しく復号できる原本へ戻り、まず文字コードを固定し、その保存物を入力にして改行だけを変えます。異なる原因を分けると、どちらの操作が本文を変えたか追跡できます。
採用形式は相手の入口条件で決める
CRLFが必要なのは、相手のツールや規約がそれを要求するときです。LF指定の制作環境なら、CRLFへ変える必要はありません。テキストエディタ 改行コード の選択に万能の正解を置かず、納品先の条件を受け入れ値にします。
本番の合格票には、入力と出力のパス、UTF-8などの文字コード、期待するLFまたはCRLF、論理行数、正規化本文一致、最終改行、バイト検査を並べます。今回のSTUDIO-175標本は、最初の物理ファイルLFを不合格とし、復旧後にCRLF 4個・単独LF 0個を確認して初めて合格にしました。
物理形式の対照表では、LF版は単独LF 4個、CRLF版はCRLF 4個、CR版は単独CR 4個で、Rune Studioの再検査もそれぞれLF、CR+LF、CRを返しました。何が設定値で、何が物理ファイルの測定値かを残すことが、次の担当者の誤認を防ぎます。
共同作業者へ渡す前には、受け手が使う検査方法も票へ書きます。受け手が別ツールを使う場合でも、CRLFの境界数、単独LFの有無、正規化本文一致という同じ合格値を再現できれば、エディタ名の違いに左右されません。