
2026/01/20 2:47
**HNに掲載:ターミナル上で数千個のボールを使ったインタラクティブな物理シミュレータ**
RSS: https://news.ycombinator.com/rss
要約▶
Japanese Translation:
概要:
Rust TUI アプリ ballin は、rapier 2D フィジックスエンジンと Braille Unicode 文字を活用して、ターミナル上で数千個の論理的ボールを高フレームレート(10,000 ボールで120 FPS 超)で描画・アニメーションできることを示しています。インタラクティブな操作が可能です:クリックで反発させ、矢印キーまたはターミナルサイズ変更でピンボール風の傾斜を制御し、キーボードショートカット(1–6)でミニ水槽型の噴水を起動します。形状は障害物として追加・移動・再着色(n/m キー)、ドラッグが可能です。レベルデータ(形状+オプション)はすべてへエクスポートまたはインポートでき、CLI フラグlevel.jsonと--colorがデフォルトを設定します。15,000 ボールのハードコード上限により低スペックハードウェアも保護されます。--balls 10000
新しい rapier 0.32.0 リリースでパニックが発生したため、ballin は安定版 rapier 0.31.0 を使用しています。継続的衝突検出は性能を維持するため避けられていますが、高速時にはボールが線形状を通過(トンネル)してしまう可能性があります。カラーモードは利用できますが、アクセシビリティの観点からデフォルトでは無効化されています。
本プロジェクトは Ghostty などの高フレームレートターミナルエミュレーターで最適に動作します。macOS のネイティブ Terminal.app は出力を約30 FPS に制限します。Max Woolf(@minimaxir)によって開発され、ballin は MIT ライセンスの下でオープンソースです。GitHub リリースまたは Cargo を通じて配布され、Patreon/GitHub Sponsors でサポートされています。開発中に使用した Claude Opus 4.5 プロンプトの公開リストはにあります。PROMPTS.md
このバージョンは主要ポイントをすべて保持し、不当な推論を避け、読みやすい概要を提供します。
本文
ballin
Crates.io – ターミナルで楽しむカラフルなインタラクティブ物理シミュレータ
概要
ballin は Rust で書かれた楽しい TUI アプリです。数千個の論理ボールをシミュレートします。端末という文字制限がある中でも、リアルな物理挙動を確認できます。
- 高性能 – Rapier 2D 物理エンジン (0.31.0) を使用し、10,000 個以上のボールを 120 FPS 超で処理します。
- 点字 Unicode – 小さく離散的なボールを可視化できます。
- インタラクティブ性
- ボールをクリックすると排除バーストが発生します。
- ジェイザー (
キーまたはクリック) を使って力強い投射が可能です。1–6 - 上部領域をクリック&ホールドで多数のボールを生成。
- ターミナルサイズ変更や矢印キーでピンボール風に傾斜させられます。
- 物理設定 – 重力・摩擦・インタラクティブフォースを調整して変わった効果を作り出せます。
- 形状 – 障害物を追加し、色を変更して見た目をカスタマイズ。
- 保存/読み込み – 環境を JSON でエクスポートできます。
デモ
カラー爆発が実際に起こる様子をご覧ください!
(
ballin.mp4 を参照)
開発ノート
このクレートは Claude Opus 4.5 によって開発されました。質問「点字 Unicode のトリックで端末上に複雑なボール物理を可視化できるか?」への回答があり、全プロンプトは
PROMPTS.md に記載されています。
インストール
Releases ページからバイナリをダウンロードするか、以下のコマンドをご利用ください。
# macOS Apple Silicon curl -sL https://github.com/minimaxir/ballin/releases/latest/download/ballin-macos-arm.tar.gz | tar xz # macOS Intel curl -sL https://github.com/minimaxir/ballin/releases/latest/download/ballin-macos-intel.tar.gz | tar xz # Linux ARM64 curl -sL https://github.com/minimaxir/ballin/releases/latest/download/ballin-linux-arm64.tar.gz | tar xz # Linux x64 curl -sL https://github.com/minimaxir/mballin/releases/latest/download/ballin-linux.tar.gz | tar xz
Windows 版は Releases ページからダウンロードして解凍してください。
Rust がインストールされている場合、Cargo でインストールも可能です。
cargo install ballin
使用方法
Tip – Ghostty のような端末エミュレータを使用すると良いでしょう。標準的な端末ではフレームレートが 30 FPS に制限され、出力がカクつきます。
(バイナリ)または./ballin
を実行します。cargo run- シミュレーションはランダムに生成された形状オブジェクトから始まります。
キーで全キーボードショートカットを確認できます。?
操作
- ボールの追加
- 上部領域をクリック → ボール生成。
を押し続けるとすべての領域から落下。Space
→ 指定セクションに落下。Shift+1/2/3/4/5/6
- オプション – ボール数を手動で変更したり、デフォルトへリセットします。
- カラー モード – デフォルトでは互換性のため無効です。「Colors」ボタンまたは
キーで切替。ジェイザーが発火すると影響を受けたボールに色が付きます。c - 形状 – Shape メニューから挿入。形状をクリックして選択し、矢印キーで移動、
で色をループ、クリック&ホールドでドラッグします。n/m - レベル – Save でエクスポート、Load で読み込み。動画に使用したレベルは
として提供されています。level.json - CLI 引数
→ デフォルトでカラーを有効化。--color
→ 10,000 ボールから開始。--balls 10000
注意点
- Rapier 0.31.0 を使用(0.32.0 は制約ソルバーのパニックを防止するため)。
- ハードコードで 15,000 ボールが上限。低スペック機では 30 FPS 以下に性能が落ちます。
- 高速ボールによるトンネル効果は起こり得ます(物理エンジンの典型的挙動)。連続衝突検出を有効にすると性能が大幅低下するため除外しています。
- ジェイザーはミニ水槽玩具からインスパイア。
- すべての色は端末定義に基づく。デモで使用した Ghostty テーマは David Crespo 氏によるもの。JetBrains Mono フォントが推奨です。
メンテナ
Max Woolf (@minimaxir)
Patreon と GitHub Sponsors でサポートしています。貢献歓迎です。
ライセンス
MIT © Max Woolf