LGTMoon
私は個人で LGTMoon というサービスをリリース、運用しています。
LGTMoon は、 LGTM 画像を簡単に作成できるサービスです。
個人開発でサービスをリリースするとき
私は仕事をしながら個人開発をしているので、個人開発に割ける時間は多くありません。一番重要なのは、 少ない時間で開発を終えて、リリースまで持っていく ことです。
それに加えて「お金(初期費用)がかからない」とより良いです。
開発時に注意した点
機能は最小限にして最速で実装を終わらせる
LGTMoon にはログイン機能がありません。データベースにも画像テーブル1つしかありませんし、アプリケーションとしてめちゃくちゃシンプルです。LGTMoonサイト内の画像検索機能すらありません。
個人開発では時間が限られているので、機能はめちゃくちゃシンプルにする必要があります。機能をめちゃくちゃシンプルにすると、サービスの使い方がわかりやすくなる というメリットもあります。
LGTMoon については、とにかくリリースする、そして、使い方がシンプルを目標にしていたので、最小の構成でリリースしました。機能追加は後でいくらでもできます。
技術習得とサービス開発を一緒にする際は注意
「新しい言語を触ってみたい」等の技術習得と、「こんなサービスをリリースしたい」という目標を混ぜると危険です。
技術習得に時間がかかってしまった結果、サービスリリースのモチベーションが失われてしまいます。
技術習得に重きを置くのか、サービスのリリースに重きを置くのかは、十分考えましょう。絶対リリースしたいなら、リリースが最終目標ですし、技術習得が目標なら、最悪リリースまで行かなくても良いと思います。
Heroku は個人開発にオススメ
これがこの記事で一番言いたいことかもしれません。
LGTMoon は Heroku にデプロイされています。Heroku は、AWS と同じ、クラウドアプリケーションプラットフォーム(アプリケーションサーバー)です。
Heroku が個人開発にオススメな理由が2つあります。
- 一瞬でセットアップできる
- 料金が無料
一瞬でセットアップできる
Heroku は、インスタンス立ち上げて、GitHubと連携したら完了。GitHub から最新のコードを引っ張ってきてデプロイできるし、サービスリリースに必要な設定がすぐに終わります。
ネットワーク構成どうするとか、セキュリティーグループとか、ユーザーとかロールとか、一切考える必要はありません。サーバーにApache等をインストールする作業も不要です。
料金が無料
Heroku は、1サービスまでなら無料で運用できます。
独自ドメイン + HTTPS 対応も、CloudFlare を使えば無料です(CloudFlare を使わず、 Heroku だけでやろうとすると有料です)。
ただし、サービスが大規模になると料金が一気に上がります。個人開発の範囲だと、課金しても月数千円でしょうが、万が一サービスがめちゃめちゃ大きくなった場合は、VPSや、AWS等に移行したほうが良い可能性もあります。
個人開発向けの言語と、そうではない言語
LGTMoon のサーバーサイド開発言語は Scala で、フレームワークは Play Framework です。フロントエンドには Vue.js を使っています。
サーバーサイドの言語 Scala は個人開発向けではない
言語に Scala を選択したのは、当時 Scala を勉強していたからでしたが、今となっては、 Go で書き直したいくらいです。
Scala は言語仕様が複雑で学習コストが高いです。言語仕様が複雑だと、簡単な実装でも時間がかかります。
さらに、Scala は利用者が少ないため、ググっても情報が出てきづらいです。仕事で Scala をやる場合は、開発チームで知見を共有できますが、個人プレーだとこの点がきついです。
一方、 Scala を採用したメリットもあります。
- Akka Actor が優秀(画像生成のキューイング処理で使っている)
- 非同期処理でサーバーのリソースを有効活用してくれるので、Herokuのしょぼいサーバーでもちゃんと動いている(個人の感想です)
フロントエンドの Vue.js は個人開発向け
フロントエンドには Vue.js を採用しました。これは単に当時 Vue.js が流行っていたからですが、結果的には大正解でした。
大規模なサービスだと React.js を採用することが多いですが、React は学習コストが高いです。
LGTMoon は状態管理すら不要なシンプルなアプリケーションなので、 Vuex も利用していません。最初期は、 package.json
とか npm も使っていませんでした(今は使っています)。
シンプルなアプリケーションだと Vue.js で一瞬で実装できるので、おすすめです。
運用について
今までに発生した運用は2つありました
- なぜかアプリが落ちているので、Herokuの再起動ボタンを押す
- まずい画像を消す
稀に「アプリが落ちている」とtwitterで呼ばれることがあるので、その場合は Heroku の Restart ボタンを押すだけです。特に面倒なことはありません。
最近はありませんが、たまにエロい画像が大量にアップロードされていることがあります。これは見つけたら消しています。SQL流して、CDNのキャッシュを消すだけです。
たまに、「間違えて画像をアップロードしてしまった」とtwitterに連絡が来る場合もあるので、その時も同じ運用をします。今までで2,3回くらいありました。
画像を消す場合は SQL を実行する必要があるのですが、完全にマニュアル化されており、思考停止でコマンドをコピペしていくだけなので、ほぼノーコストでできます。
完全にマニュアル化しておくと、考えなくてもできるので、頻繁に行う運用はマニュアル化して置くべきです。個人開発の場合、使える時間は限られているのでなおさらです。
その他気づいた点
Google Analytics はとりあえず入れておいたほうがいいです。見るだけで面白いし、ユーザーが増えたりするとサービスのモチベーションになったりします。
LGTMoon を使っているユーザーは、平日が圧倒的に多いです。休日は殆ど使われません。みんな仕事のコードレビューの時とかに使ってるんですかね。面白いです。
休日はほとんど使われていないので、休日にデプロイすれば、なにか不具合があっても影響が少ないなと思っています。個人開発だとちょうど休日に開発&デプロイしますし、仕事中使われるアプリは、個人開発と相性が良いのかもしれません。
実際に LGTMoon はいくらかかっているのか
用途 | 金額 |
---|---|
Heroku Postgres Hobby Basic プラン | $9(約1000円)/月 |
Google Domain(lgtmoon.dev ドメイン) | 117円/月(1400円/年) |
Google Cloud(画像検索API) | 約1000円/月(利用頻度によって変わる) |
だいたい、月2000円程度かかっていますが、広告収入は500円〜1000円程度なので、赤字です。
Google Cloud の画像検索APIは、1日あたりのリミットをかけていて、一定金額(月3000円程度)を超えないようにしているのですが、平日はたまにリミットに引っかかっています。サービス的には問題なのですが、個人開発でお金には限界があるので、こう設定させてもらっています。
当然サービスリリース初期は全部無料でした。Google画像検索も 100リクエスト/日までは無料ですし、Heroku Postgres も無料プランがあります。容量が足りなくなったため、現在は一番安い $9/月 のプランにしています。
さいごに
この記事では技術的な詳細は書きませんでしたが、使っている技術の詳細はこちらの記事に、
また、ブログでも LGTMoon に関する記事をいくつか書いています
サービスもぜひ使ってください
記事が LGTM なら、 LGTMoon で LGTM 画像を作って、コメントしてみてください。
![LGTM](https://cdn.lgtmoon.dev/images/104695)
のような GitHub Markdown をコメントに書けばOKです。LGTMボタンも押してね。