29
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

LGTMoon

私は個人で LGTMoon というサービスをリリース、運用しています。

LGTMoonのスクリーンショット

LGTMoon は、 LGTM 画像を簡単に作成できるサービスです。

個人開発でサービスをリリースするとき

私は仕事をしながら個人開発をしているので、個人開発に割ける時間は多くありません。一番重要なのは、 少ない時間で開発を終えて、リリースまで持っていく ことです。

それに加えて「お金(初期費用)がかからない」とより良いです。

開発時に注意した点

機能は最小限にして最速で実装を終わらせる

LGTMoon にはログイン機能がありません。データベースにも画像テーブル1つしかありませんし、アプリケーションとしてめちゃくちゃシンプルです。LGTMoonサイト内の画像検索機能すらありません。

個人開発では時間が限られているので、機能はめちゃくちゃシンプルにする必要があります。機能をめちゃくちゃシンプルにすると、サービスの使い方がわかりやすくなる というメリットもあります。

LGTMoon については、とにかくリリースする、そして、使い方がシンプルを目標にしていたので、最小の構成でリリースしました。機能追加は後でいくらでもできます。

技術習得とサービス開発を一緒にする際は注意

「新しい言語を触ってみたい」等の技術習得と、「こんなサービスをリリースしたい」という目標を混ぜると危険です。

技術習得に時間がかかってしまった結果、サービスリリースのモチベーションが失われてしまいます。

技術習得に重きを置くのか、サービスのリリースに重きを置くのかは、十分考えましょう。絶対リリースしたいなら、リリースが最終目標ですし、技術習得が目標なら、最悪リリースまで行かなくても良いと思います。

Heroku は個人開発にオススメ

これがこの記事で一番言いたいことかもしれません。

image.png

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ボタンも押してね。

29
8
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
29
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?