フルスタックSwift開発を始めるテンプレートを作りました
目次 はじめに テンプレートの全体構成 Shared層:単一の真実の源 Backend層:クリーンアーキテクチャの実践 iOS層:モジュラーなパッケージ構成 開発ワークフロー デプロイメント テンプレートとしての設計意図 まとめ 1. はじめに 本記事は「サーバーサイドSwiftでiOSアプリ開発をどこまで効率化できるか」シリーズの最終回です。 これまでのシリーズでは、以下のライブラリを紹介してきました。 第1回: Swift Configuration(環境変数管理) 第2回: swift-statable(状態管理マクロ) 第3回: swift-api-cont...
サーバーサイドSwiftを使う場合のiOSアーキテクチャ
目次 はじめに 従来のアーキテクチャの振り返り サーバーサイドSwiftを使う場合の前提 各層の変化 新しいパッケージ構成 まとめ 1. はじめに 本記事は「サーバーサイドSwiftでiOSアプリ開発をどこまで効率化できるか」シリーズの第5回です。 以前の記事「ViewModelを使わない、SwiftUIらしいiOSアーキテクチャ」では、iOSアプリ単体を前提とした6パッケージ構成のアーキテクチャを提唱しました。iOSアプリを単体で構築する場合は、そのアーキテクチャで問題ありません。 本記事では、サーバーサイドSwiftを使う場合に、そのアーキテクチャがどのように変化するか...
サーバーサイドSwiftをより使いやすく
目次 はじめに サーバーサイドSwiftとVapor swift-api-serverの設計思想 主要コンポーネント サービス実装パターン ミドルウェアとエラーハンドリング まとめ 1. はじめに 本記事では、サーバーサイドSwiftの実装詳細を隠蔽し、ビジネスロジックの構築に集中できるようにするライブラリswift-api-serverを紹介します。 本記事は「サーバーサイドSwiftでiOSアプリ開発をどこまで効率化できるか」シリーズの第4回です。第1回はSwift Configuration、第2回はswift-statable、第3回はswift-api-contr...
サーバーとクライアントでAPIの型を共有する方法
目次 はじめに なぜ型安全なAPI定義が必要なのか swift-api-contractの設計思想 開発の全体像 API契約の定義 サーバー側での活用 クライアント側での活用 まとめ 1. はじめに 本記事では、Swiftマクロを使って型安全なAPI定義を実現するライブラリswift-api-contractを紹介します。 本記事は「サーバーサイドSwiftでiOSアプリ開発をどこまで効率化できるか」シリーズの第3回です。第1回はSwift Configuration、第2回はswift-statableを取り上げました。今回はAPI定義の型安全な共有を扱います。 AP...
SwiftUIの状態管理をマクロで仕組み化する
目次 はじめに State層の設計思想 AsyncState:排他的状態表現 @Statableマクロによる自動化 EnvironmentによるDI統合 OperationTrackerによる操作追跡 アーキテクチャへの統合 まとめ 1. はじめに 本記事では、SwiftUIの状態管理をマクロで仕組み化するライブラリswift-statableを紹介します。 本記事は「サーバーサイドSwiftでiOSアプリ開発をどこまで効率化できるか」シリーズの第2回です。前回はSwift Configurationを取り上げました。今回はマクロを使った状態管理の仕組み化を扱います。 また...
Apple公式Swift Configurationを試してみた
目次 はじめに Swift Configurationとは 基本的な使い方 応用的な機能 swift-envで目指したAPI設計 まとめ 1. はじめに 本記事では、2025年12月に1.0が正式リリースされたApple公式の設定管理ライブラリ「Swift Configuration」を紹介します。基本的な使い方から応用機能までを解説し、最後に自分のユースケース向けに作ったラッパーライブラリについても触れます。 なお、本記事はサーバーサイドSwiftでiOSアプリ開発をどこまで効率化できるかを検証するシリーズの第1回です。私は2025年12月頃から、Vaporを使ったバック...
Swiftで画像IDからの多段取得をキャッシュするAsyncImageライクなライブラリ設計
目次 はじめに 解決したい課題 AsyncImageライクなAPI設計 Environment経由のDI 実装の詳細 まとめ 1. はじめに こんにちは、個人でiOSアプリ開発をしていて、最近では「読書メモリー」という本の管理アプリをリリースしました。 本記事では、リモート画像の表示とキャッシュを効率的に行うライブラリ「swift-cached-remote-image」について解説します。 iOSアプリでリモート画像を扱う場面は多くあります。ユーザーのプロフィール画像、投稿された写真、商品画像など、APIから取得した画像を表示する機会は頻繁にあります。SwiftUIにはA...
SwiftUIでカメラ・ライブラリからの画像取得を1行で実装する方法
目次 はじめに 目指したAPI設計 ViewModifierによるAPI実現 UIKitのラップとUIViewControllerRepresentable 権限管理の実装 まとめ 1. はじめに こんにちは、個人でiOSアプリ開発をしていて、最近では「読書メモリー」という本の管理アプリをリリースしました。 本記事では、SwiftUIで「カメラまたは写真ライブラリから画像を取得する」機能を実装する際のAPI設計と実装について解説します。 iOSアプリで画像を扱う場面は多くあります。プロフィール画像の設定、写真の投稿、書類のスキャンなど、ユーザーが画像を選択・撮影する機能は頻...
プロトコル指向でデザインシステムを抽象化する - Swift/SwiftUI実践
目次 はじめに なぜデザインシステムをコードで定義するのか プロトコル指向とデザインシステムの相性 デザインシステムの構成要素 Environmentを活用したAPI設計 カタログアプリで具体化を確認する まとめ 1. はじめに こんにちは、個人でiOSアプリ開発をしていて、最近では「読書メモリー」という本の管理アプリをリリースしました。 本記事では、SwiftUIアプリ向けのデザインシステムをSPMパッケージとして設計・実装した経験を共有します。特に、Swiftのプロトコル指向プログラミングの考え方をデザインシステムに適用することで、アプリごとにカスタマイズ可能な再利用性...
なぜSwiftのSendableはデフォルトにならなかったのか
目次 1. はじめに 2. Copyableがデフォルトな理由 3. Sendableがデフォルトになりそうな理由 4. Sendableがデフォルトにならなかった理由 5. なぜpublic型には暗黙的なSendable準拠がないのか 6. Swiftの方向性 7. まとめ 参考リンク 1. はじめに 本記事は、筆者がSwift EvolutionやSwift Forumsの議論を調べてみて考えたことをまとめたものです。公式見解ではないですし、すべてを調べ尽くしたわけでもありません。「こういう見方もあるんだな」くらいの気持ちで読んでいただければ嬉しいです。 最近のSwif...
Swift Concurrency用語完全ガイド
目次 1. はじめに 2. Actor・Isolation 関連 3. Sendable・型システム関連 4. Task 関連 5. async/await・実行モデル関連 6. 安全性・データ競合関連 7. 混同されやすいペア 8. Swift固有ではない一般的な用語について 9. まとめ 参考リンク 1. はじめに 本記事について 本記事は、筆者が Swift Concurrency の用語を正確に理解するために、Swift Evolution Proposals や The Swift Programming Language(公式ドキュメント)を調査した内容をま...
Codableの延長線で考える、Swift Foundation ModelsによるLLMデコード
目次 はじめに Foundation Modelsの概要 アプリでLLMを使いたいとき LLMCodableの設計思想 API設計とプロトコル構成 実装のポイント まとめ 1. はじめに 本記事では、iOS/macOS 26で導入されたFoundation Modelsフレームワークを使って、Codableライクなインターフェースで曖昧なテキストを構造化データに変換するライブラリ「LLMCodable」について解説します。この記事では、私が開発する際に考えた設計思想やライブラリ自体の使い方を紹介していきます。 まずFoundation Modelsの概要を説明し、次にアプリ...
SwiftUI Environmentをジェネリックに拡張する
目次 はじめに EnvironmentValuesにジェネリックなプロパティを定義できない問題 標準的なEnvironmentの仕組み ジェネリックなEnvironment拡張の実装 アプリ側での使い方 まとめ 1. はじめに こんにちは、個人でiOSアプリ開発をしていて、最近では「読書メモリー」という本の管理アプリをリリースしました。 SwiftUIで画面遷移を実装するとき、NavigationLinkやnavigationDestinationを使う方法があります。しかし、画面遷移を管理する責務を持ったオブジェクトがいて、そのメソッドを呼ぶことで遷移するという形の方がシ...
Claude Code SkillsでSwift Packageのリリース準備を自動化する
目次 目次 1. はじめに 2. 一人で開発するOSSのリリース管理 3. Claude Code SkillsとGitHub Actionsで楽にする 4. リリースフローの設計 5. 実装 5.1 GitHub Actions 5.2 Claude Code Skills 6. まとめ 参考リンク 本記事で紹介したプラグイン 関連記事 著者が開発したアプリ 著者 1. はじめに こんにちは、個人でiOSアプリ開発をしていて、最近では「読書メモリー」という本の管理アプリをリリースしました。 個人でアプリを開発していると、デザインシステム、APIクライアント...
APIクライアントを作って学ぶSwift AsyncStream
目次 はじめに プロトコル設計と要件 AsyncStreamを流す仕組み APIClientプロトコルの実装 まとめ 1. はじめに こんにちは、個人でiOSアプリ開発をしていて、最近では「読書メモリー」という本の管理アプリをリリースしました。 本記事では、APIクライアントの実装を題材に、Swift ConcurrencyのAsyncStreamの実践的な使い方を解説します。 APIクライアントを実装する際、個々のリクエストのレスポンスやエラーは簡単に取得できます。しかし、401や503といった特定のHTTPステータスを、どのエンドポイントを呼んでいたかに関わらずグローバ...
ViewModelを使わない、SwiftUIらしいiOSアーキテクチャ
目次 はじめに ViewModelの問題点 クリーンアーキテクチャをSwiftUIに合わせて活用する Environmentによる柔軟な状態共有 提唱するアーキテクチャ:SPMマルチモジュール構成 StateパッケージとViewModelの違い AIエージェントとの協働を前提とした設計 まとめ 1. はじめに こんにちは、個人でiOSアプリ開発をしていて、最近では「読書メモリー」という本の管理アプリをリリースしました。 本記事では、ViewModelを使わず、クリーンアーキテクチャに厳密に従わない、柔軟で軽量なiOSアーキテクチャを提唱します。 従来のMVVMやクリーンアー...
【Go×GithubActions】タニタの体重計で計った体重を毎日指定時間にSlack通知する
この記事では、タニタのHealth Planet APIを使用して体重情報を取得し、そのデータをSlackで毎日指定した時間に通知する方法をご紹介します。Go言語での実装からDockerコンテナ化、そしてGitHub Actionsを使ったスケジュール実行までを解説します。 完成形としては以下のような感じです。 必要な工程は以下のようになります。 タニタのHealth Planet APIを新規登録する Health Planet APIのアクセストークンをブラウザから入手する タニタのAPIから身体情報を取得 データを整形してSlackWebhookを使って通知 GoのコードをDo...
[Swift] Firestoreのバッチ処理でドキュメントを一気に更新
こんにちは!本日は、私が先日開発したアプリ「ごほうび習慣プラス」の開発時に必要になったFirestoreのバッチ処理による一斉更新について解説します。 このアプリは、日々の習慣を報酬と結びつけることで、ユーザーがモチベーションを持続できるように設計されています。アプリはこちらのリンクからご覧いただけます https://apps.apple.com/jp/app/id6474091359 「ごほうび習慣プラス」では習慣化をゲーム化するというコンセプトを持っています。このアプローチにより、習慣を守ることが、単なる義務ではなく、楽しい挑戦となります。 このアプリ内のデータはFirebase ...
[Swift]毎週指定の時間に通知する
この記事では、Swiftで開発されたアプリ「ごほうび習慣プラス」の核となるコンポーネントの一つである通知サービスについて解説します。このアプリは、ゲーミフィケーションを活用した習慣化アプリで、日々の習慣を楽しく維持するための支援をしています。 https://apps.apple.com/jp/app/ごほうび習慣プラス-ゲーミフィケーション習慣化アプリ/id6474091359 「ごほうび習慣プラス」における通知機能では、ユーザーが習慣化タスクの実施を支援するために毎週特定の時間に通知を受け取る機能を提供しています。この機能は、習慣化を促進する上で極めて重要な役割を果たしており、ユーザ...
IsarとriverpodでローカルDB管理
こんにちは、Flutterで個人アプリ開発をしている大学生です。数週間ほど前に新しいアプリをリリースしました。どんなアプリかというと、 自己管理ができなくて、だらけてしまう。。。 という人のためのゲーミフィケーション習慣化アプリです! 「勉強30分50円」のようにやるべきことに報酬を設定して、自己管理をする 「旅行40000円」のように、"ごほうび"を設定してお金が溜まったら換金できる というコア機能を持っています。つまり・・・ RPGゲームのレベル上げをするような習慣化 を実現できます!!ぜひダウンロードしてみてください! https://apps.apple.co...