ファイル名

**ファイル名**（ファイルめい、）は、ファイルシステム上でファイルを特定するために文字列で表された名前。

## 概要
コンピュータ上で主記憶装置（メインメモリ）にデータとして展開されている作業内容を、補助記憶装置（ストレージ）にファイルとして保存（永続化）するときは、まずファイル名を指定し、その名前を持つファイルを書き込みモードでオープンしてからデータを書き込み、クローズする。一般的には、設定したファイル名は後から何度でも変更（リネーム）可能であるが、システムによってはエンドユーザーによる自由な命名や改名が許可されていない場合もある。ストレージに保存されたファイルの内容をメモリに読み込むときは、そのファイル名を使って読み取りモードでオープンしてからデータを読み取り、クローズする。

文脈によっては、「ファイル名」という用語がファイルの名前だけでなくディレクトリ（フォルダー）の名前（ディレクトリ名、フォルダー名）を包含していることもある。さらに、「ファイル名」がファイルパスと同一視され、絶対パスまたは相対パスを含んでいることもあれば、パス区切り文字（ディレクトリ区切り文字）で分割された最後の要素のみを表すこともある。「ファイル名」が拡張子を含むこともあれば、含まないこともある。また、ファイル名の長さや使用可能な文字の制限はオペレーティングシステム (OS) やファイルシステムにより異なる。

ファイル名として解釈される文字列を構成する文字も、OSやファイルシステムにより異なる。Windows NT系では内部的にUnicodeで表される文字からなる文字列（実際のエンコードはUTF-16）を利用しており、NTFSやexFAT、UDFS、FAT32といった比較的新しいファイルシステムではストレージに長いファイル名 (, LFN) をUnicodeで格納する。。このため、システムによっては人間にとって読めないファイル名を付けることも可能であり、またシステム間でデータを移動する際は適切な規則でのファイル名の変換が必要となる。

パーソナルコンピュータ (PC) 向けのOSでは、エンドユーザーがファイルマネージャーを利用してある程度自由にファイルやディレクトリを操作できるため、ファイル名を意識する機会も多いが、コンピュータシステムやアプリケーションソフトウェアによっては、ユーザーがファイル名を意識する必要がないこともある。例えばゲームの場合、進行状況などを保存するセーブデータは外付けのメモリカード、内蔵のローカルストレージまたはクラウドサーバーなどに何らかのファイルとして保存されるが、通例ソフトウェアによって管理しやすいファイル名が自動的に付けられる。iPhoneやiPadで使われているモバイルOSのiOS/iPadOSは、バージョン10までファイルマネージャーを標準搭載しておらず、エンドユーザーは普段ファイル名どころかファイルという概念の存在すら意識することはなかった。

## ファイル名に含まれる要素
ファイル名（パス名）には以下のような要素が含まれる場合がある。
* プロトコル（スキームとも）― アクセス方法
*: 例：http, ftp, file, smb など
* ホスト（ネットワークIDの場合も）― ホスト名、IPアドレス、ドメイン名、LANネットワーク名
*: 例：`wikipedia.org`, `207.142.131.206`, `\\MYCOMPUTER`, `SYS:` など
* デバイス（ノードとも）― ポート、ソケット、ドライブ、ルートマウントポイント、ディスク、ボリューム
*: 例：`C:`, `/`, `SYSLIB` など
* ディレクトリ（パスとも）― ディレクトリ・ツリー
*: 例：`/usr/bin`, `\TEMP`, `[USR.LIB.SRC]` など
* ベースファイル名（）またはステム（）― 拡張子を除いたファイル名
*: 例：`C:\hoge\fuga.txt`における `fuga` など
* 種類（や拡張子）― ファイルの内容種別を示す
*: 例：`.txt`, `.exe`, `.dir`, `.html` など
* バージョン ― ファイルの版を表す番号

POSIXには、パス区切り文字`/`で分割された最後の要素を返す「basename」というコマンドおよびシステムコールが存在する。これらは拡張子を含むファイル名を返す。コマンドのほうは`''suffix''`オプションを指定することもでき、例えば`.txt`のような拡張子を取り除く用途にも使えるが、任意の拡張子を一律取り除けるわけではない。

Javaではまたはによって、名前区切り文字で分割された最後の要素を取得することができる。

## 使用が不可能な記号
たとえ、コンピュータ上で利用可能な記号（例えばテキストファイル内の文字データとして閲覧や編集が可能）でも、ファイル名では使用が不可能な記号がある（「`/`」「`"`」のような半角の記号は使用不可能だが、「`／`」「`“`」「`”`」のような全角の記号ならば使用可能な場合もある）。ファイルシステムが違うと、同じOSでも使用不可能な記号が異なることがある。これは、ファイルシステムによって予約されており、その記号が何らかのファイル処理に既に利用されているためである。そのため、あるコンピュータでは使用可能でも、他のコンピュータでは使用不可能な場合もある。ファイルシステム側の制約とは直接関係ないものの、OS側の歴史的な経緯から使用不可能となっている記号もある。ファイルマネージャーやコマンドラインインタプリタ（シェル）上では命名に制限がかかっていても、APIによってはそのような制限がかからず、APIを使ったプログラムコードを書いて直接ファイルを作成することができてしまうケースもあるが、そういった標準規則違反のファイル名を付けてしまうとトラブルを引き起こすことが多い。

ファイル名として使用できない記号、および使用が不可能な理由について以下の表に示す。

日本語環境ではJIS X 0201の歴史的な経緯から、ASCIIのバックスラッシュに相当する0x5Cは半角円記号（円マーク）で表示されることが多いものの、フォントにも依存する。Windowsにおいて、ASCIIバックスラッシュと同じ文字コードを持つ半角の円記号はファイル名の一部として使用できないが、全角の円記号`￥`はファイル名の一部として使用できる。さらにUnicodeには別の円記号`&yen;`としてU+00A5が定義されており、これはWindows NT系OSおよびNTFSであればファイル名の一部として使用することはできる。ただし、Windows 9x系が使われていた時代やそれ以前に開発されたFAT12/FAT16/FAT32などの古いファイルシステムでは、ファイル名のエンコードにOEMコードページ（ANSIマルチバイト文字セット）が使われている。システムロケールを日本語（Microsoftコードページ932）に設定したWindows環境の場合は`WideCharToMultiByte()`関数などを使ってUnicode文字列をOEMマルチバイト文字列に変換する際、U+00A5が0x5Cにマッピングされてしまう。この動作はディレクトリトラバーサルを引き起こす可能性があるセキュリティホールであるため、アプリケーションはFATファイル名として変換される可能性のある文字列にU+00A5が入り込まないように配慮すべきである。

## 使用が不可能なファイル名
一般的なファイルシステムでは、単独の`.`はカレントディレクトリを、`..`は上位ディレクトリを表す特殊なファイル名であるため、任意のファイル名として使うことはできない。

WindowsとDOSでは、以下の名前もOSによって予約されており、使用不可能である。

 CON, PRN, AUX, CLOCK$, NUL
 COM0, COM1, COM2, COM3, COM4, COM5, COM6, COM7, COM8, COM9, COM¹, COM², COM³
 LPT0, LPT1, LPT2, LPT3, LPT4, LPT5, LPT6, LPT7, LPT8, LPT9, LPT¹, LPT², LPT³

WindowsはISO/IEC 8859-1（Windows-1252）の上付き数字（¹, ², ³）を通常の数字（1, 2, 3）として認識し、`COM#`と`LPT#`の有効な一部として扱うため、これらを含むパターンも予約されている。

ここで挙げたものは不完全な一覧であり、ファイルシステムごとの正確な名前付けの規則については外部リンク先を参照されたい。

## ファイル名の重複
前述したとおり、メモリ上のデータをファイルとして保存する際は、暗黙的または明示的にファイル名を設定する必要がある。ただし一般的には、1つのコンピュータに、同一のフルパスを持つファイルが複数存在することは不可能となっている。そのため、保存先として利用しようとしているストレージの中に、同一のフルパスを持つファイルがすでに存在する（同一の親ディレクトリ内にまったく同じ名前のファイルがすでに存在する）場合は、置き換える（上書き保存する）か、別名で保存するか、キャンセルするかを選択しなければならない。ファイル名の大文字と小文字を区別しない環境では、大文字と小文字の違いだけでは別名にならず、同じ名前として扱われることにも留意する必要がある。

しかし、業務用のメインフレーム（汎用機）等では、パス構造を採用しておらず、同じファイル名の存在を許容する場合があるが、一般には使用されていないため説明を省略する。

なお、一般的なオンラインストレージサービスでは、エンドユーザー向けに表示されているファイル名は便宜上の表示名 (display name) にすぎず、内部的なファイル名とは別物である。表示名を変更しても内部名は変わらず、変更履歴も継承される。そのため、Google ドライブのように同一の親フォルダー内に同じ名前を持つファイルが複数存在することが可能となっているサービスもある。ただし、まったく同じ名前を付けてしまうと紛らわしいため、管理しやすさの観点から異なる名前を付けるのが通例である。

## 脚注
### 注釈

### 出典

## 関連項目
* ファイルシステム
* ディレクトリ
* 拡張子
* 長いファイル名
* Uniform Resource Identifier (URI)
* Uniform Resource Locator (URL)

## 外部リンク
* Microsoft
** FAT、HPFS、NTFS ファイル システムについて
** Naming a File