概要
開発において、ディレクトリ構造とファイルパスは軽く見られがちな要素です。画面や機能は目に見えるため優先されやすい一方で、ファイルをどこに置くか、どの名前で管理するか、どのパスを正本として扱うかは後回しにされやすいところがあります。
しかし、これは単なる整理整頓の話ではありません。ディレクトリ構造とファイルパスが曖昧なまま開発を進めると、本番データと検証用データを取り違える、古いバックアップを現在のデータとして参照する、必要なファイルを誤って消す、自動処理が古いパスを参照し続けるといった事故につながります。
アプリが小さいうちは、開発者本人が場所を覚えていれば動きます。しかし、アプリ、設定ファイル、ログ、出力ファイル、自動処理、バックアップが増えてくると、曖昧なパスは一気に負債になります。
パスは後から散らばる
ファイルパスの怖いところは、一度決めるとさまざまな場所に残ることです。コードの中だけではなく、設定ファイル、起動処理、ビルドスクリプト、バックアップ設定、ログ、ドキュメント、自動化ツール、運用手順の中にも残ります。
そのため、後からディレクトリ構造を直そうとしても、単にフォルダを移動すれば済みません。どこかに古いパスが残っていれば、アプリは古いファイルを読みに行き、自動処理は意図しない場所へ書き込み、バックアップは必要な場所を見落とします。
最初の小さな違和感が、運用が進むほど修正範囲の見えない問題になります。
正本がわからない状態が一番危ない
開発で特に危ないのは、どのファイルが正本なのかわからない状態です。現在使っているデータ、検証用にコピーしたデータ、過去のバックアップ、一時的な出力ファイルが近い場所に混ざっていると、見た目だけでは判断できなくなります。
ファイル名に少しだけ違いがある、日付が入っている、似たような名前のフォルダが複数ある。こうした状態は、作った本人以外にはほとんど判別できません。問題は、作った本人でさえ時間が経つと忘れることです。
その状態で移行や復旧を行うと、古いファイルを正しいものだと思って戻したり、現在使っているファイルを不要なコピーだと判断して消したりする可能性があります。ディレクトリ構造は、正本、一時ファイル、検証用、バックアップ、出力ファイルを区別するための境界線です。
最初に決めないと修復が難しくなる
「後で整理すればよい」と考えたくなる場面はあります。しかし、ファイルパスに関しては後回しにするほど難しくなります。
パスは運用の前提になります。コードがその場所を参照し、設定がその場所を記録し、バックアップがその場所を対象にし、自動処理がその場所を読み書きします。さらに、ドキュメントや作業手順にもそのパスが書かれていきます。
最初に曖昧なまま始めると、その曖昧さを前提にした処理が増えていきます。後から直そうとしても、影響範囲を洗い出しきれなければ古いパスが残り続けます。だから、初期段階で最低限のルールを決めておく必要があります。
直接パスを書くほど事故は広がる
開発中に、コードへ直接パスを書きたくなることがあります。小さな検証ならそれで済む場合もあります。ただし、その書き方が本番運用に残ると危険です。
保存先を変えたつもりでも、どこかの処理だけ古いパスを見ている。設定を直したつもりでも、別のスクリプトが固定のパスへ書き込んでいる。こうした状態は、表面上は動いているように見えるため発見が遅れます。
さらに厄介なのは、誤ったパス参照がすぐに失敗するとは限らないことです。古い場所にファイルが残っていれば、処理は成功したように見えます。しかし実際には、現在使うべきファイルではなく、過去のコピーを読んでいるだけかもしれません。パスの事故は、エラーとして止まるよりも、間違った場所を正しく処理してしまうほうが怖いです。
表示名と内部名を混ぜない
人間が見る名前と、システムが使う名前を混ぜることも危険です。画面上の表示名は、読みやすさやブランドに合わせて変わることがあります。一方で、内部で使うディレクトリ名、ファイル名、キー名は長く参照され続けます。
表示名の変更に内部名まで引っ張られると、見た目を少し変えたいだけなのに、保存先や参照先の変更が必要になります。内部名は、できるだけ安定させるべきです。小文字でそろえる、空白や特殊文字を避ける、用途がわかる名前にする、同じ対象を指す識別子を揺らさない。こうした地味なルールが、後からの修正範囲を小さくします。
まとめ
ディレクトリ構造とファイルパスは、開発の初期に決めておくべき重要な要素です。後から整理すればよいものではありません。後から整理しようとしたときには、すでにコード、設定、自動処理、バックアップ、ドキュメントの中にパスが散らばっているからです。
最初に決めるべきなのは、複雑な設計ではありません。正本、一時ファイル、設定、ログ、出力、バックアップ、ソースコードを混ぜないことです。表示名と内部名を分けることです。パスを個別の処理に散らさず、できるだけ共通のルールで扱うことです。
ディレクトリ構造とファイルパスは、開発における地味な部分です。しかし、ここを曖昧にしたまま機能を増やすと、あとから修復が難しい事故につながります。長く運用するシステムほど、最初の置き場所と名前の決め方が効いてきます。
