文書ファイルの名前は「日付_案件_文書名_版.拡張子」の順に固定すると、並べ替えるだけで時系列になり、名前だけで中身と状態がわかります。 この記事は、設計書・議事録・見積書といった文書ファイルの名前とフォルダの決め方を扱います。プログラムの変数名や関数名の付け方(キャメルケースやスネークケース)とは対象が別で、ここでは扱いません。

書式を1行で決めたうえで、良い例と直したい例を20組、OSごとに使えない文字の一覧、そのまま貼れるフォルダ構成、既存ファイルを一括で改名するPythonコードまでを、動かした結果と一緒に載せます。

確認環境(確認日 2026-10-05):Ubuntu 24.04(ext4)、bash 5.2、tree 2.1.1、Python 3.11。Windows と macOS の決まりは、今回開いた Microsoft Learn と Apple のユーザガイドの記載です(出典は末尾)。

この記事の結論

  • 書式は YYYYMMDD_案件_文書名_vX.Y.拡張子 に固定する(例:20261005_備品管理_要件定義書_v0.1.docx)
  • 日付は8桁の YYYYMMDD。区切りなし・ゼロ埋めにすると、名前順がそのまま日付順になる
  • 版は v0.1(作成中)から始め、承認されたら v1.0。承認後の小さな直しは v1.1、承認を取り直す改訂は v2.0
  • 「最新」「最終」「修正」は付けない。どれが新しいかは日付と版の数字で表す
  • 区切りは半角アンダースコア、語の中のつなぎは半角ハイフン。空白と記号 \ / : * ? " < > | は使わない

命名規則の早見表

要素 決まり 例 理由
並び順 日付 → 案件 → 文書名 → 版 20261005_備品管理_要件定義書_v0.1.docx 名前順で時系列に並ぶ
日付 半角8桁 YYYYMMDD。その版を保存した日 20261005 桁がそろい、文字としての並びと日付の並びが一致する
案件 一覧表で決めた短い呼び名を1つだけ使う 備品管理 呼び名の揺れがあると検索で拾えない
文書名 文書の種類の名前。一覧表にある語から選ぶ 要件定義書 定例議事録 「議事録」「打合せメモ」「MTG」の混在を防ぐ
版 v + 整数 + . + 整数 v0.3 v1.0 v1.1 作成中か承認済みかが整数部でわかる
区切り 要素の間は _、要素の中は - 変更依頼-012 _ で分割すれば機械的に4要素へ分けられる
文字 全角かな漢字、半角英数字、_ - . のみ ― どのOSでも通り、URLやコマンドでも扱いやすい
長さ 拡張子込みで50文字以内を目安(例) ― フォルダの深さと合わせてパス全体を短く保つ
入れない語 最新・最終・修正・確定・コピー・new・old ― 2回目の「最終」が出た時点で意味を失う
作成者・確認者 名前には入れず、文書の改訂履歴に書く ― 名前が長くなり、書式が人によって揺れる

本記事の内容は、ご自由にお使いください。
ご利用の際は、出典として本ページへのリンクを記載いただけますようお願いします。

(記載例)出典:株式会社RJC「ファイル名の命名規則ルールと例|版番号の付け方・フォルダ構成」

書式は1行で決める

YYYYMMDD_案件_文書名_vX.Y.拡張子
20261005_備品管理_要件定義書_v0.1.docx
│        │        │          │
│        │        │          └ 版:作成中は v0.x、承認済みは v1.0 以降
│        │        └ 文書名:文書の種類(一覧表の語を使う)
│        └ 案件:決めた呼び名を1つ
└ 日付:その版を保存した日(8桁)

順番を日付から始めるのは、フォルダを名前順に並べたときに時系列になるからです。 Pythonの sorted() で文字として並べ替えると、次のようになりました。

['2026-10-12_a', '2026-10-5_a', '20261005_a', '20261012_a', '5.10.2026_a', 'R8.10.5_a']

ゼロ埋めのない 2026-10-5 は 2026-10-12 より後ろに来ます。8桁の 20261005 と 20261012 は日付どおりの順です。日・月・年の順や元号の書き方は、年をまたぐと並びが崩れます。

日付に何の日を入れるかも1つに決めます。この記事では「その版を保存した日」とします。議事録だけは会議の開催日にすると探しやすくなります(文書名ごとの例外は一覧表に書いておきます)。

版番号の付け方(v0.1 から v1.0 へ)

版は「整数.整数」の2つの数字で表し、整数部が0なら作成中、1以上なら承認済みと読めるようにします。

状態 版 上げ方 例
書き始め v0.1 最初に保存したとき 20261001_備品管理_要件定義書_v0.1.docx
作成中・レビュー中 v0.2、v0.3 … 人に渡すたびに小数部を1つ上げる 20261003_備品管理_要件定義書_v0.2.docx
承認済み(初版) v1.0 承認されたら整数部を1にして小数部を0に戻す 20261005_備品管理_要件定義書_v1.0.docx
承認後の小さな直し v1.1、v1.2 … 誤字や表記の統一など、承認を取り直さない直し 20261008_備品管理_要件定義書_v1.1.docx
承認を取り直す改訂 v2.0 内容が変わり、もう一度承認を受けたとき 20261020_備品管理_要件定義書_v2.0.docx

版を上げるのは「人に渡すとき」です。自分の手元で保存するたびに上げる必要はありません。渡したあとに直すなら、同じ名前で上書きせず、小数部を1つ上げた別のファイルにします。相手の手元にある版と区別がつくからです。

小数部が2桁になる場合は、並び順に気を付けます。文字として並べ替えた結果は次のとおりでした。

['x_v0.10.docx', 'x_v0.2.docx', 'x_v0.9.docx', 'x_v1.0.docx']

v0.10 は v0.2 より前に並びます。この書式では日付が先頭にあるので、日付が違えば順番は保たれます。同じ日に v0.9 から v0.10 へ進むときだけ入れ替わります。作成中の版が10を超えそうな文書は、最初から v0.01 のように小数部を2桁にそろえておくと並びが崩れません。

良い例と直したい例 20組

右の列は、すべて 日付_案件_文書名_版 の4要素に機械的に分けられることをPythonの正規表現で確かめた名前です(20件すべて一致、最長36文字)。

No. 直したい例 良い例 直した点
1 要件定義書.docx 20261005_備品管理_要件定義書_v0.1.docx 日付・案件・版を足す
2 要件定義書(最終).docx 20261005_備品管理_要件定義書_v1.0.docx 「最終」は承認済みの v1.0 で表す
3 基本設計書_最新.xlsx 20261005_備品管理_基本設計書_v1.1.xlsx 「最新」は日付と版で表す
4 議事録1002.docx 20261002_備品管理_定例議事録_v1.0.docx 日付は8桁で先頭、会議の種類を書く
5 見積書_修正2.xlsx 20261005_備品管理_見積書_v0.2.xlsx 「修正2」は版の小数部で表す
6 画面一覧 ver3.xlsx 20261005_備品管理_画面一覧_v0.3.xlsx 空白をやめ、版の書き方を統一
7 2026.1.5試験計画書.docx 20260105_備品管理_試験計画書_v0.1.docx 日付をゼロ埋めの8桁に
8 進捗報告 10月第1週(佐藤).pptx 20261005_備品管理_進捗報告_v1.0.pptx 期間は日付で表し、作成者は文書の中へ
9 課題一覧_コピー.xlsx 20261005_備品管理_課題一覧_v0.4.xlsx 「コピー」を残さず版を上げる
10 レビュー記録_要件定義.xlsx 20261005_備品管理_要件定義書-レビュー記録_v1.0.xlsx 対象の文書名を先に書き、ハイフンでつなぐ
11 操作手順書_第2版_確定.docx 20261005_備品管理_操作手順書_v2.0.docx 「第2版」「確定」は v2.0 の1つで表す
12 移行計画書_r5.docx 20261005_備品管理_移行計画書_v0.5.docx 版の記号を v に統一
13 画面遷移図_new.pdf 20261005_備品管理_画面遷移図_v0.2.pdf 「new」は版で表す
14 【提出用】提案書.pptx 20261005_備品管理_提案書_v1.0.pptx かっこ書きの用途を外し、提出する版を v1.0 に
15 データ項目一覧_20261005_備品管理.xlsx 20261005_備品管理_データ項目一覧_v0.1.xlsx 要素の順番を書式どおりに
16 試験結果報告書:結合.xlsx 20261005_備品管理_試験結果報告書_v1.0.xlsx 全角・半角のコロンを使わない
17 変更依頼#12?.docx 20261005_備品管理_変更依頼-012_v0.1.docx 記号をやめ、連番は3桁のゼロ埋めに
18 タイセイズ_V1.2.pptx 20261005_備品管理_体制図_v1.2.pptx 半角カナと全角英数をやめる
19 リリース手順書_old_20260930.docx 20261005_備品管理_リリース手順書_v0.9.docx 「old」を付けず、以前の版は保管用フォルダへ移す
20 bihin_kanri_sekkei_review_gijiroku.docx 20261005_備品管理_議事録-設計レビュー_v1.0.docx _ を区切り専用にし、語の中は - に

入れない語と、その代わり

入れない語 起きること 代わりに使うもの
最新、new 次の版ができた時点で事実と合わなくなる 日付と版の数字
最終、確定、FIX 「最終2」「最終_本当」と増えていく 承認済みを表す v1.0
修正、修正2 何を基準にした修正かが名前から読めない 小数部を1つ上げる
コピー、(1) 複製しただけか、直したのかが区別できない 直したなら版を上げ、複製なら消す
old、旧 現行のファイルと同じ場所に残り、取り違える 99_保管 フォルダへ移す(名前は変えない)
作成者の名前 人が替わると書式が揺れる 文書の改訂履歴の欄

OSごとに使えない文字・予約名・長さ

Windows と macOS は公式ページの記載、Linux は ext4 上で実際にファイルを作って確かめた結果です。

項目 Windows macOS Linux(ext4)
使えない文字 < > : " / \ | ? * と、文字コード0〜31の制御文字 コロン : は使えない。アプリによっては半角スラッシュ / も使えない / と NUL(文字コード0)だけ
先頭の決まり ― ピリオドで始まる名前は付けられない ピリオドで始めると ls の通常の一覧に出ない
末尾の決まり 空白とピリオドで終えない ― 作れる(end. という名前を作成できた)
予約名 CON、PRN、AUX、NUL、COM1〜COM9、LPT1〜LPT9 ほか。NUL.txt のように拡張子を付けても同じ扱い ― なし(CON と NUL.txt を作成できた)
大文字と小文字 区別されない前提で扱う ― 区別する(Report.txt と report.txt が同じフォルダに並んだ)
名前1つの長さ 255文字 ― 255バイト(かな漢字は UTF-8 で1文字3バイトなので85文字まで)
パス全体の長さ 260文字(MAX_PATH)。Windows 10 バージョン1607以降は設定とアプリの対応により延ばせる ― 4,096バイト

「―」は、今回開いた公式ページにその記載が無かった項目です。

Linux で確かめたときの出力です(OK は作成できた、NG はエラーになった名前)。

OK  'a:b.txt'
OK  'a*b?.txt'
OK  'a<b>|".txt'
OK  'CON'
OK  'NUL.txt'
OK  'end. '
OK  'a\\b.txt'
NG  'a/b.txt' FileNotFoundError [Errno 2] No such file or directory: 'a/b.txt'
NG  'a\x00b' ValueError embedded null byte
OK  ascii255 255 bytes
NG  ascii256 256 bytes File name too long 36
OK  kana85 255 bytes
NG  kana86 258 bytes File name too long 36
$ getconf NAME_MAX .
255
$ getconf PATH_MAX .
4096

Linux では作れてしまう名前が、Windows では作れません。 共有フォルダやクラウドストレージを通して複数のOSから触るなら、いちばん制限の多い Windows の決まりに合わせておくと、どの環境でも同じ名前で扱えます。命名規則に「使う文字は全角かな漢字、半角英数字、_ - . のみ」と書いておけば、この表を毎回見なくても済みます。

パスの長さは、フォルダ名とファイル名の合計で決まります。Windows の260文字には、ドライブ名(C:\)から拡張子までの全部が入ります。フォルダを3階層までにして、ファイル名を50文字以内に収めると、共有フォルダの上位のパスが長くても余裕が残ります(50文字は例です。上位のパスの長さに合わせて決めます)。

フォルダ構成のテンプレート

フォルダは「番号_名前」にして、工程の順に並ぶようにします。 番号を2桁にそろえ、90_ 以降をひな形と保管に充てると、あとから工程を足しても並びが保たれます。

そのまま貼れるツリーです(tree -d -N の出力)。

bihin-kanri
├── 00_管理
│   ├── 01_計画
│   ├── 02_進捗報告
│   ├── 03_課題・リスク
│   └── 04_変更管理
├── 01_提案・契約
├── 02_要件定義
├── 03_設計
│   ├── 01_基本設計
│   └── 02_詳細設計
├── 04_開発
├── 05_試験
│   ├── 01_計画
│   ├── 02_仕様書
│   └── 03_結果
├── 06_移行・リリース
├── 07_運用・保守
├── 08_会議
│   ├── 01_定例
│   └── 02_レビュー
├── 09_受領資料
├── 90_ひな形
└── 99_保管

24 directories
フォルダ 入れるもの
00_管理 計画書、進捗報告、課題とリスクの一覧、変更依頼
01_提案・契約 提案書、見積書、契約に関する文書
02_要件定義 要件定義書、業務の流れ、要求の一覧
03_設計 基本設計と詳細設計の文書
04_開発 開発の決まり、環境の手順(ソースコードは Git に置く)
05_試験 試験の計画、仕様書、結果
06_移行・リリース 移行計画、リリースの手順書
07_運用・保守 運用の手順書、引き継ぎの資料
08_会議 定例とレビューの議事録
09_受領資料 相手から受け取った資料(名前を変えずに置く)
90_ひな形 文書のひな形、命名規則、文書名の一覧表
99_保管 以前の版。現行のフォルダには最新の1つだけを残す

mkdir -p で一括作成する

bash のブレース展開を使うと、1つのコマンドで全部のフォルダを作れます。先頭の bihin-kanri を自分の案件の名前に置き換えてください。

mkdir -p bihin-kanri/{00_管理/{01_計画,02_進捗報告,03_課題・リスク,04_変更管理},01_提案・契約,02_要件定義,03_設計/{01_基本設計,02_詳細設計},04_開発,05_試験/{01_計画,02_仕様書,03_結果},06_移行・リリース,07_運用・保守,08_会議/{01_定例,02_レビュー},09_受領資料,90_ひな形,99_保管}

mkdir -p は成功すると何も表示しません。作られた数を数えると、いちばん上の bihin-kanri を含めて24個でした。

$ find bihin-kanri -type d | wc -l
24
$ tree -d -N bihin-kanri | tail -n 1
24 directories

-p は途中のフォルダが無ければ一緒に作り、すでにあってもエラーにしないオプションです。同じコマンドをもう一度実行しても、中のファイルはそのまま残ります。

既存ファイルを一括で改名するPythonコード

すでにあるファイルを規則に合わせるコードです。標準ライブラリだけで動きます。最初は変更案を表示するだけで、--apply を付けたときに改名し、変更前後の対応表を残します。

決めていること:

  • 日付は、名前に含まれていればそれを使い、無ければファイルの更新日を使う
  • 版は、v1 ver2 第2版 があれば v1.0 v2.0 に直し、無ければ v0.1 にする
  • 最新・最終・修正などの語、かっこ、Windows で使えない文字を取り除く
  • 全角の英数字と全角の空白は半角にそろえる
  • 改名後の名前が重なるときは、版の小数部を進めて重ならないようにする
#!/usr/bin/env python3
"""既存ファイルを「日付_案件_文書名_版.拡張子」にそろえる(Python 3.9 以降、標準ライブラリのみ)

使い方:
  python3 rename_files.py フォルダ 案件名            # 変更案を表示するだけ
  python3 rename_files.py フォルダ 案件名 --apply    # 実際に改名し、対応表 rename_log.tsv を残す
"""
import argparse
import csv
import datetime
import re
import unicodedata
from pathlib import Path

# 版を表さない飾りの語(見つけたら取り除く)
NOISE = ["最新版", "最終版", "最新", "最終", "修正版", "修正", "確定版", "確定",
         "コピー", "FIX", "fix", "new", "NEW", "old", "OLD"]
# Windows で使えない文字と制御文字
FORBIDDEN = re.compile(r'[<>:"/\|?*\x00-\x1f]')
# Windows の予約名
RESERVED = {"CON", "PRN", "AUX", "NUL",
            *(f"COM{i}" for i in range(1, 10)), *(f"LPT{i}" for i in range(1, 10))}
DONE = re.compile(r"^\d{8}_[^_]+_[^_]+_v\d+\.\d+$")          # すでに規則どおり
DATE = re.compile(r"(?<!\d)(20\d{2})[-_./]?(0[1-9]|1[0-2])[-_./]?(0[1-9]|[12]\d|3[01])(?!\d)")
VER = re.compile(r"(?i)(?:ver\.?|v|第)\s*(\d+)(?:\.(\d+))?版?")


def new_name(path: Path, project: str) -> str:
    stem = unicodedata.normalize("NFKC", path.stem)          # 全角英数・全角空白を半角に
    if DONE.match(stem):
        return path.name

    m = DATE.search(stem)                                     # 日付:名前にあればそれ、無ければ更新日
    if m:
        date = "".join(m.groups())
        stem = stem[:m.start()] + stem[m.end():]
    else:
        date = datetime.date.fromtimestamp(path.stat().st_mtime).strftime("%Y%m%d")

    m = VER.search(stem)                                      # 版:v2 → v2.0、無ければ v0.1
    if m:
        version = f"v{int(m.group(1))}.{int(m.group(2) or 0)}"
        stem = stem[:m.start()] + stem[m.end():]
    else:
        version = "v0.1"

    stem = stem.replace(project, "")
    for word in NOISE:
        stem = stem.replace(word, "")
    stem = re.sub(r"[()\[\]【】「」]", "", stem)                # かっこを外す
    stem = FORBIDDEN.sub("", stem)
    stem = re.sub(r"[\s_]+", "-", stem).strip("-. ")          # 空白と _ は - に(_ は区切り専用)
    stem = re.sub(r"-?\d+$", "", stem) or "文書"               # 「修正2」の残りの数字を落とす
    if stem.upper() in RESERVED:
        stem += "-文書"
    return f"{date}_{project}_{stem}_{version}{path.suffix.lower()}"


def main() -> None:
    ap = argparse.ArgumentParser()
    ap.add_argument("folder", type=Path)
    ap.add_argument("project")
    ap.add_argument("--apply", action="store_true")
    args = ap.parse_args()

    files = sorted(p for p in args.folder.iterdir()
                   if p.is_file() and p.name != "rename_log.tsv")
    plan, taken = [], {p.name for p in files}
    for p in files:
        name = new_name(p, args.project)
        if name != p.name:
            base, n = name, 1
            while name in taken:                              # 同じ名前になるときは版の小数を進める
                n += 1
                name = re.sub(r"_v(\d+)\.\d+(\.[^.]+)$", rf"_v\1.{n}\2", base)
            taken.add(name)
        plan.append((p, name))

    for p, name in plan:
        mark = "そのまま" if p.name == name else "改名   "
        print(f"{mark}  {p.name}\n      -> {name}")
    changed = [(p, n) for p, n in plan if p.name != n]
    print(f"\n対象 {len(plan)} 件 / 改名 {len(changed)} 件 / そのまま {len(plan) - len(changed)} 件")

    if not args.apply:
        print("(表示のみ。--apply を付けると改名します)")
        return
    with open(args.folder / "rename_log.tsv", "w", newline="", encoding="utf-8") as f:
        w = csv.writer(f, delimiter="\t")
        w.writerow(["変更前", "変更後"])
        for p, name in changed:
            p.rename(p.with_name(name))
            w.writerow([p.name, name])
    print("改名しました。対応表: rename_log.tsv")


if __name__ == "__main__":
    main()

実行結果

9個のファイルを置いたフォルダ r で試しました。

$ ls -1 r
20260930_備品管理_試験計画書_v0.3.docx
メモ.txt
基本設計書 ver2.xlsx
画面一覧_v1.xlsx
要件定義書_修正2.docx
要件定義書(最終).docx
見積:概算?.xlsx
議事録最新.docx
進捗報告_FIX 10月.pptx
$ python3 rename_files.py r 備品管理
そのまま  20260930_備品管理_試験計画書_v0.3.docx
      -> 20260930_備品管理_試験計画書_v0.3.docx
改名     メモ.txt
      -> 20261002_備品管理_メモ_v0.1.txt
改名     基本設計書 ver2.xlsx
      -> 20260925_備品管理_基本設計書_v2.0.xlsx
改名     画面一覧_v1.xlsx
      -> 20260926_備品管理_画面一覧_v1.0.xlsx
改名     要件定義書_修正2.docx
      -> 20260918_備品管理_要件定義書_v0.1.docx
改名     要件定義書(最終).docx
      -> 20260912_備品管理_要件定義書_v0.1.docx
改名     見積:概算?.xlsx
      -> 20261001_備品管理_見積概算_v0.1.xlsx
改名     議事録最新.docx
      -> 20260901_備品管理_議事録_v0.1.docx
改名     進捗報告_FIX 10月.pptx
      -> 20261003_備品管理_進捗報告-10月_v0.1.pptx

対象 9 件 / 改名 8 件 / そのまま 1 件
(表示のみ。--apply を付けると改名します)

--apply を付けて実行したあとのフォルダと対応表です。

$ python3 rename_files.py r 備品管理 --apply
…(省略)…
対象 9 件 / 改名 8 件 / そのまま 1 件
改名しました。対応表: rename_log.tsv
$ ls -1 r
20260901_備品管理_議事録_v0.1.docx
20260912_備品管理_要件定義書_v0.1.docx
20260918_備品管理_要件定義書_v0.1.docx
20260925_備品管理_基本設計書_v2.0.xlsx
20260926_備品管理_画面一覧_v1.0.xlsx
20260930_備品管理_試験計画書_v0.3.docx
20261001_備品管理_見積概算_v0.1.xlsx
20261002_備品管理_メモ_v0.1.txt
20261003_備品管理_進捗報告-10月_v0.1.pptx
rename_log.tsv

もう一度実行すると「改名 0 件 / そのまま 9 件」になり、規則どおりの名前には手を加えないことを確かめました。

結果を見て手で直すところ

コードが決められるのは形だけです。次の2点は人が見て直します。

  • 版の数字:要件定義書(最終) と 要件定義書_修正2 は、どちらも版の数字を持たないので v0.1 になりました。日付が違うため名前は重なりませんが、承認済みのものは v1.0 に、その後の直しは v1.1 に手で上げます。
  • 日付:名前に日付が無いファイルは更新日を使います。コピーやダウンロードで更新日が変わっている場合は、対応表を見ながら直します。

改名の前にフォルダごと複製を取っておくと、安心して試せます。対応表 rename_log.tsv は、ほかの文書からの参照を直すときの手がかりにもなります。

ファイル名の版・Git・クラウドストレージの版履歴の違い

版を残す方法は3つあり、向いている対象が違います。

比べる点 ファイル名に版を入れる Git などの履歴管理 クラウドストレージの版履歴
版の区切り 人が名前を変えたとき コミットしたとき 保存や上書きのたびに自動で残る
向いている対象 Word・Excel・PDF など、相手に渡す文書 ソースコード、Markdown、設定ファイルなどのテキスト 複数人で同時に編集する文書
差分の見やすさ 2つのファイルを開いて見比べる 行単位で差分が見える サービスの画面で以前の版を開く
相手に渡したあと 名前を見ればどの版かわかる 取り出したファイルの名前には版が残らない ダウンロードしたファイルの名前には版が残らない
承認の区切り v1.0 のように名前で表せる タグで表す 名前を付けられるかはサービスによる
気を付ける点 上書きすると版が失われる 表計算や文書作成ソフトのファイルは差分が読みにくい 残る期間や世代数はサービスごとに決まりがある

どれを使うかの判断基準

条件 選ぶもの
ソースコードやテキストの設定ファイル Git。ファイル名に版や日付を入れない
メールや共有フォルダで相手に渡し、相手の手元に残る文書 ファイル名に版を入れる
クラウド上で複数人が同時に書き、外へ出さない下書き クラウドストレージの版履歴。名前は固定のまま
クラウド上で書いた文書を、承認して相手に提出する 書いている間は版履歴、提出するときに書き出したファイルへ日付と版を付ける
承認の記録として、その時点の内容を残す必要がある PDF に書き出し、ファイル名に版を入れて保管する

1つの文書に2つの方法を重ねないのが基本です。 Git で管理しているファイルに _v2 を付けると、履歴が別のファイルに分かれてしまいます。

確かめて分かったこと

  • Linux では : * ? < > | " を含む名前や CON NUL.txt を作成できました。 作れた名前が Windows へ持っていけるとは限らないため、命名規則は制限の多い側に合わせて書きます。
  • Linux の名前の上限は「文字」ではなく「バイト」でした。 半角は255文字まで作れましたが、かなは85文字(255バイト)までで、86文字(258バイト)は File name too long になりました。
  • v0.10 は文字として並べると v0.2 より前に来ました。 日付を先頭に置く書式なら、同じ日のうちに小数部が10に届く場合を除いて順番は保たれます。
  • ゼロ埋めのない日付 2026-10-5 は 2026-10-12 より後ろに並びました。 8桁にそろえる理由はこの1点です。
  • 一括改名のコードは、版の数字を持たないファイルをすべて v0.1 にします。 「最終」と書かれたファイルを v1.0 にするかどうかは、承認の記録を見て人が決めます。
  • mkdir -p は2回実行してもエラーにならず、既存のフォルダと中身を残しました。 フォルダを足したいときは、同じコマンドに追記して流し直せます。

よくある質問

Q. ファイル名の命名規則とは何ですか? A. ファイルの名前に入れる要素と順番、使う文字を決めた取り決めです。この記事では「日付_案件_文書名_版」の4要素を、半角アンダースコアで区切る形にしています。

Q. ファイル名に日付と版の両方を入れるのはなぜですか? A. 役割が違うからです。日付は「いつの時点のものか」と並び順を、版は「作成中か承認済みか」を表します。同じ日に2回渡すこともあれば、日付が変わっても版を上げない保存もあります。

Q. ファイル名に「最新」「最終」を付けないほうがよいのはなぜですか? A. 次の版ができた時点で、名前と中身が合わなくなるからです。新しさは日付と版の数字で表し、以前の版は 99_保管 へ移します。

Q. ファイル名を英数字だけにする必要はありますか? A. 文書ファイルなら日本語で問題ありません。Windows で使えない記号と空白を避ければ、3つのOSで同じ名前を使えます。URLの一部になるファイルや、コマンドで頻繁に扱うファイルは、半角英数字にしておくと入力が楽になります。

Q. 長いファイル名でコピーできないときはどうすればよいですか? A. フォルダの階層を浅くするか、フォルダ名とファイル名を短くします。Windows ではパス全体が260文字までという決まりがあり、ファイル名だけでなく上位のフォルダ名の長さも合計に入ります。

まとめ

  • 書式は YYYYMMDD_案件_文書名_vX.Y.拡張子 の1行に固定する
  • 日付は8桁、版は v0.1 から始めて承認で v1.0。承認後の小さな直しは v1.1、承認を取り直したら v2.0
  • 最新・最終・修正・コピーは付けない。新しさは数字で表し、以前の版は保管用フォルダへ
  • 使う文字は、全角かな漢字・半角英数字・_ - . に絞る。Windows の決まりに合わせれば macOS と Linux でも通る
  • フォルダは「2桁の番号_名前」で工程順に並べ、mkdir -p で一括作成する
  • 既存ファイルはコードで形をそろえ、版の数字と日付は対応表を見て人が仕上げる
  • ソースコードは Git、相手に渡す文書はファイル名の版、同時編集の下書きはクラウドの版履歴と使い分ける

参考・出典

  • Microsoft Learn「Naming Files, Paths, and Namespaces」 https://learn.microsoft.com/en-us/windows/win32/fileio/naming-a-file (2026-10-05 確認)
  • Microsoft Learn「Maximum Path Length Limitation」 https://learn.microsoft.com/en-us/windows/win32/fileio/maximum-file-path-limitation (2026-10-05 確認)
  • Apple「Macでファイル、フォルダ、ディスクの名前を変更する」(macOS Tahoe 26 のユーザガイド) https://support.apple.com/ja-jp/guide/mac-help/mchlp1144/mac (2026-10-05 確認)

本記事の内容は、ご自由にお使いください。
ご利用の際は、出典として本ページへのリンクを記載いただけますようお願いします。

(記載例)出典:株式会社RJC「ファイル名の命名規則ルールと例|版番号の付け方・フォルダ構成」

株式会社RJC ― SI事業・SES事業・AI駆動開発。RJCは一緒に成長を楽しめる会社です。

WE ARE HIRING

RJCで一緒に開発しながら、
成長を楽しみませんか?

RJCは、Web・モバイル・AIを活用した開発プロジェクトで、テックリードやPM・PMOも活躍するシステム開発会社です。会社を知る、待遇を確かめる、話を聞いてみる。気になるところ見てみてください!

  • 127日年間休日
  • 12時間平均残業時間
  • 毎日ガチャ遊びココロも大切にする福利厚生。アマギフなどの賞品ラインナップ!

ほかにも、チケットレストラン、書籍読み放題、2年ごとの慰労報奨(休暇 or 金一封)、11期連続の黒字決算。

ABOUT RJC RJCがどんな会社か知る 考え方、研修、働き方、福利厚生、社員の前職まで。RJCのことが丸わかり! RJC丸わかりページへ JOB DESCRIPTION 仕事内容・待遇を見てみる 仕事内容、給与・待遇、選考の流れ。経験者も未経験も!応募前に知りたいこと、まとめました! 募集要項を見る ENTRY エントリーする エントリーは1〜2分・履歴書不要です。まずは話を聞いてみたい、という方でも歓迎です! エントリーフォームへ

RJCで一緒に開発しながら、 成長を楽しみませんか?