2025年8月2日土曜日

ビジネスも分かっていないと結局何をしたらいいか分からない

 開発者は開発だけをしていたらいいのか?

私は1年前は開発だけできればいいと思っていた。開発、実装が早ければ、あとは勝手に要件定義ややるべきことを誰かが決めて、今やるべきことを振ってくれると思っていた。

だが、全然そんなことはない。ベンチャー企業に入ってRailsのシステムを保守・運用しながら再設計のフェーズになって分かったが、それじゃ意味がない。

システムはビジネスサイドが何をしたいかによって変わる。

サービスAを立ち上げていたけどサービスBが走り、メイン稼働はBである。Aをどうしたらよいか?システムAを移行するにあたって移行計画をする必要がある。

それは開発だけをしていたら良いという思考だと全然できない。

我々は要件定義や設計はもちろん、アーキテクチャを理解して自分が今やっているサービスはどういうアーキテクチャになれば最適なのかを知っていなければならない。

そうしなければ、今やるべきことが分からないし開発もできない。

なんだったらビジネスサイドは開発でどういうことができるのかさえ分からないのでこちらからアプローチして、どういうことをするべきなのか指針を示せるようにならないといけない。

私はこれからは最適なアーキテクチャの進化、システムの移行計画、要件定義、ドメインに沿ったアプリケーション設計ができるようにならなければならないと思った。

そのためには今まで参加したプロジェクトや開発をしたアプリケーションを再度自分だったらどのようにしたらいいか考えて表現することにした。

2025年8月1日金曜日

Ruby on Railsのモノリスをリアーキテクチャする

 Ruby on Railsはマイクロサービスやサーバーレスなどの分散型アーキテクチャとは相性が悪い。

モノリスでサービスを立ち上げ、高速でローンチするのには適切な言語、フレームワークだと思う。他にもPHP/Laravelなどの選定も良い。

インターネット上だとPHP/Laravel、Ruby/Railsのシステムはオワコンという内容の意見が溢れている。しかし、そうとは限らない。

最初からマイクロサービスを想定してGo、Pythonなどを選定してもエンジニアの採用が難しいしシステム構成も難しい。私も最初から学ぶ必要がある。

なので、最初はRuby/Rails、PHP/Laravelを選定するというベンチャー企業、スタートアップが多い。

しかし、事業が成長してサービスがスケールするとモノリスで作られたサービスはどんどん開発が遅くなる。ここで分散型へ移行する必要がある。

Ruby on Railsで作られたシステムはちょっとずつアプリケーション設計を疎結合にしていき、責務を分離しないといけない。その時にドメインの知識、サービスの流れを全て把握した上でどのコンポーネントが重いのかを把握する。

私が参加していたサービスは買取オークションというサービスで、出品者と事業者、システム管理者という明確な責務が分離できた。

なので、商品が出品された時に事業者に適切に配信されるためにモデルをドメイン事業になぞらえて再設計。その後、イベント駆動型に移行するといいだろう。

イベント駆動型とは出品というイベントが発火した時にメッセージブローカーが条件によって事業者に適切に配信する。

必ずしもマイクロサービス化が適切じゃないなら、イベント駆動型アーキテクチャ、サーバーレス化など少しずつアーキテクチャを進化させていくと良い。

AIを使うと思考停止してしまう

私はタイトルの通り、AIを使うと脳みそがどうも思考停止してしまうことで悩んでいた。これからもAIは必須で開発にも活用するべき存在になってきていたが、どうしてもAIの使い方がわからず、仕事が奪われて、思考停止してしまうような不快感に襲われていた。

それは、私はAIの使い方が下手なだけだと思っていた。だけどどうしても良い使い方が分からずにとても悶々としていた。

AIをどのようにして使えば自分が仕事を奪われたと感じず、思考も停止せずに開発ができるんだろう?

先日、このブログの筆者がAIでの開発方法でとてもいいことを書いていた。

『AIのお陰で最近辛かった個人開発がまた楽しくなった』

Takuya Matsuyamaさんという日本人の方でInkdropというMarkdownノートアプリを開発している方で、この記事のエッセンスは以下だと思った。

『自分を置き換えようとせず、自分を拡張せよ』

今世の中には、AIが役立つという人もいれば、そうでもないという人もいます。その分け目は、AIの特性を理解しているかどうかです。AIはコードを驚異的な速度で生成するため「もうコーディングがボトルネックではなくなった」と錯覚しレビューが新たなボトルネックだと誤解されることがちらほらあります。

(略)

つまりボトルネックは今も昔も変わっていません。あなた自身の創造性とクラフトマンシップです。

とてもありがたい。

なんとなくAIは最初から書かせたり、自分の創造性を奪わせるような書き方はしてほしくなかったので、これが正しい使い方なのかなと思えてからはほっとした。

AIで思考停止してしまい、創造性が奪われていると感じている人は是非自分のAIの使い方を見直してほしい。

Google検索が上手い人と下手な人がいるように、AIも使い方がある。

AIは万能ではなく、私たちの創造性を奪うものではない。

私はChatGPTと会話をしていて楽しいと思うときはいつも、自分の意見やアイデア、提案をして、AIにレビューをさせるときだ。

そうすると、私の考えを構造化して本質を見出してプラスアルファして出してくれる。

だが、楽しくないと感じるときはAIに考えを丸投げしているときに感じる。

例えば、「こういうときはどうしたらいい?」「案を出して」など解決方法やアイデアなどをAIに丸投げしているとき、私たちは創造性を発揮していない。

AIには創造性を任せずに自分の創造性や分かっていることを整理してプラスアルファしてくれる存在として使っていきたい。

Ruby on Railsで構築されたモノリスがスケールできなくなってきた

創業してから10年ほど経っているレガシーシステムを運営しているとあるサービス会社に入り私は初めてRuby on Railsを学びました。

それまで私は技術力の低いSIerでC#の基幹システム開発案件を3年ほど転々としていて、今回のWebサービス、他の言語に触れるのはとてもわくわくしました。

サービスは出品者が売りたい物を出品し、それをオークション形式で査定士たちがどんどん査定していくというオークション型の出品買取サービスでした。それで出品者が気に入った取引先が決まればあとはチャットをして送品、入出金されるというシンプルなサービスです。

そのうち商品をヤマトや佐川などで発送し、査定してもらうというシステムもおそらく構築するとメルカリみたいに楽でいいサービスになると思いました。

ですが、開発者にとって大きな問題があり、ビジネスサイドも無視できない問題がありました。

それはシステムがあまりにもレガシーでとてもじゃないけどこれ以上はスケールしないということでした。

あまりに巨大な泥団子状態になっており、もし先ほど言ったような発送機能なども追加しようものなら手を付けられないシステムになっていることでしょう。

Ruby on Railsは初心者でもとっかかりやすい言語、フレームワークとして有名です。

しかし、それゆえ私のようなあまり設計やアーキテクチャに明るくない人でもやりたいことができてしまい、ソースコードを追加に追加した結果、後から入ってきたエンジニアたちはコードが複雑化しすぎていて、仕様が把握しきれないということになっていました。

これ以上Ruby on Railsで開発し続けるならシステムを刷新する必要がありました。

依存関係や結合度を分ける必要があり、モノリスをモジュラーモノリスか分散型アーキテクチャにして責務を分離させる必要がありました。

そうすることで、スケーラビリティ、パフォーマンスが共にぐっと向上し、より柔軟性の高いシステムになります。

それは今後私もアーキテクチャを学び、書いていくととして、今回言いたいことはRuby on Railsで構築されたモノリスがいかにスケールしないシステムになるかということです。

スタートアップはサービスを立ち上げて早く収益化させないといけません。

なので最初からマイクロサービスで構築してしまうと実装できるエンジニアや必要な要員などが確保できず、破綻してしまいます。

最初にRuby on Railsでモノリスを作ることはかなりいい選択だと思います。

経験のないエンジニアでもRuby on Railsに慣れたらどんどん書けるので採用に大金をかけられないスタートアップにとってはRuby on Railsは得策です。

しかし、そうやって書いてきたソースコードはあまりにも読むことが難しく、複雑で難しい仕様になってしまうので、余裕ができてきたらシステムはシステムを刷新するタイミングが必要です。

いつどのタイミングでリアーキテクチャしていくかは予算をどれくらい開発にかけてくれるかにもよりますし人員をどれくらい確保できるかにもよりますが、モノリスはいつかは限界がくるということが分かりました。

エンジニアは今開発をしているプロダクトや会社、事業がどれくらいのフェーズにいるのか。どれくらいのサービスを求められているのかを考えることが必要でしょう。

ビジネスも分かっていないと結局何をしたらいいか分からない

 開発者は開発だけをしていたらいいのか? 私は1年前は開発だけできればいいと思っていた。開発、実装が早ければ、あとは勝手に要件定義ややるべきことを誰かが決めて、今やるべきことを振ってくれると思っていた。 だが、全然そんなことはない。ベンチャー企業に入ってRailsのシステムを保守...