2020-12-15に投稿

QnQ開発日誌 Firebasde匿名認証機能で誰でも気兼ねなく見られるようにした

https://qnqtree.com/

友人と開発中のFirebaseなWebサービス、QnQの開発日誌です。質問に質問で返す、Q&AならぬQ&Qサービス。どんなサービスかの詳細は「質問に質問で返されるドM向けQ&Qサービス、QnQを公開・開発中です – 或る阿呆の記」。

作って公開したのはいいものの、覚悟していたけれどやっぱり開店休業状態が続き、周囲の人に使ってもらって意見を伺いながら、どうしたらユーザー増えるかなーと試行錯誤中です。で、今まではGoogleまたはTwitterでログインしないと何も見えない状態だったんですが、今回はそういったことをせずに中身を見られる匿名ログインを導入しました。

本記事では、導入の背景と、すったもんだをつらつらと。僕らの週末と引き換えに作られました。

Firebase 匿名認証

匿名ログインというのは、Firebase Authenticationで言うところの「匿名認証」の機能を導入した、ということになります。「JavaScript を使用して Firebase 匿名認証を行う」この機能です。

Firebase Authenticationを用いると、GoogleやTwitterなどのIDプロバイダを利用して、Webサービスの認証に使えるわけですが、そういったIDプロバイダを利用しない認証、ですね。

そりゃただのログインしてないユーザーじゃないのか、という感じですが、これを使うとセキュリティルールで保護しているFirestoreにもアクセスできるようになります。

導入の背景

なぜこの機能を追加したか?

「知らないサービスの中が見えないと怖い」「知らないサービスにログインするのに抵抗がある」と、複数人から意見を頂戴したからです。あれですね、中の見えない初めてのお店怖い、みたいな感じですね。オンラインでは探検家の僕も、オフラインではそんな感じなのでわかります。

実際、誰にどこまで見せるかは、度々議論になっていました。ですが、心理的安全性を考えて、インターネットに完全公開するのは気が引けていました。とはいえ、GoogleやTwitterのアカウントを持っていれば誰でもログインして即見られる以上、ログインしていないユーザーに見せないのは、機能的には意味のないことです。扉に鍵をかけているわけじゃない。

で、まぁ実際に「怖い」という意見をもらったこと(それもリアル知人)で、意味のない規制だから取っ払おうか、ということになりました。

公開後、覚悟はしていたものの、ほとんど使ってもらえないので、これで少しでもユーザーにとって親しみやすくなればという感じです。本来であれば、実質的には変わらないとはいえ、見た目上公開範囲が変わっているわけですから、既存ユーザーの支持なく勝手にできない変更ことだと思います。このよくわからんサービスを使ってくれる人には感謝しかない。ただその既存ユーザーがマジで少なくてですね…。まぁ、実際のところ困る人もいないだろうなぁ、と。

という、悲しくも切実な裏事情でした。

導入のすったもんだ Bug & Bug & Bug

さて、今回は認証・認可の観点から言えば劇的かつ根本的な変化と言えます。なので、大幅な変更を覚悟していた……のですが、匿名認証機能自体はすぐに使うことができて、ちょっといじった感じだとうまく動いてそうだったので、さっと公開したところ、公開後次々とひどいバグが見つかって、速攻で差し戻したという経緯があります。やはり認証周りの変更はエグかった。

今まで適当に誤魔化していたところが、匿名ユーザーという本来想定していなかったユーザーが出てきたことによって、次々とエラーを引き起こしました。またDBが汚れたことによって、それがさらに想定しないエラーに繋がり、エラーがエラーを呼ぶ地獄のエラーチェイン。エラーがとどまるところを知らない。

コーディング規約もなく各々勝手に開発していたため、関数の粒度や返り値のポリシーのなさで苦しみました。追いついていないドキュメントに嵌められました。適当なnullチェックやエラー処理に泣きました。適当なログ出力故に、エラーの該当箇所を血眼になって探しました。ユニットテストもないので入出力はデグレの嵐でした。

自業自得の地獄に悶えゲロ吐きつつ、一個一個バグを潰していき、気がつくとほぼすべてのファイルについて手を入れた、開発以来の一大リファクタリングになっていました。特にルーティング周り、めっちゃ手を入れることになりました。そして週末は終わっていました。

振り返ってみると、むしろ最初よくあれで公開したなと思ったんですが、油断や慣れ、焦りがあったなぁと思います。少しでも早く機能追加しなきゃ、今までいけたしいけるっしょ、みたいな。僕もコードレビューしたんですが、全然的を射ていないしょうもない指摘(文言変えたらいんじゃね、レベル)だけしてOKしたんですが、本当に反省して、しばらく凹んでいました。

あとはこの週末と引き換えに出来た機能が、どれくらい効果あるかを見ていきたいと思います。

ところで、当然のように、Firebase Authenticationのダッシュボード見ると匿名ユーザーがめっちゃ増えているんですが、これ放置してていいのかな。でも定期的にスクリプト動かして削除はどう考えてもおかしい気がするし。

今後の開発

QnQは大きな課題を3つ抱えています。

人が来ない人が来ても続かないバグが多い

今回の措置は、人を少しでも増やすための施策であり、また大規模なリファクタリングを伴うことで、安定性も多少向上しました。

で、次の大きな更新としては、ユーザーへの通知機能があるかな、と思います。匿名ではないログインをしてもらえれば、Eメールを使ったアクションなんかが技術的にはできるわけですが、しかしこれって、実際どれくらいなら許されるんだろう?などと疑問に思って調べつつ、まぁでもだいたいどのWebサービスでもやられているので、ある程度は良いのではないかと。ただ個人情報なので、取り扱い厳重注意で、Authenticationの外には出したくないですが……。

というか、今回みたいな大きな変更があったら、そもそも通知して然るべきの気がする。リリースノートまで作るかどうかは微妙ですが。Webサービスのリリースノートとか見たことないな。

また、そもそもサービスの敷居が高いという意見もかなり頂戴していて、もう少し親しみのありそうな機能追加(これも大きな改変になるかと)も予定しています。まぁ年内は無理だろうなぁ。

あとユニットテスト作ります……はい……。

Originally published at hack-le.com
ツイッターでシェア
みんなに共有、忘れないようにメモ

tama

IoT関係で技術者としてお仕事しています。 趣味のブログは9年目に突入しました。 16性格診断はINFP-T。どんな心理テストでも高い内向性を叩き出せます。 友人とWebサービス開発してます。https://qnqtree.com

Crieitは誰でも投稿できるサービスです。 是非記事の投稿をお願いします。どんな軽い内容でも投稿できます。

また、「こんな記事が読みたいけど見つからない!」という方は是非記事投稿リクエストボードへ!

有料記事を販売できるようになりました!

こじんまりと作業ログやメモ、進捗を書き残しておきたい方はボード機能をご利用ください。
ボードとは?

コメント