改行コードの種類

テキストファイルの改行は、実際にはOSに応じた制御文字で表現されます。

  • LF(\n):Line Feed。Unix・Linux・macOS(OS X以降)・現代のWeb標準
  • CRLF(\r\n):Carriage Return + Line Feed。Windows・HTTPヘッダー・古いプロトコル
  • CR(\r):Carriage Returnのみ。古いMac OS(OS 9以前)。現在はほぼ使われない

なぜ問題になるのか

WindowsとMac・Linuxが混在する開発環境では、改行コードの違いがトラブルの原因になります。Gitの差分表示でCRLFが原因の変更が大量に出たり、シェルスクリプトがWindowsで編集されてCRLFになりUnixで実行エラーが出たりするケースが典型的です。

Gitでの改行コード設定

# Windowsでチェックアウト時にCRLFに変換、コミット時にLFに変換
git config --global core.autocrlf true

# Mac/Linuxでコミット時にLFに変換(チェックアウト時は変換しない)
git config --global core.autocrlf input

# 変換しない
git config --global core.autocrlf false

チームで統一するには.gitattributesファイルで設定を強制するのが確実です。

プログラムでの変換

# Python: CRLFをLFに変換
text = text.replace('\r\n', '\n').replace('\r', '\n')

# JavaScript
const normalized = text.replace(/\r\n|\r/g, '\n')