見出し画像

irucaを支える技術

テンマドで運営している在席管理サービス「iruca」の話。

大仰なタイトルになってしまったけれど、2018年11月時点でどんな感じで動いているのか、書いておこうと思う。ちょうどNode.jsのバージョンを10系に上げたところなので(Herokuでのデフォルトが10系になったので)。

インフラ

- Heroku
- PostgreSQL(Heroku Postgres
- Redis(Redis Cloud
- Papertrail
- SendGrid
- CircleCI

テーマは省力化。conasuで扱い慣れていたこともあり、Herokuで構築した。なのでHerokuで扱いやすいPostgreSQLを選び、セッションストレージと一部コンテンツのキャッシュにRedisを利用している。Heroku Redisを使っていないのは、無料で使える枠がRedis Cloudの方が大きかったから、という記憶。ログの集約とSlackへの通知にPapertrailを、すこしだけ存在するメール配信にはSendGridを利用している。

CircleCIは以前はデプロイにまで使っていたが、CircleCI v2で公式のHerokuデプロイ機能がなくなったため、現在はテスト用途にのみ利用。orbが使えるようになったので、この辺また変えるかも。

デプロイにはHerokuのGitHub連携を用いていて、ステージング環境にはmasterブランチの内容が自動的に反映されるようになっている。ちなみに、プロダクション環境へのデプロイは手動。できるだけ利用の少ない時間帯に、と考えるとタイミングを自分で決められた方がよかったため。もっとも、Herokuのリポジトリーにgit pushするだけでデプロイできてしまうのだが。

モニタリングにはHerokuのMetricsでほぼ事足りてしまっている。Libratoも入れてはあるのだが、ほぼ使っていない。外形監視にはUptime Robotを用いている。

サーバーサイド

- Node.js
- Express
- Nunjucks

Node.jsでは定番中の定番、Expressをフレームワークとして利用。たくさんのライブラリーが揃っていたり、middlewareの使い勝手がよいので何も不自由していない。Promise前提の新しいフレームワークも気になってはいるものの、ExpressでもPromiseを利用した記述ができるため、なかなか食指が動かない。

テンプレートエンジンにはPugとかではなくNunjucksを利用。使い慣れていたPHPのTwigとほぼ同じ記法(PythonのJinja由来)を使えるのは、便利。ただ、今だったらTwig.jsを選ぶかもしれないなとは思う。

クライアントサイド

- Vue.js
- gulp.js
- Bourbon

クライアントサイドではVue.jsを利用。リリースしてしばらくはjQueryで動いていたが、Vue.jsを試したいと思って使い始めたのだった。SSR(サーバーサイドレンダリング)とかは行っていない。タスクランナーがgulp.jsなのは当時使い慣れていたから。今ならWebpackを使うことになると思う。

CSSのプリプロセッサーとしてはSassを利用。ライブラリーとしてBourbonを使っているが、ほんの少しのmixinしか使っていないので、将来的にははずすかもしれない。

まとめ

全体的にできるだけ楽に、簡単に作ろうという感じかもしれない。そもそも開発合宿で1日で生まれたサービスでもあるし、他にもお仕事がある中で、片手間で動かしてきた経緯もあるので。

特に今までPRなど行っていないのだが、リリース以来ずっと利用者が増え続けているサービスでもあったりするので、簡単にインフラのメンテナンスや増強ができるHerokuはとても便利。ちなみにサーバーがある場所は米国だが、そこまでレイテンシーに目くじらを立てるようなことは起こっていない。

折角の自社サービスなので、少しずつ新しいものを取り入れつつ、試したりもしながら運用していけたらと思う。

この記事が気に入ったらサポートをしてみませんか?