やじうまの杜

名前がドットから始まる“ドットファイル”をWindowsで作成するには?

「Windows 10 19H1」では裏ワザ不要で作成可能に

 “やじうまの杜”では、ニュース・レビューにこだわらない幅広い話題をお伝えします。

 先日、「Windows 10 Insider Preview」Build 18342(19H1)で“.gitignore”などのように“名前がドットから始まるファイル”(以下、“ドットファイル”と呼ぶことにします)が作成可能になったことをお伝えしました。今回はそれについて、いくつか補足したいと思います。

「エクスプローラー」で作成できない“ドットファイル”とは?

「エクスプローラー」で“ドットファイル”は作成できない

 “ドットファイル”とは、以下の条件を同時に満たすものをいいます。

  • ファイル名が“.(ドット)”で始まっている
  • 拡張子がない

 「Windows 10 19H1」Build 18342より前のバージョンの「エクスプローラー」でこれらの条件を同時に満たす名前をファイルに与えようとすると、“ファイル名を入力してください”というエラーが表示されます。逆に言えば、拡張子さえあれば、名前がドットで始まるファイル名(たとえば“.sample.txt”)を付けることは可能です。

ファイルシステムでは許可されている → 「エクスプローラー」以外では作成可能

「コマンド プロンプト」で“ドットファイル”を作成

 しかし、これはあくまでも「エクスプローラー」が課している制限です。ファイルシステムでは“ドットファイル”の作成は禁止されていませんので、たとえば「コマンド プロンプト」では以下のコマンドで“ドットファイル”を作成可能です。

# type コマンドで NUL(空のファイル)の内容を表示して .gitignore へ出力する
type NUL > .gitignore

# copy コマンドで NUL ファイルを .gitignore という名前でコピーする
copy NUL .gitignore

 開発者など、日頃コマンドラインをメインに使っているユーザーの中には、「エクスプローラー」にこんな制限があったことを知らない人もいたようですね。

Windowsで作成できないファイル

 Windowsでは以下の単語をファイル名にすることはできません。拡張子として使うことはできます(たとえば“sample.con”)が、これらの単語に任意の拡張子を追加したファイル名(たとえば“con.sample”)を指定することもできません。

CON、PRN、AUX、NUL、COM1、COM2、COM3、COM4、COM5、COM6、COM7、COM8、COM9、LPT1、LPT2、LPT3、LPT4、LPT5、LPT6、LPT7、LPT8、LPT9

 これらはシステム上特別な意味をもっているため、通常の方法では「コマンド プロンプト」でも作成できません。

 また、「メモ帳」といった「エクスプローラー」以外のアプリを利用することもできます。「メモ帳」の場合、[ファイル]-[名前を指定して保存]コマンドでファイルの保存ダイアログへアクセスし、[ファイルの種類]オプションを“すべてのファイル(*.*)”に切り替えて“ドットファイル”を保存してみましょう。エラーに遭うことなく、正常にファイルを作成できるはずです。

「メモ帳」で“ドットファイル”を作成

「エクスプローラー」で“ドットファイル”を作成する方法 ~お節介を逆用する

 とはいえ、“ドットファイル”を作成するためだけに「コマンド プロンプト」や「メモ帳」を起動するのは面倒という人も少なくないかと思います。なんとかして「エクスプローラー」だけで“ドットファイル”を作成することはできないでしょうか。

 実は、「エクスプローラー」にはドットで終わるファイル名(たとえば“sample.”)を指定すると、末尾のドットを取り除いてくれるというお節介機能が備わっています。おそらく拡張子が“空”のファイルが作成されないようにという気遣いからだと思われますが、この機能と“拡張子さえあればドットで始まるファイル名を付けることができる”という条件を組み合わせると、「エクスプローラー」でも“ドットファイル”が作成可能です。

 たとえば、“.gitignore.”というファイル名にすれば(「エクスプローラー」はそれを受け入れてくれます!)、末尾のドットが取り除かれて“.gitignore”になります。

“.gitignore.”というファイル名にすれば、末尾のドットが取り除かれて“.gitignore”に

 いずれ要らなくなる裏ワザですが、Windows 7やWindows 8.1、古いバージョンのWindows 10ではまだ有効なので、覚えておいて損はないでしょう。