Developer's Blog

Swift のサーバーサイドフレームワーク Kitura を試す

こんにちは、アプリケーション共同開発部の八田です。

Swift でサーバーサイド開発をするためのフレームワークはいくつかありますが、IBM Kitura の GitHub リポジトリを眺めていたところ Yeoman Generator があるのを見つけたので、このツールで生成することができる “CRUD application” を紹介しようと思います。

検証環境

今回の記事で紹介している内容は、以下の環境で動作確認を行いました。

  • Ubuntu 16.04.2
  • Swift 3.1.1
  • Node.js 7.10.0
  • npm 4.2.0
  • yo 1.8.5
  • generator-swiftserver 2.1

Swift はこちらから Release 版をダウンロードして使用しています。

Swift Server Generator (generator-swiftserver) をインストール

以下のコマンドで、npm を使用して yo をインストールします。また、Kitura プロジェクトの雛形を作成するための Yeoman Generator が generator-swiftserver という名前で配布されているので、併せてインストールします。

$ sudo npm install -g yo
$ sudo npm install -g generator-swiftserver

Kitura プロジェクトの雛形を作成

上記 2 つの npm モジュールをインストールすると、以下のコマンドで Kitura プロジェクトの雛形を作成することができます。

$ yo swiftserver

(1) アプリケーション名を入力します。今回は “SwiftServerApp” とします。

(2) プロジェクトを格納するディレクトリ名を入力します。今回はアプリケーション名と同じにするので空白のままとします。

(3) プロジェクトの種類を選択します。今回は “Generate a CRUD application” を選択します。

(4) 追加の機能を選択します。今回は初期状態のままとします。

(5) データの保存先を選択します。今回は “Memory (for development purposes)” を選択します。

(6) 自動的にビルドが始まります。ビルド中にエラーが発生する場合は、Swift のインストールに不備があったり、Ubuntu のパッケージが不足しているかもしれません。

(7) 今回は「curl が見つからない」という旨のエラーが発生したため、以下のコマンドでインストールしました。

$ sudo apt install libcurl4-openssl-dev

(8) プロジェクトディレクトリへ移動して、再度ビルドします。

$ cd <ディレクトリ名>
$ yo swiftserver:build

(9) ビルドが成功したら、アプリを起動して動作確認を行います。起動すると、ポート 8080 で待ち受けを開始します。

$ .build/debug/SwiftServerApp

(10) ブラウザでアクセスし、このようなページが表示されれば成功です。

(11) アプリを終了するには、ターミナルで “Command + C” を入力します。

データモデルを作成

さて、ここまでコードを一切書かずにアプリの雛形を動作させることができました。

さらに、Kitura の Swift Server Generator にはデータモデルを生成する機能もあるようなので、引き続きコマンドで作業していきます。 作業を終えると、データモデルに対応する JSON をやり取りできる REST API のコードが自動生成されます。

プロジェクトディレクトリ(Package.swift があるディレクトリ)で以下のコマンドを実行します。

$ yo swiftserver:model

(1) モデル名を入力します。この名前の構造体が作成されます。

(2) モデルの複数形の名前を入力します。REST API のエンドポイントの名前になります。

(3) モデルに属する1つ目のプロパティの名前を入力します。ここでは “name” と言う名前でプロパティを作成します。

(4) プロパティの型を選択します。

(5) 必須かどうか(nil を許容するかどうか)を入力します。

(6) 既定値を設定するかどうかを入力します。

(7) 同じ手順で、2つ目のプロパティを “age” という名前で追加します。

(8) 一通り入力を終えると再度プロパティ名を聞かれますが空白のまま Enter すると、入力完了となりビルドが始まります。

(9) ビルドが成功したら、アプリを起動します。

$ .build/debug/SwiftServerApp

生成された REST API を使ってみる

では、REST API 経由でデータのやり取りをしてみましょう。最初はデータがないので空の JSON Array が返ってきます。

$ curl http://localhost:8080/api/Users | jq .
[]

次に、POST でデータを 2 件作成してみます。作成が成功すると、都度 JSON Object が返ってきます。

$ curl -X POST \ -H "Accept: application/json" \
    -H "Content-type: application/json" \ 
    -d '{"name":"test user 1","age":30}' \ 
    http://localhost:8080/api/Users | jq . 
{ 
  "id": "3ACF0CE2-8A65-4F5E-A77A-C37BF9744614", 
  "age": 30, 
  "name": "test user 1" 
}
$ curl -X POST \ -H "Accept: application/json" \
    -H "Content-type: application/json" \ 
    -d '{"name":"test user 2","age":40}' \ 
    http://localhost:8080/api/Users | jq . 
{ 
  "id": "424A732C-A263-4AD1-8C34-95437AE06C9F", 
  "age": 40, 
  "name": "test user 2" 
}

再度 GET すると追加したデータの JSON Array が返ってきます。

$ curl http://localhost:8080/api/Users | jq . 
[ 
  { 
    "id": "3ACF0CE2-8A65-4F5E-A77A-C37BF9744614", 
    "age": 30, 
    "name": "test user 1" 
  }, 
  { 
    "id": "424A732C-A263-4AD1-8C34-95437AE06C9F", 
    "age": 40, 
    "name": "test user 2" 
  } 
]

とても簡単に REST API を作ることができました!

この他にもモデルを編集する “yo swiftserver:property” コマンドなどが用意されています。Swift Server Generator についてもっと詳しく知るには、以下のウェブサイトが参考になります。

最後に

この記事では Swift のコードは一切出てきませんでしたが、業務アプリケーションを開発するにはこの雛形を元にコードを書いてく必要があります。私はウェブ初心者なので、次のステップとして、生成された雛形のソースコードやドキュメントで勉強を進めていきたいと思っています。

また、Kitura には便利な周辺ツールが多数あります。例えば、ビューを実装するための Kitura-TemplateEngine や、データベース(MySQL・PostgreSQL・SQLite)を同一インターフェイスで操作するための Swift-Kuery などがあるようです。

私は普段 iOS アプリの開発を主に担当しているので、Swift でウェブ開発できるのはとても魅力的に感じました。Swift でのサーバーサイドの興味を持たれた方は、ぜひ試してみてはいかがでしょうか。

 

フェンリルのオフィシャル Twitter アカウントでは、フェンリルプロダクトの最新情報などをつぶやいています。よろしければフォローしてください!

Copyright © 2018 Fenrir Inc. All rights reserved.