![見出し画像](https://assets.st-note.com/production/uploads/images/134055632/rectangle_large_type_2_9c5463b1f52edaadf36239d2d8e67327.jpeg?width=1200)
YAMLファイルの構文エラーのトラブルシュート
お疲れ様です。
泣きそうになりながら(というか泣いてた)三日三晩、自宅鯖のyaml形式の設定ファイルの修正をしていたときの経験が役に立つ機会があったので、noteに書けばほかの人の役に立つかなぁと思い、筆じゃないや、スマホを執った次第です。
タイポ(タイプミス、スペルミス)
経験的に一番ありがちなのがこのタイポです。
docker-conpose yamlをゴリゴリ書いて上手くいくときは良いんです。ただ、だいたい初心者は上手くいきません。ホストマシンのディレクトリをコンテナにマウントさせるとき、ディレクトリ名をタイポしていてコンテナからマウントさせたいファイルが見えない、なんてことの原因がこれでした。思い出したくないですね。
タイプミスは良いのですが、スペルミスはみつけるのが難しいんですよね。。英語勉強しなきゃ。。
":"や"-"の後ろに" "がない
アプリケーションやバージョンによってconfigが動いたり動かなくなったときに疑うのがこれです。
yamlのマークアップツールをエディタに入れておくと勝手に補完してくれたり、色付けが違うことで教えてくれたりします。
文字列を"'"で囲っていない
文字列をStringとするか、'String'とするか、ということです。アプリケーションやアプリケーションのバージョンによって違ったりするので指定のバージョンのデフォルトconfigを確認するとよいです。
アプリケーションの内部でyamlで取り込んだものを文字列に置換する処理が入ってるアプリは普通じゃないですからね。アプリケーションのコードを書く側の気持ちになって設定ファイルもさく井しましょう。
インデントが揃ってない
ご存知の通り、yamlはPythonと親密な関係があります。インデントが崩れているとアプリケーションも予期しない動作をします。.confファイルとかのレガシーなファイルを触ってきた人がやりがちなミスです。
エディタによってタブが空白4個分なのか、8個分なのかが異なると起きたりもします。エディタの設定は統一しましょう。
インデントの空白にタブが混ざってる
プログラミングのときの全角スペースと同じように一見するとわからないのがこのケースです。
最近のエディタだとタブが色付けされて見えたりするので偶然リッチなエディタで開いて気付くことがあったりします。
構文的には合ってるのにエラーが出てて、このパターンを疑うときはエラーが出てない他の行のインデントをコピーしてペーストするのをよくやってます。
インデントの空白に全角スペースが混ざっている
プログラミング未経験者にありがちです。
ヒューマンエラーだから仕方ない、なんて言い訳してはいけません。
半角全角を使うのをやめる(変換にひらがな、無変換にアルファベットを割り当てる)、スペースを入力するときにはShiftキーを押しながら入力する、のような小さな心がけでこのミスは劇的に少なくなります。
文字コードが違う
yamlだけではありませんが、windowsで作成したファイルをLinuxに持っていくときによく発生します。
windowsはSHIFT-JISが標準ですが、LinuxはUTF-8が標準です。
これはファイルを開けば文字化けしてるかわかるので簡単に気付けます。
日本語は確かに入ってるけど、コメント行だし大丈夫では?と思うかもしれませんが、アプリケーションによっては危ないのでコメント行も英語が吉です。
結論: chatgptに投げましょう
色々と書きましたが、chatgptに「以下のconfigの構文エラーについて教えてください。」とかで質問すると全部教えてくれます。
とはいえ、会社やデータセンターだとchatgpt使えないことがまだまだありますので頭の片隅に置いておくだけでも役に立つかもしれません。
遊びで触ってたviを3,4年ぶりに必要に迫られて昨日業務で使ったのですが、普通に編集して、文字列検索して、エラーの行数の内容を知りたいタイミングでset numberを一発で打てました。ののときばかりはさすがに頬がゆるみました。頭の片隅にあるのって意外と重要な気がしてます。
繁忙期の3月、気張っていきましょう。