はじめに
こんにちは。HealthCare Innovation Group(HIG)1所属の清水です。
春の入門連載2024、6本目の記事です。
SwiftにおけるWebフレームワークを取り上げます。Swift7はiOSアプリ開発のイメージが強いと思いますが、iOSアプリ開発以外でも利用できることを紹介します。
(macOS以外でもSwiftが動かせたら楽しいなというモチベーションで記事を執筆しております)。
Swift における Web フレームワーク
そもそもSwiftにおけるWebフレームワークは、何があるでしょうか?
Swift.org8のSwift on Server内で紹介されているWeb フレームワークは以下2つです。
GitHub Star 数を比較した図を以下に示します。
先発のフレームワークであるVaporの方が人気で、検索すると日本語記事もいくつかヒットします。Swift.org内のWebフレームワークチュートリアル2として取り上げられていることからも、Vaporが主流となっていることが伺えます。Vaporについては記事になっているものも多いため、後発のHummingbirdを試します。
(参考:https://star-history.com/#hummingbird-project/hummingbird&vapor/vapor&Date)Hummingbird とは
軽量で依存関係が少ないことを売りとしているフレームワークの1つです。
Hummingbird の README にも以下の記載があります。
Lightweight, flexible, modern server framework written in Swift.
Hummingbird は、最小限のコアフレームワークのみを提供して、個別で拡張していくことができるようになっています。前述の Vapor の方が機能自体は豊富だと思いますが、サクッと使いたい場合は Hummingbird なのかなと認識しています。
また、公式ドキュメントがAppleのDeveloper向けのドキュメント10そっくりなので、ぜひ覗いてみてほしいです。
https://docs.hummingbird.codes/2.0/documentation/hummingbird/
セットアップ
環境情報
本記事は、以下の環境で実施を確認しています。
Windows Subsystem for Linux (以下、WSL)に関するバージョン情報
cmd.exe >wsl -v
WSL バージョン: 2.1.5.0
カーネル バージョン: 5.15.146.1-2
WSLg バージョン: 1.0.60
MSRDC バージョン: 1.2.5105
Direct3D バージョン: 1.611.1-81528511
DXCore バージョン: 10.0.25131.1002-220531-1700.rs-onecore-base2-hyp
Windows バージョン: 10.0.19045.4170Ubuntu のバージョン: 22.04.4 LTS
Swift のバージョン: 5.10
Swift のインストール
まずは、SwiftをUbuntu上にインストールします。
Hummingbirdの公式ドキュメントにはSwift自体のインストールに関する記載はなかったため、Vaporの公式ドキュメントを参考にSwiftly3を用いてインストールしました。
Swiftly は、Swift Server Workgroup9 が提供するCLIツールで異なるバージョンのSwiftを使い分けることができます。
記載の手順通り、実行していきます。
# swiftly のインストール |
Hummingbird を用いたToDoアプリの構築(公式チュートリアル)
ここから先は、Hummingbird 公式ドキュメント記載のチュートリアルを元に Hummingbird のセットアップからToDoアプリの構築までのハンズオンを試してみます。
https://docs.hummingbird.codes/2.0/tutorials/todos/
Hummingbird のセットアップ
# プロジェクトDirectoryの作成 |
--type tool について
--type tool
は、コマンドライン引数をデフォルトで利用できるテンプレートみたいです。Package.swift
に、 https://github.com/apple/swift-argument-parser.git が含まれるか否かと置き換えても問題ないと思います。
> swift package init --type executable |
// swift-tools-version: 5.10 |
Hummingbird を利用するため、Package.swift
に必要な情報を追加します。
// swift-tools-version: 5.10 |
GET リクエストを叩いた際に”Hello”を返すように以下のように Todos.swift
を書き換えます。
import ArgumentParser |
一連の修正が完了すると、アプリケーションが正常に動くことを確認できます。
> swift run |
簡単ですね🎉
ToDoアプリの構築
ここでは、Hummingbird を利用してToDoをDBに登録するところまで試してみます。
PostgresNIO4 というPostgreSQL用のSwiftクライアントを利用することで、ToDoをPostgreSQLに登録します。
Hummingbird 同様に、PostgresNIO を Package.swift
に追加します。
// swift-tools-version: 5.10 |
PostgreSQL をインストールします。
チュートリアルでは(おそらくmacOS前提で) brew
経由でインストールしていたのですが、今回は apt
経由でインストールします。
Linux 上でも Homebrew インストールできるみたいなので、Homebrew 経由でインストールでも良いかもしれません。
https://docs.brew.sh/Homebrew-on-Linux
> sudo apt update |
インストールが完了したので、チュートリアルの続きを実施します。
> psql postgres |
エラーで進めません。
エラーについて調べると .conf
ファイルを確認しよう5、などとありますが、そもそも.conf
ファイルを含んだディレクトリ(/etc/postgresql/14/main/
)がないことに気が付きました。
> ls -la /etc/postgresql/ |
別の記事6を参考に、PostgreSQL のクラスタを追加します。
> sudo pg_createcluster --start 14 main |
動くようになったので、チュートリアルの続きに戻ります。
まずは、データベースを準備します。
> postgres psql |
次に、ToDoアプリの実装です。
チュートリアルの通りに実装していきます。完成形は、公式のサンプルがあるため、そちらをご確認ください。
https://github.com/hummingbird-project/hummingbird-examples/tree/main/todos-postgres-tutorial
動作確認
これまで構築したものの動作確認を行います。
> swift run |
POSTしたToDoが、DB側に登録されていることを確認できました🎉
さいごに
Swift の Web フレームワークの1つである、Hummingbird をセットアップから紹介しました。
個人的には、macOS以外でもSwiftが書けて、かつ、サーバーアプリ開発に利用できることが知れて楽しかったです。WSL 上でセットアップしたので手順が多めだったのですが、普段SwiftでiOSアプリ開発している方がサーバサイドの開発を試したいときに便利だと思いました。
今回は試せませんでしたが、Xcode のシミュレータとバックエンドの接続までをどこかで試してみたいと考えています。
- 1.医療・ヘルスケア分野での案件や新規ビジネス創出を担う、2020年に誕生した事業部です。 設立エピソードは、以下記事をご覧ください。 "新規事業の立ち上げ フューチャーの知られざる医療・ヘルスケアへの挑戦" ↩
- 2.Swift.org内のチュートリアル記事 https://www.swift.org/getting-started/vapor-web-server/ ↩
- 3.swiftly https://github.com/swift-server/swiftly ↩
- 4.Postgres-NIO https://github.com/vapor/postgres-nio ↩
- 5.psql: error: connection to server on socket "/var/run/postgresql/.s.PGSQL.5432" failed: FATAL: Peer authentication failed for user "postgres" (Ubuntu) https://stackoverflow.com/questions/69676009/psql-error-connection-to-server-on-socket-var-run-postgresql-s-pgsql-5432 ↩
- 6.【Ubuntu+PostgreSQL】postgres以外のユーザでクラスタを作成して起動する https://qiita.com/shin4488/items/175151e59a043c724b38 ↩
- 7.https://www.apple.com/jp/swift/ ↩
- 8.https://www.swift.org/ ↩
- 9.Swift によるサーバーアプリケーション開発を促進するワークグループ https://www.swift.org/sswg/ ↩
- 10.AppleのDeveloper向けのドキュメント https://developer.apple.com/documentation/Swift ↩