既存のサービスを組み合わせて本質的な開発に集中する

qiita.com

個人開発アドベントカレンダー9日目です! (2週間遅れです... 🙏)

一年前に開発してた Web サービスで、このような構成の開発をしていました。

f:id:star__hoshi:20171219234544p:plain

個人開発はとにかく時間が足りないので、既存のサービスを使える場合はそのサービスを使って開発を行いました。

開発していたものは結局リリースしなかったのですが、CI や SaaS を使い快適に開発できたので、使っていたサービスや構成について書いていきます。

これは個人開発での遊びであり、これで商用サービスもいけるかというとわかりません。
(それと私は iOS エンジニアであり、サーバサイドは門外漢です)

サービス概要

Lastfm のような、音楽を再生したらその履歴をとって何回再生したか、いつどこで再生したかなどを自分が聞いた音楽を歴史として遡れるようなアプリを作っていた。

メインの技術スタックは Rails + Heroku で、 Client 側は Android アプリ。
私が Rails の開発をし、 Android は自分ではなく @sjnyas 氏が開発していた。

料金

リリースする前のプロトタイプ開発だったのでお金を払っていたのは一部サービス。

ちゃんと運用しようと思ったら Heroku などでもっとお金がかかると思う。

使っていたサービス

ZenHub

GitHub を拡張して使いやすくしてくれるサービス。
Issue をタスクボードに並べることができるので、それを重宝して使っていた。

f:id:star__hoshi:20171220005147p:plain

バーンダウンチャートなども見れて大変便利。

f:id:star__hoshi:20171220005218p:plain

GitHub

ソース管理は GitHub でやっていた。BitBucket なら無料だけど、Integration の手軽さや使いやすさなどは GitHub の方が良い。

CircleCI と連携していたので、テストが通らないとマージできないようにしていた。

f:id:star__hoshi:20171220010541p:plain

CircleCI

Rails でテストを書いていたので、テストの実行とマージ後の Heroku への Deploy をやってもらった。

Rails 開発で GitHub に Push して CircleCI のテストが通ったら Heroku に deploy する - star__hoshi's diary

また、 Gem を常に最新にしたかったので、 bundle update を毎日動かして PR を出す仕組みも作った。

starhoshi.hatenablog.com

Heroku

サーバサイドは Heroku で構築した。
自分は iOS エンジニアでインフラはわからないしメンテナンスもしたくないので Heroku の上で Rails を動かしていた。Enterprise じゃない場合はサーバが海の向こうにあるので早くはないが、 heroku deploy するだけでアプリケーションが動くのは素晴らしい。

Heroku addons

ボタンぽちぽちしたりちょっとコード追加するだけで色々なサービスと連携できる。

f:id:star__hoshi:20171220014354p:plain

Rollbar

エラー監視、レポートサービス。

Rails でエラーが出たらそれの集計をしてくれる。
Slack への通知もしてくれたり、 GitHub に issue 立てたりができる。

f:id:star__hoshi:20171224205825p:plain

papertrail

サーバログが見れるサービス。

heroku logs でも見れるけど、それよりも見やすい。
過去のログを検索したり、検索に引っかかったら slack 通知を飛ばすとかができる。
status:5 がログに流れてきたら slack に通知を飛ばす設定をしていた。

f:id:star__hoshi:20171224210733p:plain

New Relic

Rails のパフォーマンスが見れる。
どのコントローラが遅いかとか、DB が遅いとか、どの処理で時間かかってるか見れるのでボトルネックの解消に使える。

f:id:star__hoshi:20171224220559p:plain

CloudFlare

ドメインはお名前.comでとり、それのネームサーバや CDN として使っていた。

f:id:star__hoshi:20171224221907p:plain

また、プロトタイプ開発だったので SSL 化もこれでやった。(本リリース時にはちゃんと SSL 証明書とらないとまずい)

uzulla.hateblo.jp

Firebase

Timeline 機能として Firebase Realtime Database を利用した。

Rails5 で WebSocket を ActionCable でなく Firebase でやった話 - star__hoshi's diary

BITRISE

モバイルに特化した CI サービス。
Android アプリのβ版配布に利用していた。

qiita.com

Bluemix

heroku みたいに使える PassS。
slack から github issue を立てられるようにしたり、 slack 経由で deploy できるようにしていた。

qiita.com

Slack

アプリのβ配布、サーバのエラー、GitHub の更新など、基本的に何か起きたら全て Slack に通知が来るようにしていた。

おわり

個人開発だったので余計なことは気にせず色々と使いたいサービスを使って開発ができた。

テスト書いたり、 CI 環境整備したり、 Slack に通知を飛ばしたり... 前々職はお堅い会社でクラウドサービスなど全然使えなかったので、モダンな開発はこんな感じなのか〜というのを個人開発で経験できてよかった。