APC 技術ブログ

株式会社エーピーコミュニケーションズの技術ブログです。

株式会社 エーピーコミュニケーションズの技術ブログです。

Linux資格取得者のためのmakefileのmissing separatorを防ぐvim設定

はじめに

クラウド事業部の大久保と申します。 今回は.vimrcでファイル別に設定を切り替える方法をご紹介します。

対象読者

  • .yamlをよく使うKubernetesの運用を始めたばかりの人
  • Linux系の資格やCNCF系の資格を取り立てだけで、これから業務に取り組む。

くらいの感じのかたに刺さるかと思います。

課題の背景

Kubernetesを運用する際のプラクティスとして、.vimrcの設定を以下のようにすることが多く、 私はCKA(Certified Kubernetes Administration)を取得した際に学びました。 .yamlファイルを編集するにあたっては、タブ文字がパースエラーを起こすので 私は普段以下のような設定を含めております。

設定の一部

  1 " ========== 基本設定 ==========
  2 set number                    " 行番号を表示
  3 set tabstop=2 shiftwidth=2 expandtab " YAML のインデントを2スペースに
  4 set autoindent                " 自動インデント
  5 set smartindent               " スマートインデント
  6 set cursorline                " カーソル行をハイライト

一方で、ローカルやVMでの各種ツールのinstallをスクリプトとして管理するmakefileと実行コマンドmakeではコマンドの行頭にtab文字を入れる必要があり、このままの状態だと以下のような実行時エラーを起こします。

エラーの例

okubo@apc-vm:~/setup$ make install-docker 
Makefile:3: *** missing separator.  Stop.

このような状況は私みたいな開発者やインフラのアドミンになりたての人は多少戸惑うことがあると思います。

では次に解決するための例を紹介いたします。

解決例

vimを開きます

vi ~/.vimrc

.vimrcに以下の行を追加する。

<既存設定>

" Makefile専用設定
autocmd FileType make setlocal noexpandtab tabstop=4 shiftwidth=4 softtabstop=4

コマンドの解説

全体の役割

「Makefile を編集するときだけ、タブを使うように Vim を自動で設定する」

🔹 autocmd

「オートコマンド(自動コマンド)」

指定した条件(イベント)が発生したときに、指定した処理を自動で実行する Vim の仕組みです。


🔹 FileType make

「ファイルタイプが make のときに発動」

Vim がファイルを読み込んで「これは Makefile だな」と認識したときに、オートコマンドがトリガーされます。

📝 対象ファイル: - Makefile - .mk 拡張子のファイル(設定による)


🔹 setlocal

「このファイル(バッファ)だけに設定を適用する役割」

グローバルな Vim 設定は変更せず、Makefile 編集中だけ設定が切り替わります
YAML や Python には影響を与えません。

setやsetglobalを使ったりしないようにしてください


🔹 noexpandtab

「タブキーでスペースを挿入を防ぎ、タブ文字を挿入する役割」

Makefile のコマンド(レシピ)行では、行頭に「タブ文字」が必須です。
これを入れないと missing separator エラーで落ちてしまいます。


🔹 tabstop=4

「タブ1個を画面上で4文字幅に見せる役割」

タブ自体は1文字だが、Vim上では「4文字分のスペース」として表示されます。
可読性アップのための見た目設定いたします。


🔹 shiftwidth=4

「インデント(自動整列)時に使う幅」

>><< などのインデント操作で、何文字分ずらすかを指定いたします。


🔹 softtabstop=4

「タブキーを押したときの感覚的な幅」

ここが4だと、タブキー1回で4スペース分のカーソル移動が起きる感じになります。 (実際にはタブ1文字挿入)


コマンドの役割まとめ

Makefileは「タブでないと動かない」厄介な存在です。
他の多くの言語(YAML、Python、JavaScript)は逆に「スペース推奨 or タブ禁止」だから、通常は Vim の expandtab を有効にしている人が多いかと思います。

だからこそ──
Makefileだけは明示的に設定をローカルで上書きし、 以下のような状態を作りスムーズな作業ができる環境を整える必要があります。

  • Makefile編集時に missing separator を完全回避
  • YAMLやPythonファイルには影響を与えない
  • チームの事故(誤保存→スペース入りMakefile)を未然に防ぐ

おわりに

私達クラウド事業部はクラウド技術を活用したSI/SESのご支援をしております。

www.ap-com.co.jp

また、一緒に働いていただける仲間も募集中です! ご興味持っていただけましたらぜひお声がけください。

www.ap-com.co.jp