ha-validate について
ha-validate は、Home Assistant の YAML 設定ファイルと一般的な問題を確認するスキルです。構文エラーや未定義のシークレット、重複キーを見つけ、結果と修正案をまとめます。
主な機能
- 01YAML 構文チェック
- 02未定義シークレットの検出
- 03重複キーの検出
- 04Docker と HA OS での検証
- 05結果と修正案の提示
活用シーン
- 01configuration.yaml と自動化ファイルの確認
- 02secrets.yaml にないシークレット参照の調査
- 03scripts.yaml や scenes.yaml の重複キー確認
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ laurigates/ claude-plugins --skill ha-validateインストール後、Claude Code で/ha-validateを入力して読み込まれたか確認します。
詳細
/ha:validate
Home Assistant の設定ファイルを検証し、YAML 構文エラーやよくある問題を確認します。
このスキルを使用するタイミング
| このスキルを使用する場合... | 代わりに ha-configuration を使用する場合... |
|---|---|
| configuration.yaml または automations.yaml の YAML 構文を確認するとき | インテグレーションを追加または変更するために configuration.yaml を編集するとき |
secrets.yaml に対する未定義の !secret 参照を検出するとき | secrets.yaml に新しいエントリーを追加するとき |
| scripts.yaml または scenes.yaml の重複キーを見つけるとき | 設定をパッケージに再編成するとき |
Docker または HA OS 経由で hass --script check_config を実行するとき | テンプレートセンサーや recorder/logger の設定を作成するとき |
コンテキスト
- 設定パス:
{{ path or '.' }} - YAML ファイル:!
find . -name "*.yaml" -type f
検証手順
1. YAML 構文の検証
すべての YAML ファイルの構文が正しいか検証します。
find {{ path or '.' }} -name "*.yaml" -type f -exec python3 -c "
import yaml
import sys
try:
with open('{}', 'r') as f:
yaml.safe_load(f)
print('OK: {}')
except yaml.YAMLError as e:
print('ERROR: {}')
print(str(e)[:200])
sys.exit(1)
" \; 2>&1 | head -50
2. よくある問題を確認
未定義のシークレットを確認:
# Find secret references
grep -rh "!secret [a-z_]*" {{ path or '.' }} --include="*.yaml" 2>/dev/null | \
sed 's/.*!secret //' | sort -u > /tmp/used_secrets.txt
# Check if secrets.yaml exists
if [ -f "{{ path or '.' }}/secrets.yaml" ]; then
echo "secrets.yaml found"
# List defined secrets
grep "^[a-z_]*:" {{ path or '.' }}/secrets.yaml | sed 's/:.*//' | sort -u > /tmp/defined_secrets.txt
echo "Undefined secrets:"
comm -23 /tmp/used_secrets.txt /tmp/defined_secrets.txt
else
echo "WARNING: secrets.yaml not found"
fi
重複キーを確認:
python3 -c "
import yaml
import sys
from collections import Counter
class DuplicateKeyChecker(yaml.SafeLoader):
def construct_mapping(self, node, deep=False):
keys = [k.value for k, v in node.value if isinstance(k, yaml.ScalarNode)]
duplicates = [k for k, count in Counter(keys).items() if count > 1]
if duplicates:
print(f'Duplicate keys in {node.start_mark}: {duplicates}')
return super().construct_mapping(node, deep)
for f in ['configuration.yaml', 'automations.yaml', 'scripts.yaml', 'scenes.yaml']:
path = '{{ path or '.' }}/' + f
try:
with open(path) as file:
yaml.load(file, Loader=DuplicateKeyChecker)
print(f'OK: {f}')
except FileNotFoundError:
pass
except yaml.YAMLError as e:
print(f'ERROR in {f}: {e}')
" 2>&1
3. Docker による完全な検証(利用可能な場合)
Home Assistant が Docker で実行されている場合:
docker exec homeassistant hass --script check_config 2>&1 | head -100 || echo "Docker validation not available"
4. Home Assistant OS による検証(利用可能な場合)
ha core check 2>&1 || echo "HA OS validation not available"
検証後
検証結果を報告します。
- YAML 構文エラーがあれば、ファイル名と行番号を示します
- 未定義のシークレット参照を一覧表示します
- 重複キーを一覧表示します
- よくある問題の修正方法を提案します
よくある修正方法
| 問題 | 修正方法 |
|---|---|
found undefined alias | 不足しているエントリーを secrets.yaml に追加します |
could not determine a constructor | YAML のインデントを確認します |
duplicate key | 重複キーを削除するか、名前を変更します |
expected <block end> | インデントの位置を修正します |
mapping values are not allowed | コロンの後にスペースを追加します |
コメント
Markdown 対応