2017年3月29日水曜日

Swift Web Framework Slimane

勉強の為に引用しました。
http://blog.miketokyo.com/post/144045800448/swift-web-framework-slimane


みなさんこんばんはチャンタケです。
前回から半年ぶりくらいの更新となりますが、今回は現在僕が公開しているSwift web frameworkのSlimaneをご紹介させていただければと思います。
英語版の記事はこちら(プロジェクトの始まった経緯とか、もう少し詳細が書いてあります。)

Slimane

An express inspired web framework for swift that works on OSX and Ubuntu
このSlimaneロゴはMikeTOKYOの頼れる兄貴、トミーがデザインしてくれました。(久々にラジオやりたいなあ)
ロゴに関してこんな嬉しい投稿も(許可得ずかってに載せてしまっております、、

Meetup始めました

またもうひとつ個人的な活動として、株式会社 OneTeamさんに会場をお借りしてTokyo Server Side Swift MeetupというServer Side Swiftに特化したMeetupを行っており、ここでSlimaneの話をさせていただいております。
ちなみに第三回が5/31に開催されます。(現在、おかげさまで満員御礼です)
(長瀬さん、OneTeamのみなさま、毎度毎度会場の準備や段取り等で大変お世話になっております。

Slimaneとは

  • Suv: libuv wrapper
  • Skelton: Stream based HTTP Server
というこれらの非同期ランタイム上に構築された軽量フレームワークです。
特徴
  • Expressをインスパイアしたインターフェース
  • middleware, routesなどNode.jsユーザーには非常に馴染み深い
  • libuvベース
  • C10K問題怖くない
  • 非常に高速(ベンチマーク上はRevelの2.5倍、Expressの5倍早いです。)
  • 非同期FileSystem、Stream、Process、Timer、Cluster/Workerといった機能をCoreFoundationに依存すること無く利用可能
  • Swift3対応(というより3でしかもう動きません…)
利用可能なモジュール/ミドルウェア
  • Middleware:SlimaneのMiddleware実装用protocol
  • SessionMiddleware: Session機能を有効化するMiddleware(デフォはメモリにストア)
  • SessionRedisStore: SessionMiddlewareのストアにRedisを使えるようにする
  • swift-redis: Redis Client
  • BodyParser:JSONやFormDataのパーザmiddleware
  • Hanger: HTTPクライアント
  • WS: WebSocketのサーバー/クライアント実装
  • Crypto: OpenSSLベースの暗号化/hash化モジュール
  • Time:Cのtimeをラップしたもの
  • Render:SlimaneにTemplateのレンダー機能を提供するモジュール
  • Renderable: View Engineが実装すべきprotocol
  • MustacheViewEngine: Mustache用のviewエンジン(Renderableの実装版)
  • AsyncResponderConvertible: Slimane独自のResponderをS4のResponderに変換するモジュール
  • Thrush: jsライクなPromiseモジュール
  • QWFuture: Futureのタスクを別スレッドで実行するもの(ブロッキングIOをノンブロッキングIOに見せかけ、event_loopを止めないためのもの)
と上に上げたような様々なmiddlewareを組み合わせてwebアプリケーションを構築できます。(どれかリンク切れしてそう..)

インストール

インストールガイドに従いインストールしていきます。
注)基本的にSwift3はまだ開発段階ということもあり、swift3だからということでどのマイナーバージョンでもコンパイルが通るといったことはありません。 基本的にはフレームワークがロックインしているSwiftのバージョンを使うようにしてください。
現在Slimaneはswift-DEVELOPMENT-SNAPSHOT-2016-04-25-aで正常に動作します。
SPMの周辺環境が整ったらコマンドでまとめてドーンと行ったインストールができるように頑張ります。

Sample Projectをビルド

このレポジトリにSlimaneを使ったサンプルプロジェクトが置いてあります。 内容としては、基本的なmiddleware/ルーティングの登録から、クラスター/プロセス間通信、websocketを使った簡易chatの実装といったものまでがありますので、是非ビルドしてSwift Serverを体験してみてください!!
サーバーの起動コードはこんな感じです。
?
1
2
3
4
5
6
7
8
9
10
11
import Slimane
 
let app = Slimane()
 
app.get("/") { req, responder in
    responder {
        Response(body: "Welcome Slimane!")
    }
}
 
try! app.listen()
すごい簡単です。

今後に関して

  • ドキュメントの拡充
  • Mysqlサポート
  • 本番運用の実績
  • Docker対応
  • Graceful Restartなどのデプロイに付随する機能
  • Development kitの開発(Contribution用)
  • コマンドラインインターフェース
  • Memory leakを徹底的に潰す(ARCとpointerの混在かつ非同期という非常に相性の悪い環境のため、メモリ管理が大変です。。)

最後に

現在、1人でSlimaneを開発しておりまして個人的にはコミュニティを作ってどんどん広めていきたいと思っております。 このプロジェクトに興味のある方がいましたら、是非yuki@miketokyo.comあてにメールください。(Facebookでも構いません。
コミュニティのSlackはこちら https://slimane-swift.slack.com
また、個人的にSwiftの経験が浅いため、日々表現力に実力不足を感じております。 書き方等で「こういうほうがSwiftyだよ!」というのがあればご助言頂けますと幸いです。
Slimaneをよろしくお願いします!

0 コメント:

コメントを投稿