<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title>Post on Sunabalab Tech Blog</title>
		<link>https://blog.sunabalab.dev/posts/</link>
		<description>Provided by Sunabalab Corp.</description>
		<generator>Hugo -- gohugo.io</generator><language>ja-JP</language><copyright>Sunabalab Corp. · All rights reserved</copyright><lastBuildDate>Mon, 13 Apr 2026 12:00:00 +0900</lastBuildDate>
		<atom:link href="https://blog.sunabalab.dev/posts/index.xml" rel="self" type="application/rss+xml" /><item>
			<title>[iOS] SwiftUI で続けたこと・やめたこと（2026年版）</title>
			<link>https://blog.sunabalab.dev/posts/20260413_swiftui_continue_or_not/</link>
			<pubDate>Mon, 13 Apr 2026 12:00:00 +0900</pubDate>
			<guid>https://blog.sunabalab.dev/posts/20260413_swiftui_continue_or_not/</guid>
			<description>&lt;p&gt;SwiftUI でアプリの開発を続けていく中で、ずっと使い続けているコードパターンやテクニックもあれば逆にやめたものもあります。&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://blog.sunabalab.dev/posts/20260406_swiftui_project/&#34;&gt;前回の記事&lt;/a&gt;
では開発プロセスや設計などのエンジニアリングに焦点を当てましたが、この記事ではコードパターンに焦点をあて、&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;現在どのようなプラクティスやコードパターンを採用しているか&lt;/li&gt;
&lt;li&gt;それはどのような理由・哲学に基づいているか&lt;/li&gt;
&lt;/ul&gt;</description>
			<category>Swift</category>
			<category>SwiftUI</category>
			<category>Knowledge</category>
			<category>Pattern</category>
		</item><item>
			<title>[iOS] UIKit 100% だったプロジェクトの SwiftUI 化の終わりが近い話（参画時の面談から現在、そして）</title>
			<link>https://blog.sunabalab.dev/posts/20260406_swiftui_project/</link>
			<pubDate>Mon, 06 Apr 2026 12:00:00 +0900</pubDate>
			<guid>https://blog.sunabalab.dev/posts/20260406_swiftui_project/</guid>
			<description>&lt;p&gt;どうも、&lt;a href=&#34;https://x.com/tobi462&#34; class=&#34;link-external&#34; rel=&#34;noopener noreferrer&#34;&gt;@tobi462&lt;/a&gt;
 です。&lt;/p&gt;
&lt;p&gt;時は遡って、2024年11月にある iOS プロジェクトに参画しました。&lt;/p&gt;
&lt;p&gt;そのプロジェクトは Objective-C コードこそ無かったものの、UIKit・RxSwift 100%（つまり SwiftUI や Concurrency のコードは 0）で Coordinator パターンが採用された、今から見ると1世代（あるいは見方によっては2世代）前のコードベースでした。&lt;/p&gt;</description>
			<category>SwiftUI</category>
			<category>Knowledge</category>
		</item><item>
			<title>[SwiftUI] プレースホルダ（.redacted）の実装パターン</title>
			<link>https://blog.sunabalab.dev/posts/20251016_swiftui_redacted/</link>
			<pubDate>Thu, 16 Oct 2025 12:00:00 +0900</pubDate>
			<guid>https://blog.sunabalab.dev/posts/20251016_swiftui_redacted/</guid>
			<description>&lt;p&gt;&lt;a href=&#34;https://blog.sunabalab.dev/posts/20251008_swiftui_form_validation/&#34;&gt;前回&lt;/a&gt;
 に続いて、今回も実装パターン的な話になります。&lt;/p&gt;</description>
			<category>SwiftUI</category>
			<category>Pattern</category>
		</item><item>
			<title>フォーム部品のバリデーションの実装パターン</title>
			<link>https://blog.sunabalab.dev/posts/20251008_swiftui_form_validation/</link>
			<pubDate>Wed, 08 Oct 2025 12:00:00 +0900</pubDate>
			<guid>https://blog.sunabalab.dev/posts/20251008_swiftui_form_validation/</guid>
			<description>&lt;p&gt;Single Source of Truth の題材としてログインフォームが例にあげられることがあります。&lt;/p&gt;</description>
			<category>SwiftUI</category>
			<category>Pattern</category>
		</item><item>
			<title>[SwiftUI] ウィンドウ（SafeArea）のサイズを Environment で取得できるようにする</title>
			<link>https://blog.sunabalab.dev/posts/first/</link>
			<pubDate>Tue, 16 Jul 2024 19:00:00 +0900</pubDate>
			<guid>https://blog.sunabalab.dev/posts/first/</guid>
			<description>ウィンドウ（SafeArea）のサイズを Environment で取得できるようにする</description>
			<category>SwiftUI</category>
		</item><item>
			<title>スクロールインジケータを点滅させる（iOS 17、互換実装）</title>
			<link>https://blog.sunabalab.dev/posts/20230901_swiftui_scrollview_indicator_flash/</link>
			<pubDate>Fri, 01 Sep 2023 12:00:00 +0900</pubDate>
			<guid>https://blog.sunabalab.dev/posts/20230901_swiftui_scrollview_indicator_flash/</guid>
			<description>&lt;p&gt;&lt;strong&gt;本記事は beta 版ソフトウェアの内容を含んでいるため、将来的に挙動が変更される可能性があります。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;iOS 17 では ScrollView のインジケータを点滅させる2つの API が追加されました。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://developer.apple.com/documentation/swiftui/view/scrollindicatorsflash%28onappear:%29&#34; class=&#34;link-external&#34; rel=&#34;noopener noreferrer&#34;&gt;scrollIndicatorsFlash(onAppear:)&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://developer.apple.com/documentation/swiftui/view/scrollindicatorsflash%28trigger:%29&#34; class=&#34;link-external&#34; rel=&#34;noopener noreferrer&#34;&gt;scrollIndicatorsFlash(trigger:)&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;</description>
			<category>SwiftUI</category>
			<category>iOS 17</category>
			<category>Introspect</category>
		</item><item>
			<title>iOS 17 の新しい onChange(of:initial:_:) とその互換実装</title>
			<link>https://blog.sunabalab.dev/posts/20230831_swiftui_new_onchange/</link>
			<pubDate>Thu, 31 Aug 2023 10:00:00 +0900</pubDate>
			<guid>https://blog.sunabalab.dev/posts/20230831_swiftui_new_onchange/</guid>
			<description>&lt;p&gt;&lt;strong&gt;本記事は beta 版ソフトウェアの内容を含んでいるため、将来的に挙動が変更される可能性があります。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;iOS 17 では &lt;a href=&#34;https://developer.apple.com/documentation/swiftui/view/onchange%28of:initial:_:%29-4psgg&#34; class=&#34;link-external&#34; rel=&#34;noopener noreferrer&#34;&gt;新しいバージョンの onChange&lt;/a&gt;
 が追加されました。&lt;/p&gt;</description>
			<category>SwiftUI</category>
			<category>iOS 17</category>
		</item><item>
			<title>ForEach のような API を持ったコンテナ View の作り方（型パズルを解く） - Part 2</title>
			<link>https://blog.sunabalab.dev/posts/20230730_swiftui_foreach_type_puzzle2/</link>
			<pubDate>Sun, 30 Jul 2023 16:00:00 +0900</pubDate>
			<guid>https://blog.sunabalab.dev/posts/20230730_swiftui_foreach_type_puzzle2/</guid>
			<description>&lt;p&gt;&lt;a href=&#34;../20230723_swiftui_foreach_type_puzzle/&#34;&gt;前回の記事&lt;/a&gt;
では &lt;code&gt;ForEach&lt;/code&gt; のような API を持つ、何の装飾もされないプレーンな &lt;code&gt;List&lt;/code&gt; である &lt;code&gt;PlainList&lt;/code&gt; を作成しました。&lt;/p&gt;
&lt;p&gt;今回は応用として、連番付きのリストを作成してみます。&lt;/p&gt;</description>
			<category>SwiftUI</category>
		</item><item>
			<title>ForEach のような API を持ったコンテナ View の作り方（型パズルを解く）</title>
			<link>https://blog.sunabalab.dev/posts/20230723_swiftui_foreach_type_puzzle/</link>
			<pubDate>Sun, 23 Jul 2023 20:00:00 +0900</pubDate>
			<guid>https://blog.sunabalab.dev/posts/20230723_swiftui_foreach_type_puzzle/</guid>
			<description>&lt;p&gt;SwiftUI において繰り返しを表現する &lt;code&gt;ForEach&lt;/code&gt; では、主に2つの主要な API の利用方法があります。&lt;/p&gt;</description>
			<category>SwiftUI</category>
		</item><item>
			<title>ナビゲーションバーの背景色・文字色を変更する</title>
			<link>https://blog.sunabalab.dev/posts/20230718_swiftui_navigationbar_color/</link>
			<pubDate>Tue, 18 Jul 2023 02:00:00 +0900</pubDate>
			<guid>https://blog.sunabalab.dev/posts/20230718_swiftui_navigationbar_color/</guid>
			<description>&lt;p&gt;SwiftUI では &lt;code&gt;toolbarBackground&lt;/code&gt; を使用してナビゲーションバーの背景色をカスタマイズすることができますが、この API は iOS 16&#43; からしか利用できず、かつ文字色を自由に変更する API は iOS 17 時点でも提供されていません。&lt;/p&gt;
&lt;p&gt;この記事では &lt;a href=&#34;https://github.com/siteline/SwiftUI-Introspect&#34; class=&#34;link-external&#34; rel=&#34;noopener noreferrer&#34;&gt;SwiftUI-Introspect&lt;/a&gt;
 を利用して、裏にある UINavigationController にアクセスし、ナビゲーションバーの背景色・文字色を変更する方法について紹介します。&lt;/p&gt;</description>
			<category>SwiftUI</category>
			<category>Introspect</category>
		</item><item>
			<title>padding に負の値（マイナス値）を指定すると便利な例</title>
			<link>https://blog.sunabalab.dev/posts/20230716_swiftui_padding_minus/</link>
			<pubDate>Sun, 16 Jul 2023 19:00:00 +0900</pubDate>
			<guid>https://blog.sunabalab.dev/posts/20230716_swiftui_padding_minus/</guid>
			<description>&lt;p&gt;SwiftUI で余白を設定するためには &lt;a href=&#34;https://developer.apple.com/documentation/swiftui/view/padding%28_:_:%29&#34; class=&#34;link-external&#34; rel=&#34;noopener noreferrer&#34;&gt;padding&lt;/a&gt;
 を使用しますが、正の値だけでなく負の値を指定することもできます。&lt;/p&gt;</description>
			<category>SwiftUI</category>
		</item>
	</channel>
</rss>
