Swift Vapor 新規プロジェクト作成 -nオプション無しの例
新規プロジェクト作成で-nオプションなし時は、FluentとLeafの使用有無を確認される。
Fluent
ドキュメントページより。
https://docs.vapor.codes/ja/fluent/overview/
FluentはSwiftのためのORMフレームワークです。
Swift の強力な型システムを利用して、データベースのための使いやすいインターフェイスを提供します。
Fluentを使うことの中心は、データベースのデータ構造を表すモデル型を作成することです。
これらのモデルは、生のクエリを書く代わりに、作成、読み込み、更新、削除操作を実行するために使用されます。
Leaf
ドキュメントページより。
https://docs.vapor.codes/ja/leaf/getting-started/
Leaf は Swift にインスパイアされた構文を持つ強力なテンプレート言語です。
これを使用して、フロントエンドのWebサイトの動的なHTMLページを生成したり、APIから送信するリッチなメールを生成したりできます。
実行例
~/vapor$vapor new example Cloning template... name: example Would you like to use Fluent (ORM)? (--fluent/--no-fluent) y/n> y fluent: Yes Which database would you like to use? (--fluent.db) 1: Postgres (Recommended) 2: MySQL 3: SQLite 4: Mongo > 1 db: Postgres (Recommended) Would you like to use Leaf (templating)? (--leaf/--no-leaf) y/n> > y leaf: Yes Generating project files + Package.swift + entrypoint.swift + configure.swift + routes.swift + Todo.swift + CreateTodo.swift + .gitkeep + TodoController.swift + AppTests.swift + index.leaf + .gitkeep + Dockerfile + docker-compose.yml + .gitignore + .dockerignore Creating git repository Adding first commit ** **~~** **~~~~~~** **~~~~~~~~~~** **~~~~~~~~~~~~~~** **~~~~~~~~~~~~~~~~~~** **~~~~~~~~~~~~~~~~~~~~~~** **~~~~~~~~~~~~~~~~~~~~~~~~** **~~~~~~~~~~~~~~~~~~~~~~~~~~** **~~~~~~~~~~~~~~~~~~~~~~~~~~~~** **~~~~~~~~~~~~~~~~~~~~~~~~~~~~** **~~~~~~~~~~~~~~~~~~~~~++++~~~** **~~~~~~~~~~~~~~~~~~~++++~~~** ***~~~~~~~~~~~~~~~++++~~~*** ****~~~~~~~~~~++++~~**** *****~~~~~~~~~***** ************* _ __ ___ ___ ___ \ \ / / /\ | |_) / / \ | |_) \_\/ /_/--\ |_| \_\_/ |_| \ a web framework for Swift Project example has been created! Use cd 'example' to enter the project directory Then open your project, for example if using Xcode type open Package.swift or code . if using VSCode ~/vapor$
作成されるファイル
example/ ├── Dockerfile ├── Package.swift ├── Public ├── Resources │ └── Views │ └── index.leaf ├── Sources │ └── App │ ├── Controllers │ │ └── TodoController.swift │ ├── Migrations │ │ └── CreateTodo.swift │ ├── Models │ │ └── Todo.swift │ ├── configure.swift │ ├── entrypoint.swift │ └── routes.swift ├── Tests │ └── AppTests │ └── AppTests.swift └── docker-compose.yml
DB関連の設定
configure.swiftを直接変更、または内容に従い環境変数を設定する。
import NIOSSL import Fluent import FluentPostgresDriver import Leaf import Vapor // configures your application public func configure(_ app: Application) async throws { // uncomment to serve files from /Public folder // app.middleware.use(FileMiddleware(publicDirectory: app.directory.publicDirectory)) app.databases.use(DatabaseConfigurationFactory.postgres(configuration: .init( hostname: Environment.get("DATABASE_HOST") ?? "localhost", port: Environment.get("DATABASE_PORT").flatMap(Int.init(_:)) ?? SQLPostgresConfiguration.ianaPortNumber, username: Environment.get("DATABASE_USERNAME") ?? "vapor_username", password: Environment.get("DATABASE_PASSWORD") ?? "vapor_password", database: Environment.get("DATABASE_NAME") ?? "vapor_database", tls: .prefer(try .init(configuration: .clientDefault))) ), as: .psql) app.migrations.add(CreateTodo()) app.views.use(.leaf) // register routes try routes(app) }
作成されるモデルに必要なテーブルスキーマー(PostgreSQLの場合)
Table "public.todos" Column | Type | Collation | Nullable | Default --------+-------------------+-----------+----------+--------- id | uuid | | not null | title | character varying | | not null | Indexes: "todos_pkey" PRIMARY KEY, btree (id)
初期生成時に含まれるTodos情報
ルート情報、処理はTodoController.swiftにある。
Todo作成リクエスト
POST
http://127.0.0.1:8080/todos
{ "title" : "example" }