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

Server Side Swift の個人的な利用シーン

9ebab3d4f66a62a859ad238e7e97597f?s=47 Yuki Takei
February 07, 2018

Server Side Swift の個人的な利用シーン

Vapor Meetup 1st in Tokyo 2018/02/06

9ebab3d4f66a62a859ad238e7e97597f?s=128

Yuki Takei

February 07, 2018
Tweet

Transcript

  1. Server Side Swift ͷݸਓతͳར༻γʔϯ Vapor Meetup 1st in Tokyo 2018/02/06

    Yuki Takei(noppoMan)
  2. ·ͣ͸͡Ίʹ͓͜ͱΘΓ..

  3. ͢Έ·ͤΜʂVaporͷ࿩͠·ͤΜ… ͱ͍͏͔ɺॳ৺ऀͰ͢

  4. ΞδΣϯμ • ࣗݾ঺հ • ͸͡Ίʹ • αʔόʔαΠυSwiftͷར༻γʔϯ ͦͷ1 • αʔόʔαΠυSwiftͷར༻γʔϯ

    ͦͷ2 • ·ͱΊ
  5. ࣗݾ঺հ ໊લ: ෢Ҫ༏ݾ (noppoMan) ॴଐ: ϑϦʔϥϯε, iDEAKITT Twitter: @noppoMan722 GitHub

    noppoMan ओͳ෼໺͸ɺΠϯϑϥɺαʔόʔαΠυ։ൃશൠɺσʔλղੳͰ͢ɻ iOSΞϓϦέʔγϣϯ։ൃ΋΍Γ·͢ɻ ࠓɺFGOʹϋϚͬͯ·͢ʂww
  6. GitHub

  7. @dealforest͞ΜͱWEB+DB PRESS vol.101 Swift 4, Server Side SwiftͷهࣄΛॻ͖·ͨ͠ʂ

  8. αʔόʔαΠυSwiftΛ΍Ζ͏ͱࢥͬͨಈػ

  9. ΦʔσΟΤϯεͷօ͞ΜશһΛ ೲಘͤ͞ΒΕΔΑ͏ͳཧ༝͸ಛʹ͋Γ·ͤΜʢসʣ

  10. • iOSΞϓϦ։ൃ͸Swift͔Βೖͬͨɻͱͯ΋࢖͍΍͍͢ݴޠ ͩͬͨͷͰɺαʔόʔαΠυͰ΋࢖͍͔ͨͬͨ • ௕೥LLͰۤ͠ΜͰ͍ͨͨΊܕ҆શͳݴޠͰ։ൃΛͨ͠ ͔ͬͨɻ • ↑Ͱ೰ΜͰ͍ͨஸ౓͍͍λΠϛϯάͰOSSԽͨ͠ (2015೥ 12݄)

    αʔόʔαΠυSwiftΛ΍Ζ͏ͱࢥͬͨಈػ
  11. ͦͯ͠ɺ2015೥12݄ SSSͰϓϩμΫτΛ࡞ͬͯΈͨ

  12. None
  13. None
  14. ίΞ਺෼SlimaneΛϑΥʔΫ͢Δ͜ͱͰϦΫΤετύʔ ηίϯυ͸ɺGoͷඪ४HTTPαʔόʔΛ྇կͨ͠

  15. ͔͠͠ɺ౰࣌ͷSwiftͰ͸ඇಉظ͸࣌ظঘ ૣɻ։ൃΛஅ೦ ɾARCͱͷ૬ੑͷѱ͞΍ɺGCDͷ୆಄ ɾϝϞϦΦʔφʔγοϓ͕ೖΕ͹ඇಉظपΓͷϝϞϦ؅ཧ͸ָʹͳΔ͔΋

  16. ·ͣ͸ہॴతʹ࢖͍ͬͯ͜͏ (ແཧ΍Γ)

  17. ࣌୅͸Ϋϥ΢υɺBFF (Backend for Frontend) • Ϋϥ΢υͷ୆಄ʹΑΓɺόοΫΤϯυͷ࣮૷޻਺͸େ෯ ࡟ݮ • Ϋϥ΢υαʔϏε΁ͷ஌ࣝͷՁ஋͕ඇৗʹߴ·͍ͬͯΔ •

    SPA, ωΠςΟϒ + APIͱ͍͏ߏ੒͕ଟ͘ͳΓɺSEOΛআ ͘SSRͷػձ͸ݮͬͨ • ٕज़͸దࡐదॴʹͳ͖ͬͯͨ(ΤίγεςϜͷൃలతʹ) • ΑͬͯɺϑϧελοΫϑϨʔϜϫʔΫΛඞͣ͠΋બ୒͢Δ ඞཁ͸ͳ͍࣌୅
  18. ͦΕΒΛ౿·͑ɺόοΫΤϯυͰSwiftΛͲ͏࢖͏͔ʁ (ແཧ΍Γ)

  19. SwiftΛόοΫΤϯυ(Linux)Ͱར༻͢ΔϝϦοτ • ͱ͘ʹؾʹ͠ͳͯ͘΋ߴ଎ʹಈ࡞ • ωΠςΟϒόΠφϦʹͳΔͷͰσϓϩΠ͸༰қ • VMɺGC͕ແ͍ͨΊ͓͡͞Μ͍Βͣ • ڧྗͳ੩తܕ෇͚ͱNull҆શੑͷԸܙͰɺ࣮ߦ࣌Τϥʔ͸ ى͜ΓͮΒ͍

    • ڞ༗ϥΠϒϥϦԽग़དྷΔ • iOSͰ͸ඞਢͷͨΊ৽͍͠ݴޠʹͯ͠͸։ൃऀ͕ଟΊ • UIKIt΍Obcґଘ͕ͳ͍iOSϥΠϒϥϦ͕ར༻Ͱ͖Δ৔߹΋
  20. ͜ΕΒΛ౿·͑ɺࣗࣾαʔϏεͰͷ Swiftͷར༻ྫΛ2ͭ঺հ͠·͢

  21. αʔόʔαΠυSwiftͷར༻γʔϯ ͦͷ1 ϓϩδΣΫτԣஅతͳೝূαʔόʔ

  22. SSSΛ࢖ͬͯͲ͏ʹ͔ϓϩμΫτ࡞Γ͍ͨ…

  23. ͦ͜Ͱ౰࣌ཉ͔ͬͨ͠ɺ ϓϩδΣΫτԣஅతͳೝূαʔόʔΛ࡞Ζ͏ͱߟ͑ͨ

  24. Service A Service B Service C Auth Server (Swift) ɾEmail

    & Password ɾFacebook ɾTwitter ɾGoogle ͜Μͳ΍ͭ
  25. ೝূαʔόʔͳΒػೳ֦ு΋ແ͍͠ɺSSSͰ͍͍ͩΖ͏

  26. ͱ͸͍͑ɺࣗ෼͕Πϯϑϥ݉೚ͳͷͰɺ ுΓ෇͍ͯ؂ࢹͨ͘͠ͳ͍…

  27. SwiftΛόοΫΤϯυ(Linux)Ͱར༻͢ΔϝϦοτ • ͱ͘ʹؾʹ͠ͳͯ͘΋ߴ଎ʹಈ࡞ • ωΠςΟϒόΠφϦʹͳΔͷͰσϓϩΠ͸༰қ • σʔϞϯԽ͢Δ৔߹ɺVMɺGC͕ແ͍ͨΊ͓͡͞Μ͍Βͣ • ڧྗͳ੩తܕ෇͚ͱNull҆શੑͷԸܙͰɺ࣮ߦ࣌Τϥʔ͸ ى͜ΓͮΒ͍

    • ڞ༗ϥΠϒϥϦԽग़དྷΔ • iOSͰ͸ඞਢͷͨΊ৽͍͠ݴޠʹͯ͠͸։ൃऀ͕ଟΊ • UIKIt΍Obcґଘ͕ͳ͍iOSϥΠϒϥϦ͕ར༻Ͱ͖Δ৔߹΋
  28. SwiftΛόοΫΤϯυ(Linux)Ͱར༻͢ΔϝϦοτ • ͱ͘ʹؾʹ͠ͳͯ͘΋ߴ଎ʹಈ࡞ • ωΠςΟϒόΠφϦʹͳΔͷͰσϓϩΠ͸༰қ • σʔϞϯԽ͢Δ৔߹ɺVMɺGC͕ແ͍ͨΊ͓͡͞Μ͍Βͣ • ڧྗͳ੩తܕ෇͚ͱNull҆શੑͷԸܙͰɺ࣮ߦ࣌Τϥʔ͸ ى͜ΓͮΒ͍

    • ڞ༗ϥΠϒϥϦԽग़དྷΔ • iOSͰ͸ඞਢͷͨΊ৽͍͠ݴޠʹͯ͠͸։ൃऀ͕ଟΊ • UIKIt΍Obcґଘ͕ͳ͍iOSϥΠϒϥϦ͕ར༻Ͱ͖Δ৔߹΋ ͜ͷಛੑΛར༻ʂ
  29. Ͳ͏͍͏͜ͱʁ

  30. v v αʔόʔϨεʹSwiftΛ࣮ߦ͢Δ

  31. • ௨ৗLambda͸ɺαϙʔτݴޠҎ֎ར༻Ͱ͖ͳ͍ • αϙʔτݴޠ: Node.js, Python, Java etc.. • ࣮ߦOS:

    Amazon Linux αʔόʔϨεʹSwiftΛ࣮ߦ͢Δʢࠓճ͸Lambdaʣ
  32. • Swift͸Liunx্ͰϏϧυ͢Δ͜ͱͰɺELFʹͳΔ • Amazon Linux͸CentOSͷܑఋͳͷͰɺجຊతʹSwift͸ಈ͘ (Foundationͱ͔͸᠘͋Δ͔΋ʁ) • σϓϩΠ͸ϓϩάϥϜΛLinuxͰϏϧυͯ͠ɺELFΛS3ʹ Ξοϓϩʔυ •

    Lambdaؔ਺಺ͷNode.js΍Python͔ΒSwiftͷELFΛαϒϓ ϩηεͱ࣮ͯ͠ߦ • LambdaʹHTTPͰΞΫηεͰ͖ΔΑ͏ɺAPI-GatewayΛར༻ αʔόʔϨεʹSwiftΛ࣮ߦ͢Δʢࠓճ͸Lambdaʣ
  33. Lambda + API gatewayͰͷSwiftͷ࣮ߦϑϩʔ Node.js 6.1 Runtime

  34. • ͍͍ͪͪSwiftΛLinuxͰϏϧυͯ͠Ξοϓϩʔυͱ͔໘౗ • Lambda+API GatewayͷϓϩΩγઃఆͱ͔͍ͭ΋๨ΕΔ • JSͱSwift;ͨͭͷϓϩάϥϜΛॻ͔ͳ͚Ε͹͍͚ͳ͍ͷ ͕໘౗ • σόοάΊΜͲ͍

    • αʔόʔϨεͬͯɺ௨ৗͷWebΞϓϦέʔγϣϯͷ։ൃϑ ϩʔͱҟͳΔͷ͕ਏ͍ ͱ͸͍͑…
  35. ͦ͜Ͱ࡞ͬͨͷ͕…

  36. None
  37. And

  38. None
  39. • Swift༻ͷαʔόʔϨεϑϨʔϜϫʔΫ݉σϓϩΠπʔϧ • Lambda+API Gateway༻ͷΞϓϦέʔγϣϯΛɺैདྷͷ WebΞϓϦΛॻ͘ཁྖͰ։ൃͰ͖Δ • 1ίϚϯυͰσϓϩΠग़དྷΔ • Express΍Sinatraʹ͍ۙsyntax

    • MacͱXcodeͰ։ൃͰ͖Δ(LLDBͱ͔΋࢖͑Δ) • ϩʔΧϧʹσόοάαʔόʔΛ্ཱͪ͛Δ͜ͱ͕ग़དྷΔ Hexavilleͱ͸
  40. ͜ΜͳίʔυΛ

  41. $ hexaville deploy

  42. 1෼ͰΠϯλʔωοτ͔ΒΞΫηεՄೳͳ WebΞϓϦ͕࡞੒Մೳ

  43. ͜ͷHexavilleΛϕʔεʹɺ ೝূαʔόʔΛ࡞੒͠·ͨ͠

  44. ࣮ࡍʹӡ༻͍ͯ͠Δߏ੒͕ͪ͜Β Proxy Execute Hexaville as CGI Lambda (Node.js 6.1) API

    Gateway DynamoDB ɾEnable TTL ɾEnable Autoscale Other Services Read/Write Temporary Data HTTP/1.1 OAuth
  45. • ݴޠ΍ඪ४ϥΠϒϥϦͦͷ΋ͷ͸LambdaͰ໰୊ͳ͘ಈ࡞ • Lambda, API-Gateway, DynamoDBશ͕ͯϑϧϚωʔδυ ͳͷͰɺ99%ӡ༻Ϩε • σʔϞϯԽ͞Εͳ͍ͷͰɺGCDͰCPUΛޮ཰Α͘࢖͍੾ Εͳ͍ͱ͔ؾʹ͠ͳ͍͍ͯ͘

    • σϝϦοτͱͯ͠ɺαϒϓϩηεੜ੒ͷίετ͕ߴ͖ͭ͘ɺ ؆୯ͳϓϩάϥϜͳΒNode.js͚ͩͷ΄͏͕଎͍ => ͱ͸͍͑ମײͰ஗͍ͱ͸ײͮ͡Β͍ αʔόʔϨεͰSwiftΛӡ༻ͯ͠Έͯ
  46. DynamoDBͰ͋Ε͹ίωΫγϣϯ਺Λʢجຊతʹʣؾʹ͠ͳ͍͍ͯ͘ͷͰɺ ϞόΠϧΤϯδχΞͷਓͰ΋؆୯ʹSwiftΛ࢖ͬͨαʔόʔ։ൃ͕ग़དྷΔ͸ͣʂ

  47. ͜ΕͳΒ͋·Γαʔόʔͷ஌͕ࣝແͯ͘΋ɺ ΍ͬͯΈΑ͏ͱࢥ͑Δʁ

  48. ༨ஊ

  49. If Vapor works as CGI Mode… v v CGI Mode

    +
  50. can work on Lambda and Cloud Function without server management

  51. ଞݴޠͷωΠςΟϒΤΫεςϯγϣϯͱͯ͠ αʔόʔαΠυSwiftͷར༻γʔϯ ͦͷ2

  52. • ओʹVMܥͷݴޠʹඋΘΔػೳͰɺڞ༗ϥΠϒϥϦ (OpenSSLɺZlibͱ͔)Λͦͷݴޠʹ૊ΈࠐΈɺΠϯλʔ ϑΣʔεΛఆٛ͢Δ͜ͱͰڞ༗ϥΠϒϥϦΛͦͷݴޠ͔Β ར༻Ͱ͖Δ΋ͷ • ݴޠͱڞ༗ϥΠϒϥϦͷϒϦοδ͸C/C++Ͱ࡞੒͢Δέʔ ε͕جຊ • ωΠςΟϒόΠϯσΟϯάͱ΋ݴ͑Δ

    ͦ΋ͦ΋ɺωΠςΟϒΤΫεςϯγϣϯͬͯʁ
  53. • ωΠςΟϒόΠφϦʹͳΔͷͰσϓϩΠ͸༰қ • σʔϞϯԽ͢Δ৔߹ɺVMɺGC͕ແ͍ͨΊ͓͡͞Μ͍Βͣ • ݴ͏·Ͱ΋ͳ͘ಈ࡞͸ߴ଎ • ڧྗͳ੩తܕ෇͚ͱNull҆શੑͷԸܙͰɺ࣮ߦ࣌Τϥʔ͸͔ͳ Γى͜ΓͮΒ͍ •

    ڞ༗ϥΠϒϥϦԽग़དྷΔ • UIKit΍Objective-Cʹґଘ͠ͳ͍iOS༻ͷϥΠϒϥϦ͕ར༻Մೳ • iOSͰ͸ඞਢͷͨΊ৽͍͠ݴޠʹͯ͠͸։ൃऀ͕ଟΊ SwiftΛόοΫΤϯυ(Linux)Ͱར༻͢ΔϝϦοτ
  54. ͭ·ΓɺSwiftͰ΋ଞݴޠ༻ͷ ωΠςΟϒΤΫεςϯγϣϯ͕ॻ͚Δʂ

  55. Ͱ͸ɺNode.jsΛ࢖ͬͯSwift੡ͷωΠςΟϒΤΫεςϯ γϣϯΛ࡞ͬͯΈ·͠ΐ͏

  56. None
  57. • Node.jsͷωΠςΟϒΤΫεςϯγϣϯ͸ɺV8ͷؔ਺΍Ϟδϡʔ ϧͱͯ͠ొ࿥͞ΕɺJavaScript͔Βࢀর͢Δ͜ͱ͕ग़དྷΔ • Node.jsͱωΠςΟϒΤΫεςϯγϣϯͷϒϦοδ͸C++Ͱॻ͘ ඞཁ͕͋Δ • node-gypͱ͍͏ωΠςΟϒΞυΦϯͷϏϧυπʔϧʹΑΓΫϩ εϓϥοτϑΥʔϜʹϏϧυ͞ΕΔ •

    ҉߸ԽܥͷϥΠϒϥϦ͸CͷϥΠϒϥϦʹґଘ͢Δ͜ͱ͕ଟ͍ ͨΊɺ͜ͷػೳ͕Α͘࢖ΘΕ͍ͯΔ(bcryptͱ͔) Node.jsʹ͓͚ΔωΠςΟϒΤΫεςϯγϣϯ
  58. Node.jsͷωΠςΟϒΤΫεςϯγϣϯͷίʔυαϯϓϧ

  59. Node.jsͷωΠςΟϒΤΫεςϯγϣϯͷίʔυαϯϓϧ

  60. Node.js͔ΒhelloΛݺͼग़͢

  61. Ͱ͸ɺSwiftΛ࢖ͬͯɺNode.jsͷ ωΠςΟϒΤΫεςϯγϣϯΛ࡞͍͖ͬͯ·͠ΐ͏

  62. SwiftଆͷίʔυΛ͜Μͳײ͡Ͱ༻ҙ

  63. Package.swift

  64. ϑϩʔ લͷϖʔδͷSwiftͷϓϩάϥϜΛ ಈతϥΠϒϥϦͱͯ͠༧ΊϏϧυ 1 Swift Node.js C++

  65. 1 2 Swift Node.js C++ ϑϩʔ લͷϖʔδͷSwiftͷϓϩάϥϜΛ ಈతϥΠϒϥϦͱͯ͠༧ΊϏϧυ ؔ਺γϯϘϧΛऔಘ͢Δ

  66. Swiftͷؔ਺γϯϘϧͷऔಘ $ nm -gU .build/x86_64-apple-macosx10.10/debug/libNativeExtensionInSwift.dylib 0000000000001180 T __T022NativeExtensionInSwiftAAV10printHelloyyF 00000000000010f0 T

    __T022NativeExtensionInSwiftAAV9fibonaccis5Int32VAEF 0000000000001230 T __T022NativeExtensionInSwiftAAVABycfC 0000000000001360 T __T022NativeExtensionInSwiftAAVMa 0000000000003af0 S __T022NativeExtensionInSwiftAAVMn 0000000000004310 S __T022NativeExtensionInSwiftAAVN
  67. 1 2 Swift Node.js C++ ϑϩʔ લͷϖʔδͷSwiftͷϓϩάϥϜΛ ಈతϥΠϒϥϦͱͯ͠༧ΊϏϧυ ؔ਺γϯϘϧΛऔಘ͢Δ

  68. 3 Swift Node.js C++ ϑϩʔ ωΠςΟϒΤΫεςϯγϣϯͷϒϦοδϑΝΠ ϧͰ͋Δswift.ccΛ࡞੒ 1 2 લͷϖʔδͷSwiftͷϓϩάϥϜΛ

    ಈతϥΠϒϥϦͱͯ͠༧ΊϏϧυ ؔ਺γϯϘϧΛऔಘ͢Δ
  69. SwiftͷϓϩάϥϜΛ ಈతɾ੩తϥΠϒϥϦͱͯ͠༧ΊϏϧυ 4 swift.cc಺Ͱɺ1Ͱ࡞੒ͨ͠ ڞ༗ϥΠϒϥϦΛdl_open Swift Node.js C++ ϑϩʔ 3͔Βͷଓ͖

  70. SwiftͷϓϩάϥϜΛ ಈతɾ੩తϥΠϒϥϦͱͯ͠༧ΊϏϧυ 4 swift.cc಺Ͱɺ1Ͱ࡞੒ͨ͠ ڞ༗ϥΠϒϥϦΛdl_open Swift Node.js C++ ϑϩʔ 3͔Βͷଓ͖

    2Ͱऔಘͨ͠γϯϘϧΛdl_symʹ౉͠ɺ 4͔Βؔ਺ϙΠϯλΛऔಘ 5
  71. Swift Node.js C++ ϑϩʔ 3͔Βͷଓ͖ 5ͷؔ਺ϙΠϯλΛNodeͷ಺෦తͳҾ਺ɺ ฦΓ஋ΛฦͤΔΑ͏ʹϥοϓ 6 SwiftͷϓϩάϥϜΛ ಈతɾ੩తϥΠϒϥϦͱͯ͠༧ΊϏϧυ

    4 swift.cc಺Ͱɺ1Ͱ࡞੒ͨ͠ ڞ༗ϥΠϒϥϦΛdl_open 2Ͱऔಘͨ͠γϯϘϧΛdl_symʹ౉͠ɺ 4͔Βؔ਺ϙΠϯλΛऔಘ 5
  72. ϥοϓؔ਺ͷྫ

  73. 7 NODE_SET_METHODͳͲΛ࢖͍ɺ6ͷϥο ϓؔ਺ΛNode.jsͷੈքʹΤΫεϙʔτ Swift Node.js C++ ϑϩʔ 6͔Βͷଓ͖

  74. ΤΫεϙʔτͷ1ྫ

  75. 7 Swift Node.js C++ ϑϩʔ 6͔Βͷଓ͖ NODE_SET_METHODͳͲΛ࢖͍ɺ6ͷϥο ϓؔ਺ΛNode.jsͷੈքʹΤΫεϙʔτ

  76. 7 Swift Node.js C++ npm installͰnode-gypϏϧυΛ࣮ߦ 8 ϑϩʔ 6͔Βͷଓ͖ NODE_SET_METHODͳͲΛ࢖͍ɺ6ͷϥο

    ϓؔ਺ΛNode.jsͷੈքʹΤΫεϙʔτ
  77. 7 Swift Node.js C++ npm installͰnode-gypϏϧυΛ࣮ߦ index.jsͳͲͰɺrequire(‘bindings’)(‘swift’)Λ ͠ɺNODE_SET_METHODͨؔ͠਺ΛݺͿ 8 Last

    ϑϩʔ 6͔Βͷଓ͖ NODE_SET_METHODͳͲΛ࢖͍ɺ6ͷϥο ϓؔ਺ΛNode.jsͷੈքʹΤΫεϙʔτ
  78. Node.js͔Βͷݺͼग़͠ index.js

  79. αϯϓϧ͸͜͜ʹ͋Γ·͢

  80. • dylib΍soͷಡΈࠐΈ͸ॳճͷҰճͷΈͳͷͰɺΦʔόʔ ϔουΛؾʹ͢Δඞཁ͸ͳ͍ • ͜ͷಛੑ͸αʔόʔϨεͰඇৗʹ׆͖Δ => αϒϓϩηεੜ੒ͷίετ͕ແ͘ͳΓSwiftΛར༻͢Δ σϝϦοτ͕ղܾ • Swift͸Cͷܕ΋্ख͘ѻ͑Δ

    => αϯϓϧͰ͸ɺCIntܕΛ࢖͍ͬͯΔ͕ɺSwiftͷ @convention(c)Λར༻͢Ε͹ɺIntܕ΍StringܕΛউखʹ CInt΍CStringͱͯ͠ѻͬͯ͘ΕΔ ωΠςΟϒΤΫεςϯγϣϯ։ൃݴޠͱͯ͠ͷSwift
  81. ࠓճ͸࣮ࡍʹར༻͍ͯ͠ΔNode.jsͷղઆΛ͠·͕ͨ͠…

  82. Python

  83. Ruby Gems

  84. ಉ͡ཁྖͰωΠςΟϒΤΫεςϯγϣϯ͕࡞੒Ͱ͖·͢ʂ (Railsͱ͔DjangoͰ΋Swiftಈ͔ͪ͠Ό͍·͠ΐ͏w)

  85. ͜ΕΛར༻ͨ͠ฐαʔϏε಺Ͱͷ۩ମతͳར༻๏ • TypeScript੡ͷJSON-RPCαʔόʔͷ1Ϟδϡʔϧͱͯ͠ ར༻͍ͯ͠ΔʢωΠςΟϒΤΫεςϯγϣϯʣ • Swiftͷ୲౰͸ɺܗଶૉղੳ݁Ռͷσʔλ੔ܗ • ܗଶૉղੳʹ͸Juman, KNPΛར༻͍ͯ͠Δ

  86. ܗଶૉղੳͷσʔλ੔ܗͱ͸ɺ νϟοτͷςΩετ಺͔Β࣌૬ϫʔυΛநग़͠ɺ Datetimeͷൣғʹม׵͢Δ͜ͱ

  87. Q: དྷिͷՐ༵೔ͷޕޙͷ༧ఆ͸ʁ

  88. A: 2018-02-13 12:00:00 ʙ 2018-02-13 23:59:59 Q: དྷिͷՐ༵೔ͷޕޙͷ༧ఆ͸ʁ

  89. JumanͱKNPͷόΠϯσΟϯά͕͋ΔPythonͰ࡞Γ࢝Ί͕ͨɺ1िؒͰஅ೦ɻ 1िؒલͷίʔυ͕ಡΊͳ͍͠ɺςετέʔε͕ඇৗʹଟ͍

  90. ͦ͜ͰɺSwiftͷڧྗͳܕ෇͚ͷੑ࣭Λ࢖͍ɺܗଶૉΛ ύλʔϯϚον -> தؒදݱԽ -> Datetimeʹม׵ ͱ͍͏ͷΛ࣮૷ͯ͠Έͨ

  91. ։ൃதʹ͖ͭ·ͩίʔυ͸͓ݟͤग़དྷͳͷͰ͕͢…. ࣌૬ϫʔυ͔Β࣌ࠁ΁ͷม׵ʹ͔ͳΓͷਫ਼౓Ͱ੒ޭ͍ͯ͠Δʂ

  92. ύλʔϯϚονϯάʹΑΓɺ͋Δఔ౓ςετ͠қ͍ͷ΋ϙΠϯτ ʢύλʔϯϚονϯάΛਖ਼ͱ͠ɺදهΏΕͷ౷ҰʹػցֶशΛ༻͍Δ༧ఆʣ

  93. B޲͚ͷαʔϏεͰ͕͢ɺ3݄຤͔Ββςετ༧ఆ

  94. ·ͱΊ

  95. ·ͱΊ • ϑϧελοΫϑϨʔϜϫʔΫΛར༻͠ͳͯ͘΋ɺΫϥ΢υ αʔϏεΛར༻͢Ε͹SwiftͰ؆୯ͳWebΞϓϦ͸͙͢ʹ ࡞ΕΔ • αʔόʔϨεͰͷར༻͸ೖ໳͠΍݁͘͢ߏ͓͢͢Ί • ࣗવݴޠॲཧ݁Ռͷ੔ܗͳͲͷہॴతͳͱ͜Ζ͔Βαʔόʔ αΠυSwiftΛ࢝ΊΔͷ΋͋ΓͳͷͰ͸

    • C/C++ͱͷ਌࿨ੑ͕ඇৗʹߴ͍ͷͰɺ௿Ϩϕϧͳॲཧ΋ॻ ͖΍͍͢
  96. ࠷ޙʹ

  97. • αʔυύʔςΟϥΠϒϥϦ͸·ͩ·ͩগͳ͍ • ࣗલ࣮૷͕͔ͳΓଟ͘ͳΔ͜ͱΛঝ஌͢Δ͜ͱ • ίΞϥΠϒϥϦ(Foundation)ͷڍಈ͕MacͱLinuxͰҟͳΔ έʔε͕͋Δɻະ࣮૷ͳΦʔόʔϩʔυ΍API͕͋Δ • ↑ʹ௚໘ͨ͠ΒɺϚΫϩΛ࢖ͬͯLinux༻ʹผ్ॲཧΛॻ ͘ඞཁ͕͋Δ৔߹΋

    • Goͱ͔Rust͕͋Δͷʹͦ΋ͦ΋ͳΜͰ࢖͏ͷʁͬͯݴΘ ΕΔ όοΫΤϯυͰͷSwiftͷਏ͍఺
  98. ͝੩ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠ɻ