839の日記

業務とは関係ない趣味の話を書くブログです。

じぶん ReleaseNote v0.1

ふと月1ぐらいでその月何をやってたのかまとめてみようかな、と思いたったのでまとめます。
基本的にGitHubのprivate repoで行ってた作業のまとめになると思います。

  • ActiveRecordのissueを立てた Test fixtures don't raise ReadonlyError when using replica connection · Issue #37765 · rails/rails · GitHub
    • 6.0.2のrcのリリースログを見てたらこの問題っぽいのが直ってるようなことが書かれていた
      • 時間がなくて検証できていないのでまた検証したい
    • ざっくりいうとテスト環境で use_transactional_tests = true だと ActiveRecord::ReadOnlyError が発生しないという報告
  • cert-managerの更新
    • v0.9.1 => v0.10.1 に更新
      • 特別なことなく、README通りに行った
      • makefileを修正して入れる手順の変更も追従
    • v0.11系は破壊的変更があるようだったので更新時に出ていたが見送り
      • ちゃんと読んでいないが、upgradeとしてhelmのuninstall/installが必要っぽい
      • 既存の証明書が失効されると影響範囲が広いのでまとまった時間が取れたときにやる...
      • こういう変更がガンガン来ると厳しいのでv1になるまでv.10系で耐えられないかなぁと思ってたりする
  • golangci-lintの更新
    • v1.19.1 => v1.21.0 に更新
    • timeoutフラグで正しくtimeoutを指定できるようになっていたので変更に追従
      • もともとdeadlineというフラグだったのがこのあたりのversionでtimeoutというフラグ名に変換された
      • ドキュメントからdeadline指定も消え、ぱっと見timeoutフラグを見るようになっていたが、バグっててdeadlineフラグで指定する必要があった
  • golangの更新
    • v1.13.0 => v1.13.4 へ更新
    • 手元のbrew upgradeで上がってしまったのでk8sクラスタgolangコードのimageを焼き直した
  • helmの更新
    • v2.14.3 => v2.16.1 に更新
    • v3に行くには割と腰を入れてやらないといけないので一旦v2の最新版にした
  • GKEクラスタの更新
    • 1.14.7-gke.14 => 1.14.8-gke.12 へ更新
    • terraform applyしただけ
    • クラスタ更新時に連動して1つmakeタスクを実行する必要がある構成になっているが、GitHub Actionsで自動化したいと思った
  • GitHub Contributionsを教えてくれるbotを作った
  • 昔使っていたドメインで動かしているサービスのリダイレクト対応
    • VPSで運用していたサーバに紐付いていた古いドメインVPSの契約切れでアクセスできなくなった
    • 新しいドメインをCloudDNSに登録してGKEに流すようにし、そのドメインにアクセスされたら警告ページを出すようにした
      • 複数のドメインをcert-managerで管理する実験をしたことがなく、既存の証明書への影響が不安だったのでLet's Encryptの証明書は手元で作った
    • 証明書の期限が切れたらもう対応しないつもりだが、念の為に作成手順はmakeターゲット化
      • 最近はmacOS上でdockerからdns認証できるようになってて便利だった
  • appのpodが立ち上がる前にpostgres/redisが起動していることを待つようにした
    • sidekiqのpodが殺される前にredisにpush backしてくれたjobがpod再起動時にmiddlewareと繋げないとraiseして消失するケースの対策
    • pumaやsidekiqはdb/cacheのpodがいないときに立ち上がってもまともに動かないので立ち上がるまでwaitする対応を入れた
  • 既存サイトにgoogleログイン機能を入れた
    • 昔に作ったやつでそのサイトだけ入っていなかったが、手元で本番データをimportした後パスワードを変えないと入れないのが面倒だったので
    • 普通にprod環境で見るときにも1passwordを使うのがちょっと面倒だった
  • static ipの紐付け手順のドキュメント化
    • 上で書いたGKEの更新時にstatic ipが外れてしまうのでアップグレード手順に追記した
    • 自動化したい
  • GitHub Actionsのキャッシュ対応
    • 一部リポジトリで脱circleciをするためにcache機能を実験的に利用
    • 大体わかったが、他のリポジトリのCIはまだ移行できていない
  • tslintからeslint + prettierに移行
    • tslintはdeprecatedと出ていたので全体的に移行した
    • package.json及びyarn.lockの行数が増えたなーという印象
    • 基本的にprettierの機能だけで十分だなと感じた
  • typescript 3.7更新
    • Nullish Coalescingとoptional chainingが使いたかった
    • Nullish Coalescingでイケイケだぜ、とか思って改修してたら1個バグを埋め込んでしまっていた
    • if (hoge === undefined || hoge === null) みたいなのを書くのが面倒なのでこれをシュッとかけるやつがほしいなぁ
      • (追記: 同日) twitterif (hoge == null) でいけるよと教えてもらった
      • lintのルールにも引っかからなくて運用できることがわかったので今後はこの記法を使っていく
  • bundle update
    • 色々更新した、sprocketsが4系に上がったときにSEGVを吐くようになってしまった
    • webpackerと併用していると起きやすいような印象だが、どういうリポジトリだと起きるのかよくわからない
      • 当面は3.7.2で固定するようにした
  • 脆弱性の対応
    • gemとnpmでちらほら出ていたので対応
    • omniauth-rails_csrf_protectionの対応がwikiを見るだけだとピンとこなかった
      • 実際にやってみるとなるほど、という気持ちになるがここでは割愛
  • reactからsentryに送るプラグインの乗り換え
    • raven-for-reduxというのを使っていたが、redux-sentry-middlewareというやつのほうが良さそうだったので移行
  • ransack周りのデフォルト値改善
    • アプリ固有の話だが、ransackのデフォルト値を制限したリンクにすることでユーザが好んでいるページをfirst actionで表示できるようにした
  • 謎joinによる例外修正
    • 過去のコミットを見ても全く理由がわからないが、謎にtableをjoinしているせいでransack周りで一定条件でエラーを吐く問題を修正した
    • クソコミットで何の情報もなかったので過去の自分に憤りを覚えた
  • 大量レコードの集計処理リファクタリング
    • activerecord-importをもともと使っていたが、rails6からinsert_allの機能が入ったので修正した
    • 書いてたときに疑問に思って放置していたが、upsert_allのときでもcreated_atを指定しないといけない気がしていて、updateなら更新したくないんだけどなぁと思った
  • ブックマークレットの機能をrailsリポジトリから剥がして専用のリポジトリにした
    • ブックマークレットの更新スパンはrailsとは違うのに同居していて前から歯がゆかったので
      • ブックマークレットの機能はreact+typescriptで実装されているSPAもどきなのでfirebaseでcontentを配信するようにした
    • デプロイサイクルが分けられたことでちょっとしたUIの変更もしゅっとできるようになってよかった
  • ブックマークレットリポジトリ(react + typescript)の環境構築
    • lintやbuildのCIをGitHub Actionsで整備した
    • sentryにmapファイルをdeploy時に自動的に送れるようなnpm scriptsを書いた
    • リポジトリを分ける前の互換性維持の処理を書いた(railsのpublic dirで読んでいたのをfirebaseから読むようにしたので破壊的変更になる)
      • ユーザへのmigrationドキュメントや警告(一定期間をすぎると古い手法は使えなくなる案内)を整備

1ヶ月何してたんだろう、と思ったけど割と色々してた。
この中で面白そうなトピックがあれば切り出して記事にしてもいいかもしれない…。

来月もちゃんと書けるように趣味コードを書いていきたい。