2026年5月5日火曜日

M4 Maxをさらに快適に。SwiftBarでLLM(llama-server)とメモリ解放をメニューバーから一元管理する

 

1. はじめに

  • 動機: M4 Max搭載Mac Studioという強力なインフラを最大限活かすため、ローカルLLM(Qwen 3.5など)の起動・停止や、purge コマンドによるメモリリフレッシュをGUI(メニューバー)から行えるようにしたかった。

  • 使用ツール: SwiftBar(Macのメニューバーにスクリプトの結果を表示し、操作を可能にするオープンソースアプリ)

2. SwiftBarの導入

  • インストールSwiftBar公式サイト または brew install --cask swiftbar で導入。

  • プラグインディレクトリの設定: スクリプトを保存するための専用ディレクトリ(例: ~/Documents/SwiftBar)を作成し、SwiftBarに指定する。

3. メモリ解放(purge)の自動化

sudo 権限が必要な purge コマンドを、パスワード入力なしでメニューバーから実行するための設定。

  • visudoの設定: セキュリティを保ちつつ、特定のコマンドだけパスワードなしで実行できるようにする。

    -------------Bash----------------------------------
    # sudo visudo で末尾に追記
    hidenari[User名] ALL=(ALL) NOPASSWD: /usr/sbin/purge
    
    ---------------------------------------------
  • スクリプトの作成 (purge_memory.1m.sh):

    • 1m という名前をつけることで1分ごとに更新。

    • 実行時の標準エラー出力を > /dev/null 2>&1 で捨てるのが、SwiftBarに「はてなマーク(エラー)」を出させないコツ。

4. ローカルLLM(llama-server)の管理

LLMのステータス(Running/Stopped)を監視し、ワンクリックで起動・停止するスクリプト。

  • ポイント1:PIDファイルの隠しファイル化: SwiftBarはディレクトリ内の全ファイルを実行しようとするため、PIDファイル(.llama-server.pid)の先頭にドットを付けて無視させる。これで「はてなマーク」の発生を防ぐ。

  • ポイント2:フルパスの指定: GUIアプリであるSwiftBarから実行する場合、環境変数や相対パス($0)が不安定になるため、スクリプト内で SELF_PATH を定義し、絶対パスで自分自身を呼び出すように設計。

5. トラブルシューティング:なぜ「はてなマーク」が出るのか?

エンジニアとしてハマりやすいポイントの解説。

  • 原因: SwiftBarがスクリプトではないファイル(PIDファイルやバックアップファイル)を読み込もうとしてエラーを吐く。

  • 対策: ディレクトリ内の不要なファイルを削除(rm llama-server.pid)し、一時ファイルは必ずドットから始まる名前にする。

6. まとめ

  • M4 Maxの広大なメモリを、指先ひとつでいつでもリフレッシュできる最強の環境が完成。

  • シェルスクリプトという「古くて新しい道具」を、SwiftBarのような現代のツールと組み合わせる楽しさ。


0 件のコメント:

コメントを投稿

SwiftBarで構築するLLM(llama-server)のワンクリック起動環境

  1. 実装のゴール M4 Maxのパワーを活かし、ローカルLLM環境( llama.cpp )をターミナルなしで制御することを目指します。 メニューバーにステータス(起動中/停止中)を表示。 ワンクリックで  llama-server  を起動・停止。 SwiftBarの仕様...