事象
Intel Mac で Backnote.app を起動すると、以下の順でアラートが表示される:
- 「処理が予期せず終了しました。アプリを再起動してください。」 → OK
- 「起動に失敗しました。アプリを再起動してください。」 → OK
- その後ウィンドウは表示されるが、バックエンドは死んだままで API はすべて
ERR_CONNECTION_REFUSED 状態
原因
scripts/build-backend.sh の darwin/amd64 (Intel Mac 向け) ビルドが CGO_ENABLED=0 でビルド されており、mattn/go-sqlite3 が動作しない。
実際に backend/dist/darwin/x64/backnote-backend を直接実行すると以下のエラーで即終了する:
```
database init: database open:
Binary was compiled with 'CGO_ENABLED=0', go-sqlite3 requires cgo to work. This is a stub
```
otool -L でも libSystem.B.dylib の current version が 0.0.0 (= CGO 無効ビルドの典型) になっており、arm64 バイナリ (current version 1351.0.0) と挙動が異なる。
なぜ CGO=0 になっているか
Go はクロスコンパイル時 (Apple Silicon → Intel Mac は GOARCH 切り替えでクロス扱い) にデフォルトで CGO_ENABLED=0 になるため。scripts/build-backend.sh で明示指定していないことが原因。
2 つのアラートが順番に出る理由
src/main/backend.ts の `exit` イベント (code != 0) で 1 つ目のアラートが出て、ユーザーが OK した後も `waitForHealth` のリトライ (30 回 × 500ms) が継続し、15 秒後タイムアウトで reject → `src/main/index.ts` の catch で 2 つ目のアラートが出る。
修正方針
scripts/build-backend.sh の darwin/amd64 ビルドで明示的に CGO を有効化し、Apple Silicon マシンからでも x86_64 ターゲットの CGO ビルドができるように CC / CXX を指定する:
```bash
CGO_ENABLED=1 GOOS=darwin GOARCH=amd64
CC="clang -arch x86_64" CXX="clang++ -arch x86_64"
go build -o dist/darwin/x64/backnote-backend ./cmd/main.go
```
arm64 はネイティブビルドのため既に CGO=1 で動いている。
影響範囲
- Intel Mac 利用者全員 (起動毎にアラート 2 回、かつ DB アクセス不可で実質機能しない)
- v1.1.1 の Intel Mac dmg は再配布が必要
関連
- src/main/backend.ts:80-91 (exit ハンドラのアラート)
- src/main/index.ts:81-90 (startBackend catch のアラート)
- scripts/build-backend.sh:14-15 (darwin/amd64 ビルド)
事象
Intel Mac で Backnote.app を起動すると、以下の順でアラートが表示される:
ERR_CONNECTION_REFUSED状態原因
scripts/build-backend.shの darwin/amd64 (Intel Mac 向け) ビルドがCGO_ENABLED=0でビルド されており、mattn/go-sqlite3が動作しない。実際に
backend/dist/darwin/x64/backnote-backendを直接実行すると以下のエラーで即終了する:```
database init: database open:
Binary was compiled with 'CGO_ENABLED=0', go-sqlite3 requires cgo to work. This is a stub
```
otool -LでもlibSystem.B.dylibの current version が0.0.0(= CGO 無効ビルドの典型) になっており、arm64 バイナリ (current version1351.0.0) と挙動が異なる。なぜ CGO=0 になっているか
Go はクロスコンパイル時 (Apple Silicon → Intel Mac は GOARCH 切り替えでクロス扱い) にデフォルトで
CGO_ENABLED=0になるため。scripts/build-backend.shで明示指定していないことが原因。2 つのアラートが順番に出る理由
src/main/backend.tsの `exit` イベント (code != 0) で 1 つ目のアラートが出て、ユーザーが OK した後も `waitForHealth` のリトライ (30 回 × 500ms) が継続し、15 秒後タイムアウトで reject → `src/main/index.ts` の catch で 2 つ目のアラートが出る。修正方針
scripts/build-backend.shの darwin/amd64 ビルドで明示的に CGO を有効化し、Apple Silicon マシンからでも x86_64 ターゲットの CGO ビルドができるようにCC/CXXを指定する:```bash
CGO_ENABLED=1 GOOS=darwin GOARCH=amd64
CC="clang -arch x86_64" CXX="clang++ -arch x86_64"
go build -o dist/darwin/x64/backnote-backend ./cmd/main.go
```
arm64 はネイティブビルドのため既に CGO=1 で動いている。
影響範囲
関連