【Rails5】SyntaxError: (): mapping values are not allowed エラーの解決法

この記事の概要

SyntaxError: (<unknown>): mapping values are not allowed
上記エラーに対応するために調べたところ、.ymlファイルのインデントが原因であることがわかった。

目次


  • この記事の概要
  • 目次
  • 試そうとしたこと
  • エラーの分析
  • ja.ymlを見てみる
  • 解決策
  • まとめ

試そうとしたこと

Rails5で簡単なTaskアプリケーションを作って学んでいたのだが、SyntaxError: (<unknown>): mapping values are not allowed エラーにハマった。

エラーの分析

can not load translations from /Users/*****/Task_App/config/locales/ja.yml: #): mapping values are not allowed in this context at line 15 column 7

どうやらja.ymlにエラーがあるらしい。 ymlファイルは、エラーメッセージが日本語を出すためのrawファイルであり、 GitHubのrails-|18nリポジトリにあるファイルを適当にダウンロードしたものである。

ja.ymlなので日本語設定である。
en.ymlだと英語設定になる。

ja.ymlファイルを見てみる


(中略)  
 models:
   task: タスク  
 attributes:
   task:
         id: ID
   name: 名称
   description: 詳しい説明
   created_at: 登録日時
   updated_at: 更新日時

んー?
15行目あたりにエラーがあるらしいが、特に変わったところは見当たらない。
何がおかしいのだろうかと思って色々と検索してみた。

解決策

どうやら、ymlファイルにはスペースの数が決まっているようだ。

一番最初の階層のスペースゼロだとすると、 最初の階層はスペース無し。二番目の階層は半角スペース2つ 三番目の階層は半角スペース4つに する必要があるらしい。

今回のケースだと, model:, attribute:が最初の階層なのでスペース無しで、その他が二つ目の階層なので半角スペース2つ分になるらしい。
(中略)
models:
  task: タスク  
attributes:
  task:
     id: ID
  name: 名称
  description: 詳しい説明
  created_at: 登録日時
  updated_at: 更新日時

スペースを修正したら、エラーが解消された。

まとめ

スペースの数が若干違うだけで、エラーになってしまうとはとても驚きました。スペースは一見インデント間違いがあっても気づきにくいので、lintなどの文法チェックツールを使用してエラーを消していくことが必要であると思われます。



コメント

このブログの人気の投稿

【Unity】シーンギズモがデフォルトで表示されない時

【Swift4】argument passed to call that takes no arguments の解決策