.net column

.NET開発者のためのブログメディア
Webページ開発のコード

改行コードの仕組み|改行コードの変換方法や言語別改行コード指定方法も紹介

2020年10月29日
SE
改行コードはOSによって違うのですか。
PM
違います。それでは、改行コードについてくわしく説明いたしましょう。

改行コードとは?

改行コードとは、コンピュータで文字列を記憶する際に改行を表す文字のことです。文字と言っても目に見える文字ではありません。1バイトないし2バイトで、16進数としては意味がありますが、人間が目視する時には文字通り改行されて表示されます。

 

この改行コードはOSによって違います。また歴史的にも統一されてこなかった経緯もあり、開発を進める際に処理の仕方を知っておかないと落とし穴にはまる危険がある厄介な存在です。この記事を読んで、改行コードについて正しい知識を身に付けましょう。

Windowsの改行コード

Windowsの改行コードは
\r\n
です。

 

16進数だと
0D 0A
になります。

 

CR LF
と呼ばれることもあります。

 

Windowsでファイルを作成すると、メモ帳で作成した場合やOfficeで作成した場合には、上記の改行コードになります。

LinuxとMac(OS X)の改行コード

LinuxとMac(OS X)の改行コードは
\n
となります。

 

16進数だと
0A
になります。

 

LF
と呼ばれることもあります。

 

こちらが事実上の改行コードのデファクトスタンダードです。後述しますが、システム開発はこちらに改行コードを統一して行われることが多いです。Windowsでも、Visual Studio Codeなどのエディタを使えば改行コードをこちらにすることができます。

改行コードの変換方法

Windowsでコードを書き、LinuxのサーバーにアップすることはWeb開発ではよくあることです。そのとき、FTPやSFTPを使って転送するでしょう。

 

FTPやSFTPには、
・ローカルで\r\nが出たらホストでは\nにする
・ホストで\nがでたらローカルでは\r\nにする
と自動的に変換してくれるASCIIモードというものがあります。Windowsで改行コードを\r\nにしてコードを書いたら、ASCIIモードでサーバーに転送しましょう。サーバーからダウンロードするときは逆の処理を行います。

 

ただし、画像などのテキストではないファイルをASCIIモードで転送しないでください。バイナリモードを使ってください。ASCIIモードを使うと、「0D 0A」というバイト列が「0A」に変わり、ファイルが壊れてしまいます。ASCIIモードはテキストファイルに対してのみ行う、と覚えておきましょう。

 

一般的なFTPクライアントソフトなら、ファイルの拡張子によってテキストファイルか否かを判別し、ASCIIモードで送るかバイナリモードで送るか自動制御してくれます。

そもそも改行コードを意識しない方法

そもそもWindowsでテキストファイルを書く際に、改行コードを絶対に\r\nにしなくてはいけない、という決まりはありません。

 

だから、テキストエディタでコーディングする際に、改行コードを\nにしておけば、何もしなくてもサーバーの改行コードと一致します。

 

最近のIDEでは改行コードが\nになっている場合も多いです。この場合、改行コードを意識せずに開発を進められます。

Visual Studio Codeの改行コード設定方法

それでは、実際に、VSCode(Visual Studio Code)を例にとって、改行コードをどう指定するのか解説します。

 

左下の歯車アイコンをクリックし、
files.eol
と入力します。

 

すると、改行コードの設定画面が出てきます。

 

ここに改行コードを設定してやります。ここで\nに設定すれば、WindowsのVSCodeであってもVSCodeで編集したテキストファイルの改行コードは\nになります。

Spyderの改行コード設定方法

Spyderで改行コードを設定するには、

 

ソース→改行コードを設定する

 

から設定してください。

 

多くの場合デフォルトの設定で大丈夫ですが、DjangoなどのWeb系の開発でサーバー内部のエラー(500 Internal Error)が出ることがあるかもしれません。そのときは、改行コードをLFに設定してください。

 

もっとも、この場合、FTPクライアントでASCIIモードで転送すれば話は解決するのですが。

Web開発の改行コード

Web開発の改行コードは、\r、\n、\r\n、どれでもいいことになっています。

HTMLで改行は、””CR””(U+000D)文字、””LF””(U+000A)文字、または””CR””(U+000D)、””LF””(U+000A)文字の順でペアのいずれかとして表されてもよい。

https://creating-homepage.com/archives/625

「HTMLで」とありますが、cssもJavaScript(.js)も含まれます。

 

3種類どれでも改行になりますが、\nに統一しておくことを強くおすすめします。理由は、サーバーとの間で改行コードが違うと、様々な不具合の伏線になりかねないからです。最初から\nに統一しておけば、不具合が入り込む余地がありません。

 

不具合を発生する余地をつぶしておくことはシステム開発の基本です。

言語別改行コード指定方法

それでは、プログラム言語別に、改行コードの扱いがどうなっているのか見ていきます。

Python

Pythonでは、
\n
で統一されています。

 

print(‘ABCDE\nFGHIJ’)

 

このように改行コードを指定することにより、Pythonの実行環境はそこが改行だと判断します。ソースコード自体の改行も\nにしておいた方がいいでしょう。

JavaScript

JavaScriptでも、改行コードは
\n
に統一されています。

 

様々なOSのブラウザにて解釈されるJavaScriptのコードなので、こうなっています。

 

console.log(‘ABCDE\nFGHIJ’);

 

のように使います。

 

前述した通り、ソースコード自体の改行は\r\nでも構いませんが、分かりやすくするために\nにしておいた方がいいでしょう。

Java

Javaでは、OSに依存した改行コードを使えます。

 

System.lineSeparator()

 

を使います。

 

String a = “”ABCDE””;
String b = “”FGHIJ””;
String c = a + System.lineSeparator() + b;

 

のようにして改行します。

 

ソースコード自体の改行も、プログラム中でこの関数を使うなら、OSに依存した改行コードにするべきです。

 

なぜなら、Javaはソースコードを実行時に読み込むのではなく、一旦バイトコードにコンパイルしてからそれを実行するので、実行時にソースコードの改行コードは意識されないからです。どちらにしろ統一しておいた方がいいでしょう。

Excel VBA

Excel VBAで開発を行う際に改行コードを意識することはほぼありません。改行は多くの場合自動的に行われます。またVBAエディタもExcelのものなので、改行コードはVBAエディタが自動的に入れます。

 

内部ではOSに依存していますが、VBAエディタ外でVBAのコードを編集する必要に迫られることはめったにないため、意識する必要はありません。

 

よって、Excel VBAでコーディングしているときには、改行コードを意識する必要はありません。

SE
改行コードといっても、奥が深いですね。
PM
開発を行うとき、OSやプログラミング言語によって違う改行コードをどうしても意識する必要がありますので、仕組みを理解して開発を行うようにしましょう。

まとめ

この記事では、改行コードについて様々な角度から解説してきました。

 

普段なにげなく扱っているテキストファイルですが、開発者ともなれば、その内部構造に深く関わる必要が出てきます。

 

違うOSで動作させる場合、内部構造の把握は必須です。文字コードも注意しなくてはいけませんが、改行コードも注意しなくてはいけません。改行コードが違うだけで誤動作や意図しない表示を招きます。

 

今ではさまざまな仕組みの発達により吸収されることが多くなった改行コードですが、しかしその仕組みを把握しておくことは必要です。バグを未然に防ぐためにも、正しい知識をもって開発にあたりましょう。

 

仕組みの把握は、開発者が絶対にしなくてはいけないことです。仕組みを熟知した上で開発を行うのがプロの開発者です。


.NET分野でのキャリアアップをお考えの方は、現在募集中の求人情報をご覧ください。

求人一覧

また、直接のエントリーも受け付けております。

エントリー(応募フォーム)