はじめに
みなさんは、個人開発でアプリを作っている人というとどういう人をイメージしますか??
イメージとしては、よく言われる「ツヨツヨ」なエンジニアとか、
これからエンジニアになるためにポートフォリオを作っている!
みたいな人をイメージするのではないでしょうか。
私は現在、エンジニア歴が2年とちょっとくらいで、
スキルとしては十分とは言えないレベルですが、
個人開発として、一応は・・・beta版をリリースしました。
サーバーをAWSで二つ借りるという選択肢を排除した結果(高いので)、
検証サーバーを建てていないので、beta版という形でテストしながら開発するみたいになってます。
また、多くの人に使ってもらいたい!!という目的ではない ので、
その辺りも踏まえて読んでいただけたらなと思っています。
この記事は、以下の方の参考になるかもしれません。
- 個人開発を始めたいエンジニア
- 日常で使えるアプリを自分の力で作りたいと考えている方
- 新しい技術やシステム全体の設計に挑戦したい方
【Self-Balanced-Memory(SBM)生活管理アプリ紹介】
GitHubリポジトリ
SBM-API
バックエンドのAPI部分を担当しています。
GitHubリポジトリ: sbm-API
SBM-UI
フロントエンドのUI部分を担当しています。
GitHubリポジトリ: sbm-UI
SBM-Analyzer
行動記録をAIで解析する部分を担当しています。
GitHubリポジトリ: sbm-analyzer
制作期間は2か月くらいで、仕事終わりや休みの日にちょこちょこ進めていました。
先日、beta版をAWS環境にデプロイして、一応機能としては使えるようになったので
そのまとめとして今記事を書いているという部分もあります。
また、技術スタックは下記です(ちょっと格好つけて書いています)
技術スタックと設計思想
フロントエンド
- Vue.js + Vuetify: 見やすさと使いやすさを重視したUI設計を実現。
- Axios: フロントエンドとバックエンドの効率的な連携を実現。
バックエンド
- Spring Boot: 実務で培ったスキルを活かし、高スケーラビリティなAPIを構築。
- MySQL + Flyway: データの正確な管理と変更追跡を確保。
AI/分析
- Python + Hugging Face Transformers: NLPで行動記録を自動分類し、ユーザーの振り返りをサポート。
- Pandas, NumPy: データ分析と統計処理を効率的に実現。
インフラ
- AWS(EC2 + RDS): 本番運用を想定したクラウド環境。
- Docker: 開発環境の再現性を向上。
- Nginx + Let's Encrypt: HTTPS対応でセキュリティを強化。
→既知のUIやロジックの修正は既に発見してしまっておりますが。。。
今後改修予定となっています。(その辺りも含めて記事にしますね)
個人開発を行う上で、思ったことや業務での違いが結構あるよということと、 気づきみたいなものも含めて、「エンジニアになってから行うフワッと個人開発のすゝめ」 という題材で記事を書いていきたいと思います。
本題
では、本題に入りたいと思います。
私は多くの現場を経験をしているわけではいので、あくまて私の経験ベースでの話になりますのでご了承ください。
また 「フワッと個人開発」 とは、ポートフォリオ用です!!とか、商用でゴリゴリ作ってます!とかではなく、細々と自分がやりたいことを形に、自分の城を作っている・・・みたいなイメージで抽象的に使っています。
では、エンジニアに「なってから行う」フワッと個人開発のすゝめ
どうぞ。
全部自分が行うということが業務と違う
私は今も実務でエンジニアをしていますが、業務は決して一人で行うわけではないので、色々なルールが最初から存在していたり、または新規開発でも自分以外の誰かがどこかしらのルールをつくっていたりすると思います。
例えば・・・
- プラットフォームどうする?
- 技術選定
- フレームワーク選定
- 命名規則
- ディレクトリ構成
- どのライブラリを使うか
- どのバージョンを使うか
- どのサービスと契約するか
- アプリケーションの名前は?ドメインの名前は?
- デプロイ方法どうする?
- タスク管理方法は?
- Gitの運用ルールどうしよう?
- テストコードは最初から入れるか否か?
- デバッグはどうする?ログ入れは?
- その他多数
まず、自分で全部するということは
「決めることが沢山あるということ」 です。
当たり前ですが、これって結構な経験を一気に積めるなあ。
と作っていて思います。
とくに、一つ一つが後々影響する可能性もあるので、
未知の部分だと選定をどうするかを悩む時間が非常に勉強にもなり、とても楽しいです。
これは醍醐味です
今回のアプリ制作で最も悩んだのは、使ったことのあるVPSか未経験のAWSを使ってみるか・・・でした
AWSのことはまったくわかりませんでしたが、感想としてはとても便利だ!
となって、料金のことや仕組みなんかも、とても勉強になりました。
バックエンド、フロントエンド、インフラ、CI/CD、セキュリティ、スケジュール管理
深く専門的になれるわけではありませんが、これまで触ったことない分野を触るいいチャンスになると思います。
良くも悪くも好きに作れる
思い立ったが吉日。くらいの感覚で作れるのが本当にいいところかなと思います。
少なくとも、商用で作ったりとか、ポートフォリオ用で作るというよりも、
良くも悪くも好きに作れるところがフワッと個人開発の最大の魅力なのかなと思ってます。
(もちらん、ポートフォリオで作る目的や多くの人に使ってもらったりってなったら、それ相応にしっかりした方がいいと思いますが。)
ただ、そんな好き勝手に作れるから作っていたら重要になことを身をもって知れたことも大きかったです。
それは設計の部分でした。
今回のアプリは、業務っぽく作業したくない!作りたいように作るんだ!
といった、業務で行うプログラミングからの解放のような気分で、
ある意味行き当たりばったりな感じで作り始めました。
それを行ったことに後悔はしていません。
楽しくて仕方なかったし、息抜きに本当に良かったです。
ただ、現時点でリファクタリングしないといけないなという箇所がいくつかあり、
最初から設計をしっかりしていたら発生しなかった工数だなと。
良い経験になってます。
ですが、今後もぎちぎちに設計書を書いて作っていこう!
というようなことは今回作成しているアプリではひとまずする予定はないと思います。
ある意味でそういうコンセプトでやって、その中で得られる経験もあると確信しています。
(業務でできないことでもありますしね)
また、業務レベルにきっちりしてしまったら、プライベート感とのバランスが微妙になりそうなので
あくまでも今回のアプリ制作はそういった気づきも含めての訓練場のような場所に思っています。
そういったところを自分で調整できるのも「フワッと個人開発」のすゝめになります。
ペルソナ(ユーザー)設定を結構真面目に考える
沢山の人に利用してもらいたい!とは思っていないと最初に書きましたが、
一応、ペルソナ設定は最初にきちんとイメージしました。
設計はキッチリしていませんが、ペルソナ設定は比較的イメージしてから作るようにしたのは理由があって、
個人開発でのペルソナの設定自体が、業務上の要件定義と同義と考えていたためです。
例え、私のアプリが大した機能がなくとも・・・
どういった人に向けた機能を実装していくべきか
という方向性を決めていないと作っていく中でブレる、または追加機能に一貫性が出ないと思ったからです。
これは、設計がどうこうとかではなく、全体の方向性が明後日の方向に行くのを防ぐためにある程度考えておこうと思っていた。ということです。
このあたりも、個人開発ならではの考える箇所かなと思うので、比較的お勧めする所存です。
下記のようにペルソナ設定をしました。
-
生活を管理し、振り返りたい人
-
記録を付けることでモチベーションを高めたい人
-
簡単で使いやすい記録ツールを探している人
-
振り返りをデータに基づいて行いたい人
上記のユーザーがいたとして、
これらのニーズを満たすため、SBMアプリではまず何を実装してどう拡張していこうかな?
-
行動・気分の記録:手軽に入力できるフォームで記録を残せる
- まずは簡易的にカレンダーから記録を付けれるアプリとして基盤を作ろう
- 日々の行動記録と気分を記録して振り返えれるように追加機能を作ろう
カレンダー機能を基盤とした生活記録の部分
- 記録データの分析 : AI技術に触れたかったので、組み込んでいこう
上記をベースに後は自分が試したかったことを追加していこうと思って作り始めました。
エンジニアとして個人開発に挑戦したい方へ
では、今回のアプリの開発プロセスを通じて得られた学びや価値を整理して共有します。
開発プロセスで得られる価値
-
新しい技術への挑戦
- 実務で触れる機会が少ない技術(NLPモデル、Docker、クラウド環境構築)に挑戦し、スキルの幅を広げられた。
-
システム全体のスキル力の向上
- フロントエンド、バックエンド、インフラ、AI分析機能を1つのシステムとして統合するスキルを得られた。
-
ユーザー視点の重要性を学ぶ
- ユーザーが求める機能を考え、それを実現する設計・実装の過程で、ユーザー視点で考えること(自分が使う点も含めて)が培われたこと。
自分は今回、以下のポイントを意識してフワッと進めました。
-
目的を明確にする
- 「ユーザーにどんな価値を提供するのか?」を考えるペルソナ設定することで、開発の軸がぶれません。(使われるかどうかは別ですが)
-
段階的に進める
- 最初は最小限の機能に絞り、「動くもの」を早めに作り上げる。(モチベは絶対に持ちやすいと思います)
- 本当に最低限の機能でデプロイまで行った方が良いかもしれないです。フロント・バックエンド・インフラを一通り触った状態にもっていけるため。また、業務ではやりにくいことなのでプライベートで。
-
新しい技術に挑戦する
- フワッと個人開発は、新しい・未知の技術を試せるチャンスです。
最後に…
何よりも気楽に作り始める ことだと思いました。
業務とまた違った楽しさですし、何より全部を自分の裁量で進められる(しかも業務的な責任はない((笑))
ってとても楽しいことだと思っています。
自分はとても未熟で、アプリの完成度も褒められたものではないと思っています。
よく「すゝめ」などという記事を書いたなとこの最後の章を書いている今、タイトルを少し後悔しているくらいです。
ただ、この記事をみて自分もやってみようと思って、いつかまたその人が誰かのきっかけになったらなと思っています。
また、なんだかんだ言って、SBMアプリが「生活を見える化したい人」にとって役立つツールになることを夢見ながらコツコツ制作を精進したいと思います。