WindowsとMacを併用して開発する際の文字化けやファイル重複問題の解決方法|NFC・NFD問題

WindowsとMacを併用して開発する際の文字化けやファイル重複問題の解決方法|NFC・NFD問題
  • URLをコピーしました!

WindowsのデスクトップパソコンとMacBookなど、2つの異なるOSを行き来しながらプログラミングをしていると、必ずと言っていいほど直面する厄介な問題があります。

それは、コードをGitHubなどで共有した際に発生する文字化けや、中身を変えていないのにGitが差分として認識してしまう謎のファイル重複問題です。

はじめの頃は何が起こっているのか分かりませんでしたが、理解でき解決までたどり着いたので、メモとして残しておきます。

なぜOS間で文字化けやエラーが起きるのか

WindowsとMacでは、目に見えないファイルの保存ルールが異なっています。代表的なものが文字コードと改行コードです。

日本のWindows環境ではShift-JISという文字コードや、CRLFという改行コードが使われることが多いのに対し、MacやGitHubの標準はUTF-8とLFです。

このルールの違いにより、Windowsで作ったファイルをMacで開いて保存し直すだけで、ファイルが破壊されたり文字化けを起こしたりしてしまいます。

悪名高いNFCとNFD問題とは

さらに深刻なのが、濁点や半濁点を含む日本語ファイル名で起きるNFCとNFDの問題です。

Windowsは「ガ」という文字を1つの文字として扱うNFC方式を採用していますが、Macは「カと濁点」という2つの文字に分解して保存するNFD方式を採用しています。

そのため、Windowsで作成した画像ファイルなどをMacにダウンロードすると、Macが勝手にファイル名を分解してしまいます。

その結果、Gitは元のファイルが削除され、新しい変な名前のファイルが作られたと勘違いし、リポジトリの履歴がめちゃくちゃになってしまうのです。

エディター側の解決策

これらの問題を防ぐためには、まずエディターの設定を世界標準に強制統一する必要があります。Visual Studio CodeやAntigravityの設定画面を開き、エンコーディングに関する設定を変更します。

Files: Encodingの項目をutf8に設定し、Files: Auto Guess Encodingにチェックを入れます。さらに、Files: Eolという改行コードの項目を\nつまりLFに変更してください。

これをWindowsとMacの両方のエディターで設定しておくことで、文字化けや改行コードの違いによるエラーを防ぐことができます。

Git側の解決策

次に、Mac特有の文字分解によるファイル重複問題を解決するために、Mac側のGitにルールを教え込みます。Macのターミナルを開き、以下の2つのコマンドを順番に実行してください。

1つ目は、git config –global core.precomposeunicode true です。これにより、Macが文字を分解せずにWindowsと同じ方式で扱うようになります。

git config --global core.precomposeunicode true

2つ目は、git config –global core.quotepath false です。これはファイル名の文字化け表示を防ぐための設定です。

git config --global core.quotepath false

このコマンドにはglobalという指定が入っているため、Macで1度だけ実行すれば、すべてのエディターやプロジェクトで共通して効果を発揮します。

最も確実な根本的解決策

設定による対策も重要ですが、世界中のエンジニアが実践している最も確実な防衛策があります。

それは、ファイル名、フォルダ名、そしてGitのブランチ名には絶対に日本語を使わず、半角英数字とハイフンやアンダースコアのみを使うというルールを徹底することです。

コードの中のコメントやテキストとして日本語を書く分には全く問題ありませんが、システムが管理する名前に日本語を避けるだけで、OSの違いによる無用なトラブルの大部分を物理的に防ぐことができます。

まとめ

WindowsとMacの併用開発におけるトラブルは、OSの仕様の違いとGitの組み合わせによって引き起こされます。

エディターの保存形式をUTF-8とLFに統一すること、MacのGit設定を調整すること、そして何よりファイル名に日本語を使わないこと。

この3つの対策を行うことで、OSの違いに悩まされることなく、快適に開発を進めることができるようになります。

それでは!

よかったらシェアしてね!
  • URLをコピーしました!

この記事を書いた人

サイト「インターネットビジネスの世界」運営者。ビジネスプロデューサー、著述業。メルマガやブログを書きながら、好きなことをしてのんびりと生きています。

目次