Madogiwa Blog

主に技術系の学習メモに使っていきます。

開発

webpack v5で追加されたpersistent cachingでbuild結果をcacheして高速化するメモ

webpackのbuildのキャッシュ、checksumを保存して一致してたら実行しないといった仕組みを用意しないといけないのかなと思っていたのですが、webpack v5からはpersistent cachingの機能が追加されていて簡単にキャッシュして高速化できたのでメモ ↓公式ドキ…

esbuild-loaderを使ってwebpackの一部loaderをesbuildに差し替えて高速化するメモ📝

webpackの移行先として、下記の図の通り速度を重視しesbuildが検討されることも多いかと思いますが、 esbuild - An extremely fast JavaScript bundler webpackを使いつつ一部のbuildをesbuildに置き換えるようなことができるesbuild-loaderというライブラリ…

`eslint-plugin-vue`を使って指定行以上のVue SFC(.vue)をエラーにして肥大化を防ぐメモ

追記(2023/09/24) Vue SFC(.vue)を使ってコンポーネントに分割し疎結合にすることでコードの見通しを良くし負債化を抑制できますが、適切なタイミングで分割できずコンポーネントが大きくなりすぎると見通しが悪くなり負債になってしまうので行数とかでエラ…

特定ディレクトリ以下の全ファイルのchecksum(MD5)を取得する方法MEMO

バージョンアップによるbuild結果の差分を見るときなど特定のディレクトリ内の全ファイルを md5でchecksumを取得して差分が出てるファイルを特定できると便利なのでやり方をメモ mac ubuntu 参考 mac ls -Fd $(find $FIND_PATH)で特定ディレクトリ以下のファ…

GitHub Actionの`on: pull_request`と`on: pull_request_target`の違いMEMO

最近GitHub Actionを触っていて、タイトル通りon: pull_requestとon: pull_requestの実行コンテキスト等の違いによって、 大分ハマったので、それぞれの違いとかを調べてみたのでMEMOしておきます。 https://github.com/features/actions on: pull_requestと…

Ruby: Bundlerを使って1つのRubyのファイルだけでgemをinstallして利用する方法

bundler/inlineを使うとGemのバグ報告やlogger系のGemを使った調査などでGemfileを使わずに1つのRubyファイルだけで完結できると便利だったのでMEMO bundler.io 例えば調査のために以下のpretty print系のGemを使いたいとします。 github.com 普通だと以下の…

Vue.js: `vue-tsc`でSFC内のtemplateも含めてTypeScriptの型チェックを行うMEMO

vue-tscなるものを使うとSFC内のtemplate部分も含めて型チェックを行えて便利っぽいようなので使い方とかをメモ www.npmjs.com vue-tscとは? vue-tscとはVeturの後継であるVolar内で管理されているライブラリです。 github.com vue-tsc Type-check and dts …

TypeScript: ESLintで`_`を変数に含めた時に`no-unused-vars`のルールを無効化する方法MEMO

Vue.jsのsetupのprops等、引数を使わないけど型定義だけ設定しときたい場合等、no-unused-varsを無効化したいケースがあります。 github.com 毎回eslint-disable-lineを使うのも手間なので、他の静的解析のツールの慣習に従って_始まりの場合は許容したかっ…

フロントエンドのテストフレームワークをJestからVitestに移行するメモ

テストフレームワークをJestからVitestに移行するのを試してみたので手順とか躓いたところとかをメモ Vitestとは? JestからVitestに移行する Vitestのインストール Vitestの構成ファイルを作成する テストコードの修正 テストを実行する おわりに Vitestと…

viteを軽く触ってみたのでメモ

Viteを軽く触ってみて分かった使い方とかメモ ja.vitejs.dev 色々試してるリポジトリ github.com Viteのinstall/設定ファイルの作成 ドキュメント通りにnpm create vite@latestで自分の作りたい環境からテンプレートを作って、そこからカスタマイズしてくの…

lockファイル内のライブラリがどのライブラリによってinstallされているか調べる方法MEMO

間接的に依存しているライブラリに脆弱性がある場合等、自身のpackgae.jsonのどのpackageを更新すれば解消できるか等を調べたい場合、lockファイルを頑張って確認するのは大変です。 package manager(yarn, npm)の機能を使うと割と簡単に調べられたのでメモ …

Ruby on Rails: `strict_loading!`をしたPolymorphicなModelからassociationを辿ると`ArgumentError`が発生する

タイトル通り、かなりハマったので事象をメモしておく。 事象 タイトル通りですが、strict_loading!をしてeager_loadingを強制しているPolymorphic関連を持つモデルから、 関連を辿ると本来であればActiveRecord::StrictLoadingViolationErrorが発生すると思…

exporse-loaderを使ってwebpackでimportしたライブラリをGlobal Objectに展開する。

jQueryなど一定Global Objectに展開したいライブラリをwebpackで扱う場合に単純に以下のように書いてしまうと、Global Objectに展開されずReferenceErrorが発生してしまいます。 import "jquery"; // Uncaught ReferenceError: $ is not defined $(document)…

GitHub上のPRがクローズされるまでの時間を計測するMEMO

開発チームの健全性とかを定量的に計測する指標としてFour Keysがあると思うのですが、この辺の変更のリードタイムを表す数値として厳密では無いですが、PRが作成されてからクローズされるまでの時間を簡単に計測できないかなと思い調べてみたら結構すぐ取れ…

package.jsonで複数バージョンの同じライブラリを管理する方法MEMO

既存のコンポーネントはVue2を使いつつ、新規のコンポーネントはVu3を使いたいみたいなケースがあると思うんですが、そういう時にaliasを使用するといい感じに実現できそうだったのでメモ やり方 各種パッケージマネージャーのalias機能を使用します。 alias…

Ruby on Rails: AikotobaというEmail/Passwordによるシンプルな認証ライブラリを作成しました

認証周りの勉強がてらAikotobaというEmail/Passwordによるシンプルな認証ライブラリを作成しましたので使い方とかをメモしておきます。 rubygems.org Aikotobaとは? Rails engineを使ったEmail/Passwordによるシンプルな認証ライブラリを作成できるライブラ…

Ruby on Rails: Rollbarに連携する時に属性値等々をマスキングするMEMO

エラー通知サービスにRollbarを使っているのですが、ActiveRecord::RecordInvalid等の例外が発生したりするとActiveRecordのインスタンスの属性等が表示されてしまいものによっては連携したくない情報がRollbarに連携されてしまう可能性があります。 Rollar…

Terraform Provider Herokuをv4系からv5系にアップグレードするMEMO🗒

Terraform v1系に対応したTerraform Provider Heroku v5がリリースされていたので個人のサービスをアップグレードしてみたので、その辺りの手順とかをメモ github.com Terraform v1系、Terraform Provider Heroku v5系にアップグレード Terraform Provider H…

Ruby on Rails: Active Record Encryptionを使って属性値を暗号化するメモ

Ruby on Rails 7から導入されたActive Record Encryptionを使ってみたところ大分良さそうだったので使い方とかをメモしてきます Active Record Encryptionとは? Active Record Encryptionを使ってみる Active Record Encryptionの初期設定 Active Record En…

Ruby on Rails: Request specでresponse bodyのBOM付きCSVを検証する。

BOM付きのCSVダウンロード系の機能の検証をRequest specでresponse bodyのBOM付きCSVを検証する時に若干ハマったのでやり方をメモ BOM付きのCSVを検証する時の注意点 当たり前といえば当たり前ですが、encoding: 'bom|utf-8'を指定しないとパース時にエラー(…

Ruby: よりセキュアなArgon2でパスワードをハッシュ化するメモ

パスワードのハッシュ化といえば、RailsのActiveModel::SecurePasswordでもBcryptが使われているので今まで自分で作るときもBcryptを使っていたのですが、Bcryptには以下のような仕様があり、多少気になりArgon2を使ってみたので使い方とかをメモ bcryptは、…

M1 MacBook Pro を買ってある程度Dockerまわりとかセットアップしたのでメモ

M1 MacBook Pro 14インチ買ったのでセットアップしたこととかメモ www.apple.com 開発用のツールまわり ターミナル デフォルトのzshでテーマはpreztoを使って、powerlevel10kにした。 github.com github.com prezto使ったことなかったけど、結構すっと設定で…

Ruby on Rails: 個人のサービスをRails7にアップグレードしたのでやったこととかメモ📝

2021/12/15 Rails 7がリリースされました rubyonrails.org さっそく個人のサービスをRails 6.1.4.4 -> Rails 7にアップグレードしたのでやったこととかメモ Rails 7の主要な対応 Rails 7へのアップグレード手順 Rails以外のgemのバージョンアップ Railsのバ…

Ruby on Rails: 開発環境込みでcircleci/rubyからcimg/rubyに乗り換えるメモ

今までCircleCI及び開発環境でcircleci/rubyのnode-browserのイメージを利用していた*1のですが、下記ということでcimg/rubyに乗り換えることにしました。 プレフィックスが「 circleci / 」のレガシーイメージは、 2021 年 12 月 31 日に廃止されます。 ビ…

Ruby on Rails: Controllerのaction内に分岐を持たずにredirectと処理の続行を切り替える実装をしたいときのメモ

Controller内でaction内に分岐を持たずに特定条件でredirectと処理の続行を切り替えるみたいなことをやりたいときに、単純にredirect処理をprivate methodに移すみたいなやり方だと結局アクションに戻ってしまい上手いこと行かないので、ちょっと悩んだので…

Ruby on Rails: Capybaraを使ったシステムテストでHTTPリクエストを送信する方法

Capybaraを使ったシステムテストで何かしらHTTPリクエストを送信したいときに色々ハマったのでメモしておきます システムテストについてはこちら railsguides.jp リクエストを送る方法 以下を行うとシステムテスト内でリクエストを送信することができます。 …

今更ながらActiveStorageの仕組みとか使い方とかメモ📝

今更ながらActiveStrageの仕組みとか使い方とかを動かしながらちょっと勉強したのでメモ ActiveStorageとは Active Storageは、Amazon S3、Google Cloud Storage、Microsoft Azure Storageなどのクラウドストレージサービスへのファイルのアップロードや、フ…

Ruby: `standardrb`を最近使ったりしてるので使い感とかをメモ

RubyのLinterといえばrubocopだと思うのですが、個人のツールとかだと最近standardrbを使うことが多いので使い感とかをメモしておきます standardrbとは? github.com StandardJSインスパイのRubyのLinterです。 This gem is a spiritual port of StandardJS…

stylelintを13系から14系にアップデートしたのでメモ📝

個人で運用しているサービスのstylelintを13系から14系の上げたので、そのあたりでやったこととかをメモしておきます。 stylelint.io アップデート手順 公式で14系へのマイグレーションガイドが公開されているので、基本的にはそれをみてやっていきます。 st…

Ruby on Rails: js-routesを使ってフロントエンドでもRoute系のHelperを使用するMEMO

フロントエンド側から非同期でRails側にリクエストを投げたいときとかに今までは以下のような定数を集めたmoduleをフロントエンド側に用意してたりしていたのですが、 export const BLOG_API_ENDPOINT = "/api/blogs"; export const LIKE_API_ENDPOINT = "/a…