初めての個人開発でサービスをリリースした話

# はじめに
こんにちは、tadanobutaaaaaです。
本記事では夢だった個人開発を完成させた体験談を書きました。


よければBoothにアプリをリリースしているので触ってみてください。

https://tadanobutaaaaa.booth.pm/items/6511883

::: note 
アイコンで技術系とそうではない内容に分けています

📖マークがない部分は比較的読みやすい内容となっていますので、そちらだけでもお読みいただければ幸いです。
:::

# 自己紹介
- 職業 : 学生
- 趣味 : プログラミング
- プログラミング歴 : 1~2年 ( アプリ開発は半年ぐらい )

# 個人開発をするに至った経緯
個人開発を始める前に[技育CAMP](https://talent.supporterz.jp/geekcamp/)のハッカソンに二人で出ました。
ですが、あまりの実力不足でアプリ開発にあまり携われなかった事がきっかけです。
また、ハッカソンでのアプリ開発を通じて多くのことを学んだので、そのアウトプットも兼ねて個人開発に挑戦することとしました。

ちょうどハッカソンが終わった時期にあるツイートがあったことを思い出したのです。
それは、まさに自分が作ったアプリを手動でやるやり方を紹介していました。

1\. Boothの商品ページから画像を取る。
2\. 画像の形式を変更する。( jpg -> ico )
3\. フォルダにサムネイルの画像を設定する。

サムネイルを変更するだけで、どの商品がどこにあるのか一目で分かるようになりました。
しかし、この作業を商品ごとに繰り返す必要がありました。

商品数が多いと手間が増えるものの、それを除けばとても便利だと感じました。

そこで、これらの処理を自動化することで、商品の数に制限されることなく、誰でも便利に活用できるようにしたいと考え、このアプリを開発しました。

## 簡単なアプリの説明
**一言で表すなら、Boothで購入した商品のフォルダにサムネイルを自動で設定できるツールです。**
こんな感じに

![参考画像](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3193775/6586cf70-8d5d-993f-98c5-96d4281ecdb6.png)

**このツールを使うメリットは大きく分けて２つ**

・サムネイル付与されていることによって、ぱっと見でどんな商品なのかを知ることができる。
・一つのフォルダに商品がまとめられるため目的のものを探しやすい。

# 📖 技術スタック
### アプリケーション
|  |  |
|:-:|:-:|
| フロントエンド | JavaScript, React |
| バックエンド |  Go, Wails, Gin |
| UI | ChakraUI |
| アイコン | Lucide |
| インストーラー | NSIS |
| Web API | Github API |

### Chrome拡張機能
|  |  |
|:-:|:-:|
| ブラウザ拡張機能  | Plasmo |
|  フロントエンド | TypeScript, React |
| UI | React-tostify |

### 技術選定の理由
React, JavaScript, Go はアプリ開発をする前に少し勉強をしていたのでそこを中心に技術スタックを考えました。
デスクトップアプリを作ることを決めていたのでGoでフレームワークを探していたところ [Wails](https://wails.io/ja/) に出会いました。
また、[Plasmo](https://www.plasmo.com) に関しては楽に、効率的に開発するために導入しました。

# 📖 技術的な視点からの仕組み解説
簡単に仕組みをフローチャートで解説すると次のとおりです。

![フローチャート](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3193775/db6cf2a1-c3c6-4951-b207-dca1328481e0.png)

かなり割愛してますが大まかな構成はこんな感じです。
ソースコードは [GitHub](https://github.com/tadanobutaaaaa) に公開しているので、興味があればぜひ覗いてみてください！

開発当初は、Chrome拡張機能を作る予定はなく、アプリだけを開発していました。処理の内容も、当時とは少し異なっていました。

1\. 検索対象のフォルダ内に .unitypackage が含まれているフォルダを探す。
2\. 見つかったフォルダの名前を抽出し、Boothの商品だけが検索結果に表示される設定をした状態でブラウザ検索。
3\. サムネイルを追加。

この処理の問題点は、正確性が不足しているところです。
というのも、ショップごとにフォルダ名の付け方がバラバラで、一貫性がないため、検索精度に影響を与えていました。

その問題を解決するために、Chrome拡張機能を作り、処理の方針を大幅に変更しました。

当初は4ヶ月ほどの開発期間を見込み、年内公開を予定していました。しかし、この問題が 1月 (開発3ヶ月時点) に浮上し、このままではアプリを公開できないと判断しました。

結果的に年内公開は叶いませんでしたが、方針を変更したことで、より良い形に仕上げることができたと思います。

**ここからは個人開発で得た学びなどを書きたいと思います。**

# ChatGPTは偉大
自己紹介ではプログラミング歴1~2年と記載してはいたのですが、プログラミングに初めて触ったのは約5年前です。

当時は、生成AIが世に浸透しておらず今よりもプログラミング学習が難しい時代だったと思います。
目標がなく学習していたため、挫折し、それっきりあまり触れていませんでした。

でも今は、ChatGPTを始めとする生成AIが普及し、学習する難易度が低下しているように感じられます。
なんなら、指示することで一つのアプリを作ることだってできます。

今回の開発では、技術的な相談や簡単なコード修正を ChatGPT に頼りました。
ただ、すべてを任せるのではなく、一部の課題だけを AI に頼ることで、より効率的に学習できるのではないかと実感しました。

# テストは偉大
今回の開発ではパソコン用のアプリということもあり、動作環境による影響が大きい点が特に気がかりでした。

ウェブサイトならブラウザ（ChromeやEdgeなど）を考慮すれば済みますが、デスクトップアプリではOSの違いやバージョン、ハードウェアの差が影響します。
さらに、アップデートも自動では行われず、ユーザーに更新を促す仕組みを考える必要がありました。

それもあって、異なる環境で何回かのテストをし、ちゃんと動くことを確かめたかったのです。

そこで、異なる環境で何度もテストを行い、問題なく動作するかを確認しました。
もちろん、私一人では対応しきれないため、有志の方々に協力していただきました。
テストを通じていくつかのバグを発見できただけでなく、貴重な意見ももらうことができました。

その結果、より完璧に近い状態で公開することができました。

# 公開することの意義
個人開発だけなら公開しないという選択肢も、もちろんあると思います。
しかし、よほどの理由がないのなら公開することを目標に取り組むことを強くおすすめします。

理由は以下の３つです。

1\. モチベーションになる。
2\. 責任感を持てる。
3\. 自分の成長につながる。

### モチベーションになる
簡単な指標でいうと、今回ではBoothの商品についたいいね数など...。
2/19日現在ではこのような感じになっています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3193775/63c1c098-5c67-4e5a-9fc0-8721a6d1b212.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3193775/5b4353d7-fb8e-444f-a71b-d4dccd276983.png)

正直、目標の1000いいねには届いていないので、自分としては少し物足りなさを感じています。
ですが、初の個人開発 & 公開ってことを考えると、かなり成果が出たのではないかなと振り返って感じています。

自分が公開したサービスを実際に使ってもらえていると考えると、なんだか感慨深いです。
同時に、これからのモノづくり活動に対するやる気が湧き、今後のアップデートにも意欲が湧いてきました。

余談ですが、自分のX (旧:Twitter) での投稿はあまり伸びなかったのですが、Boothに投稿された新しい商品を通知するボット( [@VRChat_Bott](https://x.com/VRChat_Bott) )の方で私が作成したアプリのほうが紹介されていたらしく、そこからの流入がかなりありました。

正直、バズるかバズらないかは本当に運だと思います。
どれだけ良いものを作っても、タイミングや拡散されるかどうかで大きく変わります。
しかし、ある程度ブレを減らすことはできるので、工夫次第で結果に影響を与えることができるのではないかと思います。

### 責任を持てる
自分が作ったサービスを公開するわけですから、それなりの責任感が必要です。
万が一にでも、自分が作ったサービスを使ったことでパソコンが動かなくなったり、予期しない不具合が発生したりすると、利用者に迷惑をかけることになります。

そのため、開発段階ではなるべく不具合を生まないように注意し、テストを徹底しました。
また、万が一問題が発生した場合に備えて、ユーザーへのサポート体制なども整えました。

これらを実践することで、今後もより一層、安全意識を持ちながら開発に取り組むことができると感じています。

### 自分の成長につながる
サービスを公開することで、様々な人に見てもらえます。
そのため、どんな人でも使えるサービスにしないといけませんでした。

デザインをわかりやすくしたり、操作を簡単にすることを努力しました。
このように、ユーザー目線で考えることが、サービスづくりに大切だと思います。

今後も、より多くの人が使いやすいサービスを作るために、この意識を大切にしていきたいと思います。

# 個人開発を目指すあなたへ
今回の個人開発は、決して簡単なものではありませんでした。
何度も挫折し、心が折れそうになりましたが、それでもあきらめずに挑戦を続けました。
その結果、こうして形にすることができました。

実際に多くの方に使っていただけていると考えると、「作ってよかったな」と本当に思えます。

開発中は、自分が信じられなくなり、このアプリをリリースしても使ってもらえないのではないかと、とても不安でした。
リリース直後も、手が震えるほど緊張していたのを覚えています

しかし、リリースから2週間が経った今、「このサービスを作った意味が確かにあった」 と感じています。
この経験を通じて、**「作るだけで終わりではなく、公開してこそ意味が生まれる」** ということを強く感じました。

もし、少しでも興味があるなら、思い切って挑戦してみる価値は十分にあります。
どんなに小さなサービスでも、誰かの役に立つかもしれないし、自分自身の成長にもつながります。
たとえうまくいかなくても、その経験が必ず次に活きるはずです。