読者です 読者をやめる 読者になる 読者になる

PerfectでサーバーサイドSwift

Swift3 Perfect サーバーサイドSwift

公式ドキュメントを参考に、Perfectを軽く触ってみたのでメモ

perfect.org

環境はOS X
まずは適当なプロジェクトフォルダを作成

mkdir MyAwesomeProject
cd MyAwesomeProject

Gitリポジトリを作成

git init
touch README.html
git add README.html
git commit -m "Initial commit"

カレントディレクトリにPackage.swiftを作成
これはAppleが公開しているSwift Package Managerというライブラリ管理ツールを利用して、Perfectのライブラリをダウンロードするためのファイル。

import PackageDescription
 
let package = Package(
    name: "MyAwesomeProject",
    dependencies: [
        .Package(
        url: "https://github.com/PerfectlySoft/Perfect-HTTPServer.git", 
        majorVersion: 2, minor: 0
        )
    ]
)

github.com

swift buildを行なうと依存ライブラリが一気にダウンロードされる。結構時間がかかるので一旦後回し。
mkdir SourcesでSourcesディレクトリを作成し、以下にmain.swiftを作成。Sources/main.swiftとなっているはずです。

import PerfectLib
import PerfectHTTP
import PerfectHTTPServer
 
// Create HTTP server.
let server = HTTPServer()
 
// Register your own routes and handlers
var routes = Routes()
routes.add(method: .get, uri: "/", handler: {
        request, response in
        response.setHeader(.contentType, value: "text/html")
        response.appendBody(string: "<html><title>Hello, world!</title><body>Hello, world!</body></html>")
        response.completed()
    }
)
 
// Add the routes to the server.
server.addRoutes(routes)
 
// Set a listen port of 8181
server.serverPort = 8181
 
do {
    // Launch the HTTP server.
    try server.start()
} catch PerfectError.networkError(let err, let msg) {
    print("Network error thrown: \(err) \(msg)")
}

main.swift はswiftのメイン関数のようなものです。関数ではなくファイルがそのまま実行されます。 また、iOS開発ではAppDeleteから実行されますが、あれは@UIApplicationMainディレクティブを記述しているためです。

import UIKit

@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {

戻ります。ここで、以下を実行。

swift build
.build/debug/MyAwesomeProject

http://localhost:8181/ にサーバーが立ち上がりました。
Xcodeを使いたい場合。以下のコマンドを実行すると、Xcodeプロジェクトを作成できます。

swift package generate-xcodeproj

Schemeはコンソールがアイコンのものを指定すると、ビルドできます。