Buttonからジェネリック構造体を学ぶ

Github CopilotにButtonを作って欲しいと依頼したら下記のコードが生成された。

Button {
    isTap = true
} label: {
    Label("Button")
}
.buttonStyle(.plain)
.cornerRadius(8)
.padding(.horizontal, 8)

おおよそ上から何をしているのかは直感的にわかる。

  • ボタンを宣言している
  • タップ時の動作を定義している
  • ボタンに表示する文字列を定義している
  • 見た目を調整している

しかし、なぜこのような書き方になるのか、構文の意味や裏側の仕組みがイメージできなかった。 そこで、Buttonの定義やSwiftの言語仕様を調べてみた。

本稿では、主に以下の点を整理している。

  • 波括弧{}は何を意味しているのか
  • label: は何を意味しているのか
  • @escaping、@MainActor、Trailing closure とは何か

ちなみに初学者がChatGPTに聞きながら公式ドキュメントなどを参照して理解したことをまとめているので、正しい定義ではないかも。

続きを読む

Xcode - SwiftLintとSwiftFormatの導入手順

はじめに

本稿ではXcodeでSwiftを開発する際に利用するLinterFormatter(SwiftLint, SwiftFormat)を導入する手順を記載します。
最終的なゴールは以下の通りです。

  • Linterのルール則り、Xcode上で警告が発生すること
  • アプリビルド時に自動整形されること

SwiftLintSwiftFormatの導入方法はbrewを利用する他、さまざまな導入方法がありますが、本稿ではSPM(Swift Package Manager)を利用します。
開発端末のローカルに設定する手順では、初回の導入手順が開発者毎に必要となります。
SPMを利用してプロジェクトに追加すると、コードをcloneした直後から同じ環境となる、バージョン固定が容易などのメリットがあります。
反面、初回のビルドが少し遅くなる等のデメリットもありますが、チーム開発における共有性の高さを優先する場合にはSPMを選択すると良いと思います。

公式ドキュメント

環境

% xcodebuild -version
Xcode 16.4
Build version 16F6

% swift --version
swift-driver version: 1.120.5 Apple Swift version 6.1.2 (swiftlang-6.1.2.1.2 clang-1700.0.13.5)
Target: arm64-apple-macosx15.0
続きを読む

ソフトウェアエンジニアにおすすめの書籍

今までお世話になった書籍とこれから読みたい書籍です。

コードと仕事に慣れ始めた1,2年から中堅として活躍する10年目ぐらいまでの間に読むとよさそうな本です。
古い本もあるため、現代のパラダイムとすり合わせて理解する必要がある本もあります。
Agile、Scrumみたいな文脈と特定のライブラリ・言語・環境に依存する本は除外します。フレームワークとして採用されない現場も多いと思うので。

また、個人的なおすすめには ★ を付けています。

続きを読む