おもしろwebサービス開発日記

Ruby や Rails を中心に、web技術について書いています

ginza.rb 第96回を開催してFizzyについて学んだ

Ginza.rb 第96回 - Fizzyソースコードリーディング - connpass

第96回は37signals社が公開したFizzyのソースコードを見ながらワイワイしました。

basecamp/fizzy: Kanban as it should be. Not as it has been.

fizzyというビジネスに対する感想

第96回を開催したタイミングでは「1000カード以上を作ろうとすると20ドル/月」という課金体系でした。ユーザ数などは無制限でだいぶ安い。さらにコードが公開されているのでオンプレでも動かせる。オンプレからクラウド、クラウドからオンプレへの移行もやりやすいようにuuid7で作っていて(それぞれが稼働している状態でデータをマージしてもidが衝突しない)、ユーザとしてみたら最高便利なんだけどサービス提供側からしたらこれで採算取れるのかな?と思っていたら完全無料のサービスになってしまって驚きました。元々どういうビジネスプランだったのか気になるところです。

設計や実装に対する感想

色々気になった点を列挙しています。

  • 大まかなコード体系としてはbasecamp/once-campfireと似ています(同一の会社のプロダクトなので当たり前だけど)。最近のプロダクトなのでAGENTS.mdだったりSTYLE.md)だったりとAIエージェントに読ませるためのファイルがあるのが違い。
  • 大きな特徴としてはsqlite3とmysqlのどちらでも使える構成だということ。元々はsqlite3で実装する予定だったけど途中で厳しいことがわかりSaaS版はmysqlにしたというのをどこかで読みました。
  • 全文検索をDBで実装しているというのも珍しいところです。一昨年のRails WorldでDHHが話していたActive Record Searchの原型はこれなんだろうと思っています。しかし実装としてはMySQLとsqliteの全文検索機能を比較的素朴に使っており、単語はスペースで区切られるのが前提になっているため日本語でFizzyを使うと検索はまともに動きません。残念><
  • seedの定義の仕方も面白いです。まずseed用のDSLを定義して、各テナントでDSLを利用してレコードを作っています。
  • マルチテナントなSaaSとしてテナントを分けるのをRackミドルウェアで実装している、というのも個人的には面白い点だと思いました
  • あとはライセンスが興味深かったです。基本MITと同等だけど競合サービスを作るのは禁止というO’Saasyライセンスを新設しています。
  • koicさんも書いてたけどzip_kitを知れたのは収穫でした。

次回

次回は5月15日(金)に、RubyKaigiの振り返りをやります。興味のある方はぜひご参加ください。

Ginza.rb 第97回 - RubyKaigi 2026を振り返る - connpass