概要
- 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ライセンス で完全公開