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

swift_and_oss

 swift_and_oss

3925ee6eaa41031bac799de0f4f528ec?s=128

to4iki

May 15, 2016
Tweet

Transcript

  1. SwiftͱOSSͷţţŸ 2015/12/15 takezawa toshiki

  2. ࠓ೔ͷ͸݁ߏ͍͍ ࿩Ͱ͢Α!ͨ͘͞Μ ίϐϖͨ͠ͷͰ!

  3. None
  4. ૣޱͰ͍͖·͢

  5. ࿩͞ͳ͍͜ͱ

  6. iOS։ൃʹ͍ͭͯ Swiftͷࡉ͔ͳจ๏

  7. ΞδΣϯμ 1. ࣗݾ঺հ 2. Swiftͱ͸ 3. OSSʹؔͯ͠

  8. ࣗݾ঺հ

  9. ࣗݾ঺հ • takezawa toshiki(@to4iki) • 2012/04 • ࠷ۙײಈͨ͠ࣄ: ʮئ͑͹׎͏ʯ https://www.youtube.com/watch?

    v=gBumdOWWMhY&feature=youtu.be&list=PLLqrmrgBdnYlYKhfyEL6wgCc3T5qn1RsY
  10. ৮͖ͬͯͨݴޠͱ͔ٕज़ > Ruby > Swift > JavaScript > Scala >

    Java > iOS/Android
  11. ࣾ಺Ͱͷ׆ಈ@2015 • ϏΞόογϡ: 4ճ͘Β͍ • Β͘Β͘ձ: 3~5ճ͘Β͍ • શࣾަྲྀձ: 1ճ

    • ͦͷଞ: ෳ਺ճ
  12. ৬຿ܦྺ • EC • ҩྍܥ • ιʔγϟϧήʔϜ • ອըϓϥοτϑΥʔϜ

  13. Swiftͱ͸

  14. about Swift. • Apple੡ • 2010೥ΑΓClang/LLVMͷ࡞ऀChris Lattnerʹ Αͬͯ։ൃελʔτ → 2014೥WWDCͰൃද

    • Latest v2.1.1 • ʮϞμϯɺ҆શɺߴ଎ɺΠϯλϥΫςΟϒʯ
  15. ࠷΋Ѫ͞Ε͍ͯΔݴޠ http://stackoverflow.com/research/developer-survey-2015#tech-super

  16. ͜Ε͔Β࿩͢ࣄ 1. Swift஀ੜͷഎܠ 2. Swiftͷงғؾ 3. Swiftͷ࢒೦/ࠓޙʹظ଴͢Δॴ

  17. 1. Swift஀ੜͷഎܠ

  18. ͱͳΔͱɺobj-cͷ࿩ Λ͠ͳ͍ͱ͍͚ͳ͍

  19. Objective-Cͷྺ࢙ • 1983೥ʹ։ൃ͞Εɺ1985೥ʹAppleࣾΛڈͬͨ SteveJobs ͕NeXT ComputerࣾΛ૑ཱɺͦͷओྗݴޠͱ ͯ͠࠾༻͞ΕΔɻ • 1997೥ɺApple͕ࣾNeXTࣾΛങऩ͠ɺ2001೥ͷMac OS

    XͷCocoaϑϨʔϜϫʔΫͷίΞݴޠͱͯ͠࠾༻͞ΕΔɻ • FoundationΫϥεͷ NS͸OS໊ NeXTSTEP༝དྷ
  20. Objective-Cͷྺ࢙ • CݴޠΛϕʔεʹSmalltalkܕͷΦϒδΣΫτࢦ޲ػೳΛ࣋ͨͤͨ ্Ґޓ׵ݴޠ(ϝοηʔδϯάʹ͸ϒϥέοτ[]Λ࢖͏) • Objective-C͸CΛ֦ுͯ͠ΦϒδΣΫτࢦ޲ΛՄೳʹͨ͠ͱ͍͏ ΑΓ͸ɺCͰॻ͔ΕͨΦϒδΣΫτࢦ޲γεςϜΛ੍ޚ͠΍͍͢ Α͏ʹϚΫϩతͳ֦ுΛࢪͨ͠ݴޠͰ͋Δɻ͕ͨͬͯ͠ɺ ʮbetter CʯʹਐΜͩC++ͱ͸ҟͳΓɺʮC

    & Object Systemʯͱ ͍͏ߟ͑ํͰ͋Γɺ͋Δҙຯ2ͭͷݴޠ͕ࠞࡏͨ͠ঢ়ଶʹ͋Δɻ https://ja.wikipedia.org/wiki/Objective-C
  21. // header file(main.h) @interface MyObject : NSObject { int val;

    id obj; } + (void)classMethod:(id)arg; // class method - (id)method:(NSObject*)arg1 with:(int)arg2; // instance method @end // implement file(main.m) @implementation MyObject + (void)classMethod:(id)arg {} - (id)method:(NSObject*)arg1 with:(int)args2 { return obj; } - (id)init {} - (void)dealloc sample
  22. Objective-Cͷಛ௃ • class΋object΋ͨͩͷߏ଄ମ΁ͷϙΠϯλ • ϝιουίʔϧ΋ͨͩͷCͷؔ਺ݺͼग़͠ʹม׵͞ΕΔ • → ͭ·Γ࣮ଶ͸CɺCͰͰ͖Δ͜ͱ͸શͯग़དྷΔ͸ͣ • objc͕@ͩΒ͚ͳͷ͸Cʹର͢ΔϓϦϓϩηε͔ͩΒ

    • ARC(ࣗಈࢀরΧ΢ϯτ) • ಈత meta programming/؇͍ܕ෇͚ duck typing http://qiita.com/moriturus/items/28191ab2b152a8d11232
  23. ϝιου໊௕͍ http://d.hatena.ne.jp/kaiseh/20080629/1214716829

  24. Objective-C΁ͷෆຬ • RuntimeॲཧʹΑΔΦʔόʔϔου͕େ͖͍ • ίϯύΠϧ࣌ͷ࠷దԽ͕ऑ͍ • ऑ͍ܕ෇͚ʹΑΔ҆શੑͷ٘ਜ਼ • ݴޠ࢓༷ͷ࣌୅஗Εײ •

    ಠಛͷγϯλοΫε
  25. None
  26. The Swift language is… it also greatly benefited from the

    experiences hard-won by many other languages in the field, drawing ideas from Objective-C, Rust, Haskell, Ruby, Python, C#, CLU, and far too many others to list. http://nondot.org/sabre/
  27. Swiftͷظ଴͢Δॴ • طଘࢿ࢈ͷObj-Cͱͷ૬ޓޓ׵͕͋Δ • ҆શ͔ͭίϯύΠϧ࣌ͷ࠷దԽ͕Մೳ • Xcode(IDE)ͱͷ࿈ܞ • ֶश͕༰қ

  28. ֶश͕༰қ • Xcode෇ଐͷplayground͕ศར • ++REPL • document with tutorial •

    Ұ୴௕͍REPLΈ͍ͨͳΠϝʔδͰ
  29. ڭҭػؔ • ߨٛʹSwiftΛऔΓೖΕ͍ͯΔେֶ΋ http://www.apple.com/jp/swift/

  30. 2. Swiftͷงғؾ

  31. Swiftͷಛ௃ • ϞμϯͳγϯλοΫε • ڧ͍ܕ෇͚ → ҆શ/ܕਪ࿦ • ߴ଎(LLVMʹΑΔoptimize) •

    functional programming
  32. Swiftͷಛ௃ • ύοέʔδ؅ཧγεςϜ cocoapods/carthage • Objective-Cͱͷ૬ޓޓ׵ Bridging-Header.h • LazyίϨΫγϣϯ •

    ৄ͍͠ݴޠ࢓༷ͳͲ͸: - https://github.com/hatena/Hatena-Textbook/blob/master/swift-programming-language.md
  33. sample final class MyObject: NSObject { let val: Int init(val:

    Int) { self.val = val } func method() {} static func classMethod() {} } let obj = MyObject(val: 1) obj.method() MyObject.classMethod()
  34. ݸਓతʹ͸ɺͱͯ΋ ૉ௚Ͱบ͕ͳ͍ݴޠ ͩͱײͨ͡

  35. Ϟνϕʔγϣϯ

  36. ؔ਺ܕͷτϨϯυ • ݴޠτϨϯυͷҠΓมΘΓ • Scala, Elixir, Clojure, Rust.. • immutableͳσʔλܕ

    • ڧ͍ܕ෇͚ • => ؔ਺ܕͷΞϓϩʔν
  37. ؔ਺ܕͷτϨϯυ • ৽͍͠ݴޠʹ͸ؔ਺ܕͷΤοηϯεؚ͕·Ε͍ͯΔ • Scala, Elixir, Clojure, Rust, Swift.. •

    طଘͷݴޠʹ΋Өڹ • Java8ͷOption/ ES2015(Babel) • ݴޠͷύϥμΠϜ͕มΘΖ͏ͱ͍ͯ͠Δ/τϨϯυ͕Ҡ͍ͬͯΔ • ͦͷลͷٕज़ʹೃછΜͰ͓͘ͱ૯߹తͳֶशίετΛ཈͑Δ͜ͱ͕ग़དྷΔ • ৽͍͠middleware/FWɺreactive΍streamΈ͍ͨͳύϥμΠϜ • ৄ͘͠͸: http://postd.cc/functional-programming-should-be-your-1-priority-for-2015/
  38. Swift͔ΒݟΔؔ਺ܕͷଆ໘Λগ͚ͩ͠ • Swift͸ϚϧνύϥμΠϜݴޠ - FPͷΤοηϯε΋࣋ͬ ͍ͯΔ 1. ม਺͸࠶୅ೖېࢭ 2. ߴ֊ؔ਺

    = ؔ਺͕ୈҰڃΦϒδΣΫτ(ؔ਺Λ஋ͱ͠ ͯѻ͑Δ) 3. (͓·͚)ύλʔϯϚον
  39. immutability let str = "immutable" // letͰෆม(immutable)ͳม਺એݴ // classͷΦϒδΣΫτͷ୅ೖ͸ࢀর౉͠(෭࡞༻͕͋Δ) class

    User { var input = 0 } let a = User() let b = a a.input = 1 // input: 2 b.input = 2 // input: 2 // struct͸஋౉͠(copyΛऔ͍ͬͯΔ) struct User2 { var input = 0 } var c = User2() var d = c c.input = 1 // input: 1 d.input = 2 // input: 2
  40. immutability • ग़དྷΔ͚ͩ࠶୅ೖΛগͳͯ͘͠ϓϩάϥϛϯά͕Մೳ - ඪ४APIͷॆ࣮ // case-1 ෭࡞༻ let ary

    = Array(1...10) var res = 0 for x in ary { if x % 2 == 0 { res += x * 2 } } res // 60 // case-2 Array(1...10) .filter({ x in x % 2 == 0 }) .map({ x in x * 2 }) .reduce(0, combine: { acc, x in acc + x }) // 60
  41. higher-order function // Int -> Stringͳؔ਺Λม਺ʹ୅ೖͰ͖Δ let doubleStr: Int ->

    String = { (i: Int) -> String in "\(i * 2)" } // Ҿ਺ʹؔ਺ΛऔΔࣄ͕ग़དྷΔ func map2<A, B>(xs: [A], f: A -> B) -> [B] { return xs.reduce([]) { (acc: [B], x: A) in acc + [f(x)] } } map2([1,2,3], f: doubleStr) // [2,4,6] map2(Array(1...3)) { $0 * 2 } // [2,4,6] • Ҿ਺ʹؔ਺Λ౉ͯ͠ॲཧΛҕৡ
  42. pattern match // ex1 let HTTP_STATUS = 200 switch HTTP_STATUS

    { case 200...299: "success" default: "failure" } // ex2 enum StringOptional { case None case Some(String) } let opt = StringOptional.Some("something") // Some("something") switch opt { case let .Some(val): val // something case .None: "nothing" } • ύλʔϯϚονͱ͸ɺ͋Δ஋Λͦͷܕͷ࣋ͪ͏Δߏ଄ʹΑͬͯ෦෼త͋Δ ͍͸શମతʹ۩ମԽ͠ɺ಺แ͢Δ஋΁ͷ෼ղΛͨ͠ΓɺҰக۩߹Λ৚݅ ࣜͱͯ͠ར༻͢Δૢ࡞ͷ͜ͱΛࢦ͢
  43. ͜͜·Ͱ͸ɺ͞΄Ͳ ਅ৽͍͠΋ͷ͸ͳ͍

  44. ͔ͬ͜Β͕SwiftΆ ͍ػೳͷ঺հ

  45. SwiftͳΒͰ͸ͷػೳ • optional chaining • extension(protocol extension) • property observer

  46. Optional<A> • ŭſΆ๷ࢭࡦ • ஋͕͋Δ͔(Some<A>)ɺͳ͍(None)͔Λ
 ܕ(จ຺)Ͱදݱ • ϓϩάϥϚґଘͷnullνΣοΫΛഉআɺOptional ͕͋ΔࣄͰΤϥʔॲཧΛڧ੍͢Δ͜ͱ͕ग़དྷΔ

  47. SwiftͷOption? ~ Optional chaining class Pet { let name: String?

    } class User { let pet: Pet? } func findById(id: Int) -> User? { // User or nil } // Optional chaining let name: String? = findById(1)?.pet?.name // -> Some("taro") or nil name! // taro name ?? "noname" // taro • Option<A>Ҏ֎ͷܕʹରͯͦ͠΋ͦ΋null୅ೖ͸ग़དྷͳ͍
  48. SwiftͷOption? let name1: String? = findById(1)?.pet?.name // -> Some("taro") let

    name2: String? = findById(2)?.pet?.name // -> Some("jiro") // if let unwrapVal = Optional.Some(val) {} if let unwrapName1 = name1, let unwrapName2 = name2 { unwrapName1 + " and "+ unwrapName2 // -> taro and jiro } • if let ʹΑΔpattern matchingͰSome஋ΛऔΓग़͢
  49. extension • طଘclassͷ֦ுͳͲ͕༰қ • protocol extensionͰinterfaceʹσϑΥϧτ࣮ ૷ɺมҐࢦఆ͕ग़དྷΔ

  50. extensionͰػೳ֦ு extension String { func potato() -> String { return

    "\(self) Ά͍ͯͱ" } } "৯΂͍ͨ".potato() // ৯΂͍ͨ Ά͍ͯͱ • खܰʹطଘΫϥε΁ͷmethod௥ՃͳͲ͕ग़དྷΔ
  51. protocolͷdefault࣮૷Λॻ͚Δ struct Umaru: PotatoProtocol {} protocol PotatoProtocol { func umaruun()

    } // default࣮૷ΛUmaruܕʹߜ͍ͬͯΔ extension PotatoProtocol where Self: Umaru { func umaruun() { print("͏·ΔʙΜ") } } Umaru().umaruun() // ͏·ΔʙΜ //struct Chibana: PotatoProtocol {} // compile err • interfaceͷσϑΥϧτ࣮૷Λ෇༩Ͱ͖Δ(++ର৅ܕͷ੍໿)
  52. property observer • willSet/didSetͰϓϩύςΟͷ஋ͷมԽͷલޙʹԿΒ ͔ͷॲཧΛߦ͏͜ͱ͕Ͱ͖Δ • ஋͕มߋͨ͠Βʓʓ͢Δͱ͍ͬͨॲཧΛΑΓએݴతʹ هड़ग़དྷΔ => ϦΞΫςΟϒʹ

    • Viewૢ࡞ͷࡍʹॏๅ͢Δ • KotlinͷDelegated Property΋΄΅ಉ͡ػೳͷ͸ͣ
  53. property observer struct Umaru { var cokeCount: Int = 0

    { willSet { // propertyʹ஋Λset͢Δલʹ࣮ߦ͞ΕΔ print("coke͕\(cokeCount)ݸ͔Β\(newValue)ݸʹͳΓ·͢") } didSet { // propertyʹ஋Λsetͨ͠ޙʹ࣮ߦ͞ΕΔ if oldValue != cokeCount { print("coke͕\(cokeCount)ݸʹͳΓ·ͨ͠") } } } } var umr = Umaru() umr.cokeCount = 1 // coke͕0ݸ͔Β1ݸʹͳΓ·͢ // coke͕1ݸʹͳΓ·ͨ͠ • see also: http://www.slideshare.net/hasegawatomoki/swift-45247767
  54. 3.Swiftͷ࢒೦/ ࠓޙʹظ଴͢Δॴ

  55. ࢒೦/ظ଴͢Δॴ • ࣮ߦ଎౓͸଎͍͕ɺɺcompile͸஗͍ • concurrency ฒߦॲཧͷαϙʔτཉ͍͠ • collectionૢ࡞ܥͷAPIΛॆ࣮ͯ͠ཉ͍͠ • do

    ~ try ~ catch ͳ… ͳΜͰݕࠪྫ֎ͳͷ͔ͳ? • ϝϞϦ؅ཧ • etc…
  56. ͜͜Ͱٳܜ

  57. ͜͜·Ͱ10෼Ҏ಺ ͩͬͨΒخ͍͠

  58. None
  59. ಥવͰ͕͢ɺ

  60. ͱͯ΋خ͍͠ χϡʔε͕ ͋Γ·ͨ͠!!

  61. None
  62. Swift is OSS!! @2015/12/3

  63. initial commit

  64. None
  65. OSS(Open Source Software) • source codeΛެ։͢Δࣄ • ϥΠηϯεͷൣғ಺Ͱ୭Ͱ΋ແঈͰࣗ༝ʹ࢖ ༻ɺෳ੡ɺվมɺ࠶഑෍ɺࣗΒ։ൃͨ͠ϓϩ άϥϜ΁ͷ૊ΈࠐΈͳͲΛߦͳ͏͜ͱ͕Ͱ͖

    Δ https://ja.wikipedia.org/wiki/%E3%82%AA%E3%83%BC %E3%83%97%E3%83%B3%E3%82%BD%E3%83%BC%E3%82%B9
  66. SwiftͷOSSԽ • ݩʑ2015 WWDCͰΞφ΢ϯε • OSX + LinuxͰͷಈ࡞αϙʔτɺcore API /

    swift compilerެ։ • Apache License 2.0 • GitHub: https://github.com/apple/swift
  67. গ͠঺հ

  68. Repository • swift: ຊମ • swift-package-manager: ύοέʔδϚωδϟʔ • swift-corelibs-foundation: Foundation/CoreFoundation

    • swift-llbuild: ϏϧυγεςϜ • swift-evolution: ࣍ظversion΁޲͚ͨϩʔυϚοϓͳͲ
  69. Linux porting • Objective-Cʹґଘ͠ͳ͍(❌NS~) • package manager/LLDB debugger/REPL • server-side-swift

    / OSXҎ֎ͷiOS։ൃ΋Ͱ͖Δ͔΋ • Ubuntu 15.10~޲͚ʹެ։ • tarballΛల։ → PATHΛ௨͚ͩ͢Ͱ͙͢࢖͑Δ • ެ։͞Ε͍ͯΔͷ͸ඪ४APIͷΈ http://gihyo.jp/admin/serial/01/ubuntu-recipe/0401
  70. [WIP]swift-package-manager • ༧૝֎! • v3.0͔Βͷར༻Λ໨ඪͱ͍ͯ͠Δ • homebrewͷ࡞ऀMax Howellࢯ(@mxcl)͕։ ൃ͍ͯ͠ΔͷͰظ଴େ

  71. Contributing • Bug Report • Answering Questions → mailing list

    • Incremental Development • Code Template → API Design Guidelines • Code Review • Commit Messages
  72. ཧ૝Ͱ͸? • ͋Δ࣌఺ͰͷSNAPSHOTͱͯ͠Ͱ͸ͳ͘ɺશ ͯެ։͍ͯ͠Δ → AppleͷOSSʹରͯ͠ͷຊ ؾ౓ • ෼͔Γ΍͘͢ஸೡͳίϯτϦϏϡʔτΨΠμ ϯε

    • ϩʔυϚοϓͷఏࣔ
  73. ૣ଎ͷPR

  74. None
  75. Fix Typo!

  76. typoमਖ਼Ͱ΋͙͢ ʹmergeͯ͘͠ΕΔ ͷ͸خ͍͠(^^)

  77. ͦ΋ͦ΋ɺͳͥOSS ʹ͢Δͷ͔ʁ

  78. ར༻ऀࢹ఺ • ϥΠηϯε͕ແྉ • ໰୊ͷൃݟɺղܾΛߦ͍΍͍͢ • ػೳ௥Ճ͕Մೳ • ແอূ/୭ʹ੹೚͕͋Δ͔ •

    શମͷ੔߹ੑ • Document͕ෆ଍͍ͯ͠Δ৔߹͕͋Δ
  79. ఏڙऀࢹ఺ • ίϛϡχςΟ͔Βͷ੒ՌΛऔΓೖΕΒΕΔΑ͏ʹͳΔ • → ։ൃ͕εϐʔυΞοϓ͢Δ • → ߴ඼࣭Խʹͭͳ͕ΔՄೳੑ •

    ։ൃͷܧଓੑ • ΍Γͨ͘ͳ͍ࣄΛ΍ͬͯ͘ΕΔ • ιϑτ΢ΣΞͷࢥ૝ΛकΓଓ͚ͳ͚Ε͹
  80. ར༻ऀ͸ͳͥOSSʹ ࢀՃ͢Δͷ͔ʁ

  81. ͳͥࢀՃ͢΂͖͔ʁ

  82. OSS։ൃʹ ࢀՃ͢΂͖ཧ༝(4ͭ)

  83. ΤϯδχΞͱͯ͠ͷ෢ث ࠓ·Ͱ͸ɺ࢓ࣄ͸ձ͔ࣾΒ༩͑ΒΕΔ΋ͷͰɺ໘ന͍࢓ࣄ͕ ౰ͨΕ͹ϥοΩʔ͚ͩͲͦ͏͡Όͳ͍৔߹΋͋ͬͨΘ͚Ͱ͢ɻ ͱ͜Ζ͕ɺΦʔϓϯιʔεͷ׆ಈͰࣗ෼ͷ໊લ͕දʹग़Ε͹ɺ ࠓ·Ͱͱ͸ҧͬͯʮ෢ثʯΛखʹೖΕΔ͜ͱ͕Ͱ͖Δ > Matz: http://doda.jp/engineer/it/guide/001/02b.html

  84. ΤϯδχΞͱͯ͠ͷ੒௕ • OSSͷυΩϡϝϯτ/ιʔείʔυΛಡΉͷ͸ ษڧʹͳΔ • ࠊΛਾ͑ͯಡΉ͖͔͚ͬʹ΋ͳΔ • PRΛૹΓӳޠͰٞ࿦͢Δ͜ͱ͕وॏͳܦݧͱ ͳΓ͏Δ

  85. OSSΛศརʹ͢Δ͜ͱ͸خ͍͠ • ීஈ࢖͏ϥΠϒϥϦͷόά΍ෆศʹײ͡Δ఺ ͷػೳվળΛ͢Δ͜ͱͰɺΑΓ౎߹Α͘࢖༻ Ͱ͖Δ • ͜Ε͸େ͖͍ϙΠϯτͩͱࢥ͏

  86. ͓ੈ࿩ʹͳͬͯΔOSS΁ͷߩݙཉ • ݴ༿ʹݴ͍දͤͳ͍͕ɺ७ਮʹخ͍͠ • GitHubͷ૲΋ੜ͑Δ

  87. ͱ͸ɺݴ͍ͭͭ΋Կ Λߩݙ͢Ε͹͍͍͔ Θ͔Βͳ͍Α-

  88. OSSͷෑډ͸ࢥͬͨΑΓ௿͍ • ͍͢͝ػೳͳΜͯ௚͙ʹࢥ͍͔ͭͳ͍ • → ࢝Ί͸fix typoͰྑ͍ͱࢥ͏ • → ςετΧόϨοδͷվળ΋

    • → ཁྖΛ௫ΜͩΒissueҰཡ͔Β
  89. OSSͷෑډ͸ࢥͬͨΑΓ௿͍ • ༗໊ͱ͔ɺେ͖͍ϥΠϒϥϦͱ͔ɺ୭͕ͱ͔ ؔ܎ͳ͍ • ΍ͬͯΈΑ͏ͱ͍͏ؾ͕࣋ͪେࣄ! ੎͍େࣄ!

  90. ·ͱΊ

  91. ·ͱΊ • Swift͸ૉ௚ͳݴޠ • Swift͸iOS͚ͩͷ΋ͷͰ͸ͳ͘ɺOSSʹΑΓ ༷ʑͳՄೳੑ͕։͔Εͨ • OSSʹߩݙ͢Δͷ͸ͦΜͳʹෑډ͸ߴ͘ͳ͍ • OSSʹߩݙ͢Δࣄ͸ϝϦοτ͕ͨ͘͞Μ͋Δ

  92. ͝ਗ਼ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠ Let’s enjoy Swift! && OSS