改行コードCRとLFの違い|なぜ2種類ある?タイプライターから続く理由

改行コードCRとLFはなぜ2種類あるのかの記事のアイキャッチ。本を読むトット

パソコンの文章の「改行」は、目には見えませんが、ファイルの中では文字として入っています。しかもその書き方が、OSによって違います。WindowsはCRとLFの2文字、MacやLinuxはLFの1文字。1つの改行に2文字も使う理由は、タイプライターの時代にさかのぼります。

トット
トット
改行って、文字だったの?

改行は「見えない2種類の文字」

改行に使われる文字は、次の2つです。どちらも画面には表示されない「制御文字」と呼ばれる文字です。

名前 略号 番号(10進/16進) もとの意味
キャリッジリターン CR 13/0x0D 印字する位置を行の先頭に戻す
ラインフィード LF 10/0x0A 紙を1行ぶん送る

名前のとおり、CRは「横の位置を左端に戻す」、LFは「1行下に進む」という、別々の動きを表しています。この2つを続けてはじめて「次の行の先頭」に行ける、というのがもともとの考え方です。

タイプライターでは、レバー1本で両方やっていた

キャリッジ(carriage)は、タイプライターで紙を載せて左右に動く台のことです。1文字打つごとに台が少しずつ動き、行の終わりまで来たら、横のレバーで台を右端(書き始めの位置)まで押し戻します。このレバーは、たいてい台を戻すと同時に紙を1行送るしくみになっていました。

つまり人が打つタイプライターでは、「戻す」と「送る」はひとつの動作でした。

テレタイプで、2つの文字に分かれた

その後、離れた場所から送られてきた文字を自動で印字する機械(テレタイプ)が使われるようになります。機械に指示を出すには、動きごとに信号を決める必要があり、「戻す」と「送る」が別々の文字になりました。これがCRとLFです。

分かれていたのには、実際的な理由もありました。印字ヘッドが右端から左端まで戻るには時間がかかり、戻りきる前に次の文字が届くと、行の途中にかすれた文字が打たれてしまいます。CRとLFの2文字を送れば、そのあいだに戻る時間をかせげます。それでも足りない機械では、改行のあとに何も印字しない文字をわざと送って、待ち時間をつくることもありました。

トット
トット
2文字にしたのは、機械が戻るのを待つためでもあったんだね。

「1文字で十分」派と「2文字を守る」派

コンピュータが文章をファイルとして保存するようになると、改行を何文字で書くかが、システムごとに分かれていきます。

LFの1文字にしたのが、Multics(マルティクス)とUnixです。1960年代に開発された大型コンピュータのOS、Multicsの1968年の設計文書では、「改行」は「次の行の左端へ移る」ことを表す1文字と定め、その文字にLF(コード012)を割り当てています。CRは使わない文字に分類されていました。プリンターごとの違いは、機械を動かす側のプログラムで吸収すればよい、という考え方です。この方式をUnixが受け継ぎ、今のLinuxやmacOSもLFの1文字を使っています。

CRとLFの2文字を守ったのが、CP/MとMS-DOSです。テレタイプを端末として使っていたミニコンピュータとの互換性を保つため、テレタイプがそのまま行を改められるCR+LFを採用しました。1981年に登場したMS-DOSがこれを引き継ぎ、その流れがWindowsに続いています。

もう一つ、CRの1文字にしたのが、昔のMac(Mac OS 9まで)です。2001年に登場したMac OS XはUnixをもとにしているため、ここからLFに変わりました。

改行の書き方 おもな環境
CR+LF(2文字) Windows、MS-DOS
LF(1文字) macOS(Mac OS X以降)、Linux、Unix
CR(1文字) 昔のMac(Mac OS 9まで)

メールとWebでは、今もCR+LFが決まり

インターネットの約束ごとでは、CR+LFが標準です。メールの形式を定めた規格(RFC 5322、2008年)は、行はCRとLFの2文字で区切ると定め、CRとLFを単独で使ってはいけないとしています。WebのHTTP/1.1の規格(RFC 9112、2022年)も、見出し部分の行の終わりはCR+LFと定めています。ただし受け取る側は、LFだけの行末も行末として扱ってよい、とされています。

ふだんメールを書くときにこれを意識しないのは、メールソフトやブラウザが送る前にそろえてくれているからです。

今でも起きる「改行のずれ」

書き方が違うファイルをやりとりすると、表示が崩れることがあります。よく知られた例がWindowsの「メモ帳」です。長いあいだCR+LFの改行しか正しく扱えず、LFだけのファイルを開くと、改行が消えて1行につながって見えていました。LFやCRだけの改行にも対応したのは、2018年に公開されたWindows 10の更新(バージョン1809)からです。

ほかにも、表計算ソフトで作ったCSVを別のシステムに取り込むと行の区切りがおかしくなる、プログラムの管理ツールで「改行コードを変換します」という警告が出る、といった形で、今もときどき顔を出します。

トット
トット
見えない文字だから、ずれていても気づきにくいんだね。

改行の書き方が混ざった文章は、テキスト整形ツールに貼り付けると、読み込むときにLFにそろえてから処理します。よけいな改行を消したり、PDFからコピーした文の行をつないだりもできます。

ちなみに余談

文字の国際規格Unicodeには、CRやLFとは別に、「行区切り」(U+2028)と「段落区切り」(U+2029)という専用の文字が用意されています。CRやLFが「行の区切り」なのか「段落の区切り」なのかは、ソフトによって解釈がばらばらになっていました。Unicodeの改行に関する技術文書は、この2つを「あいまいさのない区切り文字」と説明しています。

とはいえ、ふだんのテキストファイルやメールで使われている改行は、今もCRとLFです。タイプライターのレバーがしていた2つの動きが、今もファイルの中に残っているわけです。

まとめ

改行は、CR(行の先頭に戻る)とLF(1行進む)という2つの見えない文字で書かれています。タイプライターではひとつの動作だったものが、テレタイプで2つの信号に分かれ、その後、UnixはLFの1文字に、MS-DOSとWindowsはCR+LFの2文字に、昔のMacはCRの1文字に、と道が分かれました。メールやWebの規格では、今もCR+LFが標準です。

出典: Multics System Programmers’ Manual BC.2.01 Character Set(1968年9月25日)/RFC 5322: Internet Message Format(2.1節・2.3節)/RFC 9112: HTTP/1.1(2.2節)/MDN: CRLF/Pro Git: Git Configuration(core.autocrlf)/The Eclectic Light Company: A brief history of text on the Mac/Microsoft: Introducing extended line endings support in Notepad(2018年5月)/Unicode Technical Report #13: Unicode Newline Guidelines/Newline(Wikipedia)/Carriage return(Wikipedia)。2026年9月24日時点。

あわせてどうぞ

タイトルとURLをコピーしました