【Go】firestoreのqueryをoption引数にする方法
2022年04月16日 7:15
こんにちは、ISSUEの寒河江です。
今回はfirestore×Golangを利用した場合のクエリオプションの設定方法についてご紹介します。firestoreのquery option引数というのは、Limit
やOrderBy
、StartAfter
などfirestoreで提供されているqueryをオプションとしてまとめて実行クエリ関数の引数として渡すことを指しています。
firestoreにクエリを実行するGoのクライアントライブラリ
https://github.com/googleapis/google-cloud-go
最初に実装方法の結論を言うと下記になります。
ApplyQuery
を実行するクエリのを実行する関数
元々、LimitやStartAfterはページネーション用に頻繁に利用していました。ただ、その度にmodelやinteractor用のinput(クリーンアーキテクチャを採用しています)などにoption用のstructを定義して引き回すのは冗長だなと感じていました。そこでオブションの定義をfirestoreパッケージに統一することにしました。
では、詳細な実装の流れをみていきます!
まずはfirestoreのラッパーを作成します。package名はfirestore
とします。
ちなみにFunctional Options Patternについてはこちらの記事でも触れているので先に読まれた方がわかりやすいかもしれません。
続いて、クエリをオプションで追加できるようにオプションを定義します。オプションには安全性、他のクエリオプションも増えていくことを見据えた拡張性、設定のしやすさからFunctional Options Patternを使いました。また、LimitとStartAfterをクエリとして追加しています。
他のクエリ、例えばOffsetなどを追加したい場合でも同様にオプション設定関数を定義するだけになります。
上記のクエリオプションを実際のfirestoreのクエリに適用する関数を定義します。
ApplyQuery
を実行する準備は整いました!それではクエリオプションを使って、クエリを叩いてみます。
interactorからクエリの実行関数であるrepository.List
にFunctional Options Patternでオプションを渡します。
こちらでしっかりオプションの内容が適用されたクエリが実行されます。
もちろん、オプションを指定しないクエリも書くことができます。下記はオプションを指定しないケースになります。主にinteractorの変更になります。
以上、firestoreのクエリオプションを設定についてです!
もっといい形があればさらに改良していこうと思います。
診断を受けるとあなたの現在の業務委託単価を算出します。今後副業やフリーランスで単価を交渉する際の参考になります。また次の単価レンジに到達するためのヒントも確認できます。
目次を見る