カクカクしかじか

技術的なアレコレ

Nuxt.jsのmiddlewareでredirect処理をする際はreturnを忘れずに

結論 未認証時にログインページに飛ばしたい時など、 redirectする際はreturnしないと後続処理に進んでしまうので注意しましょうという話。 Railsでも以下のようにreturnとredirect処理はセットだったので、よくよく考えればそう...(うっかりしがち) def sho…

inputタグのdate属性にmax="9999-12-31"を指定した方がいい件

結論 表題の通り、inputタグのdate属性にはmax="9999-12-31"を指定した方がメリットが大きいという話。 <label for="start">Start date:</label> <input type="date" id="start" name="trip-start" value="" max="9999-12-31" /> 嬉しいポイント 年に4桁以上入力させられなくなる max属性をつけると年を入力完了したら自動で月にタブ移動してくれるようになる

Jestで文字列の内容は問わないが文字列が来て欲しい場合に使えるテクニック

結論 文字列であればなんでもいい場合は、 expect.any(String) を使うのが便利。 test('〇〇の引数に文字列がセットされていること', () => { expect(mock).toHaveBeenCalledWith(expect.any(String)); });

Jestの実行オプションについて

概要 デバッグの時に使いたくなる実行オプションをちょこちょこ忘れるのでメモしておく。 実行オプションまとめ カバレッジOFFの場合 $ npm test -- fuga.spec.ts --coverage=false warningもOFFにしたい場合 $ npm test -- fuga.spec.ts --coverage=false -…

FigmaのPDF書き出しで作成した名刺 or ショップカードを印刷会社に入稿する際の注意点

結論 縦型の名刺 or ショップカードを標準解像度の「350dpi」で作成する場合は、幅:841px x 高さ:1387px のフレームで作成すると良いです! さらにフチから3mmに相当する41pxを空白にしておくことで印刷ズレがなくなります。 ハマった落とし穴 「Figma 名…

Nuxt.jsのmiddlewareをインラインで記述する方法メモ

概要 Nuxt.jsでmiddlewareディレクトリ配下に authenticated.ts のようなファイルを配置してそれをテンプレートから呼び出す方法はサンプルが沢山あるものの、 インラインでmiddlewareを書くサンプルがないなと思い、書き方に若干迷ってしまったので未来の自…

Vue Fes Japan 2023のLT枠で登壇しました

Vue Fes Japan 2023 vuefes.jp 先日のVue Fes Japan 2023にてLT枠で登壇させて頂きました。 ボランティアスタッフもさせて頂けて、沢山の方とお友達になれて最高の経験が出来ました。 今回は5分のLT枠でしたが、次回は30分の枠で登壇出来るように頑張りたい…

Nuxt2でsetup関数とOptions APIを併用しないといけない場合のデータの受け渡し方法

背景 Options APIでAPIを叩いている箇所はそのままで、setup関数内のプロパティにそのAPIの戻り値をセットしたい状況がありました。 setupとOptions APIでデータをやり取り出来たはずだけど、どうすればよかったっけ?... と悩んでしまったので、本稿はその…

JestのmockReturnValueOnceがmockreturnvalueonce is not a functionになってしまう場合の解決法

経緯 該当の関数を jest.mocked(useStore) のようにモックしているのに、戻り値をモックしようとすると mockreturnvalueonce is not a function のエラーが出てしまいました... 関数だけモックしてもモジュール全体をパス指定してモックしないとダメなことが…

npmスクリプト実行時にオプション渡す方法で地味にハマった件

結論 npmスクリプトの実行時にオプションを渡したい場合は、オプションの前に「--」とスペースを入れると動く! うまくいかない例 $ npm run test --coverage=false うまくいく例 $ npm run test -- --coverage=false

Vue3のscript setupを使ってる状況でコンポーネントの名前を定義したい場合

結論 script setupを使ってコンポーネント名を定義することが出来ないので、もう一つscriptタグを書いてそこで export default する Sample.vue <script> export default { name: 'Sample', } </script> <script setup lang="ts"> ・・・ </script> <template> <div> ・・・ </div> </template>

OpenAPIスキーマ定義で日付のプロパティを型変換ツールで変換した際にDate型になるように定義する方法メモ

結論 Date型として変換したいString型のプロパティに format: date-time を指定する deleted_at: type: string description: 削除日時 format: date-time # YYYY-MM-DDTHH:MM:SSZ example: '2022-12-27T09:37:26.000+09:00'

Nuxt.jsでファイルアップロード機能を実装する際にinputタグ周りでやっておくべきアレコレメモ

概要 定期的に一からファイルアップロード機能を実装するたびにref周りで凡ミスしている気がするので、Nuxt.js(Vue.js)でファイルアップロードを実装する時にアレコレを備忘録としてまとめます。 やること input タグに ref="fileInput" のような形でinputタ…

Figmaのプレビュー表示で子コンポーネントが表示されない?

事象 解決法 子コンポーネントをcmd + opt + Gでグループ化すると表示された よくわからなかったこと コンポーネント化した親コンポーネント(♦️ダイヤのマークの要素)はフレームじゃなくても、プレビューに表示されていたのがよく分からなかった😇...

Figmaで要素をコンポーネント化した後、コピーしたインスタンスのテキストのレイアウトが崩れてしまった時の対処法

困っていること 親コンポーネントを「opt + shift + ドラッグ操作」で複製した際に子コンポーネントのタイトルが左にズレてしまった。 解決法 子コンポーネントのテキストのレイアウト設定が「中央寄せ」になっていたので、「左寄せ」に変更する 対応後

scroll-behavior: smoothを指定して、スクロールを滑らかにする

結論 スクロールが発生する要素に scroll-behavior: smooth; を付けるとスクロールが滑らかになるという話。 html, body { scroll-behavior: smooth; } developer.mozilla.org

ハンバーガーメニューのようなラベルのないbuttonにはaria-labelを付けないと「Ensures buttons have discernible text svg button」というアクセシビリティのLintエラーが出てしまう

概要 本稿ではアクセシビリティをチェックするaxe-linterで「Ensures buttons have discernible text svg button」というエラーが出た時の対処法をまとめます。 結論 <button>保存</button> のようにテキストのラベルをつけられないハンバーガーメニューのようなアイコンのみ…

Tailwind CSSで色スタイルの拡張設定をいじる際にはtailwind.config.jsのextendの中にcolorsを指定しないとダメな件

結論 任意のラベルで新しい色の定義を追加したい場合は、tailwind.config.jsのextendsの中にcolorsの定義を追加しないと、指定した色以外の色が使えなくなってしまうので注意 ダメな例 theme直下に定義するとその色しか使えないことになってしまう... /** @t…

OpenAPIのYamlファイルの中で出てくる「~1」って何?

概要 現場でOpenAPIスキーマをいじっていて、ファイル内に出てくる ~1 って何の記法だ?ってなってしまったので、 ChatGPTに尋ねてみたところ、それっぽい回答が得られたのでそれをメモします。 ※以下は、例です。 /orders/settle: $ref: ./resources/orders…

テキストエリアのサイズ変更を禁止するCSSプロパティ

結論 <textarea> タグに対して、 resize: none; を指定するとリサイズ可能な表示が出なくなります。 textarea { resize: none; } 参考 developer.mozilla.org</textarea>

Jestでテスト実行時に時間を固定する方法とその戻し方

結論 jest.useFakeTimers で止めて、 jest.useRealTimers() で戻します。 beforeEach(() => { jest.useFakeTimers({ now: new Date("2023/01/01") }); }); afterEach(() => { jest.useRealTimers(); }); jestjs.io jestjs.io

GitHub Actionsで実行するワークフローを全てのブランチに対して有効にする設定方法

結論 branches: '**' の形式で指定すると全てのブランチのプッシュとプルリクエスト作成時にワークフローが実行されるようになります。 name: ci on: push: branches: - '**' # matches every branch pull_request: branches: - '**' # matches every branch…

TypeScript(JS)でswitch文を書いた際にESLintで「Unexpected lexical declaration in case block」のエラーになる際の解決法

結論 switch文の中で const { hoge, fuga } = event.payload.hogeFuga; のように分割代入をするとESLintで「Unexpected lexical declaration in case block」のエラーになるので、case 〇〇: { 処理 } という形式で書いてあげると怒られなくなります。 switc…

リモートブランチにローカルの別ブランチをPushしたい時の解決法

Git

結論 git push origin ローカル:リモート の形式でpushすればOKです👌 $ git push --force-with-lease origin local-dev:remote-dev

Nuxt.jsでComposition API利用時にcontextの中身をjestでmockしたい時の解決法

結論 📝 shallowMount(mount) のプロパティの mocks の中に $nuxt -> context -> mockしたいコンテキスト の順番で定義すれば良い describe("Component", () => { let localVue: typeof Vue; let wrapper: ReturnType<typeof shallowMount<Vue>>; beforeEach(() => { localVue = createL</typeof>…

Jestでnuxt-svg-loaderを使ったVueテンプレートのテスト実行時にSVGファイルをパースする方法

結論 プロジェクト直下に SVGファイルをテスト実行時にパースするファイル (svgTransform.js) を定義して、Jestでそれを読み込むようにする github.com 各パッケージのバージョン nuxt@2.15.8 vue@2.6.14 @vue/test-utils@1.3.3 @vue/vue2-jest@29.2.0 jest@…

npm自体のバージョンを上げる方法

結論 npm install -g npm する $ npm -v 8.11.0 $ npm install -g npm npm WARN config global `--global`, `--local` are deprecated. Use `--location=global` instead. removed 8 packages, changed 84 packages, and audited 231 packages in 1s 14 pack…

JavaScriptで外部の関数をimportする際にaliasを設定する方法

執筆背景 たまにimportした外部の関数と自前で実装したい関数名が被ってしまうものの、 その度に回避方法をド忘れしてググってしまうので、本稿はそのための備忘録です。 結論 as を使います。 import dayjs from "dayjs"; import { isHoliday as isJapanese…

Vue.js 2系(Nuxt.js 2系)でモーダルの開閉フラグをv-modelで扱うときの注意点とVue.js 3系での変更点

概要 Nuxt.jsの2系でモーダルを実装する際にモーダルの開閉フラグをv-modelで管理する際のイベント発火させる動作がややこしかったので今回はそれをまとめます。 結論 inputイベントでなくても v-model を使う場合は、 親コンポーネントで指定した v-model="…

ESLintとPrettierを導入する時にやることメモ

概要 ESLintとPrettierの必要なパッケージのインストールコマンドや設定のアレコレをプロジェクトを新規作成するたびにググっていて進歩がないので、本稿はその手順をメモするための記事です。 必要なもの ESLint eslint-config-prettier ESLintとPrettier…