Slide 1

Slide 1 text

Swift αʔόʔαΠυ Vaporͷ࢝Ίํ 2017೥8݄29೔ɹ Swift αʔόʔαΠυ Vaporͷ࢝Ίํ 2017/8/29 1

Slide 2

Slide 2 text

ࠤ౻߶࢜ (@hatakenokakashi) MAMORIOגࣜձࣾͱ͍͏མͱ͠෺λά ͷձࣾͰ iOSΤϯδχΞΛ͍ͯ͠·͢ɻ ։ൃ͔ΒAppStore΁ͷϦϦʔε࡞ۀ΋ ͯ͠·͢ɻ ϒϩάɿhttp://blog.personal- factory.com/ Swift αʔόʔαΠυ Vaporͷ࢝Ίํ 2017/8/29 2

Slide 3

Slide 3 text

2015೥12݄ Swift͕ΦʔϓϯιʔεʹͳΓ·ͨ͠ ! " Swift αʔόʔαΠυ Vaporͷ࢝Ίํ 2017/8/29 3

Slide 4

Slide 4 text

αʔόʔαΠυϑϨʔϜϫʔΫ͕ଓʑ ొ৔ Swift αʔόʔαΠυ Vaporͷ࢝Ίํ 2017/8/29 4

Slide 5

Slide 5 text

CodeZinʹͯهࣄΛॻ͖·ͨ͠ http://codezine.jp/article/detail/9622 Swift αʔόʔαΠυ Vaporͷ࢝Ίํ 2017/8/29 5

Slide 6

Slide 6 text

Kituraͷྑ͞ • IBM Cloud Tools ͰGUI͔ΒBluemix΁σϓϩΠ͕Մೳ • ؆ܿͳϧʔςΟϯά Swift αʔόʔαΠυ Vaporͷ࢝Ίํ 2017/8/29 6

Slide 7

Slide 7 text

౰࣌ͷਏΈ • Swift2ͰϚΠφʔόʔδϣϯ্͕͕Δͱಈ͔ͳ͘ͳΔ • HTTPϦΫΤετϝιου͕CURLͷϥούʔ(Not Swifty) • SQLϞδϡʔϧ͕Kituraʹ͸ͳ͍ Swift αʔόʔαΠυ Vaporͷ࢝Ίํ 2017/8/29 7

Slide 8

Slide 8 text

Swift αʔόʔαΠυ Vaporͷ࢝Ίํ 2017/8/29 8

Slide 9

Slide 9 text

Vapor • χϡʔϤʔΫͷQutheory͕ࣾ։ൃ͍ͯ͠Δ • ΦʔϓϯιʔεͷαʔόʔαΠυϑϨʔϜϫʔΫ • ૣ͍ɺ҆શ • υΩϡϝϯτ͕๛෋ • 2017೥5݄ʹόʔδϣϯ2͕ϦϦʔε • Vapor Cloud Swift αʔόʔαΠυ Vaporͷ࢝Ίํ 2017/8/29 9

Slide 10

Slide 10 text

Vaporͷ࢝Ίํ Swift αʔόʔαΠυ Vaporͷ࢝Ίํ 2017/8/29 10

Slide 11

Slide 11 text

Vapor toolbox ΛΠϯετʔϧ // Vapor toolboxͷΠϯετʔϧ brew install vapor // Πϯετʔϧͷ֬ೝ vapor --help Swift αʔόʔαΠυ Vaporͷ࢝Ίํ 2017/8/29 11

Slide 12

Slide 12 text

ΞϓϦέʔγϣϯͷ࡞੒ vapor new [--template] Swift αʔόʔαΠυ Vaporͷ࢝Ίํ 2017/8/29 12

Slide 13

Slide 13 text

//APIͷςϯϓϨʔτͰ࡞੒(DBϞδϡʔϧͷFluent;͘Ή) vapor new --template=api //WebςϯϓϨʔτͰ࡞੒(ViewϞδϡʔϧͷLeafΛ;͘Ή) vapor new --template=web Swift αʔόʔαΠυ Vaporͷ࢝Ίํ 2017/8/29 13

Slide 14

Slide 14 text

Swift αʔόʔαΠυ Vaporͷ࢝Ίํ 2017/8/29 14

Slide 15

Slide 15 text

Ϗϧυ&ϥϯ $ vapor new sampleWeb --template=web $ cd sampleWeb/ $ vapor build $ vapor run Swift αʔόʔαΠυ Vaporͷ࢝Ίํ 2017/8/29 15

Slide 16

Slide 16 text

http://0.0.0.0:8080/ ͰWebαʔόʔ্ཱ͕͕ͪΔ Swift αʔόʔαΠυ Vaporͷ࢝Ίํ 2017/8/29 16

Slide 17

Slide 17 text

XcodeͰ։ൃ͍ͨ͠ʁ Swift αʔόʔαΠυ Vaporͷ࢝Ίํ 2017/8/29 17

Slide 18

Slide 18 text

Ͱ͖·͢ʂ! $ vapor xcode Generating Xcode Project [Done] Select the `Run` scheme to run. Open Xcode project? y/n> y Opening Xcode project... Swift αʔόʔαΠυ Vaporͷ࢝Ίํ 2017/8/29 18

Slide 19

Slide 19 text

Swift αʔόʔαΠυ Vaporͷ࢝Ίํ 2017/8/29 19

Slide 20

Slide 20 text

؆୯ʹσϓϩΠ͍ͨ͠ʁ Swift αʔόʔαΠυ Vaporͷ࢝Ίํ 2017/8/29 20

Slide 21

Slide 21 text

HerokuͰσϓϩΠʂ gitͰίϛοτͯ͠vapor heroku Swift αʔόʔαΠυ Vaporͷ࢝Ίํ 2017/8/29 21

Slide 22

Slide 22 text

$ git add ./ $ git commit -m "init commit" [master 8fd2d8e] init commit 1 file changed, 169 insertions(+) create mode 100644 Package.resolved Swift αʔόʔαΠυ Vaporͷ࢝Ίํ 2017/8/29 22

Slide 23

Slide 23 text

$ vapor heroku init Swift αʔόʔαΠυ Vaporͷ࢝Ίํ 2017/8/29 23

Slide 24

Slide 24 text

৭ʑฉ͔ΕΔͷͰ౴͑Δ Would you like to provide a custom Heroku app name? y/n> y Custom app name: > sample-vapor-web Would you like to deploy to other than US region server? y/n> y Region code (us/eu): > us https://sample-vapor-web.herokuapp.com/ | https://git.heroku.com/sample-vapor-web.git Swift αʔόʔαΠυ Vaporͷ࢝Ίํ 2017/8/29 24

Slide 25

Slide 25 text

ͲΜͲΜ౴͑Δ Would you like to provide a custom Heroku buildpack? y/n> n Setting buildpack... Are you using a custom Executable name? y/n> n Setting procfile... Committing procfile... Would you like to push to Heroku now? y/n> y This may take a while... Swift αʔόʔαΠυ Vaporͷ࢝Ίํ 2017/8/29 25

Slide 26

Slide 26 text

VaporͷػೳҰཡ Swift αʔόʔαΠυ Vaporͷ࢝Ίํ 2017/8/29 26

Slide 27

Slide 27 text

ϧʔςΟϯά GETϝιου GET /welcome drop.get("welcome") { request in return "Hello" } Swift αʔόʔαΠυ Vaporͷ࢝Ίํ 2017/8/29 27

Slide 28

Slide 28 text

Ϩεϙϯε http://0.0.0.0:8080/welcome -> Hello Swift αʔόʔαΠυ Vaporͷ࢝Ίํ 2017/8/29 28

Slide 29

Slide 29 text

ϧʔςΟϯά POSTϝιου POST /form drop.post("form") { request in return "Submitted with a POST request" } Swift αʔόʔαΠυ Vaporͷ࢝Ίํ 2017/8/29 29

Slide 30

Slide 30 text

Ϩεϙϯε POST http://0.0.0.0:8080/form -> Submitted with a POST request Swift αʔόʔαΠυ Vaporͷ࢝Ίํ 2017/8/29 30

Slide 31

Slide 31 text

ύϥϝʔλʔ GET /users/:id drop.get("users", ":id") { request in guard let userId = request.parameters["id"]?.int else { throw Abort.badRequest } return "You requested User #\(userId)" } Swift αʔόʔαΠυ Vaporͷ࢝Ίํ 2017/8/29 31

Slide 32

Slide 32 text

Ϩεϙϯε GET http://0.0.0.0:8080/users/12 -> You requested User #12 Swift αʔόʔαΠυ Vaporͷ࢝Ίํ 2017/8/29 32

Slide 33

Slide 33 text

ΫΤϦʔ GET /users?name="xxx" drop.get("users") { request in guard let name = request.query?["name"]?.string else { throw Abort.badRequest } return "You requested User #\(name)" } Swift αʔόʔαΠυ Vaporͷ࢝Ίํ 2017/8/29 33

Slide 34

Slide 34 text

Ϩεϙϯε GET http://0.0.0.0:8080/users?name=sato -> You requested User #sato Swift αʔόʔαΠυ Vaporͷ࢝Ίํ 2017/8/29 34

Slide 35

Slide 35 text

JSON GET /json drop.get("json") { req in var json = JSON() try json.set("id", id) try json.set("name", name) try json.set("age", age) return json } Swift αʔόʔαΠυ Vaporͷ࢝Ίํ 2017/8/29 35

Slide 36

Slide 36 text

Ϩεϙϯε GET http://0.0.0.0:8080/json -> {"id":1,"name":"tommy","age":10} Swift αʔόʔαΠυ Vaporͷ࢝Ίํ 2017/8/29 36

Slide 37

Slide 37 text

σϞ Swift αʔόʔαΠυ Vaporͷ࢝Ίํ 2017/8/29 37

Slide 38

Slide 38 text

·ͱΊ • Server Side Swift Vapor • Vapor ToolsͰϏϧυ&HerokuʹσϓϩΠ • ؆ܿͳϝιουͰ։ൃ͠΍͍͢ Swift αʔόʔαΠυ Vaporͷ࢝Ίํ 2017/8/29 38

Slide 39

Slide 39 text

iOSDCͰൃද͠·͢ 8/17 16:50ʙϥΠτχϯάτʔΫ https://iosdc.jp/2017/ Swift αʔόʔαΠυ Vaporͷ࢝Ίํ 2017/8/29 39