line-endings-lf-crlf.mdupdated 2026-08-011,064 chars

改行コード LF・CR・CRLF の​違いと​ Git 警告の​意味

テキストファイルには​「行の​終わり」を​示す不可視の​制御文字が​存在する。​LF​(Unix系)​・CR​(旧Mac)​・CRLF​(Windows)の​3種が​混在すると、​チーム開発でさまざまな​不具合を​引き起こす。

3種の​改行コード

改行コードには​ LF​(16進数表記で​ 0x0A)、​CR​(0x0D)、​CRLF​(0x0D 0x0A)の​3種類が​ある。​LF は​ Unix・Linux・現代の​ macOS で​使われ、​CR は​ Classic Mac OS​(OS 9以前)で​使われていた。​CRLF は​ Windows が​使う方式である。​これらの​名前は​タイプライターの​動作に​由来する。​CR​(キャリッジリターン)は​印字ヘッドを​行頭へ戻す動作、​LF​(ラインフィード)は​紙を​1行分送る​動作を​指す。

混在すると​起きる​問題

改行コードが​混在すると、​内容が​同一でも​ Git の​差分​(diff =変更箇所の​比較表示)が​全行変更と​して​表示されてしまう。​また、​Windows で​編集した​シェルスクリプトに​ CR が​残ったまま​ Linux サーバーに​置くと、​構文エラーを​起こすことがある。​LF 前提の​アプリで​ CRLF ファイルを​開くと、​改行が​認識されず全体が​1行に​見えてしまう​場合も​ある。

Git の​警告​「LF will be replaced by CRLF」

この​警告は​ core.autocrlf​(=改行コードを​自動変換する​ Git の​設定項目)が​ true に​なっている​時に​表示される。​true に​設定すると、​コミット時に​ CRLF から​ LF へ、​チェックアウト時に​ LF から​ CRLF へ​自動変換される​(Windows で​推奨される​設定)。​input に​設定すると、​コミット時のみ​ CRLF から​ LF へ​変換する​(Linux・Mac で​推奨される​設定)。​警告自体は​無害だが、​放置すると​チーム内で​意図しない​差分を​生む​可能性が​ある​ため、​改行コードの​統一が​望ましい。

推奨:.gitattributes で​明示的に​統一

.gitattributes​(=リポジトリ単位で​ファイルの​扱いを​指定する​設定ファイル)を​リポジトリの​ルートに​置く​ことで、​改行コードを​リポジトリ単位で​固定できる。* text=auto eol=lf と​設定すれば、​テキストファイルを​すべて​ LF に​統一できる。​この​設定は​開発者個人の​ core.autocrlf 設定を​上書きする。​Windows の​エディタは​内部​表示を​ CRLF のままに​できる​ため、​この​統一に​よる​実害は​ほぼない。

.gitattributes に​ eol=lf を​1行追加するだけで、​OS混在チームの​改行コード問題を​根絶できる。

148 notestil