こちらの記事を参考にSwiftサーバーを作ってみました。
準備
Swift Package Managerを使えるようにします。
こちらのページのLatest Development Snapshots
をインストール後、/Library/Developer/Toolchains/swift-latest.xctoolchain/usr/bin/
へのパスを通せば使えるようになります。
次にXcodeで新規プロジェクトを作成します。
プロジェクトはCommand Line Tool
を選択して下さい。
次にPackage.swiftというファイルを追加して以下のようにインストールしたいパッケージ情報を書きます。
import PackageDescription let package = Package( name: "MyWebApp", dependencies: [ .Package(url: "https://github.com/tannernelson/vapor.git", majorVersion: 0) ] )
次にmain.swiftをSourcesフォルダに移動した上で以下のように修正します。
import Foundation import Vapor Route.get("hello") { _ in return ["Hello" : "World"] } let server = Server() server.run(port: 8080)
フォルダ構成は以下のようになります。
ビルド & 起動
次にPackage.swift
の配置されたフォルダでswift build
コマンドを実行します。
これで.build/debug/ServerSwiftTest
という名前で実行ファイルが生成されるので動かしてみます。
ブラウザでlocalhost:8080/hello
にアクセスするとJSONが返ってくるのが分かります。
テンプレートエンジン
VaporではStencilというテンプレートエンジンを使う事ができます。
使うためにはPackage.swiftにStencilを追加します。
import PackageDescription let package = Package( name: "MyWebApp", dependencies: [ .Package(url: "https://github.com/tannernelson/vapor.git", majorVersion: 0), .Package(url: "https://github.com/tannernelson/vapor-stencil.git", majorVersion: 0) // 追加 ] )
Package.swiftのあるフォルダにResourcesフォルダを作ってindex. stencilを作成します。
<html> <h1>{{ message }}</h1> </html>
次にmain.swiftを少し修正します。
import Foundation import Vapor import VaporStencil View.renderers[".stencil"] = StencilRenderer() // 追加 Route.get("/") { request in return try! View(path: "index.stencil", context: ["message": "Hello"]) // 修正 } let server = Server() server.run(port: 8080)
ビルドしなおしてアクセスすると以下のような表示になります。