使用技術について

logo

はじめに

readon で使用した技術をまとめみました。

簡単な構成

architecture

使っている技術

フロントエンド

主に Rust(WebAssembly)で実装されています。一部 JavaScript を参照していますが、ほぼ Rust です。 Rust が触ってみたかったので、あえて Rust で実装してみました。

私は Elm が好きなので、yew という Elm Architecture のフレームワークを使用しています。WebPack 等で開発する方法は分かっていませんが、思ったよりも困ることは少なかったです。

LP は Hugo を使用して作成したので、ビルド、デプロイが簡単にできる Netlify を使っています。 Netlify は個人で使う分には十分な無料枠もあり、ドメインの設定、SSL 対応も簡単にできるので助かっています。

アプリ本体は Firebase Hosting を使っています。firebase initで簡単に Spa 用の設定ができるので簡単にデプロイできるので便利ですね。

バックエンド

バックエンドも Rust がメインです。

サーバは、Heroku, Now, Gigalixir, Firebase を用途に応じて使用しています。

now はフロントエンドから呼び出される API で使用しています。 Cache-Control ヘッダをつけることで、memcache にキャッシュを保持してくれるらしいので、キャッシュやバックオフのために使っています。 nowコマンドだけですぐデプロイできるので、変更が多いと思われる部分は Heroku ではなくて now を使用しています。

Heroku は Like やハッシュタグのデータを保持しています。Rust の API で DB のデータにアクセスできるようにしています。 Rust でフロントエンドとバックエンドで一部処理を共有しているので、複数プロジェクトになっています。そのため、Buildpack でデプロイできず Docker を使用しています。

FROM rustlang/rust:nightly as builder

WORKDIR /readon

ENV READON_ENV=prod

ENV WEB_HOST=https://readon.me

COPY . .

RUN cargo build -p api --release

FROM debian:stretch

COPY --from=builder /readon/target/release/api /app/api

RUN apt-get update && apt-get install -y libssl-dev ca-certificates && update-ca-certificates

CMD /app/api

Firebase は Auth, Firestore、Cloud Functions を使用しています。Auth で匿名ユーザ、Firestore でリアルタイムなコメント、Cloud Functions でコメントのフィルタリングを実装しています。

最近は基本無料で使えるサービスが多いので、複数のサービスにお世話になっています。

Gigalixir はリクエストが多くなるサジェスト機能を Elixir で実装しているのでそれをデプロイしています。

その他

他にもいろいろなサービス、ツールを使っています。

まとめ

Rust で開発できて、Rust がなんで人気なのかが分かってきた気がします。

もう少し細かい話は、気が向いたら Qiita などに書いていきたいと思います。