先日、勉強がてらMakefileを作成してmigrationのコードを実行しようとしていたときにエラーがでて悩んでいたことの記事を書こうと思います。
自分みたいな初心者は設定できていないと思います。
結論
・tab ではなく space でインデントを行っている
・VSCodeの設定でtab入力していても space に変換される
・VSCodeを設定する必要がある
Makefile
# マイグレーションのアップ
.PHONY: migrate-up
migrate-up:
migrate -path $(MIGRATIONS_PATH) -database $(DB_URL) up
# マイグレーションのダウン
.PHONY: migrate-down
migrate-down:
migrate -path $(MIGRATIONS_PATH) -database $(DB_URL) down
# マイグレーションのバージョン確認
.PHONY: migrate-version
migrate-version:
migrate -path $(MIGRATIONS_PATH) -database $(DB_URL) version
# マイグレーションの状態をリセット
.PHONY: migrate-force
migrate-force:
migrate -path $(MIGRATIONS_PATH) -database $(DB_URL) force 1
今回入力したMakefileです
こちらcopilotに聞いて入力したものです。
コードの上にパスを変数として定義して書いています。
コードを実行すると出てくるエラーがこちら ↓
make migrate-up
Makefile:9: *** target pattern contains no `%'. Stop.
copilot先生に聞いてみた答えが
「Makefileのインデントがスペースではなくタブである必要があります。」と教えてくれました。
なるほど🧐
書いてあることは簡単だなと思い修正してもう一度実行しても同じエラー
原因
最初はcopilot先生が間違えていると思い自分で検索して調べていたらどうやら VSCode では、デフォルトで tab が space に変換される設定になっており、Tab キーを押したとしても実際に入力されるのは space になるそうです。
解決策
VSCodeの設定から Insert Spaces こちらで検索してチェックを外してください
またはVSCode の settings.json を開き、以下の内容を追記します。
{
"editor.detectIndentation": false,
"editor.insertSpaces": false
}
insertSpaces は、tab キーを押したときに space が入力される設定。
detectIndentationは、ファイルごとに既存のコードのインデントを検出し、それに合わせて space/tab の切り替えやインデントの大きさの調整を行ってくれる設定担っているみたいです。
makefile ではこれらの設定を off にすることで、tab キーを押したときにちゃんと tab が入力されるようになります。
以上VSCode初心者のはまりがちな内容の記事でした。
追記
copilot先生が修正してくれたコードはタブに変換したと言っててもできていなかったので command + F (windowsの場合はCtr+F)で半角スペースを検索してtabに切り替えました。
みんな知っているか💦