この記事では、1ヶ月前に開発を始めたWebアプリについて書きます。
プロジェクトの目的
個人のポートフォリオ作品を作成して、それをもとに就活をしようと考えてスタートしたものです。いろいろと構想を練っていたら、けっこう大規模なものになってしまいました。
このプロジェクトは、プロジェクトの達成が目的ではなくて、取り組みによる自己の成長が目的です。たとえ進捗が悪くても、学びがあれば全く問題ありません。最終的には自分を企業に売り込むためのものですので、自分が仕事を得られたところで、プロジェクトは成功です。
マネタイズはとりあえず、考えていません(が、そのうちするかも)。オープンソースとして開発して、無料で公開します。
どんなアプリ?
出会い系サイトの掲示板巡回ほど、人類に無駄な作業はないのではないでしょうか?この個人開発プロジェクトでは、そんな悩める独身男性を救うためのものです。
本プロジェクトは、 マッチングサイトをIT技術の力によって自動化、効率化することを目的とします。対象サイトに対して横断的な検索や操作、自動化を推進します。 また、サイトから取得したデータに対して機械学習を適用し、意思決定を補助します。
ターゲットユーザは20代〜40代の男性です。対象サイトはとりあえず、こんな感じ。
機能としては、こんなものを実装予定です。
- 掲示板へのスケジュール自動投稿
- 掲示板定期監視
- サイト横断検索機能
- 機械学習による業者判定
- 管理UI
- データ分析用ダッシュボード
簡単にいうと、マッチングサイトの差異を吸収する横断的なUI(インタフェース)です。
採用する技術
勉強が目的であるため、新しい技術は積極的に取り入れていきます。また、仕事を想定しているため、品質のためのテストやインフラ周りにも力を入れます。
バックエンド
私がもともとRailsエンジニアとして働いていたので、バックエンドはRuby on Railsで構築します。プロジェクトを通じて、私のRails力を高めることが目的です。RSpecでテストも書きます。
Firebaseも検討したのですが、Railsエンジニアを売りに頑張っていきたいので、魂は売りません。
フロントエンド
新しい挑戦として、フロントエンドはNuxt.js(Vue.js)を採用しました。これは、私が11月まで働いていた会社で、Vue.jsを使っていて、私はVue.jsができなくて契約を切られたため、雪辱の復讐を果たすために、この技術を採用します。TypeScript、Styled Component、Jestなどのモダンなものにも挑戦していきます。
RailsをAPIサーバにして、Nuxt.jsと通信するようなアーキを考えています。こういうAPIサーバとしてのRailsの使い方は、フロントエンドの進化によって、増えていくと考えられるのでここの技術習得をしておきたいのですが、なかなかネットに情報がなくて苦労しています。
機械学習サーバ
機械学習をWebサービスに組み込むことは、とても力がつくと思い、またMLOps領域にも興味があるため、機械学習サービスにも挑戦します。Kaggleをやっていたので、分析はある程度できます。
Rails(Ruby)では機械学習のライブラリが使えないため、 Pythonサーバ(Flask)を立てて、これもREST APIでつなごうと思います。または、AWSが提供するSageMakerなど使えないか検討しています。
インフラ
GitHubによるPR駆動開発を推進します。GitHubの機能はフル活用します。また、静的解析やCIなどの仕組みも導入して、品質を高めます。
このプロジェクトで頭を捻っているところは、このプロダクトはWebサービスとして運用するのではなく、個人が自分のサーバやパソコンに設置して利用するWebアプリを考えています。そのため、Webアプリを自分でデプロイしたりインストールしたりする作業が必要なのですが、できればコマンドラインを知らない人がGUIでボタンをポチっとするだけで使えるようなインフラ周りの自動化を考えています。
開発体制
はじめ一人でやっていたのですが、結構規模が大きくなったので、オープンソースにして共同開発者をTwitterで募ったところ、駆け出しRailsエンジニアの方にJoinしてもらうことになりしました。また、MENTAというサービスで技術顧問を募集して、アドバイザーをみつけました。
現在3人でのOSS開発です。とはいえ、1人は普段は仕事をしてますし、もうひとりはアドバイザーですが、私は無職なため、実質私がほとんどコントリビューションしています。
所感
個人プロダクトなので、全てを自分で考えて実行できるので、楽しいです。会社で製品開発やWeb開発をしていたときは、単なる作業員や歯車でした。今は、仕様検討から技術アーキの設計、プログラミング、品質管理など、開発のすべてに自分の意志を通わせることができます。
また、チーム開発も一人で開発するよりも楽しいです。仕様を相談できたり、議論したり、コードレビューしたりなど、ひとりよがりではなくて他の視点が入ることで、よりよい考えが得られます。
ひとりでの個人開発もいいですが、数人でチームを組んだ開発もとても楽しいのでオススメです!!