Skip to content

Instantly share code, notes, and snippets.

@ngs
Created March 14, 2026 12:48
Show Gist options
  • Select an option

  • Save ngs/9e57dfa8b3f290948a2318bc425b3c83 to your computer and use it in GitHub Desktop.

Select an option

Save ngs/9e57dfa8b3f290948a2318bc425b3c83 to your computer and use it in GitHub Desktop.

dev-troubleshoot

Mac の開発環境トラブルシューティング用スクリプト集。

スクリプト一覧

スクリプト 用途
fix-colima.sh Colima ディスクロック解除 & 再起動
start-dev-services.sh 開発サービス一括起動 (Colima + DynamoDB + MySQL)

よくあるトラブル

Colima が起動しない(Mac 強制終了後)

症状:

failed to run attach disk "colima", in use by instance "colima"

原因: Mac を強制終了すると Lima VM のディスクロック (~/.colima/_lima/_disks/colima/in_use_by) が解放されずに残る。

修復:

./fix-colima.sh

手動修復の場合:

# 1. ディスクロックを削除
rm -rf ~/.colima/_lima/_disks/colima/in_use_by

# 2. Colima を起動
colima start

テストで DynamoDB 接続エラー

症状:

dial tcp [::1]:8000: connect: connection refused

原因: DynamoDB Local (Docker コンテナ) が起動していない。

修復:

./start-dev-services.sh

手動修復の場合:

docker run -d -p 8000:8000 amazon/dynamodb-local:latest
#!/bin/bash
# fix-colima.sh - Colima 強制終了後のディスクロック解除 & 再起動スクリプト
#
# Mac を強制終了した後、Colima が起動できなくなる問題を修正します。
# 原因: Lima VM のディスクロック (in_use_by) が残ったまま解放されない
#
# 使い方:
# ./fix-colima.sh # 自動診断 & 修復
# ./fix-colima.sh --force # 確認なしで修復
set -euo pipefail
LIMA_HOME="${HOME}/.colima/_lima"
DISK_DIR="${LIMA_HOME}/_disks/colima"
LOCK_DIR="${DISK_DIR}/in_use_by"
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[0;33m'
NC='\033[0m'
info() { echo -e "${GREEN}[INFO]${NC} $*"; }
warn() { echo -e "${YELLOW}[WARN]${NC} $*"; }
error() { echo -e "${RED}[ERROR]${NC} $*"; }
# --- Step 1: 状態確認 ---
echo "========================================"
echo " Colima トラブルシューター"
echo "========================================"
echo
# Colima がすでに動いているか
if colima status &>/dev/null; then
info "Colima は正常に動作しています。修復は不要です。"
docker ps 2>/dev/null
exit 0
fi
warn "Colima が停止しています。原因を調査します..."
echo
# --- Step 2: ディスクロック確認 ---
if [ -d "$LOCK_DIR" ]; then
error "ディスクロックが検出されました: ${LOCK_DIR}"
echo " -> 前回の強制終了でロックが解放されませんでした。"
echo
if [ "${1:-}" != "--force" ]; then
read -p "ロックを解除して Colima を再起動しますか? [y/N] " answer
if [ "$answer" != "y" ] && [ "$answer" != "Y" ]; then
echo "中断しました。"
exit 1
fi
fi
# Lima インスタンスの強制停止(念のため)
info "Lima インスタンスを停止中..."
LIMA_HOME="$LIMA_HOME" limactl stop colima --force 2>/dev/null || true
# ロック解除
info "ディスクロックを解除中..."
rm -rf "$LOCK_DIR"
# 確認
if [ -d "$LOCK_DIR" ]; then
error "ロック解除に失敗しました。手動で削除してください:"
echo " rm -rf ${LOCK_DIR}"
exit 1
fi
info "ロック解除完了"
echo
else
info "ディスクロックは検出されませんでした。"
echo " 別の原因で起動できない可能性があります。"
echo " 詳細ログ: ${LIMA_HOME}/colima/ha.stderr.log"
echo
fi
# --- Step 3: ソケットファイル掃除 ---
STALE_SOCK="${LIMA_HOME}/colima/ssh.sock"
if [ -S "$STALE_SOCK" ]; then
info "古いソケットファイルを削除: ${STALE_SOCK}"
rm -f "$STALE_SOCK"
fi
# --- Step 4: Colima 起動 ---
info "Colima を起動中..."
if colima start; then
echo
info "Colima が正常に起動しました!"
else
echo
error "Colima の起動に失敗しました。"
echo " ログを確認してください:"
echo " cat ${LIMA_HOME}/colima/ha.stderr.log"
echo
echo " 完全リセットする場合(データは失われます):"
echo " colima delete --force && colima start"
exit 1
fi
# --- Step 5: Docker 確認 ---
echo
info "Docker の状態:"
docker ps 2>/dev/null || warn "Docker にまだ接続できません。少し待ってから再試行してください。"
echo
echo "========================================"
echo " 修復完了"
echo "========================================"
#!/bin/bash
# start-dev-services.sh - 開発に必要なサービスを一括起動
#
# 使い方:
# ./start-dev-services.sh # Colima + DynamoDB Local 起動
# ./start-dev-services.sh --fix # Colima 修復してから起動
set -euo pipefail
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
GREEN='\033[0;32m'
YELLOW='\033[0;33m'
NC='\033[0m'
info() { echo -e "${GREEN}[INFO]${NC} $*"; }
warn() { echo -e "${YELLOW}[WARN]${NC} $*"; }
echo "========================================"
echo " 開発サービス起動"
echo "========================================"
echo
# --- Colima ---
if colima status &>/dev/null; then
info "Colima: 起動済み"
else
if [ "${1:-}" = "--fix" ]; then
warn "Colima が停止中。修復モードで起動します..."
"$SCRIPT_DIR/fix-colima.sh" --force
else
warn "Colima が停止中。起動します..."
if ! colima start; then
warn "通常起動に失敗。修復を試みます..."
"$SCRIPT_DIR/fix-colima.sh" --force
fi
fi
fi
echo
# --- DynamoDB Local ---
if docker ps --filter "ancestor=amazon/dynamodb-local" --format '{{.ID}}' | grep -q .; then
info "DynamoDB Local: 起動済み"
else
info "DynamoDB Local を起動中..."
docker run -d -p 8000:8000 --name dynamodb-local amazon/dynamodb-local:latest 2>/dev/null \
|| docker start dynamodb-local 2>/dev/null \
|| docker run -d -p 8000:8000 amazon/dynamodb-local:latest
info "DynamoDB Local: 起動完了 (localhost:8000)"
fi
echo
# --- MySQL ---
if brew services list 2>/dev/null | grep mysql | grep -q started; then
info "MySQL: 起動済み"
else
warn "MySQL が停止中。起動します..."
brew services start mysql 2>/dev/null || true
info "MySQL: 起動完了 (localhost:3306)"
fi
echo
echo "========================================"
echo " 全サービス起動完了"
echo "========================================"
docker ps --format "table {{.Names}}\t{{.Image}}\t{{.Ports}}" 2>/dev/null
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment