2.3. ファイルとディレクトリ#
2.3.1. ファイル#
数値、文字、画像、音声、動画など、さまざまな種類のデータは、コンピュータ上ではファイル(file)として扱われます。ファイルには名前をつけることができ、通常はファイル名の最後に拡張子(extension)とよばれる、ファイルの種類を示す文字列が付きます。例えば、manuscript.docx なら Microsoft Word で作成された原稿であることがわかりますし、quirrel.jpg ならリスの写真であるとわかります。このように、一塊のデータをファイルとして保存し、わかりやすい名前をつけて管理するのが一般的です。
コンピュータでは、拡張子ごとに既定アプリケーションがあらかじめ関連付けられています。そのため、たとえば .docx がついたファイルをダブルクリックすると自動的に Microsoft Word が起動して内容が開かれます。一方で、一般的に使われない拡張子の場合は関連付けがないため、「ファイルを開けません」や「このファイルを開く方法を選んでください」といったメッセージが表示され、利用者に使用するアプリケーションを選ばせることになります。
拡張子は、歴史的な経緯やアプリケーションの開発元が定めたものを利用するのが一般的です。たとえば、テキストファイルでは .txt、Microsoft Word では .docx がよく用いられます。さらに、分野ごとに慣例的に使われる拡張子もあり、生物学ではゲノムやアミノ酸配列を記録したファイルに .fa や .fasta、遺伝子アノテーションデータには .gff が用いられます。また、自作のプログラムで扱うファイルなら、任意の拡張子を付けることも可能です。
どのようなファイルであっても、その実体は連続した二進数の膨大な列です。本来であれば、この二進数をストレージやメモリーなどの記憶媒体に連続して書き込んで保存します。しかし、実際にはファイルが必ずしも連続領域に保存されるわけではなく、特に大きなファイルでは複数の断片に分かれて異なる場所に保存されることがよくあります(Fig. 2.5)。

Fig. 2.5 サイズの大きいファイルは、断片化されてハードディスクなどの記憶装置に保存されます。#
たとえば、Ubuntu 上では 239 MB のファイル(iwgsc_refseqv2.1_HC.gff3)が物理的にどこに保存されているかを、次のように調べることができます。
filefrag -v iwgsc_refseqv2.1_HC.gff3
## Filesystem type is: ef53
## File size of iwgsc_refseqv2.1_HC.gff3 is 250023123 (61041 blocks of 4096 bytes)
## ext: logical_offset: physical_offset: length: expected: flags:
## 0: 0.. 22527: 260661248.. 260683775: 22528:
## 1: 22528.. 45055: 260706304.. 260728831: 22528: 260683776:
## 2: 45056.. 61040: 260773888.. 260789872: 15985: 260728832: last,eof
## iwgsc_refseqv2.1_HC.gff3: 3 extents found
この結果から、このファイルは 3 つの断片(extents)に分かれて保存されていることがわかります。例えば、ファイル(logical offset)の最初の 22528 ブロック分は、ハードディスク上(physical offset)の 260661248〜260683775 番のブロックに保存されていることも読み取れます。
ファイルの断片化の状況は、OS の種類、保存時のディスク状況、空き領域の配置などによって変わります。また、ファイルをコピーや移動するたびに、ブロック番号や断片数が変化します。そのため、ファイルの物理的な位置を人間が直接管理するのは現実的ではありません。
そこで、OS はファイル名や拡張子を含むパス(path)を使って、断片化された物理情報をまとめ、利用者には「ひとつのファイル」として見せています。利用者はこのパスを指定することで、ファイルの内容を開いたり編集したりできるのです。
2.3.2. ディレクトリ#
ファイルは通常、ディレクトリ(directory)またはフォルダ(folder)と呼ばれる単位に整理されます。ディレクトリは、ファイルを分類してまとめておく「入れ物」のような役割を果たします。ディレクトリの中にはさらにサブディレクトリを作ることもでき、ツリー状の階層構造を形成します。
パスは、このディレクトリ構造をたどるための住所のようなものです。たとえば、
/home/user/Documents/report.docx
というパスでは、report.docx というファイルが、home ディレクトリの中にある user ディレクトリの中にある Documents というディレクトリの中にある、ということを示しています。
ディレクトリは図書館でいう書棚にあたり、パスはその棚につけられた分類札や索引のようなものです。ファイルの物理的な場所を覚えるのは、図書館で『眠れる森の美女の朝寝坊対策』という本が「7 階 4 番棚 3 段目 1 冊目」にあるのを完璧に記憶するようなもの。しかも、ページ数の多い本は分断されて、複数の棚に置かれているかもしれません。そこで図書館は、「159 人生訓・教訓」などといった大まかな分類を用意しています。利用者は分類札(パス)を頼りに、特定の書棚(ディレクトリ)へたどり着き、目的の本を見つけられる。本が分断されている場合は、その続きがどこにあるのかも見つけられる。パスはそんな頼れる案内役なのです。
2.3.3. パスの調べ方#
プログラミング言語でファイルを処理したりする際に、ファイルのパスを指定する必要があります。Windows の場合は、対象のファイルを右クリックして「プロパティ」を選び、「全般」タブの「場所」に表示された内容がパスです。必要に応じて、このパスをコピーしてプログラムに利用できます。

Fig. 2.6 Windows のファイルパスの調べ方#
macOS の場合は、ファイルを右クリックして「情報を見る」を選ぶと、「一般」タブの「場所」にパスが表示されます。ここを右クリックして「コピー」を選べば、パスをクリップボードに取得できます。なお、コピーされたパスは情報ウィンドウの表示と異なっています。プログラムの処理などには、コピーされたパスの方を利用します。

Fig. 2.7 macOS のファイルパスの調べ方#
上記のように、調べられたパスは絶対パス(absolute path)と呼ばれます。Windows では通常、C:\
から始まる形式です。Linux や macOS では、/
から始まります。この C:\
や /
の部分が、OS のファイルを保存するシステムの最上層を意味し、ルート(root)と呼ばれています。絶対パスは、言い換えれば、ファイルシステムの最上層を起点として、ファイルやフォルダの場所をすべての階層を辿って表現したものです。
一方で、相対パス(relative path)という考え方もあります。相対パスは、自分の現在の作業ディレクトリを基準として、目的のファイルまでの経路を表す方法です。絶対パスに比べて短く記述でき、柔軟に使える場面も多くあります。相対パスの具体的な使い方については、実例と一緒に紹介すると理解しやすいため、ここでは説明を省略します。