自分だけが使う Web アプリを小さく作る
日々の生活を便利にするために自分だけが使う Web アプリケーションを書くということはよくあるが、こういう場合 スケーラビリティ / パフォーマンス
デプロイ
可搬性
拡張性
などの要素は無視していいことが多い(もちろん production-ready なスタックで作るのはそれはそれでよい娯楽にはなるので、悪いことではない)。
そういうときのための雑なテンプレート的なものがあるとよいなと思ったので考えてみる。
インフラ
自宅で常時起動している Linux サーバ
Arch Linux
コンテナ(+オーケストレーション)とかランタイムのバージョン管理とか、しなくてもいい
Arch Linux なのでだいたい全部最新版が入る
Python はちょっと遅いことが多い
依存パッケージだけアプリごとに切れていればいい
Python は venv を使う
Node はアプリごとに node_modules を使う(まあ npm はデフォでこの挙動なのでok)
バックエンド
型があって嬉しい
エコシステムが成熟している
それなりに書きやすい上、ts-node を使うとビルドについて考えなくてよくなるので楽
最近 Deno も少し試しているが、書き味はかなり良い。エコシステムがもっと成長したら嬉しい
MVC…みたいなフルスタックのフレームワークはなくてもよい。@types/express の型も優秀
RDB としてはちょっと貧弱だが、デーモンがいらないのはとても嬉しい
ORM はいらない、生 SQL を書く
認証
そもそも LAN 内で動かすだけなら不要、インターネットから見えるようにするなら Basic 認証をかける
Basic 認証
バックエンドで適当に Authorization ヘッダ見て分岐する
不正だったら WWW-Authenticate: Basic つけて 401 返すとブラウザが勝手にプロンプトしてくれる
どうせ1アカウント(=自分)しかいないんだからユーザ情報とか DB から読まなくて良い
コマンドラインでパスワードハッシュを生成してハードコード & 文字列比較すればいい
お手軽にデーモン化
tmux new -s hogehoge でセッションに名前つけておく
HTTPS
LAN 内で動かす場合セキュリティ的な観点では不要なんだけど、secure context でしか使えないブラウザの機能を使いたいときに必要。どうする?
SubtleCrypto とか
オレオレ証明書を毎回用意するのはだるい…
フロントエンド
<script type="text/babel"> に JSX を書く
ビルドシステムについて考えなくてもよくなる
ほんとうは TypeScript が書きたいが、我慢する
やりかたあるのか…?
CDN で使える UI フレームワークとしては MUI がある
ロードが若干遅いが、楽。
良さそうな代案:React の開発モードを本番とする
create-react-app して npm start しておく
vite だと早くて嬉しいかも。
ホットリロードがかかって楽
CDN では使いにくい npm パッケージが使える
TypeScript も書ける
「フロントエンド」がひとつポートを使ってしまうので、サーバ側でうまく CORS の設定をしてあげる必要がありそう
どうせ自分しか使わないんだし * でええやろ
認証かけられなくない?
vite だと認証かけたり Express 経由で開発モードのサーバにつなげたりする設定ができる雰囲気がある
バッチ処理
watch コマンドで定期実行する
tmux のペインを1個用意してあげると良い