カテゴリ: COBOL 更新日: 2026/04/06

COBOLのファイル論理名と物理名管理|初心者でもわかるコツと実例

ファイルの論理名と物理名の管理のコツ
ファイルの論理名と物理名の管理のコツ

先生と生徒の会話形式で理解しよう

生徒

「ファイル処理で“論理名”と“物理名”って何ですか?」

先生

「論理名はCOBOL内で使うファイルの“呼び名”、物理名は実際のファイル名やパスのことです。」

生徒

「どう使い分ければいいですか?わかりやすく教えてください!」

先生

「もちろんです。論理名と物理名を整理するコツと実例を、初心者でもわかるように解説しますね。」

1. 論理名と物理名ってなに?

1. 論理名と物理名ってなに?
1. 論理名と物理名ってなに?

COBOLでファイルを扱うとき、まず理解しておく必要があるのが「論理名(Logical Name)」と「物理名(Physical Name)」の使い分けです。この2つは役割が明確に分かれています。

  • 論理名:プログラム内部で使う「ニックネーム」です。一度決めたら、プログラムの中ではずっとその名前で呼び続けます。
  • 物理名:パソコンやサーバーの中に保存されている「実際のファイルパス」です。ハードディスク上の住所のようなものです。

例えば、あなたが手紙を書くときに、相手を「親友」という役割(論理名)で呼ぶとします。その親友が「東京都新宿区の田中さん」(物理名)から「大阪市北区の田中さん」に引っ越したとしても、あなたにとっての「親友」という呼び方は変わりませんよね?これと同じで、ファイルの場所が変わっても、プログラムを修正せずに済むようにこの2つを切り離して管理します。

未経験者向け!身近な例えでイメージしよう

料理のレシピに例えると非常に分かりやすくなります。

  • 論理名:「メインの材料」という名前(レシピに書く名前)
  • 物理名:「冷蔵庫の2段目にある100gの豚肉」(実際のモノ)

レシピ(プログラム)に「冷蔵庫の2段目の肉を焼く」と書いてしまうと、肉を3段目に移動させただけで料理ができなくなります。しかし「メインの材料を焼く」と書いておけば、材料の場所が変わっても、準備する段階で「今日のメインの材料はこれだよ」と指定するだけで済みます。

具体的なCOBOLの記述を見てみましょう。一番シンプルな書き方は以下のようになります。


       INPUT-OUTPUT SECTION.
       FILE-CONTROL.
      * SELECTの後の「MY-FILE」が論理名
      * ASSIGNの後の「"C:\SAMPLE\DATA.TXT"」が物理名
           SELECT MY-FILE ASSIGN TO "C:\SAMPLE\DATA.TXT".

このように、SELECT句でプログラム用の名前を決め、ASSIGN句で実際のファイルの場所を紐付けます。初心者の方はまず、「プログラムで使う名前」と「OS上の実体の名前」をリンクさせる作業が必要なんだ、という点だけ押さえておけば完璧です。

2. なぜ論理名と物理名は分けるの?

2. なぜ論理名と物理名は分けるの?
2. なぜ論理名と物理名は分けるの?

プログラムの中でファイル名や保存場所(パス)を直接書いてしまうと、あとでファイルの場所を移動したり、ファイル名が変わったりした際に、プログラムのソースコードをすべて修正して再コンパイルしなければなりません。これを「密結合」と呼び、修正ミスやデバッグの手間を増やす原因になります。

論理名と物理名を切り離しておくことで、「プログラム側(論理名)」は一切変えずに、外部の設定や定義を変えるだけで「実際のファイル(物理名)」を切り替えられるようになります。これは、システムの保守性や柔軟性を高めるために欠かせない考え方です。

未経験者でもわかる!具体例での比較

例えば、スマートフォンの「連絡先」をイメージしてください。

  • 論理名:「お父さん」という登録名
  • 物理名:「090-1234-5678」という実際の電話番号

もしお父さんが機種変更をして電話番号(物理名)が変わっても、あなたのスマホの登録名(論理名)を「お父さん」のままにしておけば、あなたは中身の番号を意識せずに、いつも通り「お父さん」をタップするだけで電話がかけられますよね?これと同じ仕組みです。

もし、この仕組みを使わずに直接物理名を書いた場合のイメージ(悪い例)を見てみましょう。


* 悪い例:プログラムの中に直接ファイルパスを書いてしまう
* これだと、ファイル名が変わるたびにプログラムを修正する必要がある
       SELECT MY-FILE ASSIGN TO "C:\DATA\2026_SALES_DATA.DAT".

このように直接指定してしまうと、翌年にファイル名が「2027_SALES_DATA.DAT」に変わっただけで、プログラムはエラーになってしまいます。論理名を使って「SALES-FILE」のように定義しておけば、プログラムを触ることなく運用を続けることができるのです。これが、商用システムで長年COBOLが信頼されている理由の一つでもあります。

3. 簡単な定義例

3. 簡単な定義例
3. 簡単な定義例

SELECT IN-FILE ASSIGN TO "C:\DATA\INPUT.DAT".
SELECT OUT-FILE ASSIGN TO "C:\DATA\OUTPUT.DAT".

この例では、論理名がIN-FILEOUT-FILE、物理名がC:\DATA\INPUT.DATなどです。

4. 管理のコツ①:論理名はわかりやすく

4. 管理のコツ①:論理名はわかりやすく
4. 管理のコツ①:論理名はわかりやすく

論理名は何のファイルかすぐわかる名前にしましょう。IN-FILEよりも顧客読込ファイルCUST-INのように具体的にすると、複数のファイルを扱うときに間違いにくくなります。

5. 管理のコツ②:物理名は共通管理

5. 管理のコツ②:物理名は共通管理
5. 管理のコツ②:物理名は共通管理

物理名の実際のファイルパスは、環境定義や設定ファイルで一括管理すると便利です。プログラムには論理名だけ書き、物理名は外部から読み込む方法がおすすめです。

6. マルチ環境対応の例

6. マルチ環境対応の例
6. マルチ環境対応の例

*> 環境ごとに切り替える設定
SET ENVIRONMENT TO "DEV".
IF ENVIRONMENT = "DEV"
    MOVE "C:\DEV\IN.DAT" TO IN-FILE-NAME
ELSE
    MOVE "/prod/data/in.dat" TO IN-FILE-NAME
END-IF

SELECT IN-FILE ASSIGN TO IN-FILE-NAME.

これによって開発環境・本番環境でパスを切り替えられます。

7. 実例:バックアップ対応

7. 実例:バックアップ対応
7. 実例:バックアップ対応

ファイルを読み込む際に、物理名に日付を含めてバックアップファイルを作る方法もあります。


MOVE "BACKUP_" & YYYYMMDD TO BACKUP-NAME.
SELECT BK-FILE ASSIGN TO BACKUP-NAME.

こうすれば毎日違う名前のバックアップを管理できます。

8. トラブル防止のコツ

8. トラブル防止のコツ
8. トラブル防止のコツ
  • 論理名と物理名は一対一(1つにつき1つ)にする
  • ASSIGN宣言はプログラムの先頭にまとめて記述
  • コメント(>* で始まる行)を使って役割を明示

9. 読者へのアドバイス

9. 読者へのアドバイス
9. 読者へのアドバイス

プログラムが大規模になってくると、論理名と物理名の管理がとても重要になります。初心者のうちから整理しておくことで、トラブルに強く、メンテナンスしやすいCOBOLコードが書けるようになります。

まとめ

まとめ
まとめ

COBOLの論理名と物理名を正しく理解して使い分けるための重要ポイント

COBOLでファイル処理を行うときに欠かせない考え方が、論理名と物理名の使い分けです。論理名はプログラム内で扱う呼び名として機能し、物理名は実際に存在するファイルそのものを示します。この二つを明確に区別しておくことで、ファイルパスの変更や環境切り替えが必要になった場合でも、プログラム本体を修正する手間を大きく減らすことができます。特に大規模システムや長期運用が前提の業務システムでは、論理名と物理名の管理がプログラムの安定性に直結するといっても過言ではありません。

また、論理名を「何をするファイルなのか」がすぐ理解できるように設計することで、後からコードを読む人が迷わなくなります。複数のファイルを扱う処理では、読み込みファイルなのか書き込みファイルなのか、顧客情報なのか売上情報なのかなどを明確に示すことで、プログラムの見通しがよくなり、トラブルの防止にもつながります。COBOLは業務処理に強く、ファイル操作を重視する言語だからこそ、論理名と物理名の整理は重要な設計ポイントになります。

物理名を外部管理するメリットと環境別切り替えの実用例

物理名を設定ファイルや環境定義でまとめて管理する方法は、近年のCOBOL開発でも広く採用されています。これにより、開発環境・本番環境・テスト環境など環境ごとに異なるパスをプログラムに書き込む必要がなくなり、保守性が大きく向上します。たとえば、開発環境ではWindows形式のパス、実運用ではUNIX形式のパスを使うケースでは、環境用の変数を切り替えるだけでファイル操作が正常に行えるようになります。

次のような構成は、実務でもよく使われる形です。論理名は常に固定のまま、物理名だけ変数として外部で差し替える仕組みは、チーム開発でも強みにできる方法です。


*> 環境識別でパスを切り替える例
IF ENV = "DEV"
    MOVE "C:\DEV\INPUT.DAT" TO FILE-PATH
ELSE
    MOVE "/prod/data/input.dat" TO FILE-PATH
END-IF

SELECT INPUT-FILE ASSIGN TO FILE-PATH.

この方法を用いることで、プログラム本体を変更せずにパスの入れ替えが可能になります。特に、ファイル数が多いシステムではこの設計が非常に有効で、運用時のミスを減らし、環境移行の作業もスムーズに進められます。

バックアップや日付管理と組み合わせた応用的な使い方

論理名と物理名を使い分ける発展的な例として、日付を組み合わせたバックアップファイルの管理があります。COBOLでは日付をファイル名に付加して、毎日異なるファイルを生成する方法が古くから一般的に使われています。これは大規模システムでも多用され、ファイル破損や誤削除のリスクを下げるために有効です。


MOVE FUNCTION CURRENT-DATE(1:8) TO WORK-DATE.
MOVE "BACKUP_" & WORK-DATE TO BACKUP-NAME.
SELECT BK-FILE ASSIGN TO BACKUP-NAME.

日別のファイルが自動で作成されることで、トラブル時の復旧が容易になり、システムの安全性が確保できます。また、バックアップファイルを論理名で呼び出しているため、プログラム内では常に同じ論理名を扱うだけで済みます。物理名を細かく変えていても、プログラム側を頻繁に変更する必要がありません。

COBOLでのファイル管理を安定させる考え方と整理術

ファイル処理を正しく行うためには、論理名と物理名を一対一にして管理することが重要です。同じ論理名に複数の物理名を割り当てたり、物理名を途中で変更したのに論理名を更新しなかったりすると、思わぬトラブルにつながることがあります。プログラムの先頭にASSIGN関連の定義をまとめ、コメントを付けて役割を明示しておくことで、将来の保守が格段に楽になります。

COBOLは長期運用される業務システムが多いため、「後から見ても理解しやすいコード」を意識した整理が欠かせません。論理名を工夫し、物理名は外部管理する方針を徹底すれば、読みやすく安定したCOBOLプログラムに近づきます。

先生と生徒の振り返り会話

生徒

「論理名と物理名を分けて管理する理由がよくわかりました。特に、環境ごとにパスを切り替えるときに便利だというところが印象に残りました。」

先生

「その理解はとても良いですね。論理名は変えずに物理名だけ外部で管理することで、プログラムの自由度と安全性が大きく高まります。」

生徒

「バックアップファイルの例も実務で使えそうだと思いました。日付を付けてファイル名を分ける方法は、どのシステムでも役立ちますね。」

先生

「その通りです。論理名を丁寧に設計する習慣は、COBOLの学習でも業務でも大きな武器になりますよ。これからも整理されたコードを書く意識を大切にしてくださいね。」

この記事を読んだ人からの質問

この記事を読んだ人からの質問
この記事を読んだ人からの質問

プログラミング初心者からのよくある疑問/質問を解決します

COBOLで使われるファイルの論理名と物理名の違いは何ですか?

論理名はCOBOLプログラム内でファイルを扱うときの呼び名で、物理名は実際のファイルパスやファイル名そのものを指します。
カテゴリの一覧へ
新着記事
New1
COBOL
COBOLのEVALUATE文の使い方を完全ガイド!初心者でもわかる多岐選択
New2
C#
C#の拡張メソッドとは?既存クラスに機能を追加する便利技
New3
C#
ASP.NET CoreとC#の例外処理ベストプラクティス!エラーハンドリングの基本と実装方法
New4
Azure
Azure WAFとは?SQLインジェクションやXSSからWebサイトを守る初心者ガイド
人気記事
No.1
Java&Spring記事人気No1
C#
C#のstaticクラスとstaticメソッドの基本と使い方をやさしく解説!
No.2
Java&Spring記事人気No2
C#
C#のWPFとは?XAMLでGUI開発を基礎から完全解説!初心者向けの入門ガイド
No.3
Java&Spring記事人気No3
C#
C# WinForms入門!初心者でも簡単にWindowsアプリを作る方法
No.4
Java&Spring記事人気No4
C#
C#でswitch式を使う方法!C# 8.0以降の新機能を解説
No.5
Java&Spring記事人気No5
COBOL
COBOLのファイルステータス(FILE STATUS)の使い方を完全ガイド!初心者でもわかるエラー処理の基本
No.6
Java&Spring記事人気No6
C#
C#のイベント処理を完全攻略!WinFormsとWPFの基本を解説
No.7
Java&Spring記事人気No7
C#
C#のbool型を完全解説!初心者でもわかるtrueとfalseの基本と使い方
No.8
Java&Spring記事人気No8
C#
C#の文字列を数値に変換する方法(int.Parse・TryParse)をわかりやすく解説!