よかったことだけを書くミニブログサービス「iine log」をリリースしました
本日、よかったことだけを書くミニブログサービス「iine log」をリリースしました。 夜寝る前などに、1日のよかったことを書くことで、すこしだけ前向きになれるサービスです。
PC/スマートフォンで利用することができます。 よかったら使ってみてください。
この記事では、iine logの制作について書いてみます。
なぜつくった
一時期、モチベーションがまったく上がらない時期がありました。 いろいろ調べてみると、「夜寝る前によかったことだけを書くことで前向きになり、モチベーションが上がる」ことが分かりました。
でも、ただノートなどに書いても長続きするとは思えませんでした。 じゃあ誰かに見てもらえるサービスにしよう、ということで制作しました。
技術
iine logで使用している技術は以下のとおりです。
- Ruby
- Ruby on Rails
- Haml/SCSS/CoffeeScript
- RSpec/Capybara/Turnip
- Vagrant
- Chef Solo
- Docker+Serverspec
学んだこと
Devise+OmniAuth
有名すぎて特に書くことのない組み合わせですが、今回OmniAuthを初めて使いました。 iine logではメールアドレス、Facebook、Twitterの3つの認証方法を実装しました。
一番ハマったのは、Facebookのアプリ登録でした。
開発環境
ローカルのディレクトリ構成は以下のような感じです。
/iinelog /app # Railsアプリケーション /app /bin /config : /infra # Chefリポジトリ /cookbooks /data_bags /environments : /spec # Serverspec Vagrantfile # インフラ開発用Vagrantfile .gitignore Vagrantfile # Railsアプリケーション開発用Vagrantfile
/iinelog/.gitignore
には/app
と/infra
を登録しています。
つまり、リポジトリは以下の3つで管理しています。
iinelog-dev-env.git # /iinelog iinelog-app.git # /iinelog/app iinelog-infra.git # /iinelog/infra
/app
とVagrant内の/synced_folder
をNFSで同期させています。
Gitの操作はホスト側から、rails
コマンドなどはゲスト側から操作しています。
ちなみにRailsアプリケーション開発用Vagrantfileは、/infra
の本番環境構築用レシピの一部をconfig.vm.provision :chef_solo
で再利用しています。
インフラCI
開発方針としては、「Cookbookは変わるがServerspecは変わらない」で、積極的に外部のCookbookを利用しつつ、Serverspecでのテストをしっかり書いています。 これによりインフラの開発コストを下げることができます。
インフラは上記/infra
で開発しています。
まずChefレシピを実装し、インフラ開発用Vagrantfileに適用、これをServerspecでテストします。
テストがパスしたらBitbucketにプッシュします。
するとCIサーバ(Jenkins)で勝手に「Dockerを起動→Chefレシピを適用→Serverspecでテスト」を行ないます。 テストをパスした場合のみ本番環境に手動トリガーでインフラデプロイできるよう、ビルドパイプラインを構築しています。
導入は大変でしたが、一度やるとインフラ開発がものすごく加速します。
E2Eテスト
E2Eテストは今までCapybaraだけで書いていましたが、今回Turnipを採用しました。
features
/steps
の管理しやすい構成を考えるのに時間がかかりましたが、今はCapybara単体よりシンプルに書けています。
環境変数管理
Railsアプリケーションのdatabase.yml
やsecrets.yml
の環境変数の管理についてです。
私は本番環境用の設定のみENV['HOGE']
のように環境変数から読むようにして、ファイル自体はリポジトリにコミットしています。
環境変数の管理はChef Soloを用いています。
Data Bags でdotenv
を暗号化して管理しています。
このとき、 Data Bags の暗号化用の鍵をリポジトリにコミットしないよう注意が必要です。
ChromeのiPhoneエミュレータ
Google Chromeには、標準でiPhoneをエミュレーションできる機能があることを知りました。 フロント実装の際、これがものすごく便利でした。 ガラケーもできたら最高なんですが……。
おわりに
今回、開発着手自体は7月末でした。 当時は無職だったので、2週間くらいでリリースする計画でした。
ただ、ちょうど7月末に都内のスタートアップにリモートで週3でコミットし始めたため、リリースが遅れてしまいました。
11月から東京にてフルタイムでコミットすることになったため、サービスをつくるスピードはもっと遅くなると思いますが、引き続きつくっていきたいと思います。
今度はRailsをAPIサーバにしたSPAかスマホアプリ、課金機能実装、SwiftでのiPhoneアプリなどをつくってみたいです。