PythonでYAMLファイルを簡単操作!初心者向け完全ガイド

python icon
Python

こんにちは、とまだです。

PythonでYAMLファイルを扱おうとして、「そもそもYAMLってなに?」「どうやって読み書きするの?」と困っていませんか?

実は私も初めてYAMLに触れた時は、JSONとの違いが分からず混乱しました。

しかし、YAMLは設定ファイルの管理において本当に便利なんです。 まるで、散らかった部屋の収納ボックスのように、データをきれいに整理できます。

今回は、PythonでYAMLを扱う方法を、日常的な例えを使いながら分かりやすく解説していきます。

YAMLは「見やすい収納ボックス」だと思えばいい

YAMLファイルって聞くと難しそうですよね。

でも実は、整理整頓された収納ボックスのようなものなんです。

家の収納を想像してみてください。

ラベルを貼った透明なボックスに、関連するものをまとめて入れておく。 そうすると、必要な時にすぐ見つけられますよね。

YAMLも同じです。

データを階層的に、見やすく整理して保存できるんです。

例えば、アプリの設定情報をYAMLで書くとこんな感じになります。

# アプリケーション設定
app:
  name: "私のWebアプリ"
  version: "1.0.0"
  debug: true

# データベース設定
database:
  host: "localhost"
  port: 5432
  username: "admin"
  password: "secret123"

インデント(字下げ)で階層を表現するので、パッと見て構造が分かりやすいんです。

JSONと比べてみましょう。

{
  "app": {
    "name": "私のWebアプリ",
    "version": "1.0.0",
    "debug": true
  },
  "database": {
    "host": "localhost",
    "port": 5432,
    "username": "admin",
    "password": "secret123"
  }
}

どちらが読みやすいか、一目瞭然ですよね。

PyYAMLのインストールは1行で完了

PythonでYAMLを扱うには、まずPyYAMLというライブラリが必要です。

インストールは本当に簡単。 ターミナルで以下のコマンドを実行するだけです。

pip install pyyaml

たったこれだけで準備完了です。

インストールができたら、Pythonコードで使えるようになります。

import yaml

これでYAMLファイルの読み書きができる準備が整いました。

YAMLファイルを読み込む3ステップ

それでは、実際にYAMLファイルを読み込んでみましょう。

まず、config.yamlという名前で以下の内容を保存してください。

# ユーザー設定
user:
  name: "山田太郎"
  age: 28
  hobbies:
    - "読書"
    - "映画鑑賞"
    - "プログラミング"

# アプリ設定
settings:
  theme: "ダーク"
  notifications: true
  language: "日本語"

このファイルをPythonで読み込むコードはこちらです。

import yaml

# YAMLファイルを読み込む
with open("config.yaml", "r", encoding="utf-8") as file:
    data = yaml.safe_load(file)

# 読み込んだデータを確認
print(data)

safe_loadを使うのがポイントです。 これは安全にYAMLを読み込むための関数で、悪意のあるコードの実行を防げます。

読み込んだデータは、Pythonの辞書(dictionary)として扱えます。

# 特定の値にアクセス
user_name = data["user"]["name"]
print(f"ユーザー名: {user_name}")

# リストの要素にもアクセス可能
hobbies = data["user"]["hobbies"]
for hobby in hobbies:
    print(f"趣味: {hobby}")

まるで、整理された引き出しから必要なものを取り出すように、データにアクセスできるんです。

YAMLファイルへの書き込みも簡単

次は、PythonのデータをYAMLファイルに保存する方法です。

例えば、ゲームの設定を保存したいとしましょう。

import yaml

# 保存したいデータ
game_config = {
    "player": {
        "name": "勇者",
        "level": 15,
        "hp": 100,
        "items": ["薬草", "ポーション", "エリクサー"]
    },
    "game": {
        "difficulty": "normal",
        "sound_volume": 80,
        "auto_save": True
    }
}

# YAMLファイルに書き込む
with open("game_config.yaml", "w", encoding="utf-8") as file:
    yaml.dump(game_config, file, allow_unicode=True, default_flow_style=False)

ここでのポイントは2つあります。

allow_unicode=Trueを指定すると、日本語も正しく保存されます。 default_flow_style=Falseを指定すると、見やすいブロック形式で出力されます。

出力されたファイルはこんな感じになります。

game:
  auto_save: true
  difficulty: normal
  sound_volume: 80
player:
  hp: 100
  items:
  - 薬草
  - ポーション
  - エリクサー
  level: 15
  name: 勇者

きれいに整理されていますね!

実務でよく使うYAMLの活用シーン

YAMLは実際の開発現場でどう使われているのか、具体例を見てみましょう。

環境ごとの設定管理

開発環境と本番環境で設定を切り替えたい時に便利です。

# development.yaml
database:
  host: "localhost"
  port: 5432
  debug: true

api:
  timeout: 30
  retry_count: 3

# production.yaml
database:
  host: "prod-db.example.com"
  port: 5432
  debug: false

api:
  timeout: 10
  retry_count: 5

環境に応じて読み込むファイルを切り替えるだけで、設定を変更できます。

import yaml
import os

# 環境変数で環境を判定
env = os.getenv("APP_ENV", "development")
config_file = f"{env}.yaml"

with open(config_file, "r", encoding="utf-8") as file:
    config = yaml.safe_load(file)

print(f"データベースホスト: {config['database']['host']}")

APIの設定情報管理

外部APIのキーや設定をYAMLで管理することもよくあります。

apis:
  weather:
    endpoint: "https://api.weather.com/v1"
    api_key: "your-api-key-here"
    timeout: 5

  translation:
    endpoint: "https://translate.api.com/v2"
    api_key: "another-api-key"
    max_length: 1000

このように整理しておくと、APIの追加や変更が簡単になります。

よくあるエラーと解決方法

YAMLを扱っていると、いくつかのエラーに遭遇することがあります。

インデントエラー

最も多いのが、インデント(字下げ)のミスです。

# 間違い例
user:
name: "太郎"  # インデントが足りない
  age: 25

YAMLはインデントで階層を表現するので、スペースの数を揃える必要があります。

# 正しい例
user:
  name: "太郎"
  age: 25

タブ文字は使わず、スペース2つか4つで統一しましょう。

文字列の扱い

特殊文字を含む文字列は、クォートで囲む必要があります。

# 問題が起きる例
message: Hello: World  # コロンが問題

# 正しい例
message: "Hello: World"

リストの書き方

リストを書く時は、ハイフン(-)の後にスペースが必要です。

# 間違い例
items:
  -item1  # スペースがない
  -item2

# 正しい例
items:
  - item1
  - item2

これらのポイントを押さえておけば、エラーに悩まされることも減るでしょう。

YAMLとJSONを使い分けるコツ

「YAMLとJSON、どっちを使えばいいの?」

この質問、よく聞かれます。

簡単に使い分けのポイントをまとめると、こんな感じです。

YAMLを使うべき場面:

設定ファイルやドキュメントとして人が読み書きする場合。 コメントを書きたい場合。 複雑な階層構造を分かりやすく表現したい場合。

JSONを使うべき場面:

WebAPIのレスポンスなど、プログラム間でデータをやり取りする場合。 JavaScript との連携が必要な場合。 処理速度を重視する場合。

私の経験では、設定ファイルはYAML、APIのデータ交換はJSONという使い分けが多いですね。

今すぐ試せる練習問題

最後に、理解を深めるための練習をしてみましょう。

以下のような「TODOリスト」のデータ構造をYAMLで作成し、Pythonで読み込んでみてください。

# こんなデータ構造を作ってみよう
todo_data = {
    "tasks": [
        {
            "title": "買い物",
            "items": ["牛乳", "パン", "卵"],
            "done": False
        },
        {
            "title": "勉強",
            "items": ["Python", "YAML"],
            "done": True
        }
    ],
    "created_at": "2025-02-16"
}

YAMLファイルを作成したら、Pythonで読み込んで、完了していないタスクだけを表示するプログラムを書いてみましょう。

こういった実践を通じて、YAMLの扱いに慣れていくことができます。

まとめ

PythonでYAMLを扱う方法について、基礎から実践まで解説してきました。

重要なポイントをもう一度確認しましょう。

YAMLは「見やすい収納ボックス」のようなもの。 データを階層的に整理して保存できます。

PyYAMLライブラリを使えば、簡単に読み書きができます。 safe_loadで安全に読み込み、dumpで書き出します。

インデントとスペースに注意すれば、エラーは防げます。 タブ文字は使わず、スペースで統一しましょう。

設定ファイルの管理には特に便利です。 環境ごとの設定切り替えも簡単にできます。

YAMLは最初は少し癖があるかもしれませんが、慣れれば本当に便利なツールです。

ぜひ実際のプロジェクトで活用してみてください!

共有:

著者について

とまだ

とまだ

フルスタックエンジニア

Learning Next の創設者。Ruby on Rails と React を中心に、プログラミング教育に情熱を注いでいます。初心者が楽しく学べる環境作りを目指しています。

著者の詳細を見る →