{"id":"tag:speakerdeck.com,2005:\/treastrain","link":[{"@attributes":{"rel":"alternate","type":"text\/html","href":"https:\/\/speakerdeck.com"}},{"@attributes":{"rel":"self","type":"application\/atom+xml","href":"https:\/\/speakerdeck.com\/treastrain.atom"}}],"entry":[{"id":"tag:speakerdeck.com,2005:Talk\/1508161","published":"2026-02-22T04:06:17-05:00","updated":"2026-02-22T04:09:19-05:00","link":{"@attributes":{"rel":"alternate","type":"text\/html","href":"https:\/\/speakerdeck.com\/treastrain\/how-i-became-an-ios-app-developer-in-hokkaido-and-aomori"}},"title":"\u5317\u6d77\u9053\u3068\u9752\u68ee\u3067 iOS \u30a2\u30d7\u30ea\u30c7\u30d9\u30ed\u30c3\u30d1\u306b\u306a\u3063\u305f","content":"\u5317\u6d77\u9053\u3068\u9752\u68ee\u3067 iOS \u30a2\u30d7\u30ea\u30c7\u30d9\u30ed\u30c3\u30d1\u306b\u306a\u3063\u305f\n\nHakodate.swift #1\n2026\/02\/22 LT\uff085\u5206\uff09\nhttps:\/\/japan-region-swift.connpass.com\/event\/371217","author":{"name":"treastrain \/ Tanaka Ryoga (@treastrain)"}},{"id":"tag:speakerdeck.com,2005:Talk\/1440610","published":"2025-09-19T22:51:16-04:00","updated":"2025-09-22T08:24:01-04:00","link":{"@attributes":{"rel":"alternate","type":"text\/html","href":"https:\/\/speakerdeck.com\/treastrain\/the-time-to-adopt-formatstyle-is-now"}},"title":"\u305d\u308d\u305d\u308d FormatStyle","content":"\u305d\u308d\u305d\u308d FormatStyle\n\niOSDC Japan 2025\u3000Day 1\n2025\/09\/20 13:00\u301c Track B \u30ec\u30ae\u30e5\u30e9\u30fc\u30c8\u30fc\u30af\uff0840\u5206\uff09\nhttps:\/\/fortee.jp\/iosdc-japan-2025\/proposal\/0ddc6419-b3e5-4c88-889e-0ddfabc24be3","author":{"name":"treastrain \/ Tanaka Ryoga (@treastrain)"}},{"id":"tag:speakerdeck.com,2005:Talk\/1230604","published":"2024-08-23T23:21:57-04:00","updated":"2024-08-23T23:31:27-04:00","link":{"@attributes":{"rel":"alternate","type":"text\/html","href":"https:\/\/speakerdeck.com\/treastrain\/mastering-asyncsequence"}},"title":"Mastering AsyncSequence - \u4f7f\u3046\u30fb\u4f5c\u308b\u30fb\u4ed6\u306e\u30c7\u30b6\u30a4\u30f3\u30d1\u30bf\u30fc\u30f3\uff08\u30af\u30ed\u30fc\u30b8\u30e3\u3001Delegate \u306a\u3069\uff09\u304b\u3089\u79fb\u884c\u3059\u308b","content":"Mastering AsyncSequence - \u4f7f\u3046\u30fb\u4f5c\u308b\u30fb\u4ed6\u306e\u30c7\u30b6\u30a4\u30f3\u30d1\u30bf\u30fc\u30f3\uff08\u30af\u30ed\u30fc\u30b8\u30e3\u3001Delegate \u306a\u3069\uff09\u304b\u3089\u79fb\u884c\u3059\u308b\n\niOSDC Japan 2024\u3000\u2028Day 2\n2024\/08\/24 13:00\u301c Track A \u30ec\u30ae\u30e5\u30e9\u30fc\u30c8\u30fc\u30af\uff0840\u5206\uff09\nhttps:\/\/fortee.jp\/iosdc-japan-2024\/proposal\/c0c62dc1-992c-4d9f-8812-02994593d96c ","author":{"name":"treastrain \/ Tanaka Ryoga (@treastrain)"}},{"id":"tag:speakerdeck.com,2005:Talk\/1118389","published":"2023-12-08T08:33:40-05:00","updated":"2023-12-09T00:10:36-05:00","link":{"@attributes":{"rel":"alternate","type":"text\/html","href":"https:\/\/speakerdeck.com\/treastrain\/firebase-apple-sdk-annual-digest-2023"}},"title":"Firebase Apple SDK \u5e74\u9593\u30c0\u30a4\u30b8\u30a7\u30b9\u30c8: 2023\u5e74 \/ Firebase Apple SDK Annual Digest: 2023","content":"Firebase Apple SDK \u5e74\u9593\u30c0\u30a4\u30b8\u30a7\u30b9\u30c8: 2023\u5e74 \/ Firebase Apple SDK Annual Digest: 2023\n\nGDG DevFest Tokyo 2023\n2023\/12\/09 10:00 \u301c\nGoogle Tokyo\u30aa\u30d5\u30a3\u30b9 - \u6771\u4eac\u90fd\u6e2f\u533a\u516d\u672c\u67286-11-10 \u516d\u672c\u6728\u30d2\u30eb\u30ba\u68ee\u30bf\u30ef\u30fc27F\nhttps:\/\/gdg-tokyo.connpass.com\/event\/301690\/","author":{"name":"treastrain \/ Tanaka Ryoga (@treastrain)"}},{"id":"tag:speakerdeck.com,2005:Talk\/1067035","published":"2023-08-24T05:50:12-04:00","updated":"2023-08-24T05:53:38-04:00","link":{"@attributes":{"rel":"alternate","type":"text\/html","href":"https:\/\/speakerdeck.com\/treastrain\/subscribe-closure-when-calling-an-async-method-there-d11f9679-7abe-4c29-b837-eca98ef9a985"}},"title":"Combine\u30fbsink\uff08RxSwift\u30fbsubscribe\uff09\u3066\u3099\u306f Task \u3092\u4f5c\u3089\u306a\u3044\u3088\u3046\u306b\u3057\u3066 async \u306a\u30e1\u30bd\u30c3\u30c8\u3099\u3092\u547c\u3075\u3099 \/ Do not create a Task inside a Combine\/sink (RxSwift\/subscribe) closure when calling an async method there","content":"Combine\u30fbsink\uff08RxSwift\u30fbsubscribe\uff09\u3066\u3099\u306f Task \u3092\u4f5c\u3089\u306a\u3044\u3088\u3046\u306b\u3057\u3066 async \u306a\u30e1\u30bd\u30c3\u30c8\u3099\u3092\u547c\u3075\u3099 \/ Do not create a Task inside a Combine\/sink (RxSwift\/subscribe) closure when calling an async method there\n\n\u516c\u958b SwiftWednesday\u3010iOSDC Japan 2023 \u76f4\u524d\u3011\n2023\/08\/24 19:30\u301c\nhttps:\/\/dena.connpass.com\/event\/291447\/\n\n\u767b\u58c7\u30ce\u30fc\u30c8\u306f\u3053\u3061\u3089: \u6e96\u5099\u4e2d","author":{"name":"treastrain \/ Tanaka Ryoga (@treastrain)"}},{"id":"tag:speakerdeck.com,2005:Talk\/1029434","published":"2023-05-22T01:45:48-04:00","updated":"2023-05-22T06:21:04-04:00","link":{"@attributes":{"rel":"alternate","type":"text\/html","href":"https:\/\/speakerdeck.com\/treastrain\/polishing-your-swift-code-with-me"}},"title":"\u305d\u306e Swift \u30b3\u30fc\u30c9\u3001\u2028\u3053\u3046\u66f8\u304d\u63db\u3048\u3066\u307f\u306a\u3044\u304b \/ Polishing your Swift code with me!","content":"\u305d\u306e Swift \u30b3\u30fc\u30c9\u3001\u2028\u3053\u3046\u66f8\u304d\u63db\u3048\u3066\u307f\u306a\u3044\u304b \/ Polishing your Swift code with me!\n\nDeNA\u00d7STORES\u00d7\u30e9\u30af\u30de iOS Meetup!!\n2023\/05\/22 19:00\u301c\nhttps:\/\/connpass.com\/event\/283989\/\n\n\u767b\u58c7\u30ce\u30fc\u30c8\u306f\u3053\u3061\u3089: https:\/\/zenn.dev\/treastrain\/articles\/65f6cae11e0dc7","author":{"name":"treastrain \/ Tanaka Ryoga (@treastrain)"}},{"id":"tag:speakerdeck.com,2005:Talk\/995222","published":"2023-02-21T00:20:06-05:00","updated":"2023-02-21T04:49:05-05:00","link":{"@attributes":{"rel":"alternate","type":"text\/html","href":"https:\/\/speakerdeck.com\/treastrain\/how-to-produce-a-compile-error-when-writing-an-existential-type-without-the-any-keyword"}},"title":"\u5b58\u5728\u578b\u306b `any` \u3092\u4ed8\u3051\u3066\u3044\u306a\u3044\u3068\u304d\u306b\u30b3\u30f3\u30d1\u30a4\u30eb\u30a8\u30e9\u30fc\u306b\u3059\u308b \/ How to produce a compile error when writing an existential type without the `any` keyword","content":"\u5b58\u5728\u578b\u306b `any` \u3092\u4ed8\u3051\u3066\u3044\u306a\u3044\u3068\u304d\u306b\u30b3\u30f3\u30d1\u30a4\u30eb\u30a8\u30e9\u30fc\u306b\u3059\u308b \/ How to produce a compile error when writing an existential type without the `any` keyword\n\npotatotips #81 iOS\/Android\u958b\u767aTips\u5171\u6709\u4f1a\n2023\/02\/21 19:00\u301c\nhttps:\/\/potatotips.connpass.com\/event\/272353\/\n\n\u767b\u58c7\u30ce\u30fc\u30c8\u306f\u3053\u3061\u3089: https:\/\/zenn.dev\/treastrain\/articles\/555d4a2fc1b40b","author":{"name":"treastrain \/ Tanaka Ryoga (@treastrain)"}},{"id":"tag:speakerdeck.com,2005:Talk\/943646","published":"2022-10-28T06:58:52-04:00","updated":"2022-11-08T11:52:32-05:00","link":{"@attributes":{"rel":"alternate","type":"text\/html","href":"https:\/\/speakerdeck.com\/treastrain\/migrate-to-bitrise-pipelines-and-save-credits-while-run-builds-and-tests-in-parallel"}},"title":"Bitrise Pipelines \u306b\u79fb\u884c\u3057\u3066\u3001\u30af\u30ec\u30b8\u30c3\u30c8\u3092\u7bc0\u7d04\u3057\u306a\u304c\u3089\u4e26\u5217\u3067\u30d3\u30eb\u30c9\u30fb\u30c6\u30b9\u30c8\u3092\u56de\u3059 \/ Migrate to Bitrise Pipelines and save credits while run builds and tests in parallel","content":"Bitrise Pipelines \u306b\u79fb\u884c\u3057\u3066\u3001\u30af\u30ec\u30b8\u30c3\u30c8\u3092\u7bc0\u7d04\u3057\u306a\u304c\u3089\u4e26\u5217\u3067\u30d3\u30eb\u30c9\u30fb\u30c6\u30b9\u30c8\u3092\u56de\u3059 \/ Migrate to Bitrise Pipelines and save credits while run builds and tests in parallel\n\niOS Test Online\n2022\/10\/28 19:00\u301c 10\u5206\u67a01\nhttps:\/\/testonline.connpass.com\/event\/261910\/\n\n\u767b\u58c7\u30ce\u30fc\u30c8\u306f\u3053\u3061\u3089: https:\/\/zenn.dev\/dena\/articles\/376a722a08394e","author":{"name":"treastrain \/ Tanaka Ryoga (@treastrain)"}},{"id":"tag:speakerdeck.com,2005:Talk\/921222","published":"2022-09-10T23:36:15-04:00","updated":"2023-02-14T10:33:49-05:00","link":{"@attributes":{"rel":"alternate","type":"text\/html","href":"https:\/\/speakerdeck.com\/treastrain\/demystify-core-nfc-a-guide-to-ios-app-dev-using-nfc"}},"title":"\u8a73\u89e3 Core NFC - NFC \u3092\u7528\u3044\u305f iOS App \u958b\u767a\u306e\u3066\u3073\u304d \/ Demystify Core NFC - A guide to iOS App Dev using NFC","content":"\u8a73\u89e3 Core NFC - NFC \u3092\u7528\u3044\u305f iOS App \u958b\u767a\u306e\u3066\u3073\u304d \/ Demystify Core NFC - A guide to iOS App Dev using NFC\n\niOSDC Japan 2022\u3000\u2028Day 1\n2022\/09\/11 14:10\u301c Track B \u30ec\u30ae\u30e5\u30e9\u30fc\u30c8\u30fc\u30af\uff0840\u5206\uff09\nhttps:\/\/fortee.jp\/iosdc-japan-2022\/proposal\/40f51161-9c44-4330-ba92-e9aa407454c3\n\nhttps:\/\/www.youtube.com\/watch?v=RhLszeyR4h0","author":{"name":"treastrain \/ Tanaka Ryoga (@treastrain)"}},{"id":"tag:speakerdeck.com,2005:Talk\/883598","published":"2022-06-17T10:47:48-04:00","updated":"2022-06-17T11:04:34-04:00","link":{"@attributes":{"rel":"alternate","type":"text\/html","href":"https:\/\/speakerdeck.com\/treastrain\/can-we-create-a-profile-page-portfolio-site-in-swift-docc"}},"title":"\u30d7\u30ed\u30d5\u30a3\u30fc\u30eb\u30da\u30fc\u30b8\uff08\u30dd\u30fc\u30c8\u30d5\u30a9\u30ea\u30aa\u30b5\u30a4\u30c8\uff09\u3092\u2028 Swift-DocC \u3067\u4f5c\u308c\u308b\u304b\uff1f \/ Can we create a profile page (portfolio site) in Swift-DocC?","content":"\u30d7\u30ed\u30d5\u30a3\u30fc\u30eb\u30da\u30fc\u30b8\uff08\u30dd\u30fc\u30c8\u30d5\u30a9\u30ea\u30aa\u30b5\u30a4\u30c8\uff09\u3092\u2028 Swift-DocC \u3067\u4f5c\u308c\u308b\u304b\uff1f\n@treastrain\n\nNEW DEBUG!!!! v4.0-fix52 World Wintu Daifugou Conference @ CASPUR 2022\/06\/17 22:00~","author":{"name":"treastrain \/ Tanaka Ryoga (@treastrain)"}},{"id":"tag:speakerdeck.com,2005:Talk\/773758","published":"2021-09-16T10:46:44-04:00","updated":"2023-02-14T10:35:54-05:00","link":{"@attributes":{"rel":"alternate","type":"text\/html","href":"https:\/\/speakerdeck.com\/treastrain\/easily-and-correctly-format-any-information-into-a-string"}},"title":"\u3042\u3089\u3086\u308b\u60c5\u5831\u3092\u2028\u697d\u306b\u6b63\u3057\u304f String \u306b\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\u3059\u308b \u301c\u4ee4\u548c2021\u5e74\u304b\u3089\u8131\u5374\u305b\u3088\u301c \/ Easily and correctly format any information into a String","content":"\u3042\u3089\u3086\u308b\u60c5\u5831\u3092\u2028\u697d\u306b\u6b63\u3057\u304f String \u306b\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\u3059\u308b \u301c\u4ee4\u548c2021\u5e74\u304b\u3089\u8131\u5374\u305b\u3088\u301c \/ Easily and correctly format any information into a String\n\niOSDC Japan 2021\u3000\u2028Day 2\n2021\/09\/19 11:30\u301c Track D \u30ec\u30ae\u30e5\u30e9\u30fc\u30c8\u30fc\u30af\uff0840\u5206\uff09\nhttps:\/\/fortee.jp\/iosdc-japan-2021\/proposal\/fa01a205-29bd-413d-8ba8-257555d4c7d0\n\nhttps:\/\/www.youtube.com\/watch?v=otyiNlEAeRI","author":{"name":"treastrain \/ Tanaka Ryoga (@treastrain)"}},{"id":"tag:speakerdeck.com,2005:Talk\/716584","published":"2021-03-20T04:37:43-04:00","updated":"2021-03-20T08:51:05-04:00","link":{"@attributes":{"rel":"alternate","type":"text\/html","href":"https:\/\/speakerdeck.com\/treastrain\/the-app-build-for-ios-failed-that-using-kotlin-multiplatform-mobile-kmm-on-an-apple-m1-mac"}},"title":"Kotlin Multiplatform Mobile (KMM) \u3092\u4f7f\u3063\u305f App \u3092 Apple M1 Mac \u3067\u958b\u767a\u3057\u3088\u3046\u3068\u3057\u305f\u3051\u3069 iOS App \u5411\u3051\u30d3\u30eb\u30c9\u3067\u30b3\u30b1\u305f \/ The app build (for iOS) failed that using Kotlin Multiplatform Mobile (KMM) on an Apple M1 Mac","content":"Kotlin Multiplatform Mobile (KMM) \u3092\u4f7f\u3063\u305f App \u3092 Apple M1 Mac \u3067\u958b\u767a\u3057\u3088\u3046\u3068\u3057\u305f\u3051\u3069 iOS App \u5411\u3051\u30d3\u30eb\u30c9\u3067\u30b3\u30b1\u305f\n@treastrain\n\nNEW DEBUG!! #3.0 ~\u30c6\u30b9\u30c8\u304c\u901a\u3089\u306a\u3044\u306a\u3089\u6d88\u305b\u3070\u3044\u3044\u3058\u3083\u306a\u3044~ @ CASPUR 2021\/03\/20 22:00~","author":{"name":"treastrain \/ Tanaka Ryoga (@treastrain)"}},{"id":"tag:speakerdeck.com,2005:Talk\/656377","published":"2020-08-01T10:23:23-04:00","updated":"2020-08-01T13:21:32-04:00","link":{"@attributes":{"rel":"alternate","type":"text\/html","href":"https:\/\/speakerdeck.com\/treastrain\/japan-nfc-readers-ui-design"}},"title":"Japan NFC Reader \u3067\u306e UI \u30c7\u30b6\u30a4\u30f3 \/ Japan NFC Reader's UI design","content":"Japan NFC Reader \u3067\u306e UI \u30c7\u30b6\u30a4\u30f3\n@treastrain  |  @JapanNFCReader\n\nNEW DEBUG!! #2.0 ~\u9b54\u738b\u3092\u5012\u3059\u305f\u3081\u306b\u7570\u4e16\u754c\u8ee2\u751f\u3057\u307e\u3057\u305f\u304c\u30d0\u30b0\u304c\u767a\u751f\u3057\u305f\u306e\u3067\u4fee\u6b63\u3057\u307e\u3059~ @ CASPUR 2020\/08\/01 22:00~","author":{"name":"treastrain \/ Tanaka Ryoga (@treastrain)"}},{"id":"tag:speakerdeck.com,2005:Talk\/650851","published":"2020-07-08T13:34:28-04:00","updated":"2020-07-09T06:30:36-04:00","link":{"@attributes":{"rel":"alternate","type":"text\/html","href":"https:\/\/speakerdeck.com\/treastrain\/whats-new-in-core-nfc-wwdc20"}},"title":"Core NFC \u306e\u65b0\u6a5f\u80fd \/ What's new in Core NFC (WWDC20)","content":"\u96c6\u307e\u308cSwift\u597d\u304d\uff01Swift\u611b\u597d\u4f1a\u30b9\u30d4\u30f3\u30aa\u30d5 WWDC20\u30bb\u30c3\u30b7\u30e7\u30f3\u8981\u7d04\u4f1a @ Online \u3067\u767a\u8868\u3057\u305f LT\u300cCore NFC \u306e\u65b0\u6a5f\u80fd\u300d\u3067\u3059\u3002","author":{"name":"treastrain \/ Tanaka Ryoga (@treastrain)"}},{"id":"tag:speakerdeck.com,2005:Talk\/639581","published":"2020-05-17T10:38:27-04:00","updated":"2020-05-17T10:48:08-04:00","link":{"@attributes":{"rel":"alternate","type":"text\/html","href":"https:\/\/speakerdeck.com\/treastrain\/supported-to-the-japanese-individual-number-card-in-2-days-released-in-4-days"}},"title":"\u30de\u30a4\u30ca\u30f3\u30d0\u30fc\u30ab\u30fc\u30c9\u306b2\u65e5\u3067\u5bfe\u5fdc\u30014\u65e5\u3067\u30ea\u30ea\u30fc\u30b9\u3057\u305f\u8a18\u9332 \/ Supported to the Japanese Individual Number Card in 2 days, released in 4 days","content":"\u30de\u30a4\u30ca\u30f3\u30d0\u30fc\u30ab\u30fc\u30c9\u306b2\u65e5\u3067\u5bfe\u5fdc\u30014\u65e5\u3067\u30ea\u30ea\u30fc\u30b9\u3057\u305f\u8a18\u9332\n@treastrain  |  @JapanNFCReader\n\nNEW DEBUG!! ~\u8ee2\u8077\u3057\u3066\u30d7\u30ed\u30b0\u30e9\u30de\u30fc\u306b\u306a\u3063\u305f\u3089\u4e00\u5207\u30a8\u30e9\u30fc\u304c\u3067\u306a\u3044\u3093\u3060\u304c~ @ CASPUR 2020\/05\/17 22:00~","author":{"name":"treastrain \/ Tanaka Ryoga (@treastrain)"}}],"title":"treastrain \/ Tanaka Ryoga (@treastrain) on Speaker Deck","updated":"2026-02-22T04:06:17-05:00"}