行きたい場所に対して、一緒に行く相手を募集するサービス「withruit」を個人開発しました。
https://withruit.com
【サービスについて】
自分が行きたい場所を投稿することによって、同行者を募集するサービスです。
開発期間は2ヶ月弱で、リリース後は1ヶ月で初期ユーザを120人集めることができました。
現在は、管理者機能からマークダウンで記事を入稿できる機能を作成し、サイト内に入稿した記事を表示できる機能を開発しています。
【使った技術について】
フロントはNuxt.js、バックエンドはfirebaseを使っています。
React, Angular, Vueを一通り触ってみて、自分が一番素早くアプリケーションを作れそうだなと感じたVueを使ってアプリケーションを作成しました。
また、ルーティングの自動生成やSSRのやりやすさなどの恩恵も受けたかったため、Nuxt.jsを使ってみました。
バックエンドに関しては、今回作るアプリケーションがそんなに複雑な機能がないということと、個人サービスなのでなるべくコストを抑えたいという思いから、firebaseを使ってみました。
【苦労した点】
* 初期ユーザ集め
すでに個人でいくつかサービスを作っていたこともあったため、アプリケーションの作成自体はつくに詰まることなく作ることができました。
ただ、作ったアプリケーションを使ってくれるユーザーがなかなか集まりませんでした。
そこで、bosyuや個人サービスをサイト上に掲載してくれるサイトに掲載依頼を出して、初期ユーザを集めることにしました。
結果、冒頭でも書きましたがリリースから1ヶ月で120人を越える初期ユーザを獲得することができました。
* フロントに対する責務の分割
今回はNuxt.jsとfirebaseを使ってアプリケーションを開発したため、サーバーレスなアプリケーション構成を選択しました。
そのため、普段はサーバー側でやっているような処理もフロント側で処理してしまい、フロントの責務を大きく超えてしまうような構成になってしまいました。
そこで、今回はfirebaseのcloud functionsという機能を使い、フロントから少しづつ処理を分割して行きました。
cloud functionsでは、データベースの変更や認証をトリガーに処理を実行できるので、フロントで持ちたくない関心ごとに関して、分割することができました。
* NoSQL形式によるデータ設計
データの永続化にfirebaseのrealtime databaseを使用したため、データはNoSQL形式で管理する必要がありました。
今までRDBでのデータ設計経験しかなかったため、RDBに保存している感覚でアプリケーション開発を行うと、欲しいデータが取得しにくいということが多々ありました。
そこで、NoSQL形式のデータ設計に詳しい方からアドバイスをもらい、欲しい情報を取得しやすい形でデータを保存するようにしました。
その結果、用途別で同じデータを複数箇所で保持することになり、多少の冗長さは感じるものの、なんとかデータの取得ロジックをシンプルに保ちながら、欲しい情報を取得できるように実装できました。