サーバサイドからMongoDBへアクセスする

はじめに

さてさて。
クライアント端末のアプリケーションから直接MongoDBにアクセスしようと試行錯誤した結果諦めたところまで参りました。今回はアプローチを変えて、サーバサイドアプリケーションに挑んでみます。

いきなりサーバサイドに挑むと言っても経緯がわからないと思いますので、おさらいします。もともとはクライント端末のアプリケーションから直接MongoDBに接続してデータのやり取りをするつもりだったんです。しかし、iOSアプリからMongoDBへ直接アクセスしようと試行錯誤して得たもので示した謎のエラーにかなり苦しめられました。2日ほど試行錯誤した結果、どうしても解決できず断念した次第です。

ならば、趣向を変えて直接アクセスではない方法で挑戦してみようじゃないかということで今に至ります。

準備

サーバサイドのフレームワーク選定

サーバサイドのアプリケーションはVaporフレームワークを使うことにしました。水滴のロゴがオサレ。

GitHub - vapor/vapor: 💧 A server-side Swift HTTP web framework.
💧 A server-side Swift HTTP web framework. Contribute to vapor/vapor development by creating an account on GitHub.

Swiftに慣れているというのが一番の要因です。クライアント側のアプリケーションもまずはSwiftで作ろうと考えていますし、揃えてみました。

フレームワークの選定自体は皆様の得意分野や用途に応じて選んで貰えればいいと思います。継続性やコミュニティの活発度も参考になりますね。

併せてロゴがオサレかわいいのも選定理由の1つだったりします。直接的にはどうでもいいところですが、頻繁に目にするので、そういうところもモチベーション維持に大切です。ver4になって少しAppleのアイコンを意識し始めた感がありますね。

ちなみにSwiftで扱えるサーバサイドといえば、Kituraも選択肢の1つです。ツバメのロゴがかわいい。読み方はキツラではなくカイトゥーラらしいことを何処かで聞きました。

GitHub - Kitura/Kitura: A Swift web framework and HTTP server.
A Swift web framework and HTTP server. Contribute to Kitura/Kitura development by creating an account on GitHub.

参考までに、Vaporはgoogle先生にそのまま尋ねると電子タバコ的なものを推してくれます。そっちじゃない。

Vaporアプリケーションを作るための下準備

Vaporフレームワークの下準備は公式ドキュメント参照していただければ良いと思います。手元にMac環境があるのでMacで作っていくことを前提に話を進めます。Linuxでもできそうですが、すみません試してみたことは無いです。

Vapor Docs
Vapors documentation (web framework for Swift).
  • Xcodeの最新版インストール
  • Swiftのバージョンチェックと更新
  • VaporToolboxのインストール
  • プロジェクトを作る
  • XCodeのプロジェクトを作る
  • XCodeでビルドと実行
  • ブラウザでアクセスしてエラー無く見えることを確認

詳しいコマンドは公式ドキュメントを見ていただければ書いてます(丸投げ)。コピペしても仕方がないので、リストだけでご勘弁を。ひとまずこのリストを全部完了したら基本的なVaporアプリケーションはできあがりです。

DBサーバの用意

本筋はVaporフレームワークを使ったサーバサイドアプリケーションの構築です。ですので、DBサーバの準備には深く触れません。ローカルに用意するもよし、VPSに用意するもよし、何処かが出しているサービスを利用するもよし。何らかの方法でDBサーバを用意してください。そして外部からアクセスできるようにしておいてください。

そして、必要に応じてセキュリティ関連もよろしくおねがいします。セキュリティ的な話になったついでに、当方では漏洩等によるゴタゴタなどの責任の一切を負うことはできませんので、この辺りのことは各人にて本当にどうぞよろしくおねがいします。

MongoDBを扱えるようにする

ようやく本題に入ります。VaporアプリケーションでMongoDBを扱えるようにします。

ちなみにMongoDBの選定理由ですが、NoSQL系のDBを試したかったのと、Dockerコンテナが手元に既にあったからです。それと、葉っぱのロゴが気に入ったからです。アシカ、ゾウ、ハッパを並べてみたところハッパのロゴがオサレに見えたんです。

閑話休題。
ここですべきことは、mongo-c-driverとMongoSwiftの導入です。

mongo-c-driverの導入はbrewで一発です。

brew install mongo-c-driver

Package.swiftのdependenciesにパッケージhttps://github.com/mongodb/mongo-swift-driver.gitを追加します。バージョンは次々と上がっているようで、この記事を書いている時点では1.0.0-rc1を使ってくださいとのこと。rc1がついているので正式リリースではないかもしれないですが、まぁお試しなので良しとしましょう。

この段階でXCodeからビルドと実行して、エラーが起きなければOKです。

まとめ

気分がノッてきたところで切っていくスタイル。駆け足でVaporアプリケーションを作ってきましたが、並行してVaporフレームワーク自体の扱いかたも調べています。

現状、とりあえずVaporフレームワークでスッピンアプリケーションを作り、MongoDBへアクセスする素地ができた状態です。ここから、いろいろなことを進めていかないといけません。

  • どうやってVaporアプリケーションからDBにアクセスするのか
  • どうやってVaporアプリケーションにクライアントからアクセスするのか
  • APIとはなんぞや
  • Vaporの扱い方

Vaporフレームワークの更新が活発なのもいいところ。貪欲に行きましょう。