Michi's Tech Blog

一人前のWebエンジニアを目指して

JavaScript/TypeScript

Fastify × Zod × SwaggerでOpenAPIの仕様書を自動生成する

こんにちは! スマレジ テックファームのMichiです! 今回はFastifyでREST APIを開発するときに、自分でYAMLファイルを定義せずとも、自動でOpenAPI形式の仕様書を生成する方法を解説します。 技術スタック 実装 プロジェクの作成 エンドポイントの作成 基盤…

TypeScriptのthisについての忘備録

こんにちは! スマレジ テックファームのMichiです! TypeScriptのthisは不思議な動きをすることで有名です。自分も定期的に調べては忘れてしまうので、今回は忘備録として残しておきます。 thisとは? 呼び出し方によってthisの値が変わる? アロー関数はth…

React Hook Formでコンポーネントを分割する方法

こんにちは! スマレジ テックファームのMichiです! 今回はタイトルの通り、React Hook Formでコンポーネントを分割する方法をご紹介します。 解説 サンプル サンプルとして、 メールアドレス、ユーザー名、パスワードを入力するシンプルな登録フォームを用…

【React】レンダリングの最適化について考える

こんにちは! スマレジ テックファームのMichiです! 今回は、Reactのレンダリング最適化について自分なりに調べたことをまとめていきます。 Reactのコンポーネントが再レンダリングされるとき レンダリングの最適化方法 コンポーネントを適切に分割する 悪…

Zodに入門してみる

こんにちは! スマレジ テックファームのMichiです! 今回の記事では、ZodというTypeScriptのライブラリに入門してみます。 Zodとは? 使ってみる スキーマとバリデーションの設計 TypeScriptの型生成 React Hook Formとの連携 まとめ Zodとは? 公式ドキュ…

WindowsでNext.jsの環境構築をするときのTips

こんにちは! スマレジ テックファームのMichiです! 先日、WindowsでNext.jsの環境構築をしているときに、いくつかOS起因で詰まったところがあったので、メモとして残しておきます。 環境 opensslコマンドがない 解決法 「'NODE_OPTIONS' は、内部コマンド…

【React】モバイル版のタッチイベントが発火しない問題に対処する

こんにちは! スマレジ テックファームのMichiです! 先日、Reactを使ったアプリ開発において、モバイル版のタッチイベントが発生しないというバグに遭遇しました。そして、このバグがReactのライブラリやブラウザの仕組みにも深く関わっているということが…

TypeScriptによる静的型付け言語入門④ 『Utilty Types』

こんにちは! スマレジ テックファームのMichiです! 今回はTypeScriptのUtility Typesについて整理します。 Utility Typesとは? 代表的なUtility Types Readonly Partial Required Pick Omit Extract Exclude NonNullable Record まとめ Utility Typesとは…

TypeScriptによる静的型付け言語入門③ 『型の絞り込み』

こんにちは! スマレジ テックファームのMichiです! 間が空きましたが、久しぶりにTypeScriptのキャッチアップに戻ります。今回は『TypeScriptの型の絞り込み機能』について学びます。 1. typeof 演算子 typeof を使った絞りこみ typeof の結果 2. 等価演算…

Django × Vue.jsでCSVダウンロード機能を実装する

こんにちは! スマレジ テックファームのMichiです! 今回は実務でつまずいたところの話です。 記事を書こうと思った経緯 実装 バックエンド(Django) フロントエンド(Vue.js) まとめ 記事を書こうと思った経緯 今の現場ではバックエンドがDjango(Python)、フ…

TypeScriptによる静的型付け言語入門② 『型引数とジェネリクス』

こんにちは! スマレジ テックファームのMichiです! 前週に引き続き、TypeScriptのキャッチアップをしていきます。今回は『型引数とジェネリクス』についてです。 型引数(ジェネリック型) ジェネリック型の宣言 ジェネリック型を使用する オプショナルな…

TypeScriptによる静的型付け言語入門① 『部分型』

こんにちは! スマレジ テックファームのMichiです! 6月はTypeScriptキャッチアップ月間として、学んだことを記事にしていきます。 今回はその中でも、考え方にドハマりした『部分型』の考え方について、復習がてら分かりやすく解説します。 部分型とは? …

Reactキャッチアップへの道④ 『グローバルステートの管理』

こんにちは! スマレジ テックファームのMichiです! 前週に引き続き、Reactのキャッチアップをしていきます。今回は『グローバルステートの管理』について学びます。 グローバルステートの管理方法 Contextを使用する方法 外部ライブラリを使用する方法(Re…

Reactキャッチアップへの道③ 『ルーティング』

こんにちは! スマレジ テックファームのMichiです! 前週に引き続き、Reactのキャッチアップをしていきます。今回は、『Reactのルーティング』について学びます。 はじめに 基本的なルーティング Not Foundページの設定 ネストされたルーティング ルーティ…

Reactキャッチアップへの道② 『レンダリングの最適化』

こんにちは! スマレジ テックファームのMichiです! 前週に引き続き、Reactのキャッチアップをしていきます。今回は、『レンダリングの最適化』について学びます。 コンポーネントが再レンダリングされる条件 サンプルコード memo - コンポーネントのメモ化…

Reactキャッチアップへの道① 『useStateとuseEffect』

こんにちは! スマレジ テックファームのMichiです! 前回の記事『Webエンジニアへ転職して1年が経ちました』で書いた通り、Q1(5月~7月)は「React/TypeScriptの習得」を目指します。 その第一段階として、5月はReactの基礎を固めていきます。教材はUdemy…

JavaScriptの非同期処理についてまとめてみた②

こんにちは! スマレジ テックファームのMichiです! この記事は、『JavaScriptの非同期処理についてまとめてみた①』の続きになります。 前回のおさらい Promise 完成形 解説 でも、まだちょっと分かりにくくない…? async/await 完成形 解説 まとめ 前回の…

JavaScriptの非同期処理についてまとめてみた①

こんにちは! スマレジ テックファームのMichiです! よくエンジニアの会話の中で、 「JavaScriptは非同期処理やからな~」 というような会話が聞こえてきます。それに対して、 ワイ「いや~、そうっすよね~(適当)」 っていう返事を数カ月前まではしてい…

バニラJSでAjaxを実装してみよう!

こんにちは! スマレジ テックファームのMichiです! 今回はタイトルの通り、バニラJS(生のJavaScript)でAjaxを実装してみます。 はじめに 作るもの 郵便番号検索API バニラJSで実装してみよう! 完成形 解説 ①[検索]ボタンクリック時の処理 ②非同期通信の…

【JavaScript】Proxyってなんすか?

こんにちは! スマレジ テックファームのMichiです! 突然ですが、Vue.jsのコードでreactiveなオブジェクトをconsole.logしたらこんな値が返ってきます。 「このProxyってやつ、なんすか?」とずっと思っていたので、調べてみることにしました! Proxyとは?…

【JavaScript】インポート/エクスポートルールの整理

こんにちは! スマレジ テックファームのMichiです! JavaScriptのインポートとエクスポートのルールってたくさんあってややこしいですよね...。 というわけで、今回の記事で整理していきたいと思います。 基本形 個別にエクスポートする まとめてエクスポー…

JavaScriptのオブジェクト指向を完全に理解する

こんにちは! スマレジ テックファームのMichiです! 今回の記事は「JavaScriptを完全に理解する」シリーズのオブジェクト指向編です。 JavaScriptのオブジェクトとは? クラスを定義する ゲッターとセッター 静的プロパティ/メソッドを定義する 既存のクラ…

JavaScriptの関数を完全に理解する②

こんにちは! スマレジ テックファームのMichiです! この記事は「JavaScriptの関数を完全に理解する①」の続きです。 前回で書ききれなかったJavaScriptの関数について整理していきます。 引数のデフォルト値 可変長引数 名前付き引数 複数の戻り値を返した…

JavaScriptの関数を完全に理解する①

こんにちは! スマレジ テックファームのMichiです! 今回は「JavaScriptの関数を完全に理解する」というテーマで、JSの関数について整理したいと思います。 function命令で定義する 基本形 無名関数(匿名関数) 関数リテラル表現で定義する アロー関数で定…

JavaScriptの日付型の罠

この記事は「つながる勉強会 Advent Calendar 2022」の12日目の記事です。 こんにちは! スマレジ テックファームのMichiです! 今回はJavaScriptの日付型でハマった罠についてご紹介します。 やりたいこと とある勤怠管理システムで、検索の対象範囲として…

【JavaScript】条件によって変数の値を振り分ける

こんにちは! スマレジ テックファームのMichiです! 今回はJavaScriptの基本的な内容ですが、意外と知らなかったので記事にします。 やりたいこと 原因 解決策 その① varを使う その② ifの外で最初に変数を宣言する その③ 三項演算子を利用する まとめ やり…