Python自動化の基礎として、設定値を外部ファイル化する考え方を理解する
Python自動化を学び始めると、ファイル操作、日時取得、条件分岐、繰り返し処理、関数化など、少しずつできることが増えていきます。その中で、実用的な自動化へ一歩進むために非常に重要なのが「設定値を外部ファイル化する」という考え方です。
初心者の方は最初、ファイル名、待機秒数、出力先フォルダ、しきい値、対象拡張子などを、すべてPythonコードの中に直接書くことが多いです。もちろん学習の初期段階ではそれでも問題ありません。しかし、実際の自動化では、あとから変更したい値がたくさん出てきます。そのたびにPythonコードを開いて修正すると、手間がかかるだけでなく、誤って処理そのものを壊してしまう危険もあります。
そこで役立つのが、変更しやすい値だけをプログラム本体から切り離し、外部ファイルにまとめておく方法です。たとえば、対象フォルダ、ログファイル名、待機時間、モード切り替えなどを別ファイルに書いておけば、設定変更のたびに本体コードを触らなくて済みます。これにより、保守しやすく、再利用しやすく、運用しやすい自動化に近づけます。
この記事では、Python自動化の基礎として、設定値を外部ファイル化する方法を、プログラミング初心者向けにステップバイステップで詳しく解説します。なぜ必要なのか、どんな値を外に出すのか、どんな形式で保存するのか、どう読み込むのか、どんな注意が必要なのかまで、例題やテンプレートを交えながら丁寧に説明します。
まず理解したい、なぜ設定値を外部ファイル化するのか
変更しやすい値と、処理の仕組みは分けたほうが良いからです
自動化では、「どのように処理するか」を決めるコード本体と、「何を対象にするか」「何秒待つか」「どこへ保存するか」といった設定値は、本来性質が違います。コード本体は処理の仕組みそのものですが、設定値は運用に応じて変わることが多い情報です。
たとえば、対象フォルダが変わる、出力ファイル名を変えたい、待機時間を10秒から30秒にしたい、といった変更はよくあります。このたびにコードを直接編集していると、ミスが起きやすくなります。だからこそ、変わりやすい部分を外部ファイルへ切り出す価値があります。
再利用しやすくなり、別環境でも使いやすくなるからです
設定値をコードに直接書いていると、そのコードは特定の環境に強く依存しやすくなります。たとえば、自分のパソコンでは動いても、別の人の環境ではフォルダ名が違って動かないことがあります。しかし、設定ファイルで対象フォルダを切り替えられるようにしておけば、コード本体はそのままで使い回しやすくなります。
これは、自動化を「その場限りのスクリプト」から「繰り返し使える仕組み」へ育てるうえでとても重要です。
安全性の面でも意味があります
設定を変えるたびに本体コードを触る運用は、うっかり処理ロジックまで壊してしまう危険があります。一方、設定ファイルと本体コードを分けておけば、変更対象が明確になります。もちろん設定ファイルの内容にも注意は必要ですが、少なくとも「どこを変えるべきか」がはっきりしやすくなります。
どんな値を外部ファイル化するとよいのか
よく変わる値が向いています
すべての値を外部ファイル化する必要はありません。まずは、運用中に変更されやすい値を対象にすると分かりやすいです。たとえば次のようなものです。
- 対象フォルダのパス
- 入力ファイル名や出力ファイル名
- 待機秒数
- 処理回数
- ログファイル名
- しきい値や判定基準
- モード切り替え用のフラグ
このような値は、プログラムの仕組み自体ではなく、使い方や運用条件によって変わるものです。そのため、外部ファイルに向いています。
逆に、処理ロジックそのものは外に出さないほうがよいです
初心者の方は、何でも設定にしたくなることがあります。しかし、処理の中身そのもの、たとえば分岐の細かい流れや関数の動作全体まで外へ出そうとすると、かえって分かりにくくなります。まずは「値だけを外に出す」と考えるのが基本です。
最初におすすめなのはJSON形式です
初心者でも構造が分かりやすいからです
設定ファイルにはいくつかの形式がありますが、初心者向けに分かりやすいのはJSONです。JSONは、項目名と値の組み合わせで書けるため、設定内容が読みやすいです。
たとえば、次のような設定ファイルを作れます。
{
"input_file": "input.txt",
"output_file": "output.txt",
"wait_seconds": 3,
"repeat_times": 5
}
この形式なら、どの項目にどんな値が入っているかが見やすく、Pythonからも扱いやすいです。最初の学習用として非常に向いています。
ステップバイステップで考える、設定外部化の流れ
まず、コードに直接書いている値を見つける
設定値を外部ファイル化したいとき、最初にやるべきことは、コードの中に直接書かれている「変わりやすい値」を見つけることです。たとえば、次のようなコードを見てみます。
# 入力ファイルを開く例です
with open("input.txt", mode="r", encoding="utf-8") as file:
content = file.read()
# 3秒待機します
import time
time.sleep(3)Pythonこの中には、"input.txt" と 3 という直接書かれた値があります。こうした値が、まず外部化の候補になります。
次に、それらを設定ファイルへ移す
候補が見つかったら、設定ファイルへ項目として書き出します。たとえば次のようになります。
{
"input_file": "input.txt",
"wait_seconds": 3
}
この段階で、「何が設定で、何が処理ロジックか」が少しずつ分かれてきます。
最後に、Python側で設定ファイルを読み込む
設定ファイルへ移した値は、プログラム起動時に読み込んで使います。これにより、コード本体を変えずに設定だけ差し替えられるようになります。
例題1 JSON設定ファイルを読み込んで使う
最初に作るべき基本例
まずは、設定ファイルから入力ファイル名と待機秒数を読み込んで使う基本例を見てみます。
設定ファイル config.json の例です。
{
"input_file": "input.txt",
"wait_seconds": 2
}
Pythonコードは次のようになります。
import json
import time
# 設定ファイルを読み込む関数です
def load_config(config_file_path):
# 設定ファイルを開きます
with open(config_file_path, mode="r", encoding="utf-8") as file:
# JSONを辞書として読み込みます
config = json.load(file)
# 読み込んだ設定を返します
return config
# メイン処理です
def main():
# 設定ファイルを読み込みます
config = load_config("config.json")
# 設定値を取り出します
input_file = config["input_file"]
wait_seconds = config["wait_seconds"]
# 設定内容を表示します
print(f"入力ファイル: {input_file}")
print(f"待機秒数: {wait_seconds}")
# 指定秒数だけ待機します
time.sleep(wait_seconds)
# 待機後のメッセージを表示します
print("待機が終わったので次の処理を実行します")
if __name__ == "__main__":
main()Pythonこの例で大切なのは、入力ファイル名や待機秒数をコードに直接書いていないことです。設定を変えたいときは config.json を修正するだけで済みます。これが外部ファイル化の基本的なメリットです。
例題2 出力先や処理回数も設定化する
複数の設定値をまとめて管理する感覚をつかむ
次に、少し項目を増やして、自動化らしい形にしてみます。
設定ファイル config.json の例です。
{
"input_file": "input.txt",
"output_file": "output.txt",
"repeat_times": 3,
"wait_seconds": 1
}
Pythonコードは次のようになります。
import json
import time
# 設定ファイルを読み込む関数です
def load_config(config_file_path):
# JSON設定ファイルを開いて読み込みます
with open(config_file_path, mode="r", encoding="utf-8") as file:
return json.load(file)
# メイン処理です
def main():
# 設定を読み込みます
config = load_config("config.json")
# 各設定値を取り出します
input_file = config["input_file"]
output_file = config["output_file"]
repeat_times = config["repeat_times"]
wait_seconds = config["wait_seconds"]
# 設定内容を表示します
print(f"入力ファイル: {input_file}")
print(f"出力ファイル: {output_file}")
print(f"処理回数: {repeat_times}")
print(f"待機秒数: {wait_seconds}")
# 指定回数だけ処理を繰り返します
for i in range(repeat_times):
# 現在何回目の処理か表示します
print(f"{i + 1}回目の処理を実行します")
# 最後の回でなければ待機します
if i < repeat_times - 1:
time.sleep(wait_seconds)
# 出力ファイルへ結果を書き込みます
with open(output_file, mode="w", encoding="utf-8") as file:
file.write("処理が完了しました。\n")
# 完了メッセージを表示します
print("処理が完了しました")
if __name__ == "__main__":
main()Pythonこのように、設定が複数あっても、外部ファイルからまとめて読み込むことで整理しやすくなります。初心者の方は、まず2〜4項目程度から始めると理解しやすいです。
例題3 対象フォルダやしきい値を設定ファイル化する
条件分岐と組み合わせると実用性が高まります
設定外部化は、条件分岐と組み合わせるとさらに便利です。たとえば、件数がしきい値を超えたら警告を出すような処理では、その基準値を設定化すると柔軟になります。
設定ファイル config.json の例です。
{
"target_folder": ".",
"warning_threshold": 5
}
Pythonコードは次のようになります。
import json
import os
# 設定ファイルを読み込む関数です
def load_config(config_file_path):
# JSONファイルを開いて設定を読み込みます
with open(config_file_path, mode="r", encoding="utf-8") as file:
return json.load(file)
# フォルダ内のファイル数を数える関数です
def count_files(folder_path):
# フォルダ内のファイル数を数えます
count = 0
for item in os.listdir(folder_path):
full_path = os.path.join(folder_path, item)
if os.path.isfile(full_path):
count += 1
return count
# メイン処理です
def main():
# 設定を読み込みます
config = load_config("config.json")
# 設定値を取り出します
target_folder = config["target_folder"]
warning_threshold = config["warning_threshold"]
# ファイル数を取得します
file_count = count_files(target_folder)
# 件数を表示します
print(f"現在のファイル数は {file_count} 件です")
# しきい値に応じて処理を分岐します
if file_count > warning_threshold:
print("ファイル数が多いため確認が必要です")
else:
print("ファイル数は通常範囲です")
if __name__ == "__main__":
main()Pythonこの例では、しきい値を外から変えられるようにしています。これにより、基準変更のたびにPythonコードを修正しなくて済みます。
関数と組み合わせるとさらに整理しやすい
設定読み込みは専用関数にするのがおすすめです
設定外部化をするときは、設定読み込み処理を毎回同じように書くことになります。そのため、load_config() のような専用関数にまとめておくのが分かりやすいです。こうすると、全体の流れの中で「どこで設定を読み込んでいるか」が明確になります。
main() では、設定を受け取って各処理へ渡す形にする
さらに整理したい場合は、設定ファイルを読み込んだあと、必要な値を各関数へ引数として渡していく形にすると分かりやすいです。つまり、設定を起点にして全体の自動化を動かすイメージです。これは実務的にもよく使う構造です。
初心者がよくつまずくポイント
設定ファイルの書式ミスで読み込めなくなる
JSONは便利ですが、カンマの付け忘れやダブルクォーテーションの抜けなど、書式ミスがあると読み込めません。初心者の方は、コード側のミスではなく設定ファイル側の書式エラーで止まることも多いです。そのため、設定ファイルを編集したら、構造が崩れていないか意識することが大切です。
存在しない設定項目を使ってしまう
たとえば、設定ファイルに "wait_seconds" がないのに、Python側で config["wait_seconds"] として取り出そうとするとエラーになります。設定項目名は、設定ファイルとPythonコードで一致している必要があります。
値の型を意識していない
待機秒数や処理回数は数値であるべきですが、文字列として書いてしまうと、あとで計算や待機処理で扱いづらくなることがあります。たとえば JSON では 3 は数値ですが、"3" は文字列です。この違いを意識することが重要です。
セキュリティと安全性の観点からの注意
秘密情報を設定ファイルへ平文で書きすぎない
設定ファイルは便利ですが、何でも書いてよいわけではありません。たとえば、パスワード、APIキー、個人情報などの秘密情報をそのまま平文で保存すると、ファイルを見られたときに大きな問題になります。初心者の段階ではまず設定外部化の考え方を理解することが大切ですが、将来的には秘密情報の扱いに特に注意が必要です。
少なくとも、「設定ファイルは見られる可能性があるもの」と考えておくのが安全です。
設定値をそのまま信用しすぎない
設定ファイルの値も、ある意味では外部入力です。つまり、想定外のパスや極端に大きな数値が入っている可能性もあります。そのため、重要な処理では、設定値の妥当性を確認する考え方も大切です。たとえば、待機秒数がマイナスでないか、対象フォルダが存在するか、といった確認です。
これは情報セキュリティの基本である「外部入力を信用しすぎない」にもつながります。
初心者向けの実用テンプレート
ここまでの内容を踏まえると、設定値を外部ファイル化する基本テンプレートは次のようになります。設定読み込み、設定値取り出し、処理実行の流れを整理した形です。
設定ファイル config.json の例です。
{
"input_file": "input.txt",
"output_file": "output.txt",
"wait_seconds": 2,
"repeat_times": 3
}
Pythonコードのテンプレートです。
import json
import time
# 設定ファイルを読み込む関数です
def load_config(config_file_path):
# 設定ファイルを開いてJSONを読み込みます
with open(config_file_path, mode="r", encoding="utf-8") as file:
return json.load(file)
# メイン処理です
def main():
# 設定ファイルを読み込みます
config = load_config("config.json")
# 設定値を取り出します
input_file = config["input_file"]
output_file = config["output_file"]
wait_seconds = config["wait_seconds"]
repeat_times = config["repeat_times"]
# 処理開始を表示します
print("処理を開始します")
# 設定内容を表示します
print(f"入力ファイル: {input_file}")
print(f"出力ファイル: {output_file}")
print(f"待機秒数: {wait_seconds}")
print(f"処理回数: {repeat_times}")
# 指定回数だけ繰り返します
for i in range(repeat_times):
# 現在何回目か表示します
print(f"{i + 1}回目の処理を実行します")
# 最後の回でなければ待機します
if i < repeat_times - 1:
time.sleep(wait_seconds)
# 結果を書き込みます
with open(output_file, mode="w", encoding="utf-8") as file:
file.write("設定値を使った処理が完了しました。\n")
# 処理終了を表示します
print("処理を終了します")
if __name__ == "__main__":
main()Pythonこのテンプレートは、設定値の外部化を学ぶうえでとても使いやすい基本形です。初心者の方は、まずこの形を土台にして、対象フォルダ、しきい値、ログ名など、少しずつ項目を増やしていくと理解しやすいです。
学習を進めるときのおすすめの順番
設定値を外部ファイル化する技術を無理なく身につけるには、次の順番で進めると理解しやすいです。
- まずはコードに直接書かれた値を見つける
- 次に、その中から変わりやすい値だけを選ぶ
- JSON形式で設定ファイルを作る
- Pythonで読み込んで表示してみる
- その値を待機処理やファイル処理に実際に使う
- 最後に、設定値の確認やエラー対策も考える
この順番で進めると、単なるファイル読み込みではなく、自動化の設計を良くするための考え方として身につきやすくなります。
まとめ
Python自動化の基礎として、設定値を外部ファイル化する考え方は非常に重要です。これにより、変更しやすい値と処理の仕組みを分けられるようになり、コードが読みやすく、修正しやすく、再利用しやすくなります。自動化を実用的な仕組みに育てていくうえで、大きな一歩になります。
初心者の方はまず、入力ファイル名、出力ファイル名、待機秒数、処理回数のような分かりやすい値から外部化すると理解しやすいです。形式としてはJSONが扱いやすく、Pythonでも読み込みやすいため最初の学習に向いています。
大切なのは、すべてを外に出そうとするのではなく、変わりやすい値だけを整理して分けることです。また、設定ファイルの書式ミスや、秘密情報の扱いにも注意が必要です。
設定値を外部ファイル化することは、ただ便利になるだけではありません。自動化を壊れにくく、育てやすく、運用しやすくするための重要な土台です。だからこそ、早い段階で丁寧に理解しておく価値があります。
