wheatandcatの開発ブログ

技術系記事を投稿してます

SwiftUIでRSSリーダーをMacアプリ作ってみる①

概要

習慣として、いくつかの技術系情報サイトを定期的に巡回している。
ある程度固定化された巡回先があるため、これまでは各サイトをブックマークし、気が向いたときに個別に開いていた。

ただ、チェックするサイトが増えてくるにつれ、

  • 毎回タブを開くのが面倒
  • 新着記事を見逃しがち
  • 本当に読みたい記事だけを効率よく追えない

といった不満が出てきた。

それなら RSSリーダーを自作して、自分好みにカスタマイズした方が早いのでは? と思い、アプリ開発を始めた。

どうせ作るなら Mac アプリにしたいと思い、今回初めて Xcode + SwiftUI を使って開発してみたので、その所感をまとめる。

リポジトリ

https://github.com/wheatandcat/RssFeedReaderForMac

作成中のアプリ


  • 画面構成は上記のようなシンプルな構成
  • RSS Feed の URL を登録して記事一覧を表示するだけの最小実装
  • 今後、表示形式や操作性をカスタマイズしていく予定

SwiftUIを使ってみた所感

https://developer.apple.com/jp/swiftui/

今回が初めての SwiftUI 開発だったが、言語仕様や設計思想がよく整理されていて、思った以上にスムーズに開発できた。

普段触っている React Native / Flutter と比較して、特に良いと感じた点を挙げる。

Xcodeのプレビュー機能

開発体験として特に良かったのが、Xcode の プレビュー機能

View のコードを書きながら、リアルタイムで UI を確認できるため、
「コードを書く → ビルド → 起動して確認」という往復がほぼ不要になる。

React Native の場合は Storybook を用意するケースが多いが、
準備コストなしでここまで快適に確認できるのは Xcode の強みだと感じた。

クロージャで直感的なコードが書ける

React で Button コンポーネントを使う場合、例えば以下のように書く。

<Button
  title="保存"
  onPress={() => save()}
/>

同じことを SwiftUI で書くと、次のようになる。

Button("保存") {
    save()
}

実際には以下のようなコードだが、

Button("保存", action: {
    save()
})

SwiftUI では条件を満たすとクロージャの一部を省略できるため、
結果として非常にシンプルで読みやすい記述になる。

View に対して action が一つだけ存在するケースでは、
React よりも直感的に書けると感じた。

標準機能だけで完結する開発体験

React Native や Flutter では、

  • iOS / Android の両対応
  • 各プラットフォーム差異の吸収

が前提になるため、どうしてもサードパーティライブラリへの依存が増えがちになる。

一方 SwiftUI は Apple のファースト環境であり、

  • 標準コンポーネントが充実している
  • OS との統合が自然
  • 「余計なことを考えなくていい」場面が多い

といった点で、細かな開発体験の差を強く感じた。

まとめ

『達人プログラマー』に 「毎年新しい言語を一つ学ぶ」という話が出てくるが、今回 SwiftUI を触ってみて、その意味を実感できた。

当面は、SwiftUI 周りの記事を書いていこうと思った。