改行コード LF/CRLF/CR の違いと変換
OSによって改行コードは違います。違いを理解しないと「Excelで全部1セルにくっつく」「謎の文字化け」「Gitで全行が差分になる」といったトラブルに遭います。
1. 3種類の改行コード
LF(U+000A・\n)はLine Feed、改行を意味するUNIX系の標準。CR(U+000D・\r)はCarriage Return、古いMac(System 9以前)の標準。CRLF(\r\n)はCRとLFを連続させたもので、Windowsの標準。歴史的にはタイプライターの「キャリッジを戻して(CR)紙を1行送る(LF)」を起源とし、ネットワークやプリンタ系のプロトコルではCRLFが厳格に使われてきました。
2. OSごとのデフォルト
Windows: CRLF。メモ帳・PowerShell・コマンドプロンプトはCRLFで保存。macOS(OS X 以降): LF。標準のテキストエディット・viもLF。Linux: LF。古いMac(System 9以前): CR単体。古いログや古いMacからの引き継ぎファイルではいまだに見かけます。Webブラウザは通常LFで内部処理されます。
3. ネットワーク交換ではCRLFが標準
IETF RFC 5198 「Unicode Format for Network Interchange」では、ネットワーク間で交換されるテキストはUTF-8でかつ改行はCRLFが推奨と明示されています。HTTPヘッダ・SMTPメール・FTPの制御チャネル等、伝統的なプロトコルはCRLFを必須とします。一方、現代のWebアプリ内部・JSON・YAMLでは事実上LFが標準。「人間が見る画面」と「プロトコルが流す行」で使い分けが必要です。
4. Excelに貼ると1セルに収まる原因
メモ帳でテキストを書いてExcelに貼ったら、複数行が1セルに収まってしまった経験はありませんか。原因はExcelが「セル内改行」を Alt+Enter(LF単体)として認識する一方、Windowsクリップボードに渡ったテキストの改行が場面によりCRLF/LF/CRと混在することがあるためです。VS CodeやTyporaなど高機能エディタは「行末」表示で現在の改行コードを示しているので、貼り付け先に応じて変換できます。
5. Git の改行コード問題
Git は core.autocrlf 設定で改行コードを自動変換できます。Windows = true(コミット時にCRLF→LF、チェックアウト時にLF→CRLF)、macOS/Linux = input(コミット時にCRLF→LF、変換せずチェックアウト)が定石。設定を間違えると「全行が差分」「pull即conflict」を引き起こします。.gitattributes に *.csv text eol=crlf のように個別指定すると安全です。
6. 実務での変換テクニック
VS Codeなら右下「LF / CRLF」をクリックで切替→保存で変換完了。コマンドラインでは tr -d '\\r' で CR を除去、 sed -i 's/$/\\r/' で LF→CRLF など。本ツールは入力時にCR/LF/CRLFを全部1行として分割し、出力はLFで統一します。CRLFで貼り直す必要があれば、整理後に保存先エディタ側で変換するのが王道。詳細はRFC 5198を参照。