既存のサービスを組み合わせて本質的な開発に集中する
個人開発アドベントカレンダー9日目です! (2週間遅れです... 🙏)
一年前に開発してた Web サービスで、このような構成の開発をしていました。
個人開発はとにかく時間が足りないので、既存のサービスを使える場合はそのサービスを使って開発を行いました。
開発していたものは結局リリースしなかったのですが、CI や SaaS を使い快適に開発できたので、使っていたサービスや構成について書いていきます。
これは個人開発での遊びであり、これで商用サービスもいけるかというとわかりません。
(それと私は iOS エンジニアであり、サーバサイドは門外漢です)
サービス概要
Lastfm のような、音楽を再生したらその履歴をとって何回再生したか、いつどこで再生したかなどを自分が聞いた音楽を歴史として遡れるようなアプリを作っていた。
メインの技術スタックは Rails + Heroku で、 Client 側は Android アプリ。
私が Rails の開発をし、 Android は自分ではなく @sjnyas 氏が開発していた。
料金
リリースする前のプロトタイプ開発だったのでお金を払っていたのは一部サービス。
ちゃんと運用しようと思ったら Heroku などでもっとお金がかかると思う。
使っていたサービス
- ZenHub
- GitHub
- CircleCI
- Heroku
- Rollbar
- papertrail
- New Relic
- CloudFlare
- Firebase
- BITRISE
- Bluemix
- Slack
ZenHub
GitHub を拡張して使いやすくしてくれるサービス。
Issue をタスクボードに並べることができるので、それを重宝して使っていた。
バーンダウンチャートなども見れて大変便利。
GitHub
ソース管理は GitHub でやっていた。BitBucket なら無料だけど、Integration の手軽さや使いやすさなどは GitHub の方が良い。
CircleCI と連携していたので、テストが通らないとマージできないようにしていた。
CircleCI
Rails でテストを書いていたので、テストの実行とマージ後の Heroku への Deploy をやってもらった。
Rails 開発で GitHub に Push して CircleCI のテストが通ったら Heroku に deploy する - star__hoshi's diary
また、 Gem を常に最新にしたかったので、 bundle update を毎日動かして PR を出す仕組みも作った。
Heroku
サーバサイドは Heroku で構築した。
自分は iOS エンジニアでインフラはわからないしメンテナンスもしたくないので Heroku の上で Rails を動かしていた。Enterprise じゃない場合はサーバが海の向こうにあるので早くはないが、 heroku deploy するだけでアプリケーションが動くのは素晴らしい。
Heroku addons
ボタンぽちぽちしたりちょっとコード追加するだけで色々なサービスと連携できる。
Rollbar
エラー監視、レポートサービス。
Rails でエラーが出たらそれの集計をしてくれる。
Slack への通知もしてくれたり、 GitHub に issue 立てたりができる。
papertrail
サーバログが見れるサービス。
heroku logs
でも見れるけど、それよりも見やすい。
過去のログを検索したり、検索に引っかかったら slack 通知を飛ばすとかができる。
status:5
がログに流れてきたら slack に通知を飛ばす設定をしていた。
New Relic
Rails のパフォーマンスが見れる。
どのコントローラが遅いかとか、DB が遅いとか、どの処理で時間かかってるか見れるのでボトルネックの解消に使える。
CloudFlare
ドメインはお名前.comでとり、それのネームサーバや CDN として使っていた。
また、プロトタイプ開発だったので SSL 化もこれでやった。(本リリース時にはちゃんと SSL 証明書とらないとまずい)
Firebase
Timeline 機能として Firebase Realtime Database を利用した。
Rails5 で WebSocket を ActionCable でなく Firebase でやった話 - star__hoshi's diary
BITRISE
モバイルに特化した CI サービス。
Android アプリのβ版配布に利用していた。
Bluemix
heroku みたいに使える PassS。
slack から github issue を立てられるようにしたり、 slack 経由で deploy できるようにしていた。
Slack
アプリのβ配布、サーバのエラー、GitHub の更新など、基本的に何か起きたら全て Slack に通知が来るようにしていた。
おわり
個人開発だったので余計なことは気にせず色々と使いたいサービスを使って開発ができた。
テスト書いたり、 CI 環境整備したり、 Slack に通知を飛ばしたり... 前々職はお堅い会社でクラウドサービスなど全然使えなかったので、モダンな開発はこんな感じなのか〜というのを個人開発で経験できてよかった。