Slide 1

Slide 1 text

Server-Side Swift @_shingt 2015/10/21 [email protected]#1

Slide 2

Slide 2 text

Server-Side Swift?????????? @_shingt 2015/10/21 [email protected]#1

Slide 3

Slide 3 text

୭ • Software Engineer @ Wantedly, Inc. • Twitter: @_shingt 3

Slide 4

Slide 4 text

Why Swift on server side • ʢօ͞Μ๨Ε͔͚ͯͦ͏ͳʣΦʔϓϯιʔεԽ • SwiftͰαʔόαΠυ΋ॻ͚ΔͷͰ͸ʁͬͯҰॠ੝ Γ্͕ͬͨʢؾ͕͢Δʣ • ࢓ࣄͰSwiftॻ͍ͯͳͯ͘ωλ͕ͳ͍ • ISUCON 4

Slide 5

Slide 5 text

5 http://isucon.net/

Slide 6

Slide 6 text

ISUCON • WebΞϓϦέʔγϣϯͷύϑΥʔϚϯεɾ νϡʔχϯάίϯςετʢৄࡉུʣ • ࠓ೥͸SNSαΠτ͕୊ࡐ • αʔόαΠυॻ͘ͳΒ࿅शʹஸ౓ྑ͍ͷͰ͸ 6

Slide 7

Slide 7 text

ISUCON • WebΞϓϦέʔγϣϯͷύϑΥʔϚϯεɾ νϡʔχϯάίϯςετʢৄࡉུʣ • ࠓ೥͸SNSαΠτ͕୊ࡐ • αʔόαΠυॻ͘ͳΒ࿅शʹஸ౓ྑ͍ͷͰ͸ 7 ܸ௜

Slide 8

Slide 8 text

To work with server-side app • ࠷௿ݶ • HTTP Serverʢͱͯ͠ಈ͘ʣ • Template Engine • DBI, DB driver 8

Slide 9

Slide 9 text

To work with server-side app • ࠷௿ݶ • HTTP Server • Template Engine • DBI, DB driver 9 GRMustache Swifter, Taylor

Slide 10

Slide 10 text

ͱΓ͋͑ͣ࡞ͬͯΈͯΔͷͰ DEMO https://github.com/shingt/SwiftServerExamples

Slide 11

Slide 11 text

HTTP server engine / fw • Swifter • ͦͦ͜͜੔ͬͯ͸͍Δ • https://github.com/glock45/swifter • Taylor • ͔ͳΓബ͍ & ·ͩػೳἧͬͯͳ͍ • GoͷMartiniϥΠΫʹॻ͚Δ • https://github.com/izqui/Taylor 11

Slide 12

Slide 12 text

Swifter 12 import Swifter let server = HttpServer() server["/"] = { request in return .OK(.HTML("Hello World!")) } var e: NSError? if !server.start(3002, error: &e) { print("Server start error: \(e)") } else { NSRunLoop.mainRunLoop().run() }

Slide 13

Slide 13 text

Swifter 13 import Swifter let server = HttpServer() server["/"] = { request in return .OK(.HTML("Hello World!")) } var e: NSError? if !server.start(3002, error: &e) { print("Server start error: \(e)") } else { NSRunLoop.mainRunLoop().run() }

Slide 14

Slide 14 text

Taylor 14 import Taylor let server = Taylor.Server() server.get("/") { req, res, cb in res.bodyString = "Hello World!" cb(.Send(req, res)) } do { try server.serveHTTP(port: 3001, forever: true) } catch let e { print("Server start failed \(e)") }

Slide 15

Slide 15 text

Taylor 15 import Taylor let server = Taylor.Server() server.get("/") { req, res, cb in res.bodyString = "Hello World!" cb(.Send(req, res)) } do { try server.serveHTTP(port: 3001, forever: true) } catch let e { print("Server start failed \(e)") }

Slide 16

Slide 16 text

Swifter or Taylor • ΠϯλʔϑΣΠε͸ Taylor > Swifterʢݸਓత ʹ͸ʣ • ͕ɺTaylor͸·ͩ৭ʑ੔ͬͯͳ͍ • Swifter => CarthageରԠͯ͠ͳ͍ • αʔόαΠυతʹѻ͍ʹ͍͘ʁ 16

Slide 17

Slide 17 text

Swifter or Taylor • ΠϯλʔϑΣΠε͸ Taylor > Swifterʢݸਓత ʹ͸ʣ • ͕ɺTaylor͸·ͩ৭ʑ੔ͬͯͳ͍ • Swifter => CarthageରԠͯ͠ͳ͍ • αʔόαΠυతʹѻ͍ʹ͍͘ʁ 17 cocoapods-rome

Slide 18

Slide 18 text

cocoapods-rome

Slide 19

Slide 19 text

cocoapods-rome • “pod install” ࣌ʹframeworkΛϏϧυͯ͘͠ΕΔcocoapods plugin • “Swift Scripting” by Ayaka Nonaka • https://realm.io/jp/news/swift-scripting/ 19

Slide 20

Slide 20 text

cocoapods-rome 20 platform :osx, '10.10' pod 'Swifter', :git => 'https:// github.com/glock45/swifter.git'

Slide 21

Slide 21 text

cocoapods-rome 21 platform :osx, '10.10' plugin 'cocoapods-rome' pod 'Swifter', :git => 'https:// github.com/glock45/swifter.git'

Slide 22

Slide 22 text

cocoapods-rome 22 APP_ROOT ├─ Podfile ├─ Pods/ │ ├─ Headers/ │ ├─ Local Podspecs/ │ ├─ Pods.xcodeproj/ │ ├─ Swifter/ │ ├─ Target Support Files/ │ ├─ Manifest.lock ├─ Rome/ │ └─ Swifter.framework/ ├─ main.swift …

Slide 23

Slide 23 text

cocoapods-rome 23 APP_ROOT ├─ Podfile ├─ Pods/ │ ├─ Headers/ │ ├─ Local Podspecs/ │ ├─ Pods.xcodeproj/ │ ├─ Swifter/ │ ├─ Target Support Files/ │ ├─ Manifest.lock ├─ Rome/ │ └─ Swifter.framework/ ├─ main.swift …

Slide 24

Slide 24 text

cocoapods-rome 24 APP_ROOT ├─ Podfile ├─ Pods/ │ ├─ Headers/ │ ├─ Local Podspecs/ │ ├─ Pods.xcodeproj/ │ ├─ Swifter/ │ ├─ Target Support Files/ │ ├─ Manifest.lock ├─ Rome/ │ └─ Swifter.framework/ ├─ main.swift … swift -F Rome main.swift

Slide 25

Slide 25 text

ࢥ͏ͱ͜Ζ • ͭΒ͍ ָ͍͠ʂʂʂ • ISUCONղ͜͏ͱͯ͠HTMLϨϯμ͚ͯͨ͠Ͳͦ΋ͦ΋JSONฦ ͤΕ͹े෼ͳͷͰ͸… • ॻ͚Δͷͱӡ༻͢ΔͷͱͰ͸·ͨ࿩͕ҧ͏͠ઌ௕ͦ͏ • Swift+αʔόαΠυͬΆ͍୯ޠͰݕࡧͯ͠΋OpenStackͱ͔ RubyͷSwift͕ग़ͯ͘Δ… • cocoapods-romeศར 25

Slide 26

Slide 26 text

Thank you!