macOS のメニューバーに常駐し、caffeinate で Mac のスリープを防止する小さなアプリ。
- ディスプレイのスリープとシステムのアイドルスリープをまとめて防止(
caffeinate -di) - 無期限にオン、または 15 分 / 30 分 / 1 時間 / 2 時間の時間指定(
caffeinate -t) - 時間指定は caffeinate 側で自動終了するので、切り忘れても勝手に元へ戻る
- メニュー先頭に現在の状態と残り時間を表示(「スリープ防止: オン(残り 29 分)」)
- メニューバーアイコンで状態がひと目で分かる
- オン: 塗りつぶし(
cup.and.saucer.fill) / オフ: グレーアウト
- オン: 塗りつぶし(
- ログイン時に自動起動のトグル(.app バンドルで起動しているときのみ)
- アプリを終了すると caffeinate も道連れで終了するので、プロセスが残らない
- macOS 13 (Ventura)+
caffeinateは macOS 標準のため、追加の依存はなし
brew install --cask nemooon/tap/neruna
xattr -dr com.apple.quarantine /Applications/Neruna.appApple Developer ID 署名なしのため、macOS が quarantine 属性を付けて起動を
ブロックします。上の xattr で属性を外してから起動してください。
または、一度起動を試したあと「システム設定 → プライバシーとセキュリティ」の
セキュリティ欄で「このまま開く」を選びます。
swift run./scripts/bundle.sh
open dist # "Neruna.app" をアプリケーションフォルダへログイン時の自動起動は、メニューの「ログイン時に起動」から設定できます。
Resources/Neruna.icon— Icon Composer 用のデザイン原本(Liquid Glass 対応)。open Resources/Neruna.iconで編集できますResources/icon-flat.svg—.icns生成用の合成版./scripts/icon-to-icns.sh—Resources/Neruna.icnsを再生成。Icon Composer で調整した場合は 1024x1024 の PNG に書き出して./scripts/icon-to-icns.sh <書き出したPNG>で反映
.icon を直接アプリに組み込むにはフル Xcode(actool)が必要なため、
Command Line Tools のみの環境では .icns を scripts/bundle.sh がバンドルに同梱します。
scripts/bundle.shのVERSIONを上げてコミット・push./scripts/release.sh <リリースノートのファイル>— ビルド → zip → GitHub リリースを作成 (ファイルを省略するとghがエディタを開きます)- リリース公開をトリガーに
.github/workflows/bump-cask.ymlが動き、 nemooon/homebrew-tap のCasks/neruna.rbの version と sha256 を自動更新します
ワークフローには tap へ push できる PAT を TAP_GITHUB_TOKEN として
リポジトリシークレットに登録しておく必要があります。
- 中身は
/usr/bin/caffeinate -di(時間指定時は-t <秒>を追加)をサブプロセスとして 起動・停止するだけの薄いラッパーです。依存ライブラリなし、AppKit のみSources/Neruna/CaffeinateController.swift— caffeinate プロセスの管理Sources/Neruna/AppDelegate.swift— NSStatusItem とメニュー
- ログイン項目は「いま起動している .app のパス」で登録されます。
dist/から起動した まま有効にすると、あとで移動したときに古いパスを指したままになるので注意 - 蓋を閉じてもスリープさせない用途には使えません。
caffeinate -diが防ぐのは アイドルスリープだけで、蓋閉じによる強制スリープは対象外です (caffeinate -sで防げますが AC 電源接続時のみ有効)
このアプリは Claude Code(Claude Fable 5)とのペアプログラミングで作られました。