🚀
miseのタスクランナーで開発URLを賢く開く
課題:開発時のURL管理が面倒
開発サーバーを立ち上げるたびに、いくつかのURLをブラウザで開く作業が発生します。
-
http://localhost:3001- メインのWebアプリ -
http://localhost:3002- 管理画面 -
http://localhost:8025- Mailpit(メール確認用) -
https://local.drizzle.studio- Drizzle Studio(DB管理)
毎回手で開くのは面倒です。とはいえ open で一気に開くと、すでに開いているタブまで重複して開いてしまうのが困りもの。
サーバー再起動のたびにタブが増殖していくのは地味にストレスでした。
解決策:miseのタスクランナー + AppleScript
mise はバージョン管理ツールの印象が強いですが、タスクランナーとしても便利です。今回は「開いているタブはスキップし、未オープンだけ開く」動きを作りました。
実装
mise.toml にタスクを追加します。
mise.toml
[tasks.open]
description = "開発で使うツールをまとめて開く"
run = """
#!/bin/bash
set -e
GREEN='\\033[0;32m'
CYAN='\\033[0;36m'
YELLOW='\\033[0;33m'
NC='\\033[0m'
# Chrome でタブが開いてなければ開く関数
open_if_not_exists() {
local url="$1"
local name="$2"
# Chrome が起動していない場合は普通に開く
if ! pgrep -x "Google Chrome" > /dev/null; then
open "$url"
echo -e " ${GREEN}✓${NC} $name"
return
fi
# 既存タブをチェック
local exists=$(osascript -e '
tell application "Google Chrome"
set found to false
repeat with w in windows
repeat with t in tabs of w
if URL of t starts with "'"$url"'" then
set found to true
exit repeat
end if
end repeat
if found then exit repeat
end repeat
return found
end tell
' 2>/dev/null)
if [ "$exists" = "true" ]; then
echo -e " ${YELLOW}○${NC} $name (既に開いています)"
else
open "$url"
echo -e " ${GREEN}✓${NC} $name"
fi
}
echo -e "${CYAN}🌐 ブラウザで開発 URL を開く...${NC}"
open_if_not_exists "http://localhost:3001" "Web App"
open_if_not_exists "http://localhost:3002" "Admin"
open_if_not_exists "http://localhost:8025" "Mailpit"
open_if_not_exists "https://local.drizzle.studio" "Drizzle Studio"
echo -e "${GREEN}✅ 完了${NC}"
"""
ポイント解説
1. AppleScript で既存タブをチェック
local exists=$(osascript -e '
tell application "Google Chrome"
set found to false
repeat with w in windows
repeat with t in tabs of w
if URL of t starts with "'"$url"'" then
set found to true
exit repeat
end if
end repeat
if found then exit repeat
end repeat
return found
end tell
' 2>/dev/null)
osascript で Chrome の全ウィンドウ・全タブを走査し、指定URLで始まるタブがあるかを確認します。starts with にしているのは、クエリが付いても判定できるようにするためです。
2. Chrome が起動していない場合の考慮
if ! pgrep -x "Google Chrome" > /dev/null; then
open "$url"
echo -e " ${GREEN}✓${NC} $name"
return
fi
Chrome が起動していない状態で AppleScript を叩くと勝手に立ち上がるので、先にプロセスを見て回避します。
3. 視覚的なフィードバック
GREEN='\\033[0;32m'
YELLOW='\\033[0;33m'
- ✓ 緑:新しく開いた
- ○ 黄:既に開いていたのでスキップ
どれが開かれたか一目でわかるようにしておきました。
使い方
mise run open
実行結果はこんな感じです。
🌐 ブラウザで開発 URL を開く...
✓ Web App
✓ Admin
○ Mailpit (既に開いています)
✓ Drizzle Studio
✅ 完了
dev タスクと組み合わせる
開発サーバーの起動と組み合わせることもできます。
mise.toml
[tasks.dev]
description = "開発サーバーを起動"
depends = ["open"]
run = "bun run dev"
depends = ["open"] を指定すると、mise run dev 実行時に先に open が走り、その後で開発サーバーが起動します。
まとめ
やっていることは単純ですが、毎回の「タブ増殖」から解放されるだけで体感がかなり楽になります。miseでタスク管理しているなら、ついでに仕込んでおくと便利です。
Discussion