Spirはこう作られています!
こんにちは。Spirでエンジニアをやっております、カンと申します。日程調整ツールとしてSpirを作り始めて1年が経ちました。Spirのシステム構成を説明しながら感じたこと、困ってることを共有したいと思います。これから何かサービスを作ろうとしている方達に少しでもお役に立てたら幸いです。
よろしくお願いします!
1. SpirのStructure
2. 技術スタック
フロントエンド: Vue.js(TS), Vuex
Vueは前職で使っていたのであまり悩むことなくVueにしました。使ってみたらTypescriptとの相性があまりよくなくて、Reactに移行したいなと思ったりもします。ですが致命的でもないのでそのままVueで開発しています。TemplateでTSの恩恵を受けられないのが一番つらいところです。
- 課題
MixInによる共通化は、thisのせいでなかなかつらいです。 Composition APIを導入したいですね。今だとVue3にUpgradeすればいいのでしょうけど、正直必要性をそこまで感じていない状態ですね。
バックエンド
1. Node.js(TS)
Denoが気になりますが。現在特に問題はないです。最近DDDを意識して開発を進めています。
2. Firestore
最初作ろうとしてたサービスがChatアプリだったので、FirestoreをDBにしました。その後Chatアプリではなくなりましたが、DBを移行する必要はまだ感じてなくてそのまま使っています。ただ、Firestoreの機能をフルに使うわけではなく、BackendでFirestoreをReadしてAPIを経由してフロントエンドに返しています。理由はモバイルアプリなどクライアントが増えた時にビジネスロジックがばらばらになるからです。(もしいい案のある方がいたら連絡ください!)
3.Firebase Functions
最初はAPIのすべてをFirebaseFunctionsのHTTP Triggerを使ってサービスしましたが、速度が遅くてAppEngineに移行しました。移行後、FunctionsのDB Event Triggerだけ残っていて、DBの変更時に何か作業を行う用途で使っています。
その他
1. CI/CD: Github Actions
CircleCIを使ってましたが、有料プランが高すぎたので移行しました。満足しています。今後、メンバーが増えても高頻度で安定したリリースを続けられるようなOps基盤を作っていきたいです。
2. 監視ツール: Stackdriver Monitoring, Sentry
3. ドキュメンテーション: Notion
4. デザインツール: Figma
5. Mail配信: Sendgrid
6. 他ツール: Slack, Github
3.開発プロセス
1. フルリモート。
2. 大きな機能は皆集まる会議で(月1回)話し合う。
3. 優先順位が決まれば、デザインはデザインチームと話し合いながら仕様を固める。
4. 基本エンジニア本人がやりたいタスクをやってもらう。手が空いたら次の機能に着手する。
5. BackendとFrontendを綺麗にわけるのではなく機能ごとにやっていく。
6. タスクはNotion上で進捗を共有。
7. GitFlowに合わせてすすめる。
4.今後の展開,困ってること
まだまだ始まったばかりのシステムなので、これからやっていきたいことは数多くあります。以下は一例です。
- Slack等のチャットシステムとの連携
- ユーザーごとに最適化したスケジュールの提案
- ユーザーのコンタクト管理
- 他システムとのAPI連携
- アプリ開発
- マイクロサービス化
そして困ってることで言えば、今フルタイムのメンバーが2人しかいないためやりたいことに比べて人手が足りていないです。(どの会社もそうだと思いますが😅)
- 仕様決め、経営絡みでミーティングが多くなったら開発が遅くなる。ミーティングの開発のコンテキストチェンジがうまくいかない場合も多々ある。
- Bugや改善要望が多いがうまく捌けていない。
- (特に僕が)PureなBtoCサービス開発経験が浅いため、利用ユーザーが増えるにつれ何が起きるのかしっかりイメージできていない。
- 今後ユーザーのEventなど分析することになったらどこから手をつけたらいいか分かっていない。
5. さいごに
どうでしょうか?もし提案、質問などありましたら気軽に連絡ください!これからもSpirでの開発のことは頻繁に共有していきたいと思います。
さいごに大事なことを伝えたいと思います。
このNoteでSpirについて少しでも興味を持ってくれたあなた!一緒にSpirを作って行きませんか?お待ちしております!!!
こちらから連絡してください!