大学生、ファイルの管理方法を考える
もともと『大学生、Windowsにおける快適な操作環境を思案』という記事に全文載せるつもりでしたが、文量が果てしなく長くなることになるので別記事に分けました。
導入
Windowsを使っている時にこんな問題に遭遇したことはありませんか?
「あれー?使おうと思っていたファイルはどこに置いたかな?」
ネットからダウンロードしたファイルを一週間後に使おうとしたら置いた場所を忘れてしまった、編集していたファイルをどこかに置いてしまった・・・などなど、ファイルが行方不明になること、ありませんか?
そんなこんなでファイルの管理方法を調べても、どれも同じような量産記事がヒットします。たまーに分かりやすい記事がありますが、それでも数が少ない。
ということで、実際に私が行っているファイル管理方法の紹介もかねてファイルの管理方法を考えましょう。
ディレクトリツリーの作成はこちらのツールを使います。
対象
- ファイルの管理方法を模索している人
フォルダーの問題
ファイルを管理する上で問題になってくる、それがフォルダーの階層問題。ここではそれらの問題について考えましょう。
こちらが整理するファイルです。
(Unity) 2D_shooting
(Unreal Engine) 2D_shooting
(Unreal Engine) 2D_shooting.exe
(Unreal Engine) 3D_shooting
(Godot) 2D_shooting
(Godot) 2D_action.exe
(Godot) 2D_action
(Python) FizzBuzz.py
(Python) CaesarCipher.py
(D) FizzBuzz.d
(D) CaesarCipher.d
フォルダーの名前問題
さて、このまま運用しますか?
もしあなたがパソコンについて詳しくない上司だった場合、作った名前そのままにして、『新しいフォルダー (2)』、『新しいフォルダー (3)』、『新しいフォルダー改』、『新しいフォルダー_2024年9月13日』、『新しいフォルダー_最終』とセンスのない名前をつけてデスクトップを散らしていく姿が目に浮かぶでしょう。そして、作ったフォルダーの中にまた新しいフォルダーを作成・・・。
もちろん、それで管理できているのであればそのままでいいです。この記事を読む必要はないでしょう。しかし、大抵の人は凡人です。たった一分前の行動ですら忘れ、何を検索しようとしたかも忘れてしまうような、そんな凡人です。
昔から人は何も変わらないのです。古いものに『新』とつけてバージョンアップと叫ぶ、そういうものなのです。
これでは、いけませんね。
ということで混乱を防ぐためにフォルダーの名前を統一しましょう。
例えば―――実行ファイルに対応するようにフォルダーの名前を変えてみましょう。
Unity
└─ (Unity) 2D_shooting
Unreal Engine
├─ (Unreal Engine) 2D_shooting
├─ (Unreal Engine) 2D_shooting.exe
└─ (Unreal Engine) 3D_shooting
Godot
├─ (Godot) 2D_shooting
├─ (Godot) 2D_action.exe
└─ (Godot) 2D_action
Python
├─ (Python) FizzBuzz.py
└─ (Python) CaesarCipher.py
D
├─ (D) FizzBuzz.d
└─ (D) CaesarCipher.d
もちろんこのままでもいいですが、ドキュメントフォルダーに自動的に作成するソフトを使ったときや名前が似ているが目的別のファイルがあったとき、探すのに手間がかかる場合があります。
そのため、タグ付けのように特定の単語を決めておくことで回避することを意識しましょう。個人によっていろいろな名付け方がありますが、ここでは一例として私が決めている形を使います。
- Projects
ソフトウェアを介して作成したファイルを入れる。UnityやGodotなどで作成される編集ファイルを指す。作成されたフォルダーもここに入る。 - Program
PythonやC言語などで作成されたコードを入れる。この階層からさらに細分化していく。 - Creats
作成したファイルを入れる。UnityやGodotでコンパイルした実行ファイルがここに入る。
このように何をしているのかを指す単語を使うようにします。この名付けはドキュメントに自動的に作成されるフォルダーの回避にもつながります。
Visual Studio 2022
Projects_Visual Studio 2022
上が自動的に作成されたフォルダーです。中にはCode SnippetsとTemplatesのフォルダーがあります。一方、下のフォルダーはProjectsという形で作成したため、編集ファイルを中心としたプロジェクトファイルが入っていることが分かります。
ドキュメントに作成されるフォルダーは大抵設定ファイルが入っていることが多く、なにかの拍子で削除した場合今まで設定した内容がすべてなくなる可能性があります。しかし、フォルダーを分けることで綺麗に分けることができるようになります。
さて、そうするとこのように分けることができませんか。
Projects
├─ (Unity) 2D_shooting
├─ (Unreal Engine) 2D_shooting
├─ (Unreal Engine) 3D_shooting
├─ (Godot) 2D_shooting
└─ (Godot) 2D_action
Creat
├─ (Unreal Engine) 2D_shooting.exe
└─ (Godot) 2D_action.exe
Program
├─ (Python) FizzBuzz.py
├─ (Python) CaesarCipher.py
├─ (D) FizzBuzz.d
└─ (D) CaesarCipher.d
このままでもいいですがもう少し使いやすくしてみましょう。ためしに三つの例を挙げます。
Creat_Game
├─ (Unreal Engine) 2D_shooting.exe
└─ (Godot) 2D_action.exe
Projects_Unity
└─ (Unity) 2D_shooting
Projects_Unreal Engine
├─ (Unreal Engine) 2D_shooting
└─ (Unreal Engine) 3D_shooting
Projects_Godot
├─ (Godot) 2D_shooting
└─ (Godot) 2D_action
Program_Python
├─ (Python) FizzBuzz.py
└─ (Python) CaesarCipher.py
Program_D
├─ (D) FizzBuzz.d
└─ (D) CaesarCipher.d
Creat_Game
├─ (Unreal Engine) 2D_shooting.exe
└─ (Godot) 2D_action.exe
Unity_Projects
└─ (Unity) 2D_shooting
Unreal Engine_Projects
├─ (Unreal Engine) 2D_shooting
└─ (Unreal Engine) 3D_shooting
Godot_Projects
├─ (Godot) 2D_shooting
└─ (Godot) 2D_action
Python_Program
├─ (Python) FizzBuzz.py
└─ (Python) CaesarCipher.py
D_Program
├─ (D) FizzBuzz.d
└─ (D) CaesarCipher.d
Creat
├─ Unreal Engine
│ └─ (Unreal Engine) 2D_shooting.exe
└─ Godot
└─ (Godot) 2D_action.exe
Projects
├─ Unity
│ └─ (Unity) 2D_shooting
├─ Unreal Engine
│ ├─ (Unreal Engine) 2D_shooting
│ └─ (Unreal Engine) 3D_shooting
└─ Godot
├─ (Godot) 2D_shooting
└─ (Godot) 2D_action
Program
├─ Python
│ ├─ (Python) FizzBuzz.py
│ └─ (Python) CaesarCipher.py
└─ D
├─ (D) FizzBuzz.d
└─ (D) CaesarCipher.d
このような感じでファイルを分けることができます。壁紙だったらWallpaper、ゲームだったらGameと設定できますね。
決めた名称の前か後に名前を付けるのか、決めた名称の下に階層を置くのか、いろいろな考え方があります。いずれもパッと見て、どこに対象となるソフトウェアのファイルがあるのかが分かりやすくなります。また、実行ファイルと規格化した名称をうまい具合に繋げることで、目的のファイルに辿りやすくなります。
この分け方は一例ですので、自分にあったやり方を見つけていきましょう。
ということでこの段落では、名称の規格化を行って、どのようなファイルが入っているかを判別できるようにするという考えを述べました。
該当しないファイルがあった場合
もし上のように作成した名前に該当しないファイルが出てきた場合、どのように整理するといいのか。
名称の規格を決めるほうが効率がいい場合は決めてしまいましょう。ただ、一時的にしか使わないファイルや特殊的なファイルならどうしますか?
私はネットからダウンロードしたzipファイルは『ZIP_FILE』に入れ、PDFファイルの取扱説明書は『取扱説明書』に入れています。
例外的なファイルでも「例外」としてタグ付けができるのと同じように、いずれかの分類に分けるという事は可能です。
それでも分けられない場合は―――Anythingとでも名付けて入れましょう⌒ポィー ヽ(´ー` )
フォルダーの階層問題
フォルダーの名前と規格の名前を考えましたら、ファイルを置く階層を作りましょう。
おや、先ほどの名前付けで階層を決めていたのではないかと疑問に思う方もいるでしょう。このように思った方は鋭いです。
実はここの内容はさっきの名付けとあまり差がないのです。では、この章ではなにを考えるのでしょう?
ここでは階層の効率化を考えます。
プログラムでよく言われているのは「階層を深くしすぎないこと」です。察しがいい方は分かりますが、こちらもまた同様に深くなりすぎないことが大切です。
先ほど作ったフォルダーの名前を例題にしましょう。
Unity
Projects_Unity
Unity_Projects
Projects
└─ Unity
Unity
└─ Projects
Projectsをどのように扱うかで、フォルダーの階層がガラッと変わる感じでしょうか。
例えば、ソフトウェアの名前を重視したい場合はUnity/Projects
やUnity_Projects
を採用します。逆にプロジェクトファイルを重視したい場合は、Projects/Unity
やProjects_Unity
を採用します。
ここまでならいいのですが、もし「Unityで使うクリエィティブ・コモンズのフリー素材であるBGMを保存する」という選択肢が生まれたとします。
そうするとこのような構造が思い浮かぶはずです。
Unity
├─ Projects
│ └─ プロジェクト名
└─ Resource
└─ CC
└─ BGM
└─ ファイル名
しかし、これが効率的かと考えると微妙なところです。
Resource
は「再帰性のあるフォルダー」として考えるべきです。そう考えるとこのようにした方がいいかもしれません。
Unity
└─ Projects
└─ プロジェクト名
Resource
└─ CC
└─ BGM
└─ ファイル名
このようにすることで階層のネストを一つ下げることができました。
もし、自ら作成したフォルダー階層が非常に深くネストしている場合、「再帰性のあるフォルダー」だったり「別のフォルダーに移すべきフォルダー」の可能性があります。
プログラマブル的思考
さて、ここまで階層について考えましたが、この構造に見覚えのある人が出てくる段階だと思います。特にプログラムをする方であれば分かるはずです。
そう、これはアプリ開発と似た問題と言えるでしょう。ここまでの考え方は『リーダブルコード』に載っている変数名のつけ方に準ずるものがあります。
例えば指定したファイルを読み込み変換して出力するコードを作りましょう。この時、変数名はどうしますか?
これは一例です。
import std.stdio;
void main()
{
string filename_input = "savedata_input.txt"
string filename_output = "savedata_output.txt"
auto file_input_savedata = File(filename_input,"r");
auto file_output_savedata = File(filename_output,"w");
}
Pythonのほうがよかったかな、まぁいいか・・・
これは簡単な例ですが、filename_input
とfilename_output
という変数を作ってファイルポインタを格納しています。
ここではファイルの名前を重視して作っていますが、入力と出力を重視している場合はinput
とoutput
を先に置くでしょう。
このフォルダーには特定の類いが入っていると分かる設計やこの関数名であればこの動作をすると予測できる設計が、ここ近年ではとても多くなりました。
このように何を重視してどのようなファイルが入っているのかを名前で判別できるようにすると便利になります。つまりは、フォルダーの階層を正規的な考えで管理するとネストを防ぐ要因にもなるというのが、この段落の結論です。
ファイル問題
ファイルの名前問題
さて、階層問題については解決できたとしましょう。ですが、ファイルにつける名前はどうしますか?
ということでファイルの名前を考えていきましょう。
とはいっても、やることはフォルダーの名付けと同じです。2025年4月1日に作成したテキストファイルを例に出しましょう。
- 2025年4月1日_〇〇.txt
- 〇〇_2025年4月1日.txt
おや、同じ日に大きな更新ですね。それではこうしましょう。
- 2025年4月1日_1_〇〇.txt
- 2025年4月1日_2_〇〇.txt
- 〇〇_2025年4月1日_1.txt
- 〇〇_2025年4月1日_2.txt
どちらがいいのかは個人の判断に任せますが、新や最終といった名付けで子を泣かせるよりかは日付や連番で管理するほうがよほど健全です。
こうしなくともGitで管理をする手もあります。プログラムであればこちらの方が標準でしょう。
ただし、一部の場面で適当な名前をつけても問題ない場合があります。
一時ファイルとして一時的に保存する、場所を指定して(特にデスクトップであれば)配置する、などなどそのファイルを管理できるなら問題ないです。
ファイルの場所問題
おや、さきほどのフォルダー問題で解決したのではないか?
そう思うのも無理はありません。なんたってあれはファイルの内容によって入れる場所を規格化する考えでしたから。
ここでの問題は、「複数の情報を持つファイルをどこに保管するか」についてです。
もしあなたがゲームクリエイターだとして、クリエイティブ・コモンズのBGMを使用しようとダウンロードします。
実際はファイルをプロジェクト傘下に置きますが・・・ここではファイルのパスを読み込んで再生する手順を考えます。
ではこの場合、ファイルをどこに置きましょうか?
Document
├─ Free_Resource
│ ├─ Music
│ └─ BGM
│ └─ CC
├─ BGM
│ └─ CC
├─ CC_Resource
│ └─ BGM
└─ Resource
└─ CC
└─ BGM
Music
├─ Resource
│ └─ CC
├─ Free_Resource
│ └─ CC
├─ Free_Music
│ └─ CC
├─ Free_BGM
│ └─ CC
└─ CC_Resource
├─ CC_Music
└─ CC_BGM
ここで挙げたフォルダー以外にもまだまだ名前は思いつきますが、とにかく、素材であることを重視したいのか、クリエイティブ・コモンズの音源であることを重視したいのか、はたまたといったようにいろいろな選択肢が生まれます。
ここで大事なのは、同じ役割を持つフォルダーは一つのみを心がけることです。
例えばこのようなフォルダーを作ったとしましょう。
- Projects_Unity
- Game_Unity
- Creat_Unity
- Example_Unity
- Learn_Unity
- My_Unity
一見すると役割が分担しているように見えますね(実際管理できる人はこれでも問題ない)。
しかし、自らの手で作成したUnity製のゲームを管理すると様々な選択肢が生まれます。
my_game
のプロジェクトをProjects_Unity
かCreat_Unity
かMy_Unity
のどこかに入れ、バイナリ化したファイルをGame_Unity
かCreat_Unity
かMy_Unity
のどこかに入れる選択肢が生まれます。
そうでなく学習用にダウンロードしたプロジェクトでもProjects_Unity
かExample_Unity
かLearn_Unity
のどこかに入れる選択肢が生まれます。
このように複数の選択肢が生まれてしまった場合、保存する場所がばらけてしまう可能性が生まれます。
そのため、自分の操作スタイルに合わせて、役割に合ったフォルダー階層を作ることを心がけましょう。
ディレクトリの移動
さて、ここまでフォルダーの階層整理や命名の規格化などを考えました。
では、フォルダー間を移動するときはどうしましょうか。ファイラーでちまちま移動するのもいいですが、ソフトを使って移動する方法も考えるとよりよいです。
ランチャーソフト
ランチャーソフトとは、特定のキーを押すことで選んだソフトが開くようにするソフトのことです。ようは、ファイラーを開かずともファイルを選べるようになったりします。
ここでは、PowerToysのPowers Toy Runを使って説明します。
ここではアプリケーションの名前を入れていますが、もちろんフォルダー名を入れることでフォルダーを開くことができます。
ここで先ほどの命名の規格が役に立ってきます。
ランチャーソフトからプログラムのコードが入ったフォルダーを探したいとします。
pro_pと打つことでProgram_Pythonのフォルダーを、pro_dと打つことでProgram_Dを開けたりします。
もちろんこれは一例にすぎませんが、ファイルとフォルダーを探せるランチャーソフトであれば特定の単語で探したいファイルをすぐに開くことができます。
また、ネットからダウンロードしたファイルは、名前別や拡張子別にそれぞれ設定したフォルダーに送られるようなプログラムを組むのもいいでしょう。
CLI
コマンドラインツールで移動するときも同様に命名規則が役に立ちますが、ここまで読んだのならば利点は分かるはずです。
ここではzoxideとyaziというソフトがあることだけ伝えておきます。
まとめ
( ゚Д゚) < ここまで長々と書きましたが、最初から最後まで保存するファイルやフォルダの命名規則は決めておこうという至極全うなことしか書いていません。以上です。
Discussion