Vapor 3.0 で真面目に Vapor デビューしたかったが何をすればいいのかわからず本を2冊読んだのでその感想を書きます


## Vapor 3.0 の情報リソースの現状

「Vapor が気になる！情報収集したい！」

---

## Vapor 3.0 の情報リソースの現状

- 日本語で読めるもの
  - ツチノコレベルに希少
- [公式ドキュメント](https://docs.vapor.codes/3.0/)
  - ほんとに各パッケージについて初歩しか書いてない
  - 更新が追いついていないなどそのままでは動かないケースも多々ある
- 公式 API リファレンス ([HTTP](https://api.vapor.codes/http/latest/HTTP/index.html) など)
  - メインの情報収集源の1つ
  - しかしパッケージも多く何がどこにあってどう探せばいいか初学者にはちょっとつらい
- ソースコードそのもの
  - メインの情報収集源の1つ
  - しかしパッケージも多く何がどこにあって以下略
- Discord
  - メインの情報収集源の1つ
  - 質問するとすぐ教えてくれる。みんな優しい

---

## なので


まさにちょっと前の自分がそうだったのだが、Vapor の学びをどこから始めればよいかとっかかりがなかなかわからない。

__チュートリアル的に進めていけるドキュメントが足りない！__

--- 

# しかし本はある

Vapor 3.0 の解説本、2冊もある

---

# しかし本はある


![1*Yy9jm2AupWjScV7o9-QpIg.png](https://qiita-image-store.s3.amazonaws.com/0/29846/b6b79ea3-8de1-6e6d-93c7-04285a63853b.png)

- [Server Side Swift with Vapor — RayWenderlich.com](https://store.raywenderlich.com/products/server-side-swift-with-vapor)
- [Server-side Swift (Vapor Edition) – HackingWithSwift.com](https://www.hackingwithswift.com/store/server-side-swift)

---

# Too Long; Doesn't Listen to

どっちも良かったです。
Vapor 初心者の方はどっちも読むと良いです。

---

一応、両方読んだたぶん希少な (?) 人間として感想をお伝えします。
どっちも買うと $100 近くするからな！

--- 

# 概要

---

# 概要

## Server Side Swift with Vapor

by Tim Condon, Tanner Nelson, Jonas Schwartz & Logan Wright

- Vapor の開発者も著者に名を連ねる「事実上の公式解説本？」
- 実はまだ半分も完成していない (Early Access 版が手に入る)

## Server-side Swift (Vapor Edition)

by Paul Hudson

- 著者は Kitura の本も書いている
- 完成している (更新もされている)

---

# 章の構成

---

# 章の構成

## Server Side Swift with Vapor

1. ~~Introduction (Coming soon)~~
2. Hello Vapor!
3. HTTP Basics
4. Async
5. Fluent and Persisting Models
6. Configuring a Database
7. CRUD Database Operations
8. Controllers
9. Parent Child Relationships
10. Sibling Relationships
11. Testing
12. Creating a Simple iPhone App I
13. Creating a Simple iPhone App II
14. Templating with Leaf
15. Beautifying Pages
16. Making a Simple Web App I
17. Making a Simple Web App II
18. ~~API Authentication (Coming soon)~~
19. ~~Cookies and Sessions (Coming soon)~~
20. ~~Basic Validation (Coming soon)~~
21. ~~Facebook and Google Authentication (Coming soon)~~
22. ~~Database/API Versioning and Migration (Coming soon)~~
23. ~~Caching (Coming soon)~~
24. ~~Middleware (Coming soon)~~
25. ~~Deploying with Heroku (Coming soon)~~

---

## Server Side Swift with Vapor

- Vapor の主要な機能が章ごとのトピックになっている
- 全体を通して TIL (Today I Learned) というアプリケーションを作りながら、各章で少しずつ新しい機能を学んでいくスタイル
- 順番に読み進めると Vapor の主要な機能をカバーできる
- 章タイトルから機能が推測しやすいので、自分で作っていて「あれどこでやったっけな」と見返すのが楽

---

## Server-side Swift (Vapor Edition)

1. Preface
2. Introduction: Swift for Complete Beginners
3. Million Hairs
4. JSON Poll
5. Routing
6. Swift Fan Club
7. Meme Machine
8. Templates
9. Barkr
10. ASCII art
11. Databases
12. Instant Coder
13. AppleFanatic
14. Testing

---

## Server-side Swift (Vapor Edition)

- 各章が作るアプリケーションの名前になっている
- 章ごとに別々のアプリケーションを作り、その中で新しいことを学んで行くスタイル
- 順番に読み進めると Vapor の主要な機能をカバーできる
- 章タイトルから機能の推測はしにくい…

---

# 内容の比較

**SSSWV** - Server Side Swift with Vapor

VS

**SSSVE** - Server-side Swift (Vapor Edition)

---

## **SSSWV** - Server Side Swift with Vapor


:+1: epub のレイアウトが綺麗で文章もコードもすごく読みやすい
:+1: 英語も読みやすい
:+1: コード内にコメントで「1, 2...」のように目印をつけて解説してくれるのでわかりやすい
:+1: Future 周りの API の紹介が豊富
  => **SSSVE** ではほぼ map/flatMap の基本的な API しか使われない
  => Swift NIO にもちょろっとだけ触れられている
:+1: Fluent のモデルの理解がしやすい
  => **SSSVE** ではさらっと流される `SQLiteModel` のような楽ちんクラスが具体的に何をやってくれているかも書いてある
:+1: コントローラーを活用する
  => **SSSVE** にはいわゆるコントローラーは登場しない
:+1: Vapor Cloud へのデプロイ手順の記載がある
:+1: データベースのホスティングに Docker を使う
:+1: ごく簡単にだがサービスやコンテナの解説がある (今後追加される章でもっと詳しく書かれるはず)
:+1: Fluent のモデルで 1:n だけでなく m:n の関連の実装もある
  => **SSSVE** では出てこない (これは欲しい)

---

## **SSSVE** - Server-side Swift (Vapor Edition)

:+1: 英語が読みやすい
:+1: Swift 言語そのものの文法などの解説がある
:+1: RDBMS や SQL の解説がある
:+1: 色んなアプリケーションを作るので実践的に活用できるパターンに出会える
  => フロントエンドとバックエンドをアプリ内で分けるようなパターンもあり、設計に示唆を与えてくれる
:+1: その結果同様の作業の繰り返しも発生するが、その分学習効果的には高い
:+1: Leaf のカスタムタグの作り方の説明がある
  => **SSSWV** にはない。今後の章でも出てこない？
:+1: アプリケーションで必須な認証の仕組みの作り方がある
  => **SSSWV** には (まだ) ない
:+1: C のラッパーライブラリを使う場面もある
  => Xcode のリンカの設定などにも触れられる
:+1: Future など Async の**概念からの**説明に腐心している
  => **SSSWV** にも説明はあるが、非同期処理の初心者にはこちらの方が嬉しい

---

# 結論

---

# 結論

「Server Side Swift with Vapor」が完成したら、まずそれを読むのが鉄板になると思う。
その上で、

- 色んなアプリケーションのパターンに触れたい
- Async の理解が難しい


などの場合に「Server-side Swift (Vapor Edition)」のが良いだろう。

ただ、現状「Server Side Swift with Vapor」は完成していない…

---

# 結論

自分の話をすると、Vapor 3.0 のリリースと同時にいくつかの小粒なアプリケーションを Vapor で実装し始めたが、

- 公式ドキュメント
- API リファレンス
- コードそのもの

だけを手がかりに作っていくのがきつかった (簡単なところでハマる) ので、ひとまず先に「Server-side Swift (Vapor Edition)」を読んだ。

その結果大抵の基本的な実装パターンが掴めたのでかなりスムーズに実装が進むようになった。

むしろそこまで行けば後はリファレンスとコード読みつつ理解を進めていけるので「Server Side Swift with Vapor」は必ずしも読まなくてもよかったかもしれない

---

# 結論

いずれにせよ、現時点では Vapor 3.0 を学習するための一番早い方法はこれらの本を読むことだと思う。
英語ではあるが、そもそも英語ができないと正直日本語情報がほとんどない現状では Vapor 3.0 を学んでいくのはきびしい。

なのでやっぱり

Vapor 初心者の方はどっちも読むと良いです。