SwiftでMongoDBを使う

はじめに

他所から持ってきたVagrantでいじっていたMongoDB、サーバを立てた目的はiOSアプリからMongoDBを使いたかったから。まぁ遊びたかったからというのもありますが。

curlで叩くのが直球の方法ですが、SwiftでMongoDBを扱うpodを見つけたのでそれを試してみます。

何事も経験してみないとわからないんです。

経験しないとわからないといえば、2×4材って思いの外歪んでいるんですね。
ちょっとした工作のため長尺の木を何本かにカットしてもらったんですが、金尺で確認してみると結構曲がりやねじれがありました。まっすぐきれいに製材されているように見えたんですが、木材だから仕方がないですね。これも経験。

StitchSDKを試す

SDKのインストール

iOSアプリからMongoDBを扱うにはStitchSDKというのを使うそうです。

GitHub - mongodb/stitch-ios-sdk
Contribute to mongodb/stitch-ios-sdk development by creating an account on GitHub.

使い方を見るとpodでお手軽にインストールして使い方もあっさりしています。サクッと行きましょう。

ClientAppIDとは?

ただ、物事とは総じてうまく進まないものです。
ClientAppIDというのを要求されました。

MongoDBのサーバを立てたときもいじったときもClientAppIDなんて見かけませんでした。もしやコレクションやデータベースの名前なのか?

使い方を改めて見てみます。

GitHub - mongodb/stitch-ios-sdk
Contribute to mongodb/stitch-ios-sdk development by creating an account on GitHub.

Stitchというサービスでアプリの素を作らないといけないらしいです。なんとなんと、StitchSDKStitchというサービスでつくられたデータベースを扱うためのSDKだったようです。

自前のMongoDBサーバにアクセスするには使えないことが分かっただけでも大収穫です。

アプローチを切り替えてみる

気を取り直して行きましょう。システム開発なんてこんなもんです。うまく進む物事なんて、あり得ません。

何とかならないかとStitchSDKをPodでインストールしたときのログを見ていましたら、MongoSwiftが入っていました。

GitHub - mongodb/mongo-swift-driver: The official MongoDB driver for Swift
The official MongoDB driver for Swift. Contribute to mongodb/mongo-swift-driver development by creating an account on GitHub.

何となく使えそうな気配が漂っています。

MongoSwiftを試してみる

そもそもiOSで使えるのか

The driver supports use with Swift 5.1+ on MacOS and Linux.
MacOSとLinuxで、Swift5.1以上をサポートしているようです。
あれ?iOSは?

Installation is supported via Swift Package Manager.
podで入ったので多分大丈夫でしょう。

サンプルコードを真似してみる

まずは動くかどうかがわからないので、サンプルコードを真似します。ローカルホストの27017番ポートでMongoDBなんて稼働していません。とりあえず実行すると、通信できない旨のエラーが吐かれることでしょう。

let client = try MongoClient("mongodb://localhost:27017")
let db = client.db("sampleDB")
let collection = try db.createCollection("sampleCollection";)
cleanupMongoSwift()

MongoSwiftのimportを忘れずに!

実行してみると、期待通りの反応を頂きました。無いサーバにつなごうとしたから当然です。

No suitable servers found

まとめ

今日のところはここまでにします。

最初にStitchSDKに飛びついたために少し寄り道をしてしまいましたが、MongoDBサーバにつなぐことができる段階まで進めました。コンパイルエラーが出ていないので、ここまでくれば後は比較的楽でしょう。サーバを立ててドキュメントの読み書きをしてみたいと思います。

なお、実行してみると判りますが、大量の警告が出てきます(私が実行したときは40件ほど)。少し気になります。Podのバージョンアップで解消できるのか、はたまた自分でなんとかしないと行けないのか……