Upgrade to Pro — share decks privately, control downloads, hide ads and more …

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

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

社内の勉強会で発表しました。
ファイルの末尾に改行を入れてくれない人がいるときに使いまわせる資料になればと思います。

GitHub Pagesでも公開しています。リンクなど↓こちらの方が見やすいかと思います。
https://obikosato.github.io/slides/20250729-trailing-line-break/

こちらの記事の内容を参考にさせていただきました。ありがとうございました。
https://qiita.com/hamacccccchan/items/11c17c7412a5aeb2ad74

Avatar for obikosato

obikosato

July 29, 2025
Tweet

Other Decks in Programming

Transcript

  1. 例:wc -l で行数が正しくカウントされない $ cat a.csv aaa,bbb ccc,ddd% $ wc

    -l a.csv 1 本来は2行のはずが、1行としてカウントされる。 2025-07-29 | devds勉強会 | @obikosato 6
  2. 例:cat でファイルがちゃんと結合されない $ cat a.csv aaa,bbb ccc,ddd% $ cat a.csv

    a.csv aaa,bbb ccc,dddaaa,bbb ccc,ddd% 末尾に改行がないため、2つ目のファイルの内容が1行目にくっついてしまう。 2025-07-29 | devds勉強会 | @obikosato 7
  3. VSCodeのsettings.json { "files.insertFinalNewline": true, // ファイルの末尾に改行を入れる "files.trimFinalNewlines": true // ファイルの末尾の改行が複数あったら1つにまとめる

    } .editorconfig [*] insert_final_newline = true # ファイルの末尾に改行を入れる AI AI(Claude Codeなど)は末尾改行が苦手なようなので、明示的に指示しましょう。 お手元のAIにもよろしくお伝えください。 2025-07-29 | devds勉強会 | @obikosato 14
  4. GitHub Actionsでeditorconfig-checkerを使う .editorconfigのルールに合っていない場合は失敗(エラー)として検知されます。 name: EditorConfig Checker on: pull_request: branches: -

    main jobs: editorconfig: runs-on: ubuntu-20.04 steps: - uses: actions/checkout@v4 - uses: editorconfig-checker/action-editorconfig-checker@main - run: editorconfig-checker https://github.com/marketplace/actions/editorconfig-checker-action 2025-07-29 | devds勉強会 | @obikosato 16
  5. 実際の設定例 EditorConfig + GitHub Actions + ブランチ保護ルールの 具体的な設定手順をこちらにまとめました。 https://github.com/obikosato/ci-sample/blob/main/protect-main-with-editorconfig.md GitHub

    Actionsで.editorconfigチェックを設定 チェック結果をプルリクエストで必須化 mainブランチでチェック必須にして保護設定 これにより、末尾改行のないファイルはmainブランチにマージできなくなります。 2025-07-29 | devds勉強会 | @obikosato 17
  6. (おまけ)リポジトリ内の末尾改行のないファイルを検出してみよう 適当なリポジトリのルートで実行してみましょう。 (UNIX互換シェル環境で) git ls-files -z | while IFS= read

    -r -d '' file; do file --mime "${file}" | grep -q -e "charset=binary" -e "image/svg+xml" || tail -c1 "${file}" | read -r _ || echo "Missing newline: ${file}" done 2025-07-29 | devds勉強会 | @obikosato 21
  7. POSIX標準 https://pubs.opengroup.org/onlinepubs/9799919799/ 3.387 Text File A file that contains characters

    organized into zero or more lines. The lines do not contain NUL characters and none can exceed {LINE_MAX} bytes in length, including the <newline> character. ... 3.185 Line A sequence of zero or more non-<newline> characters plus a terminating <newline> character. テキストファイルは行か行の集合であり、行はnewlineで終わる。 2025-07-29 | devds勉強会 | @obikosato 22
  8. git diff git diff では ️の代わりに、 「 \ No newline

    at end of file 」が出ます。 aaa,bbb -ccc,ddd \ No newline at end of file +aaa2,bbb2 +ccc,ddd +ccc2,ddd2 2025-07-29 | devds勉強会 | @obikosato 24