Show HN: 「Zenモード」——マカオス向けグローバル・フォーカスモード

2026/07/13 5:52

Show HN: 「Zenモード」——マカオス向けグローバル・フォーカスモード

RSS: https://news.ycombinator.com/rss

要約

Japanese Translation:

Ryan Cabeen の「Zen Mode」とは、マク OS アプリを単一のホットキー操作(

Option + Cmd + Z
)ですべての macOS アプリを一瞬で distractions ない集中環境に変えるハムースプーンスクリプトであり、
Esc
キーでトグルできます。個別アプリごとの設定が必要となるツールの違い、アクティブウィンドウを全高に中央揃えにし、ダークな CoreGraphics バックドロップを使用してメニューバー、ドック、壁紙などのシステムクラッターを滑らかにフェードアウトさせることで(ブラurring ではなく)光リークを防ぎます。スクリプトは
init.lua
設定ファイル内のカスタマイズ可能な変数(余白、 Corner 半径、アニメーション速度など)を通じて、現在の macOS 機能(例: Tahoe の丸みのある角など)に適応します。現時点ではシングルウィンドウのフォーカスと非リサイズ可能ユーティリティウィンドウでの利用が未対応ですが、開発者やクリエイターが-setup なり疲れなしで瞬時に深い作業モードへの切り替えを可能にします。今後のアップデートではアプリ間のスムーズな遷移や Spaces 間での安全な切り替えに対応予定ですが、現時点ではバックドロップの正しく動作を確保するためにグローバルウィンドウアニメーションは無効化されています。

本文

Ryann の禅モード (Zen Mode)

macOS で動作するあらゆるアプリケーションに対し、注意を再獲得するためのグローバルな集中モードを提供します。

常に画面いっぱいに散らばる要素(他ウィンドウ、通知バッジ、メニューバー、ドック、壁紙など)が注意力を引きます。「禅モード」はこれらを沈静化させる単一のホットキーです。

  • 動作原理: 作業中のウィンドウのみを画面中央へ滑り寄せ、全面の高さまで伸ばします(幅は維持されます)。
  • UI の隠蔽: メニューバーやドックを除く全ての背景要素が黒くフェードアウトします。
  • 終了方法: ホットキーを再度押す、または
    Esc
    キーを押すと元通りの位置と状態に戻ります。
  • モードの性質: フルスクリーンではなく、ウィンドウの自然な幅を維持するため、「スポットライト」のような感覚です。

対応アプリ・仕組み

  • プラットフォーム: Hammerspoon スクリプト(独立したアプリではありません)。
  • 適用範囲: ターミナル、ブラウザ、PDF リーダーなど、「ウィンドウを持つあらゆる Mac アプリ」。
  • 実装: アプリ固有の設定ではなく、グローバルモードとして動作します。

既存技術との比較

技術・ツール特徴本スクリプトとの違い
注意散漫防止ダимер (Distractor dimmers)背景を自動暗くするが、ウィンドウの移動やリサイズを行わない。壁紙などにも影響しない。ウィンドウ自体を画面中央に移動・拡大させます。
hs.window.highlight
他のウィンドウを不透明オーバーレイで覆う「孤立モード」。ウィンドウの再配置やメニューバー/ドックの隠蔽を含みます。
アプリ固有の禅モード (VS Code 等)特定のアプリ内でのみ利用可能。アプリに依存せず、あらゆるウィンドウで動作します。
macOS 標準フルスクリーンメニューバー・ドックは隠れるが、ウィンドウを端まで伸ばさない。ウィンドウの幅を維持しつつ中央揃えにし、全面に拡大できます。

本スクリプトの利点は、これらの要素を単一の意図的な操作で統合し、依存関係のない Lua コード(約 250 行)であることです。


機能点

  • あらゆるアプリ対応: アプリ固有の設定不要。同じホットキーでターミナル、ブラウザ、ノートアプリなどに対応します。
  • 単一キー操作:
    Option + Cmd + Z
    で入出力が切り替えられます。
  • 中央揃え・全面の高さ: 幅を維持したまま、画面高さに伸びて水平中央に配置されます。
  • 積極的な UI 隠蔽: macOS カーソルウィンドウレベルで描画され、メニューバーとドックを完全に覆います。
  • 完全な視覚的シール: カットアウト(透明部分)はわずかに内側にずらし丸みをつけることで、背景のピクセル漏れを防ぎます。
  • 滑らかな遷移エフェクト: 「2 フェーズイージングインアウト」を使用。
    1. ウィンドウが中央へ滑り寄る間に背景を黒くフェードアウト。
    2. 暗闇の中でウィンドウ高さを全面に拡大。
    • カスタマイズ:
      moveDuration
      (移動時間)と
      resizeDuration
      (拡大時間)で調整可能です。
  • リアルタイム追従: ウィンドウをドラッグ・リサイズすると、カットアウトもそれに追従します。
  • 安全な Esc キーフック: 禅モード有効時のみインターセプトされ、退出直後に macOS に返却するため、Vim などに干渉しません。
  • 状態の復元: 退出時には正確な位置とサイズを記憶し、元に戻します。

インストール手順

  1. Hammerspoon のインストール

    brew install --cask hammerspoon
    
  2. アクセシビリティ権限の付与

    • システム設定
      >
      プライバシーとセキュリティ
      >
      アクセシビリティ
      から Hammerspoon を追加してください。
  3. スクリプトの登録 リポジトリの

    init.lua
    ファイルの内容を
    ~/.hammerspoon/init.lua
    に追加します。

    mkdir -p ~/.hammerspoon
    curl -fsSL https://raw.githubusercontent.com/cabeen/zen-mode/main/init.lua >> ~/.hammerspoon/init.lua
    
  4. 設定の読み込み メニューバーの Hammerspoon アイコンをクリックし、「Reload Config」を選択します。


使用方法

動作キー操作
禅モードの切り替え (入力・退出)
Option + Cmd + Z
禅モードから退出 (代替)
Esc

独自化 (
init.lua
の設定変数)

以下のテーブル内で値を変更して、好みの状態に調整可能です。

変数名デフォルト値効果
topMargin
40メニューバーやカメラノッチから上の余白。
bottomMargin
40下の余白。
cornerRadius
24カットアウトの角丸処理。
※ウィンドウ自身の角丸半径以上にする必要があります。小さすぎると光漏れし、大きすぎるとウィンドウ隅が薄暗くなります。macOS 26「Tahoe」ではより大きな値が必要になります。
padding
-2カットアウトとウィindow 間のエッジシール。
※負値(-2)はウィンドウをわずかに重ねて光漏れを防ぎます。正値にするとネイティブのドロップシャドウが表示されます。
fillColor
{white = 0, alpha = 0.85}
バックドロップの色。
※アルファ値 (0.0–1.0) を上げて薄暗くするか、下げれば真っ黒になります。
moveDuration
0.3中央への滑り移動にかかる秒数(即時スナップには 0)。
resizeDuration
0.3全面の高さまでの拡大・縮小にかかる秒数(即時スナップには 0)。

ホットキーの変更: 別のホットキーを使用したい場合は、以下のカッコ内を編集してください。

hs.hotkey.bind({"alt", "cmd"}, "z", ...)

備考と制限事項

  • アクセシビリティ権限について: 許可がない場合や無効化された場合(macOS が誤って有効として報告する場合など)は、アラートが表示されるか設定ウィンドウが開いてしまいます。解決策: アクセシビリティリストから Hammerspoon を削除(–ボタン)し、再度追加してください。
  • OS 互換性: macOS 26「Tahoe」でテスト済みです。古いバージョンでも動作する可能性がありますが、
    cornerRadius
    のデフォルト値は Tahoe 用に調整されているため、古い macOS では約
    10
    に変更することをお勧めします。
  • リサイズ不能なウィンドウ: 一部のユーティリティや設定ウィンドウではサイズが維持されますが、中央に配置されます。カットアウトは実際の動作に適応します。
  • ネイティブフルスクリーン: 反応しません。まず退出する必要があります。禅モード中にスペースを変換することは未検証です。
  • グローバルアニメーション:
    hs.window.animationDuration = 0
    が設定されるため、スクリプト以外のウィンドウアニメーションも無効になります(禅モード自体は独自のアニメーションを実行)。
  • Esc キーの扱い: 禅モード有効中は Esc がキャプチャされます。Vim などで Esc に依存する場合、ホットキーを使用するか、Esc フックを再マッピングしてください。
  • マルチモニター: オーバーレイはフォーカスされたウィンドウが表示されている画面のみをカバーします。
  • 単一ウィンドウ限定: 一度に 1 つのウィンドウのみを対象とします。禅モード中に別のキーを押すと退出し、再度押して新しいウィンドウを設定します。

デザインノート(技術的詳細)

本スクリプトは以下の UX デティールを重視しています:

  • 滑らかなアニメーション: 標準のアニメーションは無効化され、独自の 60 Hz アニメーションクロックを実行します。ウィンドウ枠とバックドロップのアルファ値を単一のタイムラインから同時にイージングさせます。
  • 移動してからリサイズ: ウィンドウ移動は低コストですが、リサイズは再レイアウトを強制するため、2 フェーズに振付されています(移動後 → 黒くフェードアウト → リサイズ)。
  • ウィンドウエッジの処理: カットアウトをウィンドウより進めると背景が漏れる可能性があるため、各フレーム変更後に実際のフレームを読み込み、カットアウトを適合させます。また、
    padding = -2
    で暗闇と重複させ、隙間を作らないようにしています。
  • ウィンドウ隅の処理: カットアウトの角丸半径は、ウィンドウ自身の角丸半径より大きく設定されています(対角線の明かり漏れ防止)。macOS 26「Tahoe」ではデフォルト値 (24) で十分です。
  • メニューバーとドックの隠蔽: キャンバスがカーソルウィンドウレベルに昇格するため、システム UI を覆うことで真正面から画面を黒く塗ることができます。
  • バックドロップの暗さ: ホログラフィック効果は不可能(プライベート API)であり、ボkeh は非推奨です。代わりに半透明な暗い充填を使用し、コスト無料でライブ動作を実現しています。

今後の予定 (TODO)

  • 優雅な Cmd+Tab アプリ切り替え
    • 現状: アプレチェンジ時にオーバーレイが元のウィンドウの周りに残る。
    • 理想: アプリ切替をインターセプトし、新しいフォーカス窓へ処理を渡し、古い窓を元位置にアニメーション化して戻す。バックドロップも維持したい。
    • 現状の判断: スクリプトのサイズと可読性を優先するため、この範囲外としています。

著者・ライセンス

  • 著者: Ryan Cabeen
  • ライセンス: MIT

同じ日のほかのニュース

一覧に戻る →

2026/07/13 6:12

Chromium 148 より*Math.tanh*は下位の OS を特定するフィンガープリントとして使用可能になった

## 日本語翻訳: Chrome バージョン 148 以降、Chrome や同様のブラウザは特定の数学的な挙動を通じて正確なオペレーティングシステムの詳細を漏らし、高度なデジタルフィンガープリンティングを可能にしています。これはまず `Math.tanh` 関数から始まり、bundled routines からホストライブラリへと切り替わったことで、macOS、Windows、Linux のユーザーが使用しているか否かに基づいて小数点以下最終桁が 1 ユニット異なる独自のプロファイル(OS シグネチャ)が作成され、他の V8 数学関数とは異なりプラットフォーム間で同一ではなくあります。また、すべての CSS 三角関数はホスト libm を直接呼び出すことで OS を漏らします。macOS Apple Silicon では、スカラーおよびベクトルフレームワーク間のアーキテクチャ固有の分断により計算に著しい乖離が生じます。Scrapfly はこれらの問題に対処するため、数学的ビットごとの再現を含め、Linux のなりすまし用の真正な Windows ライブラリのマッピングや特定の ARM/x86 FMA(fused-multiply-add)挙動の処理を含む特別ソリューションを開発しました。彼らの Scrapium ブラウザはこれらの OS シグネチャを真正的なシステムと完全に一致するようになりすまえ、同時に最適な速度のためにハードウェア FMA を能動的に有効化します(ネイティブエミュレーションより最大約 6 倍高速)。高度なマッピング技術および数十万もの入力を対象とした厳格な検証を通じて、ユーザーは微妙な数学的な丸めエラーや将来のアップデートにおけるアーキテクチャの癖に基づく識別を防止する同時期にネイティブレベルのパフォーマンスで完全なステルスを実現します。

2026/07/13 5:23

小さなエミュレータ

## Japanese Translation: このテキストは、収集家のためのプラットフォーム間での即時的な互換性を優先しつつ、コモドール C64、ZX Spectrum(48k/128)、Amstrad CPC(CPC464/6128)、Acorn Atom、Z1013 などのレトロコンピュータシステムおよびそれらの対応ソフトウェアの包括的な目録です。具体的には、『Boulderdash』『Ghost's'n'Goblins』『Rick Dangerous』『Prince of Persia』のようなアクションゲームや、『Tetris』『Pengo』『Sokoban』のようなパズルゲームにわたる特定のタイトルを対象とし、ローディング時の独自の要件(例:BASIC 環境では「Enter」キーを押す、Spectrum タイトル『Cyclone』『Great Escape』では特定のジョイスティック種類[Kempston]を選択する、特定のインターフェースでは「F1」「SPACE」キーを押すなど)を詳述しています。また、本ガイドでは Arkos/Overlanders、Batman Group、Plush、Offence、Oxyron、Proxima、Dekadence などの著名なデベロッパーに帰属する様々なデモとインターフェースを列挙しています。さらに、特定のコントローラーや RAM モジュールなどといったハードウェアの制約を明示することで、今日広く利用可能な膨大なソフトウェアライブラリがどの機械構成で実行可能かをはっきりさせます。これは『Visual 6502 Remix』から『Wunderbar』『Batman Forever』などの特殊なデモにいたるまで、すべてのソフトウェアを網羅しています。最終的には、古いハードウェア上で何が達成可能かについてユーザーが正確に知ることを保証し、余計な詳細を含めない実用的な参考文献として機能します。

2026/07/13 3:25

Claude Code はプロンプトを読み込むまでに約3万トークンを消費し、OpenCodeは7,000 トークンである。

## Japanese Translation: 主要な知見は、セッションの段階と設定の複雑性に 따라 Claude Code と OpenCode の間でのトークン使用ダイナミクスが著しく異なることを示しています。標準的な設定において、Claude Code は非効率的なシステムプロンプト、キャッシュ管理のために数万のトークンを再記述し、堅牢なフレームワークテンプレートにより引き起こされる大規模な初期オーバーヘッド(約 33,000 トークン)を被る一方、OpenCode の床は低い(約 7,000 トークン)ため、大きな差を生じています。ただし、Fable 5 のような新しいモデルではこの隙間が縮小します。特に、複雑な本番環境設定においては、OpenCode 自身のツール呼び出しのシリアライゼーションとスキーマサイズによる影響で、最初のリクエストでより高いトークン負荷(Claude の約 75,000 トークンに対し、約 90,817 トークン)を被り、その後のリクエストで安定化するまで要請されます。新しいモデルは命令セットのサイズを削減しますが(例:27k から 10k クラクターへ)、特定のコストドライバーは残っています:対話履歴と乗算される延長された思考ブロック、「フレームワーク税」として作用する大規模な静的フレームワークテンプレート(例:AGENTS.md)、およびバーストコストを増幅するサブエージェントのファンアウト構造。さらに、本研究では EU AI Act のログ記録要件への準拠を確保し完全性を保証するために、キャッシュの書き込みと課金構造の違い(例:キャッシュされた読み取り対課金されるプレミアム書き込み)を検証できるよう、185 件のレコードを捕捉した SHA-256 ハッシュ連鎖監査軌跡を利用しました。 ## Text to translate: The primary findings indicate that token usage dynamics vary significantly between Claude Code and OpenCode depending on the session stage and configuration complexity. While Claude Code incurs a massive initial overhead (~33,000 tokens) compared to OpenCode's low floor (~7,000 tokens) in standard setups—driven by inefficient system prompts, rewriting tens of thousands of tokens for cache management, and rigid framework templates—this gap narrows with newer models like Fable 5. Notably, in complex production configurations, OpenCode's first request can incur a higher token load (~90,817 tokens vs. ~75,000 for Claude) due to its own serialization of tool calls and schema sizes before stabilizing on subsequent requests. While newer models reduce instruction set sizes (e.g., from 27k to 10k characters), specific cost drivers remain: extended thinking blocks that compound with conversation history, large static framework templates (e.g., AGENTS.md) that act as a "framework tax," and subagent fan-out structures that multiply bootstrap costs. Additionally, the study utilized a SHA-256 hash-chained audit trail capturing 185 records to ensure integrity and support compliance with EU AI Act logging requirements, verifying that both architectures handle cache writes and billing structures differently (e.g., cached reads vs. billed premium writes).