はじめに
色々なプロジェクトを進めていくとき、適当にファイルを並べていると整理がつかなかったり、わかりづらくなってしまいます。特に、チーム開発をしている場合はこのような乱雑なディレクトリ構成は避けるべきです。
というわけで、今回はディレクトリ構成を適切にやるにはどうしたらいいかを考えたいと思います。
Linuxにおけるディレクトリの名前
適切なディレクトリ構成をする第一歩として、ディレクトリの名前をわかりやすくすることが大事だと思います。
というわけで、まずはLinuxサーバのディレクトリの名前を調べてみましょう。
適当なLinuxサーバでcd /を実行してルートディレクトリに移動したのち、lsコマンドでその場のディレクトリを見てみましょう。
$ ls
bin bin.usr-is-merged boot cdrom dev etc home lib lib64
lib.usr-is-merged lost+found media mnt opt proc root run
sbin sbin.usr-is-merged snap srv sys tmp usr var
なんだかいろいろありますが、一つずつディレクトリの意味を見ていきましょう。
bin
binaryの略ですが、「ビン」と読むようです。
バイナリファイル、つまりは実行ファイルをここに入れておくことになります。
作ったプログラムを動かすための実行ファイル(.bat、.exe、.shなど)はここに格納するとよいでしょう。
何かをインストールする際も、環境変数にPATHを登録するとき○○/binと記述することが多いです。
boot
システム起動(ブート)に必要なファイルがここに格納されます。
cdrom
CD-ROMでしょうか。今回はあまり関係なさそうです。
dev
developmentと見せかけてdeviceの略らしいです。ハードウェア機器を表すファイルが格納されます。
標準出力を/dev/nullに投げ捨てるということも良くあります。
etc
設定のための各種ファイルが格納されます。
システム全体の設定が保存されているようで、とりあえず何でも入れられているというイメージでしょうか。
home
ユーザディレクトリです。開発リポジトリではあまり使わないかもしれません。
lib
binディレクトリにあるプログラムが用いるライブラリファイルが格納されています。
開発リポジトリでも、ライブラリ関係のものはここに置くとよいでしょう。
lib64というのはシンボリックリンクの一種らしいです。
lost+found
参照できなくなったファイルが保管される場所らしいです。
media
着脱が可能な装置がマウントされる際、主にここにマウンティングポイントが自動で生成されるらしいです。
mnt
mediaと似ていますが、こちらはユーザが手動でマウントする場所となっています。
opt
optionの略です。
追加で選択できるアプリケーションパッケージのインストール先となっています。
proc
processの略です。現在実行されているプロセスについての情報・データが含まれています。
root
ルートユーザーのホームディレクトリです。このユーザーはhome内ではなくここにホームディレクトリを持ちます。
run
システムのランタイム中に必要な一時データを保存するディレクトリです。
sbin
管理システムコマンドが入っています。ルートユーザー以外はすぐに使えないコマンドがここにあります。
開発では区別の為に使うことがあるかもしれないですね。
snap
パッケージ管理システムの一種であるsnapに関連するディレクトリらしいです。
srv
おそらくserverの略だと思います。
サーバ関連のデータを扱う場所とされています。
sys
systemの略です。
システム全般についての内容が保存されます。起動のたびに新しくなるようです。
tmp
temporaryの略です。その名の通り一時ファイルなどが保存されます。未保存の内容などもここに来るようです。
usr
userの略です。
すべてのユーザが利用できるアプリがインストールされる場所がこことなっています。
var
variableの略です。
システム運用中に生成・削除される動的なデータが格納されるようです。
.user-is-merged とつくもの
シンボリックリンクらしいですが、よくわかりません。どちらにせよあまり関係ないです。
よく見かける名前
上で紹介した中で、他でもよく使われているディレクトリ名としては以下のようなものがあります。
- bin
- etc
- lib
- sys
- tmp
- usr
- var
これらのディレクトリ名とどんなファイルの格納先になっているかということは覚えておいて損はないと思います。
その他のよく見かけるディレクトリ名
ここからは、他のフレームワークなどでよく見かけるディレクトリ名を紹介します。
static
Web系の開発リポジトリで、CSSやjsファイルなどが格納されます。
public
これもWeb系のリポジトリで、画像など外部に公開するものを置いておく場所となります。
src
sourceの略で、ソースファイルを格納しておくことになります。
パッケージなどはこの中にmoduleディレクトリを作成してまとめておくようです。
Reactではcomponentsディレクトリがこの中に配置されます。
test
テストコードやテストファイルを配置する場所です。
config
yamlなど、アプリケーションの「設定」ファイルを格納する場所です。
resources
srcやpublicと混同しそうですが、画像などをこのディレクトリに配置することがあるそうです。
data
データなどを置く場所です。最近は学習データなどが使われるので、そういったものが配置されます。
scripts
アプリケーションのメイン動作とは関係ないスクリプトファイルが配置されます。
入力データを生成するスクリプトなどが配置されると思います。
templates
アプリケーションのデザインのためのファイルが配置されます。
utils
utility、つまり道具として使われるスクリプトなどのファイルが格納されます。
docs
documentsです。様々なドキュメント(主に.md)が格納されます。
おわりに
ディレクトリの名前を意識し、適切なディレクトリに適切なファイルを配置することが良いディレクトリ構成をするための第一歩だとわかりました。
ディレクトリ名が短縮形になっていることがよくあるので、使いながら一つ一つ覚えていくのが良いと思います。
これからの開発で意識していけたら、と思います。
参考文献
【初学者向け】ディレクトリ構成の基本 #ディレクトリ構造 - Qiita
/lost+found,sync,VFS,/proc/filesystems #Linux - Qiita
/bin, /usr/bin, /usr/sbin, /usr/local/bin の違いとは? #Linux - Qiita
FHSの「/mnt,/media」ディレクトリの概要 - KoANアカデミー