ネイティブまで徹底し、必要なテキストが表示されるまで続けます。

2026/05/17 20:49

ネイティブまで徹底し、必要なテキストが表示されるまで続けます。

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

要約

Japanese Translation:

日本語翻訳:

(ここに原文を貼り付け)

翻訳するテキスト

(必要に応じて;なければ、元の文章を繰り返す):サマリー(オリジナル)

本文

私は、ほぼ 20 ヶ年以上にわたりネイティブの macOS/iOS デベロッパーとして活動してまいりましたが、よくある「また Node.js/Electron か…残念なことです」といった反応について、いくつかご発言しておきたいことがあります。

最近、純粋な SwiftUI/Swift を用いて、Markdown 機能を備えたシンプルなチャットアプリの実装を試みました。正直に申し上げますと、「ネイティブ」と称される技術が、単純な画面表示を超えた領域に至るほど未熟である様は、なんと滑稽なのかと思います。確かに SwiftUI で合理的なパフォーマンスを実現することは可能であり、スクロール時のわずかな揺れや、ここぞという場面での数回の遅延程度であれば許容範囲だと自欺するまでもあります。しかし、そうすると今度は SwiftUI プライミティブによって構築された全体としての Markdown ドキュメントの選択が不可能となり、設計上そのように仕組まれていることに直面することになります。

そこで、経験と知恵を頼りに NSTextView に切り替えます。しかも現在は TextKit 2 をサポートしており素晴らしいことです。しかしながら、これによりこれまでの SwiftUI 側で得られていたテストやパフォーマンス改善の恩恵の多くを失ってしまいます。なぜなら、これは SwiftUI と相性が悪いためです。次に、テキストストリーミングに対応させるため、AppKit への移行を検討します。今が 2026 年で、AI モデルからのレスポンスストリーミングは当たり前の時代ですからね。その結果、CPU のスパイクが発生し始めます。まあ、仕方がありません。AppKit はまだあります。NSCollectionView もそうです。成熟し、高性能で、戦火をくぐって生き残ってきたものです。それらを採用して再び実装を開始しましたが、翌日にはセルが点滅してしまうという設計上の問題を発見することになります。

さらに、純粋な TextKit 2 でより低レベルのアプローチを試すことも考えます。プロトタイプを作成しましたが、パフォーマンスは概ね良好でありながら、ストリーミング処理は依然として問題です。現代的な環境とも相性が悪く、SwiftUI を完全に廃止して AppKit に固執し、テキストチャンクの手動拡張にも取り組むことになりました。この段階ではほぼすべての機能が破綻していますが、なんとテキスト選択は可能でした!

すると、単純な macOS ネイティブの振る舞い(コンテキストメニュー、辞書検索、選択操作、アクセシビリティ、テキストインタラクション、ユーザーが考慮せずに期待するあらゆる細かい機能)に達するだけで数ヶ月もかかることに気づきます。

そこで WebKit を Markdown 表示のために試してみます。確かに若干の制限はありますが、概ね動作し、パフォーマンスも良好です。タイポグラフィもほぼ完璧であり、適切なレベルの制御が可能です。

そして、最も絶望的な瞬間に来た時です。こう考えました:「よし、簡単な Electron プロジェクトを作成してみよう」。ダークサイドへと進みました。驚きだったのは、テキスト操作、Markdown のレンダリング、優れたタイポグラフィ——これら全てが即座に動作し、純粋な TextKit 2 インプリメンテーションでは得られなかったようなパフォーマンスを備えていることです。macOS との統合機能も充実しており、数行のコードで精巧な Git の差分まで描画できます。diffs.com などの高級機能についてはさらにお話ししません。

そこでふと自問しました:「いったい何が間違っていたのでしょうか?」

  • みんなが言うべきことをすべて実行しています(ネイティブ一貫性)。
  • プラットフォームの仕組みを知っています。
  • アプローチの選択肢を知っています。
  • SwiftUI、AppKit、TextKit、WebKit についても理解しています。

それでもなお、チャットと Markdown 表示を備え、メッセージ全体を選択可能なといったシンプルな機能を実装することに失敗してしまいました。

すると突然、この時代の最も重要な UI パターンの一つである「チャット」「長文リッチテキスト」「柔軟なタイポグラフィ」に依存する新しいチャット主導型アプリの多くが、いずれかの形で Web ベースとなっている理由がはっと明らかになりました。

  • 真の代替手段は存在しません。

SwiftUI はシンプルな画面には適しており、特に大幅なスクロールのない場合ほど望ましいです。Swift も依然としてパフォーマンス重視の部分には最適です。しかしながら、そのほとんどを Electron や React Native から無料で獲得でき、ネイティブとの相互運用性を保ちつつ、はるかに優れたテキストモデルとレンダリングを実現できるのです。

したがって、もはや「急場しのぎの解法か、適切な解法か」という議論では済みません。長文チャット向けのリッチテキストレンダリングを構築したい場合、 SwiftUI や Apple のネイティブ SDK は助けにはなりません。それらは利点から制約へと変化してしまいます。

P.S. Hacker News での議論
P.P.S. Lobsters での議論

同じ日のほかのニュース

一覧に戻る →

2026/05/18 6:40

ジェンケイアド

## 日本語訳: GenCAD は、画像から直接編集可能な 3D CAD デザインを生成する AI モデルを作成することで、エンジニアリング分野における画期的な突破を遂げています。以前の方法は複雑なデータ構造に苦戦していましたが、この新しいアプローチは Boundary Representation(B-rep)形式に関連する精度上の課題を克服します。これは、latent command representations と diffusion modeling を含む独自の 4 つのステップのプロセスを通じて実現されており、結果を静的な形状ではなく、実行可能なパラメトリックコマンドとしてデコードします。 この技術は、製造業者やエンジニア向けに設計ワークフローを変革し、完全にモディフィ可能で高精度なモデルを瞬時に作成することを可能にしています。以前は、簡易的な 3D ビジュアルを調整可能なエンジニアリングファイルに変換するには、きつ手間のかかる手作業が必要でしたが、GenCAD はこの障壁を取り除き、ユーザーが設計を容易に反復して改善できる完全な CAD プログラムへの即座のアクセスを提供します。その結果、産業全体が大幅な効率向上を実感し、自律的なツールによって現在、さらなる開発に必要な柔軟性を備えた洗練された編集可能な幾何形状が生成されています。

2026/05/18 6:56

ThinkPad:IBM の弁当箱から、レノボの AI ワークステーションへ

## Japanese Translation: ThinkPad ノートパソコンファミリーは、IBM での公式発売(1992 年 10 月 5 日)以降、同社の所有期間(1992–2005 年)および Lenovo による継承期間(2005 年〜現在)にわたり、連続した納品を実現している長年のエンジニアリングの遺産です。当初は 700C カップシェルとして発表され、Richard Sapper の象徴的なマットブラックケース、10.4 インチの有源マトリックスカラー TFT ディスプレイ、そして Ted Selker の開発した TrackPoint II——ホームROWから指を動かす時間を短縮するポインティングスティック——を搭載していました。2010 年までには納品台数が 6000 万台を超え、買収後のブランドの存続と IBM の元々のエンジニアリング原則の維持を証明しました。デザインは 30 年にわたり大きく進化しましたが、1992 年の時代から現代のモデルである 2025/2026 年製の P14s Gen 6 や X1 Carbon に至るまで視覚的な連続性を保ち続けています。これらの現行モデルは「Strix Point」CPU を採用し、高度な NPU とプレミアム OLED ディスプレイを備えています。初期モデルでは 2012 年まで 7 レーキストANDARD化されており、その後は Precision キーボードに置き換えられましたが、後期の世代では 2012 年から開始されたハンダ付けメモリ制限などの課題もありました。一方、近年の傾向としては、薄い筐体にユーザー交換可能な DDR5 SODIMM を採用するなど、修理可能性への再注力が進んでいます。また、専用ドックから汎用的な USB-C/Thunderbolt 規格へも円滑に移行しています。結局のところ、ThinkPad の成功は、元々のデザイン哲学を尊重しつつ最新技術を統合することで、長期的な市場優位性を維持できることを示しています。

2026/05/18 6:15

プロログによるコーディング・ホラー。

## Japanese Translation: 本記事は、純粋で単調なコーディング慣行への厳格な遵守が、堅牢な Prolog プログラムにとって不可欠であるという主張を展開している。一般的な産業パターンへ偏离することは、言語の述語論的性質を破損させ、高価な欠陥をもたらす。`!/0`、`(->)/2`、および `var/1` などの非単調な構造は、意図された解の喪失か不適切な結果を生じる。`assertz/1` および `retract/1` でグローバルデータベースを改変することは、隠れた依存関係を創出し予期せぬ失敗を引き起こすため、状態は世界の改変を通じてではなく述語の引数を通じて伝達されるべきである。`(is)/2`、`(=:=)/2`、および比較演算子のような低水準のアリティム操作は、開発者に矛盾する述語論的および操作的意味を両立させるよう迫り、プログラムを理解しやすくし、学習・テスト・推論を行うことを難しくする。不純な出力操作もまた、解答を Prolog タームとして記号論的に考察することを阻止する。純粋で単調な Prolog 部分集合を採用し、`dif/2` のような近代の述語論的ツール、`if_/3` のようなメタ述語、およびクリーンなデータ構造を活用することで、開発者はパフォーマンスを維持しつつ一般性・柔軟性・厳格なテスト可能性を取り戻し、プロフェッショナル環境での利用を制限するレガシーの負担から Prolog を解放することができる。