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

- システム
エンジニア - 改行コードはOSによって違うのですか。
- プロジェクト
マネージャー - 違います。それでは、改行コードについてくわしく説明いたしましょう。
改行コードとは?
改行コードとは、コンピュータで文字列を記憶する際に改行を表す文字のことです。文字と言っても目に見える文字ではありません。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でコーディングしているときには、改行コードを意識する必要はありません。
- システム
エンジニア - 改行コードといっても、奥が深いですね。
- プロジェクト
マネージャー - 開発を行うとき、OSやプログラミング言語によって違う改行コードをどうしても意識する必要がありますので、仕組みを理解して開発を行うようにしましょう。
まとめ
この記事では、改行コードについて様々な角度から解説してきました。
普段なにげなく扱っているテキストファイルですが、開発者ともなれば、その内部構造に深く関わる必要が出てきます。
違うOSで動作させる場合、内部構造の把握は必須です。文字コードも注意しなくてはいけませんが、改行コードも注意しなくてはいけません。改行コードが違うだけで誤動作や意図しない表示を招きます。
今ではさまざまな仕組みの発達により吸収されることが多くなった改行コードですが、しかしその仕組みを把握しておくことは必要です。バグを未然に防ぐためにも、正しい知識をもって開発にあたりましょう。
仕組みの把握は、開発者が絶対にしなくてはいけないことです。仕組みを熟知した上で開発を行うのがプロの開発者です。
FEnet.NETナビ・.NETコラムは株式会社オープンアップシステムが運営しています。
株式会社オープンアップシステムはこんな会社です
秋葉原オフィスには株式会社オープンアップシステムをはじめグループのIT企業が集結!
数多くのエンジニアが集まります。

-
スマホアプリから業務系システムまで
スマホアプリから業務系システムまで開発案件多数。システムエンジニア・プログラマーとしての多彩なキャリアパスがあります。
-
充実した研修制度
毎年、IT技術のトレンドや社員の要望に合わせて、カリキュラムを刷新し展開しています。社内講師の丁寧なサポートを受けながら、自分のペースで学ぶことができます。
-
資格取得を応援
スキルアップしたい社員を応援するために資格取得一時金制度を設けています。受験料(実費)と合わせて資格レベルに合わせた最大10万円の一時金も支給しています。
-
東証プライム上場企業グループ
オープンアップシステムは東証プライム上場「株式会社オープンアップグループ」のグループ企業です。
安定した経営基盤とグループ間のスムーズな連携でコロナ禍でも安定した雇用を実現させています。
株式会社オープンアップシステムに興味を持った方へ
株式会社オープンアップシステムでは、開発系エンジニア・プログラマを募集しています。
年収をアップしたい!スキルアップしたい!大手の上流案件にチャレンジしたい!
まずは話だけでも聞いてみたい場合もOK。お気軽にご登録ください。


新着案件New Job
-
開発エンジニア/東京都品川区/【WEB面談可】/在宅ワーク
月給29万~30万円東京都品川区(大崎駅) -
遠隔テストサービス機能改修/JavaScript/東京都港区/【WEB面談可】/テレワーク
月給45万~60万円東京都港区(六本木駅) -
病院内システムの不具合対応、保守/東京都豊島区/【WEB面談可】/テレワーク
月給30万~30万円東京都豊島区(池袋駅) -
開発/JavaScript/東京都豊島区/【WEB面談可】/テレワーク
月給50万~50万円東京都豊島区(大塚駅) -
債権債務システム追加開発/東京都文京区/【WEB面談可】/在宅勤務
月給62万~67万円東京都文京区(後楽園駅) -
PMO/東京都豊島区/【WEB面談可】/在宅勤務
月給55万~55万円東京都豊島区(池袋駅)