ファイルの末尾には改行をいれましょう!

この記事は「ウィルゲート Advent Calendar 2023」の 15日目の記事です。

こんにちは、ウィルゲート開発室のTamaGです。

早速ですがみなさん、「ファイルの末尾に改行を入れる」というのを意識したことはありますか?

私はレビューで指摘されるまで全く意識したことがありませんでした。

本日はなぜファイルの末尾に改行を入れるのか、またそれについて調べる際に感じたことをお話したいと思います。

きっかけ

テーブルの更新に使用する.sqlファイルを変更してPRを出したところ...

このようなレビューをいただきました。 当時の僕は思いもよらぬレビューに戸惑いつつも、 なぜファイルの末尾に改行を入れなければならないのか調べてみることにしました。

なぜファイルの末尾に改行を入れる必要があるのか?

一言で言えば POSIXにそのように定義されているから です。

POSIXによるとテキストファイルとは、

A file that contains characters organized into zero or more lines.

0個以上の行が含まれたファイルであり、

行とは

A sequence of zero or more non- characters plus a terminating character.

0個以上の改行以外の文字 + 改行 のシーケンス である。

というように定義されています。

POSIXとは

POSIX(Portable Operating System Interface for uniX)とは、

簡単に説明すると

異なるUNIX系システムでプログラムやコマンドが互換性を持つようにするための規格です。

我々が普段お世話になっているプログラムやコマンドはこれに準拠して実装されているので、 ファイルの末尾に改行がないと予期せぬ不具合が生じることがあるようです。

実際に困りそうなこと

先程述べたPOSIXの話と直接的な関係はないのですが、

ファイルの行数を確認するときに wc -l コマンドを使うと思います。

このコマンド、「ファイルの行数を出力する」のではなく

正確には「ファイルの改行数を出力する」コマンドなのです。

ファイル末尾の改行を忘れてしまうとどうなるかというと...

○○.txt / 2行目の末尾には改行をつけていない

改行の数は1つなので1と出力される

そもそもの原因

普段の開発では VSCodeの保存時の自動整形機能が働いて、末尾の改行を入れてくれていたのですが 今回問題になったファイルは.sqlファイルで、自動整形の対象から漏れていたんですね。

これから

エディタの設定で文末に改行を自動で挿入するようにする設定があったのでそれを有効にしました。

これで、どんな拡張子のファイルであろうと文末に改行をつけてくれるようになりました。

めでたしめでたし。

まとめ

  • POSIXに準拠してファイルの末尾には改行をいれましょう
  • wc -l コマンドは改行の数を出力するコマンド
  • 忘れないようにエディタの設定で自動で挿入するようにしよう

以上!

そして「ウィルゲート Advent Calendar 2023」、明日は吉田さんによる「出戻りして感じたウィルゲートの開発室について」です。 お楽しみに!