【解決】Vagrant upがmacOSで失敗する?VirtualBoxのエラー対処法

VagrantとVirtualBoxを使った開発環境構築は非常に便利ですが、macOSのアップデートや環境の変更をきっかけに、急にvagrant upコマンドが通らなくなることがあります。特にmacOS環境では、特有のセキュリティ設定やバージョン不整合によるエラーが発生しがちです。

この記事では、私たちが遭遇した「VagrantがmacOSで起動しない」という問題について、主な原因と具体的な解決手順を解説します。

主なエラーの症状

代表的なエラーには、主に「macOSのセキュリティによるブロック」と「VirtualBox Guest Additionsの不整合」の2種類があります。

後者の場合、以下のような「vboxsf」に関する共有フォルダ(Shared Folders)のマウントエラーが表示されることが多いです。

Vagrant was unable to mount VirtualBox shared folders. This is usually
because the filesystem “vboxsf” is not available. This filesystem is
made available via the VirtualBox Guest Additions and kernel module.

The error output from the command was:

/sbin/mount.vboxsf: mounting failed with the error: Invalid argument

これらのエラーを解消するためのステップを順に見ていきましょう。

ステップ1:VirtualBoxとVagrantを最新版にする

基本的なことですが、まずはVirtualBoxとVagrantが最新バージョンであるかを確認し、古い場合は再インストールします。バージョン間の互換性の問題が、これだけで解決することがあります。

Vagrantのインストール後、プラグインも最新版に更新しておきましょう。

vagrant plugin update

ステップ2:macOSのセキュリティとプライバシー設定を確認する

macOS Big Sur以降、OSはカーネル拡張機能(kext)に対して非常に厳しいセキュリティポリシーを採用しています。VirtualBoxは動作するためにこのカーネル拡張機能を必要としますが、インストール直後はmacOSによってデフォルトでブロックされていることが多いです。

これが原因の場合、vagrant upは失敗します。

以下の手順で、VirtualBoxの実行を「許可」してください。

  1. Appleメニューから「システム環境設定」を開きます。
  2. 「セキュリティとプライバシー」パネルを選択します。
  3. 「一般」タブを開きます。
  4. 左下のカギのアイコンをクリックし、パスワードを入力してロックを解除します。
  5. 「ダウンロードしたアプリケーションの実行許可」の項目に、「”Oracle, Inc.”からのシステムソフトウェアの読み込みがブロックされました」といった趣旨のメッセージが表示されている場合、横にある「許可」ボタンをクリックします。
  6. PCの再起動を求められた場合は、再起動します。

再起動後、改めてvagrant upを実行してみてください。

ステップ3:Vagrant vbguestプラグインを導入する(マウントエラー対策)

ステップ2まで行っても、冒頭で紹介した「vboxsf」のマウントエラーが解消しない場合があります。

これは、ホストOS(macOS)側にあるVirtualBoxのバージョンと、ゲストOS(Vagrantで起動する仮想マシン)内の「VirtualBox Guest Additions」のバージョンが一致していないために発生します。

このバージョン不一致を自動的に解消してくれるのが、vagrant-vbguestというプラグインです。

以下のコマンドでプラグインをインストールしてください。

vagrant plugin install vagrant-vbguest

インストール後、再度vagrant upを実行すると、プラグインが自動でGuest Additionsのバージョンを確認し、必要であればインストール・更新を行ってくれます。これにより、マウントエラーが解消されるはずです。

補足:その他の確認事項

Vagrantプラグインの競合

過去にhostmanagerというプラグインを(おそらく間違えて)インストールしていた場合、vagrant-hostmanagerと競合してエラー(undefined method `old_compare' for nil:NilClass)を引き起こすケースがありました。

心当たりがある場合は、不要なプラグインをアンインストールしてください。

vagrant plugin uninstall hostmanager

Homebrewの更新

直接的な原因であることは稀ですが、Homebrewで他のライブラリを管理している場合、brew updateを実行して、依存関係を最新に保っておくことも有効です。

brew update

まとめ

macOS環境でのVagrantとVirtualBoxのエラーは、多くの場合、macOSのセキュリティ許可(カーネル拡張)か、Guest Additionsのバージョン不整合が原因です。

vagrant upでエラーが発生した際は、慌てずに以下の点を確認してみてください。

  • VirtualBoxとVagrantは最新か?
  • macOSの「セキュリティとプライバシー」でOracleの実行を許可したか?
  • vagrant-vbguestプラグインはインストールされているか?

この記事が、同じ問題で悩むWeb制作者の助けになれば幸いです。

よくある質問(FAQ)

Q1. なぜmacOSでは、こうしたセキュリティ許可が頻繁に必要なのですか?

A1. macOSは、OSの心臓部である「カーネル」を保護するため、許可されていないソフトウェアがシステムに深く関わる動作(カーネル拡張機能)をすることを厳しく制限しています。VirtualBoxは仮想化を実現するためにこの機能が必要なため、ユーザーが手動で「このソフトウェアは信頼できる」と許可を与える操作が初回(またはアップデート後)に必要となります。

Q2. `vagrant-vbguest`プラグインとは何ですか? なぜ必要なのですか?

A2. `vagrant-vbguest`は、ホストマシン(あなたのMac)のVirtualBoxのバージョンと、Vagrantが起動するゲストマシン(仮想OS)内の「Guest Additions」のバージョンを自動で同期させてくれるプラグインです。「Guest Additions」は、共有フォルダ機能やクリップボード共有などを実現するためのツール群です。ここのバージョンがズレると共有フォルダがマウントできなくなるため、このプラグインで自動同期させることが推奨されます。

Q3. 記事の手順をすべて試しても解決しません。他に確認すべきことはありますか?

A3. すべての手順を試しても解決しない場合、既存の仮想マシンが不整合を起こしている可能性があります。vagrant destroy -fコマンドで一度仮想マシンを完全に削除し、その後にvagrant upを再実行してクリーンな状態で起動を試みてください。また、Vagrantfile(Vagrantfile)の記述に古い設定や構文エラーがないかも併せて確認してみてください。

CONTACT

webサイト制作、デザインに関するご相談、御見積のご依頼など、弊社へのお問い合わせはこちら