#環境をアップデートします。
以前の環境はノートPCと共にお亡くなりになりましたが、再度同環境を構築してVaporの動作を確認していました。しかしながらテンプレートがどうも上手く動かないようで、どうせ調べるなら最新がいいなぁと思いVapor4系に更新することにしました。
#Swift 5.2.1
Vapor4系はSwift5.2以上が必要なので、まずSwiftを更新します。
タイムリーなことに、2020年3月30日に5.2.1がリリースされていました。
Ubuntu 18.04用をダウンロードして展開します。
5.1.5の時と同じように/usr/local下へコピーしてパスを通します。
.bashrcを編集
#export PATH=/usr/local/swift-5.1.5-RELEASE-ubuntu18.04/usr/bin:$PATH
export PATH=/usr/local/swift-5.2.1-RELEASE-ubuntu18.04/usr/bin:$PATH
ダメだった時に備えて、Swift5.1.5も残しておきます。
source .bashrc
swift --version
Swift5.2.1が使えるようになりました。
#Vapor4
Vapor4.0のヘルプを見ながらVapor Toolboxをインストールします。
githubから取ってきて、ビルドします。
git clone https://github.com/vapor/toolbox.git
cd toolbox
git checkout は最新を使うのでやらない
swift build -c release --disable-sandbox
エラー
Fetching https://github.com/tanner0101/mustache.git
Fetching https://github.com/apple/swift-log.git
Fetching https://github.com/vapor/console-kit.git
Fetching https://github.com/apple/swift-nio.git
Fetching https://github.com/jpsim/Yams.git
Cloning https://github.com/jpsim/Yams.git
Resolving https://github.com/jpsim/Yams.git at 2.0.0
Cloning https://github.com/vapor/console-kit.git
Resolving https://github.com/vapor/console-kit.git at 4.0.0-rc.1
Cloning https://github.com/apple/swift-nio.git
Resolving https://github.com/apple/swift-nio.git at 2.15.0
Cloning https://github.com/apple/swift-log.git
Resolving https://github.com/apple/swift-log.git at 1.2.0
Cloning https://github.com/tanner0101/mustache.git
Resolving https://github.com/tanner0101/mustache.git at 0.1.0
error: missing LinuxMain.swift file in the Tests directory
空でもいいという噂もありましたが、LinuxMain.swift をTests下に以下な感じで作ってみます。
import XCTest
@testable import MonoGeneratorTests
XCTMain([
testCase(GeneratorTests.allTests),
])
もう一回ビルドすると、なにやらWarningが出てますが、とりあえずvaporは出来ています。
/home/arimitsu/toolbox/.build/checkouts/Yams/Sources/Yams/Emitter.swift:338:32: warning: initialization of 'UnsafeMutablePointer<yaml_version_directive_t>' (aka 'UnsafeMutablePointer<yaml_version_directive_s>') results in a dangling pointer
versionDirective = UnsafeMutablePointer(&versionDirectiveValue)
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/home/arimitsu/toolbox/.build/checkouts/Yams/Sources/Yams/Emitter.swift:338:53: note: implicit argument conversion from 'yaml_version_directive_t' (aka 'yaml_version_directive_s') to 'UnsafeMutablePointer<yaml_version_directive_t>' (aka 'UnsafeMutablePointer<yaml_version_directive_s>') produces a pointer valid only for the duration of the call to 'init(_:)'
versionDirective = UnsafeMutablePointer(&versionDirectiveValue)
^~~~~~~~~~~~~~~~~~~~~~
/home/arimitsu/toolbox/.build/checkouts/Yams/Sources/Yams/Emitter.swift:338:53: note: use 'withUnsafeMutablePointer' in order to explicitly convert argument to pointer valid for a defined scope
versionDirective = UnsafeMutablePointer(&versionDirectiveValue)
^
[22/22] Linking vapor
./.build/release下に出力された vapor を/usr/local/binの下へコピーしてヘルプを表示して確認する。
vapor --help
vapor --version これは無し
#プロジェクト作成
新規にプロジェクトを作ってみます。
vapor-beta new hello -n
ん?
vapor-betaは無いだろうなぁ
-nはいらないかな
Vapor4.0.0なのでhello「4」の以下でいきます。
vapor new hello4
Fluentはとりあえず使いませんので「n」で。
Cloning template...
name: hello4
Would you like to use Fluent?
y/n> n
fluent: No
Generating project files
+ Package.swift
+ main.swift
+ configure.swift
+ routes.swift
+ .gitkeep
+ AppTests.swift
+ Dockerfile
+ docker-compose.yml
+ .gitignore
+ .dockerignore
Creating git repository
Adding first commit
ここでGitのエラーが出るかもしれません。その前にGitのユーザー名とメールアドレスを登録しておきましょう。
git config --global user.name [名前]
git config --global user.email [メールアドレス]
cd hello4
vapor build
ネットで調べたところ、同じようにコアダンプしている人が質問してました。
- 質問者
「Vaporでビルドするとコアダンプするんだけど、どうしたらいい?」 - 回答者
「Swift試してみた?」 - 質問者
「動いた!」
以上終わり?swiftでいいのかね?
swift build
またか・・・
上でつくったLinuxMain.swift をTests下にコピーしてやります。
swift build
できた!
swift run
ブラウザからも動作を確認できました。
#途中でいろいろやったこと
ネットで調べてやってみましたがが、とりあえず必要なかったです。
###Package.swift
プラットフォーム指定がmacOSだからダメなんじゃないの?でコメントアウト
dependenciesで指定しているパッケージのfromが最新のものを固定で指定してみる
###toolbox
toolboxのPackage.swiftでも、同様にやってみる。
toolboxのビルドで-Xswiftcをつけてみる、-g(何これ?)をつけてみる
#最後に
ビルドのWarningが気になりますがerrorではないので致命的ではないし、とりあえず動くようにはなりましたので、テンプレートの確認に戻ります。
動くのかな?