意識低める個人用Webアプリ開発 2022

今でもちょこちょこ色々自分用のなにかをつくるということは多く、時間もあるので色々と試してみたところナイスな手法が多く見つかったのでまとめておきます。

前提

自分が開発するやつはだいたい何かをスクレイピングして、そのデータをうまいこと集計したりしてHTMLとして見れるようにしたいというのがあります。 スクレイピングするのでサーバーが必須だし、cron的な定期バッチを実行できる必要があります。

またデータをためこんでそこにクエリを投げたい、できれば即時で結果を返してほしい。そのためふつうのRDBMSが都合がよい。DynamoやらFirestoreやらは集計とインデックスが貧弱であり、BigQueryなどはクエリ投げてから結果が出るまでがちょい遅い。

前提その2

自宅サーバーがある。今回のやつで上げるのはVPSとかでもいいんだが、フルマーネージドではないLinuxサーバーがある。

フルマネージドなサービスは増えていてFaaSやらGAEやらCloudRunやらあるわけですが、だいたいがHTTPサーバーをつくることしか考えておらず、Cronバッチ的な処理をしようとした瞬間に体験が最悪になります。いきなりピタゴラスイッチ的に複数サービスやらPub/Subやらを組み合わせろみたいな話になり、ベンダロックインなあれこれが必要になる。

開発マシン=本番環境にしてしまう

最初ローカルで開発して、サーバーでgit pullして環境を構築して…とやっていたんですが。よく考えれば本番を直接いじればいいことに気づきました。 どうせユーザーは自分だけであるし、debugモードもONで良い。

デプロイのコストがゼロになるというのは革命であり雑に開発していくモチベーションとなります。

問題は開発環境である。現代人はみんなIDEを使っていると思うのですがリモート環境でIDEを使うのは面倒で。X11リモートデスクトップとかしてもいいんだけどそれも体験が悪いしセットアップがたいへん。最初vimでがんばっていたが良い製品を思い出しました↓

JetBrains Gatewayを使う

JetBrains GatewayとはIntelliJとかを作ってるJetBrainsの新しいIDEというかGatewayIDEのバックエンドをどこかローカルじゃないリモート環境で動かせるというもの。これによりsshごしとかdockerごしといった開発でのわずらわしさを解消できるがIDEの豊富な機能とUIはそのまま使えるという夢のようなものです。利用にはIntelliJとかRubyMineとかのライセンスが必要。

www.jetbrains.com

で、実際使ってみての感想ですが、まあ使えると言った感じです。当たり前ですがIDEでのタグジャンプやら補完やらは完璧に動作します。

ただ挙動が不安定なところが多くありました。つなぐところやPCをスタンバイから復帰させたときプラグインのインストールなど随所があやしい。ベータなのでしょうがないといえばそれまでですが。

それから動作が遅いです。起動がまず遅い。起動後も全体的にもっさりしています。LAN内サーバーにsshしていて別マシンへの接続としては考えうる限り最速なんですが…

その辺耐えられる人にはいいと思いますし、今後どんどん改善されていくと思います。自分も耐えることにしました。

GitHubのprivate repositoryを使う

昔はprivateにするためだけにBitbucketとか使ってたんですが今はGitHubでOKです。いいね

SQLiteを使う

Web開発でSQLiteとかおもちゃやろと思ってたんですが、よくかんがえたら自分しか使わないおもちゃ作ってるんだった。1台でしか動かさないならセットアップの手間がほぼゼロでバックアップとかもかんたん(ファイルコピーするだけ)。最高ですね。これでよかったんや

Jenkinsを高級Cronとして使う

ふつうのcronを使うというのは現代ではやめましょう。環境変数が変、正常終了したのか、エラー起きていたとしたらそのときのログどうするかなどなどあまりにも面倒すぎる。Jenkinsはめっちゃ古臭いツールですがその辺のログ管理や成功失敗判定や実行時間など全部を標準で記録してくれていて、なんと定期実行と同じ環境変数や手動で実行することもできます!!! Cronで3分後とかに指定して3分待って結果みるとかしなくていいわけです。

Jenkinsは有名なツールのためインストールも簡単でUbuntuだとaptのsourceを追加してapt installではいります。

Rundeckでもいいのかもしれないが試してないので知らん。