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

Show HN: SwiftUIを使って構築されたHacker NewsのネイティブmacOSクライアント

2026年2月20日原文(github.com)

概要

  • Hacker News のための macOSネイティブクライアント の紹介
  • SwiftUI で開発、 MITライセンス でオープンソース公開
  • 広告・ポップアップブロックアカウント管理ブックマーク 等の多機能搭載
  • 簡単インストール自動アップデート 対応
  • 開発者・ユーザー双方 に向けた詳細な技術情報と今後の展望

Hacker News: macOSネイティブクライアント 概要

  • SwiftUI で構築された macOS専用Hacker Newsクライアント
  • サイドバー によるストーリー閲覧、 統合リーダースレッド表示コメント を一画面で実現
  • 広告ブロック機能 :WKContentRuleListで主要14広告ネットワークを遮断、設定でON/OFF切替可能
  • ポップアップブロック :window.open()呼び出しを無効化、設定で切替可能
  • HNアカウント連携 :ログイン、アカウント作成、パスワードリセット対応
    • macOS Keychain でセッション管理、WebViewへのクッキー自動注入
    • 投票・コメント・ストーリー投稿 もアプリ内で完結
  • ブックマーク機能 :オフライン保存、検索・フィルタ対応
  • 検索・フィルタ :Algolia HN APIによる全文検索、日付範囲・種類・並び替え指定
  • 読了インジケーター :JavaScriptと連携し、画面上部に進捗バーを表示
  • 自動アップデート :SparkleによるEdDSA署名付き更新、GitHub Pages経由で配信
  • ダークモード :システム設定に連動し、CSSとmetaタグで外観自動調整

インストール方法

  • 最新DMGファイルReleasesページからダウンロード
  • DMGを開き、 アプリケーションフォルダへドラッグ&ドロップ で導入完了
  • macOS 14.0以降 対応、Xcodeや開発ツール不要

ソースビルド手順(開発者向け)

  • リポジトリをクローン
    • git clone https://github.com/IronsideXXVI/Hacker-News.git
  • Xcode 26以上でHacker News.xcodeprojを開く
  • Cmd+R でビルド&実行
  • Swiftパッケージ(Sparkle等)は自動解決

技術詳細

  • 約2,050行のSwiftコード、全16ファイル構成
  • @Observableマクロ 採用、従来のObservableObject/Publishedは未使用
  • async/await、withThrowingTaskGroupによる並列バッチ取得
  • SwiftUIのみ で設計、UIKit/AppKitはWKWebViewラッパー部分のみ利用
  • データ取得は HN公式Firebase API (個別アイテム/ユーザー)& Algolia Search API (フィード・検索・フィルタ)
    • Algolia APIで日付範囲・ページング・全文検索など柔軟に対応

CI/CD・配布フロー

  • GitHub Actions ワークフロー(467行)で全自動化
    • ビルド・アーカイブ、 Developer ID署名Appleノータライズ (最大5回リトライ)、 カスタムDMG生成(AppleScriptでアイコン配置)、DMG署名&ノータライズ、 EdDSA Sparkle署名生成、GitHubリリース作成、appcast.xml更新&GitHub Pages配信
  • macOSアプリ配布のCI/CD自動化 に関するノウハウも公開

今後の開発・フィードバック募集

  • キーボード操作 (j/kでストーリー移動)、 リーダーモード (記事をテキスト化)、 コメント返信通知 などの新機能を検討中
  • PR・Issue歓迎GitHubリポジトリ
  • フィードバック・要望 も積極受付

参考リンク

  • GitHub: https://github.com/IronsideXXVI/Hacker-News
  • ダウンロード: https://github.com/IronsideXXVI/Hacker-News/releases
  • スクリーンショット: https://github.com/IronsideXXVI/Hacker-News#screenshots
  • MITライセンス で完全公開

Hackerたちの意見

いいね!フォローやブロック機能があったら嬉しいな。こんな感じのChrome拡張があるんだけどね: https://chromewebstore.google.com/detail/hn-followblock/dkbn...

いいアイデアだね、ありがとう!

自分でコントロールできるコンテンツフィルターがあったら、体験がもっと良くなると思う。ユーザー名についてのメモや短い説明をアプリ内に表示できるといいな。ツールチップみたいにね。

https://oj-hn.com の機能リストにも入ってるよ。

内蔵の広告ブロック — プリコンパイルされたWKContentRuleListが14の主要な広告ネットワーク(DoubleClick、Google Syndication、Criteo、Taboola、Outbrain、Amazon広告など)をWebKitレイヤーで直接ブロックします。拡張機能は不要。設定で切り替え可能。これは良いスタートだけど、uBlock Originのリストを利用する方がいいと思う。そうすればメンテナンスも少なくて済むはず。

いいね、ちょっと見てみるよ。ありがとう。

より良いアプローチはuBlock Originのリストを利用することだと思う それは無理だよ。uBlock OriginはGPLv3ライセンス(https://github.com/gorhill/uBlock)だけど、このコードはMITライセンス(https://github.com/IronsideXXVI/Hacker-News)だから。

とても良いね。今コメントしてるところだよ。最初の要望はテキストサイズを調整できるようにしてほしいな。去年から、すべてのサイトでデフォルトのテキストサイズを一段階か二段階上げるようにしてるんだ。年を取るとね。でも、10年前にデザインブログで誰かが指摘してたように、読みやすくするのはいいことだよね。その時は必要なかったけど、今はありがたい。MacOS14でこれが使えるのが本当に嬉しい。最近作られた面白いものにアクセスできなくなってたから。古いOSに対応してくれてありがとう。最近のクソみたいなアップグレードにはしたくないしね。後で詳細をもっと読めるようになると思う(仕事の準備中)。何か見逃してなければいいけど、すでに解決されたことについてコメントしちゃってたらごめん。リリースおめでとう!

過去1年で、すべてのサイトのデフォルトの文字サイズを1つか2つ上げるようにしてるんだ。いつかはデスクトップ全体のスケーリングを変えた方がいいかも。でも、高解像度で複数のウィンドウを使うレイアウトが好きだから、まだやってないんだよね!

ありがとう!次のリリースでテキストサイズに取り組むようにするよ。

ユーザーがテキストサイズを調整できるようにアップデートをプッシュしたよ。

これは本当に良いね。ウェブサイトを訪れる代わりにこれを使う自分が想像できる。さらに良くするために、コメントがウェブビューや埋め込みではなく、SwiftUIで表示されるといいな(例えば、いくつかのRedditクライアントみたいに)。どれくらい実現可能かわからないけど、今の実装よりも手間がかかるだろうな。

Hacker Newsで議論の続きを見る