Upgrade to Pro — share decks privately, control downloads, hide ads and more …

100回記念 集まれSwift好き!Swift愛好会 vol.100@Apple

Sponsored · Your Podcast. Everywhere. Effortlessly. Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.

100回記念 集まれSwift好き!Swift愛好会 vol.100@Apple

Avatar for jollyjoester

jollyjoester

August 29, 2026

More Decks by jollyjoester

Other Decks in Programming

Transcript

  1. いまの自己紹介 七島(山根) 偉之 / @jollyjoester Swift愛好会 初代会長(2015–2024)。vol.82 で引退 コンサルタント →

    フリーランス → Repro → メルカリ → Best Beer Japan 転機は日本で iPhone が発売されたこと。アプリが作りたくなって独学し、エンジニアになった いまはクラフトビール業界を盛り上げる仕事をしています Swift愛好会 vol.100 — 第1回を振り返る 3 / 32
  2. 自己紹介 当時の自己紹介文(2015年、原文ママ) 七島 偉之(ななしま ひでゆき)氏 Java, PHPで業務Webシステム開発、フリーのiOS, Androidアプリ開発者を経て、現在は次世代の ユーザー行動分析サービス『Repro』にてアプリ開発者の支援に携わる。 著書:世界一受けたいiPhoneアプリ開発の授業

    コンサルタントからエンジニアに転向して3年。エンジニアとしては駆け出し スタートアップに惹かれて、初めてジョインしたのが Repro 著書はフリーランス時代、iPhone アプリ開発の学校で講師をしていた流れで 当時(2012–13年)は「ボタンを押したら絵が変わる」程度の内容の勉強会が、大いに賑わっていた時代 Swift愛好会 vol.100 — 第1回を振り返る 4 / 32
  3. 2015.11.14 (土) — すべての始まり Swift愛好会 vol.1 【増席】【もくもくドランクワークショップ】集まれSwift好き!Swift愛好会 — connpass のイベントタイトル(原文ママ)。この時点では「第1回」とすら書いていない

    会場:レバレジーズ株式会社(渋谷ヒカ リエ 17F) 参加:21人 / 定員 35(増席済み) 必須環境:Xcode 7 以上 懇親会費 1,000円(食事・お酒込み) ハッシュタグ #__swift__ love-swift.connpass.com/event/21916 タイムテーブル 17:00 17:09 17:10 18:15 20:30 オープニング 乾杯 談義1・談義2(各30分) もくもくドランクワークショップ(2h) 懇親会 5 / 32
  4. 設計意図 なぜ最初に飲むのか 当時の勉強会 真面目に発表 → 懇親会で初めてお酒 → 愛好会 乾杯でお酒 →

    わいわい談義 → そのまま懇親会 発表者の緊張がほぐれる 質問しやすい空気になる 当初は目を丸くしていた参加者も、回を重ねるごとにわくわくした目で カー→ンパ↑ーイ!するように Swift愛好会 vol.100 — 第1回を振り返る 9 / 32
  5. 談義 発表を「談義」と呼んだ 実は自分が、きっちりした内容と発表時間を守るのが苦手だった。 「自由にした方が、いい発表がたくさん生まれるのでは?」 形式自由 スライドあってもなくても、ブログで も、Xcode でコードを見せながらで も、なんでも OK

    時間自由 制限時間なし。 30秒の発表から 1時間20分の大型談 義まで 第1回は無名で談義者が集まらず、自分が2本しゃべった。第2回からは談義者が集まり、今とほぼ変わらない形に。 Swift愛好会 vol.100 — 第1回を振り返る 10 / 32
  6. 時代背景 Swift は生まれて 1年5ヶ月だった 発表 2014.06 WWDC 1.0 2014.09 1.2

    2015.04 2.0 2015.09 2.1 OSS化 3.0 2015.10.21 2015.12.03 2016.09 "Objective-C let / Optional static let 解禁 guard / defer ← 第1回 without the C" generics / closure Set / as! / 複数 if try-catch / 2015.11.14 let protocol extension Xcode 7.1 swift.org / Linux SwiftPM / Evolution Grand Renaming ほぼ全行に diff 第1回は OSS 化の 3週間前、Swift 3 大移行の 10ヶ月前。 Swift愛好会 vol.100 — 第1回を振り返る 11 / 32
  7. 時代背景 期待と不安が同時に盛り上がっていた 期待 Objective-C から移行したい! OSS化でサーバサイドも? 新しい型システム、プロトコル指向 不安 互換性のないバージョンアップが頻発 Xcode

    を上げたらビルドが通らない PromiseKit? Bolts? Result? 何を使えば… ソフトウェア開発者泣かせ = ネタが豊富。 業界の進化に必死についていくだけで鍛えられた、ラッキーな時代。 Swift愛好会 vol.100 — 第1回を振り返る 12 / 32
  8. 談義1 Java と比べてアピールしたのは「ささいな型」の話 Objective-C ではなく Java と比べたのは、そっちの方が似ていると感じたから。 "Objective-C without the

    C" と言われて出てきたのに、触ってみると静的型付けの世界だった。 let 再代入不可を簡単に保 証できる let max = 100 max = 200 // error Swift愛好会 vol.100 — 第1回を振り返る Optional null チェック漏れをコ ンパイル時に防ぐ var name: String? name.count // error if let n = name { … } 暗黙の型変換なし Java では Int / Float が勝手に変換されてバ グった let a: Int = 1 let b: Double = 0.5 a + b // error 14 / 32
  9. 談義1 ① let — 再代入しないことを、手間なく保証できる Java 7(当時の自分の現場) Swift 2.1 int

    max = 100; max = 200; let max = 100 max = 200 // error var count = 0 count += 1 // OK // 通ってしまう final int limit = 100; limit = 200; // error はあった。でもわざわざ書くもので、ローカル変数 に付ける習慣はほぼなかった。 final Swift愛好会 vol.100 — 第1回を振り返る は var と同じ3文字。短い方が安全だから自然と使 う。Xcode も「変更していない var は let にしろ」と 警告してくる。 let 15 / 32
  10. 談義1 ② Optional — null Java 7 チェック漏れを型で止める String name

    = getName(); name.length(); // コンパイルは通る // 実行時に NullPointerException if (name != null) { name.length(); } // 自分で気をつけて書くしかない null が返るかどうかは型に書いていない。Javadoc を読む か、気をつけるしかない。 Swift 2.1 var name: String? = getName() name.count // error if let n = name { n.count // OK } // 忘れるとコンパイルが通らない nil の可能性が型に現れる。チェックを忘れるとコンパイル が通らない。 Java 8(2014.03)で java.util.Optional は入っていた。ただしライブラリのクラスで既存 API は null を返し続けた し、そもそも当時の自分の現場は 7 だった。 Swift愛好会 vol.100 — 第1回を振り返る 16 / 32
  11. 談義1 ③ 暗黙の型変換なし — 「勝手に変換」でバグらない Java 7 Swift 2.1 int

    a = 5, b = 2; double c = a / b; let a = 5, b = 2 let c: Double = a / b // c は 2.5 ではなく 2.0 // int どうしで割ってから昇格 let c2 = Double(a) / Double(b) // 2.5 便利なはずの自動変換が、計算の順番でだまってバグる。実 際にやられた。 Swift愛好会 vol.100 — 第1回を振り返る // error 変換は必ず明示。書く量は増えるが、意図が読める。書く前 に止まる。 17 / 32
  12. 談義1 当時の反応:「コンパイラに怒られすぎる」 Objective-C では適当に書いても何らかの形で動いていた Swift はコンパイル時点で大量に怒られる → 不評・困惑 自分も最初は辛かった。でも怒られるのが癖になって、 気づいたら大好きになっていた。

    — だから談義のタイトルが「俺が Swift を好きな理由」だった その後 Swift の型はもっと高度に進化するが、原点はささいな型の進化 だった。 Swift愛好会 vol.100 — 第1回を振り返る 18 / 32
  13. 談義2 なぜデザインパターンだったのか Swift の性質がまだわからない → Java のパターンを当てはめて言語を理解しようと した 当時はまだ GoF

    が基礎知識として有効だった(言語の性質を使ってオブジェクト指向 をうまくやるため) 第1回:シングルトン、第2回:テンプレートメソッド ※ GoF = Gang of Four。1994年の書籍『デザインパターン』で23個のパターンをまとめた著者4人の通称。 10年後に振り返ってみる: 今の Swift なら、パターンを使わなくても言語機能だけで済むのでは? Swift愛好会 vol.100 — 第1回を振り返る 20 / 32
  14. Singleton Swift 1.0 → 1.2 → 6 Swift 1.0–1.1 Swift

    1.2–2.1(第1回当時) Swift 6 class Config { class var shared: Config { struct Static { static var token: dispatch_once_t = 0 static var inst: Config? } dispatch_once(&Static.token) { Static.inst = Config() } return Static.inst! } } class Config { static let sharedInstance = Config() private init() {} } final class Config: Sendable { static let shared = Config() private init() {} } // lazy & thread-safe を // 言語が保証 actor Cache { static let shared = Cache() private var store: [String: Data] = [:] } // Sendable でないと // コンパイラに怒られる 書き方は文法に吸収された。しかし Swift 6 では「共有可変状態」そのものが怒られる → DI / @Environment へ。 Swift愛好会 vol.100 — 第1回を振り返る 21 / 32
  15. Template Method 参加者の質問で「それ、いらないのでは」と気づいた 継承版(abstract が無い) protocol extension 版(Swift 2.0〜) class

    Report { final func generate() { header(); body(); footer() } func header() { print("==") } func body() { fatalError("must override") } func footer() { print("==") } } protocol Report { func body() } extension Report { func generate() { header(); body(); footer() } func header() { print("==") } func footer() { print("==") } } struct Sales: Report { func body() { print("sales") } } 継承ゼロ、struct でOK。発表者が一番学ぶ。それが愛好会。 Swift愛好会 vol.100 — 第1回を振り返る 22 / 32
  16. GoF × Swift 2026 パターンはどこへ行ったか 分類 文法に吸収された 今でも有効 ただし軽く書ける GoF

    外で主役に パターン Singleton(static let)、Template Method(protocol extension)、Strategy (closure)、Iterator(Sequence)、Null Object(Optional)、Builder(result builder)、Prototype(値型)、State(enum)、Visitor(enum + switch)、 Flyweight(Copy on Write)、Command(closure) Factory、Adapter(extension)、Facade、Composite(SwiftUI View ツリ ー)、Chain of Responsibility(UIResponder)、Decorator(property wrapper)、Proxy(lazy)、Singleton(Sendable なら今も普通に使う) Delegate、Coordinator、MVVM(Model-View-ViewModel)、TCA(The Composable Architecture)、Dependency Injection ※ 完全な一対一対応ではなく、似た役割をゆるくマッピングしたもの。 Swift愛好会 vol.100 — 第1回を振り返る 23 / 32
  17. おまけ 当時は熱かったのに、今は議論に出ない型たち 型 Future / Promise Result / Either 2015

    今 PromiseKit / BrightFutures / Bolts が 5.5 async/await でほぼ消滅 乱立 antitypical/Result がデファクト 5.0 で標準入り → typed throws (6.0) で 出番減 Box<T> 再帰 enum のための回避策 2.0 indirect enum で消滅 T!(IUO) IBOutlet / Obj-C API で頻出 4.2 で Optional の属性に。SwiftUI なら 無縁 dispatch_once_t Singleton の定番 3.0 で Swift から消滅 オレンジ=サードパーティの穴を言語が吸収 / 青=言語側にあったが必要性が消えた Swift愛好会 vol.100 — 第1回を振り返る 24 / 32
  18. この10年・自分 ① もう ◦◦ なしでは書けない 〜2014 人 書いて、動かして、 自分で確認する PHP

    や Objective-C。適当に 書いても何かは動く。間違いは 実行して初めて分かる 2015 コンパイラ 適当に書く → 怒られる → 直す 当初はエラーだらけで困った が、動かす前に正しく書けるあ りがたさにすぐ頼るように 2026 AI 適当に書く → 怒られる/直してもら う 決定論的なコンパイラ vs 非決 定論的な AI という違いはある が ◦◦ は、コンパイラから AI へ。自分くらい軟弱なエンジニアには、変わ らず助かる。 Swift愛好会 vol.100 — 第1回を振り返る 27 / 32
  19. この10年・自分 ② いまの自分は、型をなくした AI 時代になって、役割の境界そのものが動いているから。 2015 2026 これから protocol Engineer

    {} protocol iOSEngineer: Engineer {} protocol Kanpaiyer {} // 型消去された let me: any Engineer = Me() protocol ???: Engineer { // 模索中 } struct Me: iOSEngineer, Kanpaiyer { let language = "Swift" } 型がはっきりしていた。 iOS を Swift で書く人(+かんぱいや ー)。 Swift愛好会 vol.100 — 第1回を振り返る // iOS / フロントエンド / // バックエンド / データ基盤 // Swift / TypeScript / Rust // エンジニア / PdM / PjM / // コーポレート / データ分析 新しい型を探している。 ただし軸は変わらないので、 Engineer は継承したまま。 何者かは実行時までわからない。 でも as? Engineer はいつでも通 る。 28 / 32
  20. この10年・愛好会 ① 1年目から、大盛り上がりだった 12 500 15 回 / 1年目 月1ペース

    人 / 累積参加 1年目 万 円 / 飲酒費 1年目合計 初年度皆勤賞:ichigoro さん / 最長談義 1時間20分:es_kumagai さん・ kishikawa さん Qiita「Swift愛好会の一年を振り返ってみる」(2016.12) 29 / 32
  21. この10年・愛好会 ② いまは、もっと盛り上がっている 2015.11 2016.12 2024.05 2026.08 vol.1 @ レバレジーズ、21人

    1年で12回、累積500人 vol.82「第一部完!パーティー」— jollyjoester & afroscript 引退、共同運営へ vol.100 @ Apple 六本木ヒルズ、メンバー 2,217人 100回続いたのは、続けてくれた運営のみなさんと、 来てくれたみなさんのおかげ。本当にありがとう。 この10年で、自分は型をなくして、新しい型を探すようになった。 愛好会は、21人の飲み会から、なくてはならない場になった。 Swift愛好会 vol.100 — 第1回を振り返る 30 / 32