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

Show HN: Bonsplit – macOSネイティブアプリのタブと分割

概要

Bonsplitの 設定オプション外観カスタマイズ について解説。 各プロパティの デフォルト値用途 を簡潔にまとめ。 タブやペインの 動作制御方法 を箇条書きで説明。 新規タブ挿入位置ビュー管理方式 の違いも整理。 プリセット設定の 特徴 も併せて紹介。

Bonsplit 設定オプション一覧

  • allowSplits ・スプリットボタンやドラッグによるペイン分割の有効化 ・デフォルト: true

  • allowCloseTabs ・タブのクローズボタン表示 ・デフォルト: true

  • allowCloseLastPane ・最後のペインのクローズ可否 ・デフォルト: false

  • allowTabReordering ・同一ペイン内でのタブ並び替えドラッグ有効化 ・デフォルト: true

  • allowCrossPaneTabMove ・タブの他ペインへのドラッグ移動有効化 ・デフォルト: true

  • autoCloseEmptyPanes ・最後のタブを閉じた時にペイン自動クローズ ・デフォルト: true

  • contentViewLifecycle ・タブ切替時のコンテンツビュー管理方式 ・デフォルト: .recreateOnSwitch

    • .recreateOnSwitch ・タブ切替時にビューを再生成 ・メモリ消費: 低 ・用途: シンプルな内容

    • .keepAllAlive ・全タブのビューを常時保持 ・メモリ消費: 高 ・用途: 複雑なビューやフォーム

  • newTabPosition ・新規タブの挿入位置 ・デフォルト: .current

    • .current ・現在フォーカス中タブの直後、なければ末尾

    • .end ・常にタブリストの末尾に挿入

外観設定

  • tabBarHeight ・タブバーの高さ(pt) ・デフォルト: 33

  • tabMinWidth ・タブの最小幅(pt) ・デフォルト: 140

  • tabMaxWidth ・タブの最大幅(pt) ・デフォルト: 220

  • tabSpacing ・タブ間のスペース(pt) ・デフォルト: 0

  • minimumPaneWidth ・ペインの最小幅(pt) ・デフォルト: 100

  • minimumPaneHeight ・ペインの最小高さ(pt) ・デフォルト: 100

  • showSplitButtons ・タブバーにスプリットボタン表示 ・デフォルト: true

  • animationDuration ・アニメーションの秒数 ・デフォルト: 0.15

  • enableAnimations ・アニメーション全体の有効/無効 ・デフォルト: true

プリセット構成

  • defaultBonsplitConfiguration ・全機能を有効にしたデフォルト設定

  • singlePaneBonsplitConfiguration ・スプリット無効の単一ペインモード

  • readOnlyBonsplitConfiguration ・全ての編集操作を禁止したリードオンリーモード

Hackerたちの意見

なんでかわからないけど、これがmacOSの全てのベースラインアプリにサンドボックススタイルのタブや分割サポートがあると思ってたんだ。すごくクールだけど、知らなかった欲しいものが存在しないってことで、ちょっとがっかりしちゃった。

あなた一人じゃないよ。最初は見出しを見てるとき、ライブラリだと思ったけど、数分後にタブを開き始めたら、既存のアプリにタブと分割を追加したのかと思った。Windows全体にタブを持ち込む何かを思い出したから、そんなにクレイジーなアイデアでもないよね。

すごく興味深いね。しばらくmacOSの開発には触れてなかったけど、AppKitとSwiftUIのためにライブラリがまだ書かれてるって知れて良かった。これが必要だった理由についての説明があると、このライブラリはもっと良くなると思う。確かAppKitには、いくつかのデリゲートメソッドを実装するだけでタブ機能が無料で得られるネイティブタブAPIがあったはず(あの「ただ」っていうのは結構大変なんだけど)。特にドキュメントベースのアプリではね。(ごめん、具体的なことはあまり覚えてないけど、もう少し難しかったかも)SwiftUIの同等のものについては最新情報を持ってないけど、複数のウィンドウやドキュメント用のAPIと似たようなものがあるんじゃないかな。みんなが「なぜ」の説明を聞くと良いと思うし(実際、痛い目にあったAppKit APIをたくさん使ってきたから)、デモアプリのスクリーンショットもあれば、どんな感じになるのか、ネイティブのものとどれくらい見た目や感触が違うのかが期待できるよね。

そのウェブサイトには、ネイティブタブができないことや、その見た目のデモがすでにあるよ。

ネイティブタブはウィンドウレベルで動くんだよね。

ネイティブタブサポートを何度か試したけど、印象としてはほとんど役に立たないかな。特定のドキュメント指向のアプリにはまあまあかもしれないけど、ほとんどのアプリ(ChromeやiTerm、Safariも独自のネイティブタブを使ってると思う)で使われない理由があるんだよね。まだ未完成で、"タブデータモデル"がフレームワークが求めるドキュメントデータモデルにうまく合わないのが厄介なんだ。最近、タブが欲しいアプリを作ったけど、この理由でタブサポートを諦めて、将来的に市販のタブUIライブラリを使う予定でtodoアイテムを追加したよ。

イースターエッグ:ロゴをクリックしてみて!

これ、めちゃくちゃ美しいね。ウェブサイトもライブラリのUIも。だけど、ちょっと聞きたいことがあるんだけど、なんでこんなに elaborate で素敵なウェブサイトをただのライブラリのために作ったの?ウェブデザインの仕事を狙ってるの?名声や評判を求めてるの?それともただゲームが好きだから?お願いだから、こんなに努力してただのドキュメントに何でこんなに力を入れたのか教えてほしい。

他のウェブサイトの基準を設定するため?どうやってやるべきかを示すため?それとも「全ての良きもののために」?

彼のウェブサイトを見てみてよ。理由がわかるから。 https://www.alasdairmonk.com/

彼は履歴書に経験なんて必要ないと思うよ(笑)。彼は大手企業でリードデザイナーとして働いてきた経験豊富なデザインプロフェッショナルだから。

なんで良いものを作るの?悪いものを作るべきなんじゃない?それとも何も作らない方がいいのかな。

  • ライブラリ - 機能/効果はSublime Textの折り紙モードみたいだね。

これ、めっちゃ美しいね。去年、似たような使い方をして、もうちょっと洗練されてないものを作ったんだ。その時に必要だった機能で欠けてたのは、タブを新しいウィンドウに引き離して、またフレームに戻せる機能だったな。今後のためにこのプロジェクトは覚えておくよ。

ここに対する細部へのこだわりが好き。ドラッグ&ドロップをうまくやるのは難しいし、思ってるよりもずっと複雑なんだよね。

僕の好きなLinuxのウィンドウマネージャはいつもion3で、後にnotionとして知られるようになった。タイル型やタブ型のウィンドウマネージャの中で最初の方だったかはわからないけど、2000年頃から使い始めて大好きだった。多くの他のタイル型ウィンドウマネージャにはないタブ付き分割機能があったのが印象的だった。これを見るのはすごく嬉しいね。

ウェブサイトのヘッダーが美しくてクリエイティブなのが好き。やってることの一部しか表してないのに、素晴らしい作品だね!

これは面白いね。