世界を動かす技術を、日本語で。

ElectronベースのアプリがmacOS 26 Tahoeでシステム全体の遅延を引き起こす

2025年9月26日原文(github.com)

概要

  • Electronベースのアプリ を開いていると、 macOS 26 RC で大きなラグが発生
  • CPU/GPU使用率は低い まま、ウィンドウ操作やスクロールが カクつく現象
  • DiscordVS Code など複数のElectronアプリで症状が悪化
  • Chrome単体では問題なし、Discordを最小化するとラグが解消
  • Appleへのフィードバック提出 が推奨されている状況

Electronアプリ利用時のパフォーマンス問題(macOS 26 RC)

  • macOS 26 RC 環境で Electronアプリ を開いている際に発生するラグ現象
  • M1 Max MacBook Pro (arm64/Apple Silicon)での発生報告
  • CPU・GPU使用率が低い にも関わらず、ウィンドウの移動やスクロール時に 120fpsが維持できずカクつき
  • DiscordVS Code など、複数のElectronアプリを同時に開くと症状が悪化
    • Discord単体でもラグ発生
    • Discordを最小化すると、他アプリ(例:Chrome)でのラグが解消
  • macOS 15 では発生せず、 macOS 26 RC 特有の問題
  • Chromium/Google Chrome単体 では同様の問題は発生しない
  • 設定アプリ(Wallpapers) でも同様のラグが確認される場合あり(60fps程度に低下)

メンテナーからの対応要請

  • Appleへのフィードバック提出 が強く推奨
    • Feedback Assistant を使用し、 問題発生中に送信
    • sysdiagnose を添付(通常自動だが、念のためチェックボックス確認)
  • 追加情報再現手順 の提供が求められている状況
  • Electron側での即時対応は困難、macOS側の問題の可能性が高いと見られる

利用者向けチェックリスト

  • Contributing Guidelines の確認
  • Code of Conduct への同意
  • 既存のIssueトラッカー で同様のバグ報告がないか検索済み
  • 再現環境バージョン情報 の明記(Electron 37.3.1, macOS 26 RC, arm64)

まとめ

  • macOS 26 RC での Electronアプリ利用時のパフォーマンス低下 は、現状Apple側への報告が最善策
  • 利用者からの詳細なフィードバック が問題解決の鍵
  • Electronコミュニティ でも状況を注視中

Hackerたちの意見

このコメントが正しいなら、Appleのせいじゃないね。アプリがAppKitの内部をいじくり回してるのが原因だよ。この例は、僕が嫌いなソフトウェアエンジニアリングのやり方を二つ示してるんだ。(1) あるコードがメソッドをプライベートにしても、別のコードがそれをオーバーライドしたり、修正したり、呼び出したりするのは、カプセル化の考えに対する侮辱だよ。(2) コードが関数のアイデンティティによって異なる動作をするのは、拡張性の原則に反してる。

「Appleのせいじゃない」というのは議論の余地があるね。Electronがこんなことをするべきじゃないとしても、Appleもユーザーが使ってるソフトウェアに問題を引き起こすアップデートを出すべきじゃないと思う。

小さなプラットフォームの違いを許容して、うまくやっていく方がいいっていうのはいい意見だね。すべての細かい部分を管理して、プラットフォーム間の一貫性や完璧なモックアップへの準拠を強制しようとするよりも。

いや、これはAppleのせいだよ。主要なアプリに対して回帰テストをしないのは純粋に無能だと思う。あと、コメントにあったこれね:> [あるユーザー] Appleのエンジニアに連絡を取る方法を試してみてください。プロジェクトとして、私たちはあなたよりAppleとのつながりが良くないです。> > 一つのアプローチとしては、上でリンクされてたBlueskyの投稿に返信したエンジニアに連絡することかも。純粋に無能だよ。大きなプロジェクトは、ソーシャルでランダムな人に連絡するしかない。

あるコードがメソッドをプライベートにしても、別のコードがそれをオーバーライドしたり、修正したり、呼び出したりするのは、カプセル化の考えに対する侮辱だね。これは現在のコンピュータがメモリを管理する方法に内在してる。カプセル化を保証するための損失を補うほどの利点があるかは分からない。静的解析を試みることもできるけど、それはマシンのアセンブリにいくつかの制限を課すことを意味する。多分、それは価値がある。> コードの一部は関数のアイデンティティによって異なる動作をする。俺は「スタック上でプロパティXを持つ最新の呼び出し元を見つけて、それがアクセスできるか確認する」っていうのをいろんな言語でやってきた。時には、関数が単なる関数になれないこともある。

ほんとにひどいね。問題(1)について、なんでその言語がそれを許してるの? なんでこんなやり方をしてるの? Appleは公式な方法を提供しなかったのかな?

(2) コードの挙動は関数のアイデンティティによって異なるから、拡張性の原則に反してるよね。ほとんどの拡張性の定義では、結果を得るためのステップ数は観察可能な特性として考慮されてないけど、実際にはそうなんだよね。

プライベートAPIの乱用は、パブリックAPIが不完全であることを意味する。そして、システムの挙動があまりにも嫌われているから、内部をいじりたくなるってことだね。

Electronベースのアプリって、どんなシステムでもラグを引き起こすんじゃない?

そうかもしれないけど、この特定のケースはElectron側のプライベートAPIの(悪)用に関係してるみたいだね。

Electronアプリに対するデファクトの不満だってわかってるけど、メモリ使用量を除けば、主要なElectronアプリでラグの問題に遭遇したことはないな。

これまで気づかなかったけど、ネイティブアプリよりパフォーマンスが悪いのは確かだと思う。Mシリーズは今のところ余裕がありすぎて、結構なんでもいけちゃうね。

Hacker Newsで議論の続きを見る