エムオーテックス株式会社が運営するテックブログです。

macOSデバイスへのログイン時に自動でLimaのインスタンスを起動する方法

macOSデバイスへのログイン時に自動でLimaのインスタンスを起動する方法

はじめに

こんにちは、アプリケーションチームの小西です。

LANSCOPE エンドポイントマネージャー クラウド版のアプリケーションチームでは、開発のためにmacOSデバイスを使用しています。
また、開発で使用するコンテナを起動するために、Limaの仮想マシンインスタンス上で動作させているdockerを使用しています。

macOSのセキュリティアップデートなどを理由にmacOSデバイスを再起動することがあり、そのたびにインスタンスを起動しなおす必要があります。
macOSのセキュリティアップデートは、業務終了時にシステム終了して、翌日の業務開始時のシステム起動により適用することが多いです。
ログイン後、手動でLimaのインスタンスを起動するのですが、時々、開発で使用するタイミングまでに起動しておくのを忘れてしまうことがあります。

インスタンスの起動自体は1〜2分程度で完了しますが、開発に没頭している最中にこの待機時間が発生すると、せっかくの集中状態が途切れてしまいます。
特に、複雑な問題に取り組んでいるときにこうした中断が起きると、思考の流れを取り戻すのに予想以上の時間がかかってしまいます。

この課題を解決するため、macOSデバイスへのログイン時に自動でLimaのインスタンスを起動するように設定しました。
業務開始直後の朝礼が終わった頃には自動でdockerが使用可能になっているので、Limaのインスタンスの起動のことを考えずとも待機時間が発生しなくなります。

今回はこの設定方法と、設定時に困ったことについて共有いたします。

環境と前提条件

  • macOSのバージョンはSonoma 14.8.3
  • Limaをインストールしてインスタンスを構築済み(本記事ではインスタンス名を「arm」とします)

最終的に設定した内容

1.下記のコマンドを実行

$ limactl start-at-login arm
$ cd ~/Library/LaunchAgents/

2.io.lima-vm.autostart.arm.plistに下記の内容を追記

 <key>EnvironmentVariables</key>
    <dict>
        <key>PATH</key>
        <string>/opt/homebrew/bin:/usr/bin:/bin:/usr/sbin:/sbin</string>
    </dict>

3.設定の再読み込み

$ launchctl unload io.lima-vm.autostart.arm.plist
$ launchctl load io.lima-vm.autostart.arm.plist

これでログイン時に自動でLimaのインスタンスが起動するようになります。

設定時の試行錯誤

1.やり方の調査

まずはじめに、私と同じような課題を感じる人もいるだろうと推測し、解決策がないかを調査しました。
その結果、公式ドキュメントの下記のページが見つかりました。

lima-vm.io

簡単に見つかったのでとりあえず設定して、設定が正しく動作するか確認するために、次の再起動を待ちました。

2.再起動後

再起動してログイン後にLimaのインスタンスの起動状況を確認しました。

$ limactl list
NAME       STATUS     SSH            VMTYPE    ARCH       CPUS    MEMORY    DISK     DIR
arm        Stopped    127.0.0.1:0    qemu      aarch64    4       8GiB      50GiB    ~/.lima/arm

STATUSを確認したところ、Stoppedとなっていたため、起動に失敗していることがわかりました。

3.状況確認

起動に失敗していたので、原因調査を行いました。
まず、手順1で見つけたコマンドの仕組みを確認しました。
lima start-at-loginコマンドは、macOSのLaunchAgentsにLimaのインスタンス起動を登録します。
具体的には、~/Library/LaunchAgents/io.lima-vm.autostart.arm.plistが作成され、その設定がロードされているようでした。
ファイルの中身を見てみます。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>Label</key>
    <string>io.lima-vm.autostart.arm</string>
    <key>ProgramArguments</key>
    <array>
        <string>/opt/homebrew/bin/limactl</string>
        <string>start</string>
        <string>arm</string>
        <string>--foreground</string>
    </array>
    <key>EnvironmentVariables</key>
    <dict>
        <key>PATH</key>
        <string>/opt/homebrew/bin:/usr/bin:/bin:/usr/sbin:/sbin</string>
    </dict>
    <key>RunAtLoad</key>
    <true/>
    <key>StandardErrorPath</key>
    <string>launchd.stderr.log</string>
    <key>StandardOutPath</key>
    <string>launchd.stdout.log</string>
    <key>WorkingDirectory</key>
    <string>{インスタンスの設定フォルダが自動で入ります}</string>
    <key>ProcessType</key>
    <string>Background</string>
</dict>
</plist>
<key>StandardErrorPath</key>
<string>launchd.stderr.log</string>

設定内容を見ていったところ、上記の設定があるため、ワーキングディレクトリ配下のlaunchd.stdout.logにエラーログが出力されてるようです。
エラーログをみることでなぜ自動起動に失敗したのかの詳細を確認できそうです。

4.エラーログの確認

自動起動失敗した理由の詳細を確認するためにエラーログを確認すると、下記のログが出ていました。

time="2026-01-06T08:53:13+09:00" level=info msg="Using the existing instance \"arm\""
time="2026-01-06T08:53:13+09:00" level=info msg="Starting the instance \"arm\" with VM driver \"qemu\""
time="2026-01-06T08:53:14+09:00" level=fatal msg="failed to find the QEMU binary for the architecture \"aarch64\": exec: \"qemu-system-aarch64\": executable file not found in $PATH"

failed to find the QEMU binary for 〜 executable file not found in $PATHというログから、qemuの実行ファイルが見つけられていない(≒バイナリへのパスが通っていない)ことがわかりました。

5.類似事例の調査

ログの内容からqemuの実行ファイルへのパスが通っていないことがわかりました。
公式ドキュメントに記載されているコマンドを使用してエラーが発生した状況のため、類似の事例があるだろうと推測し、調査しました。
すると、下記のissueが見つかりました。

github.com

上記からplistファイルに環境変数の設定を追記すれば良いと判明しました。

6.環境変数の設定変更

issueの通りの設定を~/Library/LaunchAgents/io.lima-vm.autostart.arm.plistに追記しました。

 <key>EnvironmentVariables</key>
    <dict>
        <key>PATH</key>
        <string>/opt/homebrew/bin:/usr/bin:/bin:/usr/sbin:/sbin</string>
    </dict>

その後、設定変更をLaunchAgentsに読み込ませて反映するために下記コマンドを実行しました。

$ launchctl unload io.lima-vm.autostart.arm.plist
$ launchctl load io.lima-vm.autostart.arm.plist

RunAtLoadtrueに設定されているため、launchctl loadするとその時点でインスタンスが起動されます。

7.次の再起動時

設定後、次の再起動時に状況を確認すると下記のようにLimaのインスタンスが起動していました。

$ limactl list
NAME       STATUS     SSH                VMTYPE    ARCH       CPUS    MEMORY    DISK     DIR
arm        Running    127.0.0.1:64116    qemu      aarch64    4       8GiB      50GiB    ~/.lima/arm

これで当初の目的である、「ログイン時に自動でLimaのインスタンスが起動する」が実現できました。

おわりに

今回の記事では、macOSデバイスへのログイン時に自動でLimaのインスタンスを起動する方法について共有させていただきました。
これにより、開発の中でdockerを使用したいタイミングでは、すでにインスタンスが起動していて、思考が中断されることがなくなります。

Lima側で設定するための機能が用意されていたので比較的簡単に設定できました。
パスが通っていない課題は発生しましたが、すぐに類似の事例を見つけることができ、時間をかけることなく解決できました。
LaunchAgentsについては初めて使用しましたが、色々と応用が効きそうな機能だと感じました。今後、コンテナの自動起動など、さらなる活用を模索していきたいと思います。

本記事がどなたかのご参考になりましたら幸いです。
ここまでお読みいただきありがとうございました。