正規表現パターンからテキストを生成するシンプルなアプリ、Regexgをリリースしました。
簡単な紹介をさせて頂きたいと思います。
(画像: Regexg - Text Generator for Regular Expression)
機械学習のためのデータ生成や、開発におけるフェイクデータの作成、あるいはビジネスやマーケティングのシーンにおけるセールス文章やSNSやツイートの投稿文まで、形式的な型に則ってデータの生成を行いたい場合はたまにあるかと思います。
このアプリでは例えば以下のような正規表現パターンを入力すると
Good (morning|afternoon|evening)
以下のようにデータを返します。
Good morning
Good afternoon
Good evening
セールスレターやメールの文章の一部分をバリエーションを付けて取得したい、なんて場合には
Hello, welcome( back)? to (our|the) app\. May I help you\?
上記のようなパターンから
Hello, welcome to our app. May I help you?
Hello, welcome to the app. May I help you?
Hello, welcome back to our app. May I help you?
Hello, welcome back to the app. May I help you?
このような文章を生成できるかもしれません。
実装
さて、このアプリはとてもシンプルに見えます。実際シンプルなのですが、実は中身はけっこう複雑です。
複雑になってしまった原因としては主には以下の通りであり、
- テキスト生成をサーバーサイドで処理している
- 生成はNode.js/Next.jsではなく同一サーバーのRuby/Sinatraサーバーに対し内部的にAPIリクエストして処理(つまり二段階のAPIリクエストをしている)
- そういう設計になったのは処理を隠す(クライアントサイドのJSでオープンコードにしない)ため
- ユーザー登録、Stripeでの支払い実装と有料ユーザの実装と利用制限まで(ほぼ)実装した
なぜ計画が頓挫した(事実上放棄された)かと言えば、
- 正規表現の生成って意外にCPU使う(多くのユーザがバンバン使うことに耐えられない)
- もっと言えば正規表現を悪用したdos攻撃(ReDoS攻撃)まである。それだけ負荷が大きくなり得る
- 月々お金取るならここらへん自信と責任持たないと面倒事になりそう。
- 少なくとも規約なりに"ゲストユーザ有料ユーザ問わずこういうパターンはだめ(illegal)です(クレームも返金要請もしないでね)"といった旨を書くべき。そこらをちゃんと書けるために周辺知識を深め潜在的リスクを把握しておく必要があるだろうと判断
- そこまでリスク・コスト対リターン見合わなそうなのに市場はニッチすぎる
- ならもう無料だけでいいか
といった経緯となります。
テックスタック
上記でも触れた通り、このアプリRegexgの下にある技術は多岐に渡ります。
同じようなアプリを実装してQiitaに挙げられている方を見かけましたが、本来Regexgに似たような物であればこの方のアプリのようにJavaScriptだけで、つまりサーバーレスで作れます。
なので支払いもユーザ実装も省いてしまった(next.jsのrewritesでルートにアクセスできないように現在はしてあります)状態の当該アプリにおいては、このような仕様となっていることは不必要なオーバーヘッドが大きいと自責せざるを得ない状況ではあります。
その上で、一応使用されているテックスタックを手短に羅列します。
- Next.js (Node.js)
react, typescript, mongodb, passport.js, stripe - Sinatra (Ruby)
regexp-examples - Docker
docker-compose (limits:cpus, networks), nginx
なお開発に掛けた期間は一週間弱です。Rubyは数年ぶりに書きましたがcopilotがサポートしてくれたので割りと楽しく書けました。
反省
やはり市場調査やリスク・コストを考慮に入れたリターンの計算は大事でした。
以上です。ありがとうございます。
( 出典: Regexg - Text Generator for Regular Expression )
(参考)