結論から言うと、os モジュールは、PythonからOSに関係する情報や操作を扱うための標準ライブラリです。

Pythonで自動化ツールを作ると、現在の作業フォルダを確認したり、環境変数を読んだり、フォルダを作成したりする場面があります。
そのような処理で使えるのが os モジュールです。
この記事では、os でできる代表的な操作を、小さな設定確認ツールの例で整理します。

この記事でわかること

  • os モジュールで扱える基本操作
  • 現在の作業フォルダと環境変数の読み方
  • pathlibos を使い分ける考え方

完成コード

完成コードは次の通りです。

import os
from pathlib import Path


def prepare_work_folder() -> Path:
    base_dir = Path(os.getenv("REPORT_WORK_DIR", "work"))
    output_dir = base_dir / "output"
    os.makedirs(output_dir, exist_ok=True)
    return output_dir


def show_runtime_info(output_dir: Path) -> None:
    print(f"現在の作業フォルダ: {os.getcwd()}")
    print(f"保存先フォルダ: {output_dir}")
    print(f"OSの区切り文字: {os.sep}")

    file_names = os.listdir(output_dir)
    if file_names:
        print("保存先にあるファイル:")
        for name in file_names:
            print(f"- {name}")
    else:
        print("保存先にファイルはまだありません")


folder = prepare_work_folder()
show_runtime_info(folder)

このコードは、環境変数 REPORT_WORK_DIR があればその値を作業フォルダとして使い、なければ work/output フォルダを作成します。

コードのポイント

このコードでは、os モジュールを使って実行環境に関係する情報を扱っています。

  • os.getenv() で環境変数を読み取っています
  • os.makedirs() でフォルダを作成しています
  • os.getcwd() で現在の作業フォルダを確認しています
  • os.listdir() でフォルダ内の名前を取得しています
  • パスの組み立てには pathlib.Path も併用しています

os はできることが多いモジュールです。
すべてを一度に覚えるより、実務でよく使う操作から少しずつ確認すると理解しやすくなります。

コードを順番に説明します

主要な処理を分けて説明します。

1. 環境変数を読み取ります

base_dir = Path(os.getenv("REPORT_WORK_DIR", "work"))

os.getenv() は、環境変数を読み取る関数です。
ここでは REPORT_WORK_DIR という環境変数を探し、見つからない場合は "work" を使うようにしています。

環境変数は、プログラムの外側から設定を渡したいときに使われます。
たとえば、開発環境では work、本番環境では別の保存先、というように切り替えたい場合に便利です。

2. フォルダを作成します

output_dir = base_dir / "output"
os.makedirs(output_dir, exist_ok=True)

os.makedirs() は、フォルダを作成する関数です。
途中のフォルダが存在しない場合もまとめて作成できます。
exist_ok=True を付けると、すでにフォルダがある場合でもエラーにしません。

ここではパスの組み立てに Path を使い、フォルダ作成に os.makedirs() を使っています。
最近のPythonでは、多くの os 関数が Path も受け取れるため、組み合わせて使えます。

3. 現在の作業フォルダを確認します

print(f"現在の作業フォルダ: {os.getcwd()}")

os.getcwd() は、現在の作業フォルダを返します。
作業フォルダは、相対パスがどこを基準に解釈されるかに関係します。

ファイルが見つからないエラーが出るときは、コードが置いてある場所ではなく、実行時の作業フォルダを確認することが大切です。
第5章の import エラーと同じように、「どこから実行しているか」は実務でもよく見るポイントです。

4. フォルダ内の名前を取得します

file_names = os.listdir(output_dir)

os.listdir() は、指定したフォルダ内にあるファイル名やフォルダ名をリストで返します。
戻ってくるのは名前の文字列なので、ファイルの詳しい情報やパスとしての操作を続けたい場合は Path と組み合わせると扱いやすくなります。

ファイルを拡張子で探したい場合は、前の記事で扱った Path.glob() も便利です。
単純に名前を一覧表示したいときは os.listdir() でも十分です。

実務で使うときのポイント

実務では、os は「実行環境に関係する情報」を扱うときによく使います。
環境変数、現在の作業フォルダ、プロセスに関係する情報などは、os を使う場面が多いです。

一方で、ファイルパスの組み立てやファイルの読み書きは、pathlib のほうが読みやすいことがあります。
そのため、パス操作は pathlib、環境やOS寄りの情報は os、という分け方から始めると迷いにくくなります。

第6章では、このあと shutil でファイルコピーを扱います。
pathlib でパスを作り、os で環境を確認し、shutil でコピーする、というように標準ライブラリを組み合わせると、日常作業を自動化しやすくなります。

よくある勘違い・注意点

  • os.getcwd() は、スクリプトファイルがある場所ではなく現在の作業フォルダを返します
  • os.listdir() は、パス全体ではなくフォルダ内の名前を返します
  • 環境変数が必ず設定されているとは限らないため、初期値を用意すると安全です
  • パス操作のすべてを os.path で書く必要はなく、pathlib と組み合わせても問題ありません

まとめ

  • os モジュールは、OSや実行環境に関係する操作を扱う標準ライブラリです
  • os.getenv() で環境変数、os.getcwd() で現在の作業フォルダを確認できます
  • os.makedirs()os.listdir() は、フォルダ操作でよく使います
  • 実務では、pathlib と役割を分けて使うとコードを読みやすく保てます