株式会社GIBJapanのフィード

https://zenn.dev/p/gibjapan

株式会社GIBJapanの投稿一覧

フィード

記事のアイキャッチ画像
(EN) switch-case opinions and ideas
株式会社GIBJapanのフィード
Why it's not used muchOut of all the people I met and talked to, a vast majority actually prefere using the if-else alternative instead of the switch-case.But there are not many use cases for the switch-case anyways, so why do people still prefere to use the if-case in those very few occasion...
8ヶ月前
記事のアイキャッチ画像
TypeScriptで業務アプリを試作してみた(tRPC+Prisma)
株式会社GIBJapanのフィード
TypeScriptで業務アプリケーションを試作してみたので、作っているときに考えたことについて書こうと思います。作ったものは、花束問題というデータモデリングの問題をもとにした在庫管理アプリケーションです。ソースコードはこちらにあります。https://github.com/tekihei2317/frere-memoirなぜTypeScriptで業務アプリケーションを作ってみたかというと、Domain Modeling Made Functionalという本を読んだことがきっかけです。Domain Modeling Made Functional(以降DMMF)は、現実に基づくモ...
1年前
記事のアイキャッチ画像
yarn workspacesのモノレポをHerokuにデプロイする
株式会社GIBJapanのフィード
yarn workspacesのモノレポで、Webアプリ・モバイルアプリ・APIを開発しています。このうちAPIをHerokuにデプロイしたので、調べたことや手順をまとめてみます。 記事の要約Herokuにモノレポのサブディレクトリをデプロイする場合は、heroku-buildpack-monorepoを使うyarn workspaceはロックファイルがプロジェクトルートにあるため、heroku-buildpack-monorepoを使うとパッケージのバージョンが固定できなくなる。そのため、普通のNode.jsのbuildpackを使う。Node.jsのbuildpackはy...
1年前
記事のアイキャッチ画像
データベースのロックの基礎からデッドロックまで
株式会社GIBJapanのフィード
データベースのロックについて、資料を読んだり実際に試してみたので、学んだことを整理してみようと思います。はじめにロックについての基本的な知識を整理して、最終的にはデッドロックとその対策について説明します。 使用したソフトウェアのバージョンMySQL 8.0.31この記事ではMySQLを使用しています。その他のデータベースについては、基本的な部分は共通していると思いますが、異なる点があることをご了承ください。 ロックとは何か(概要)ロックはデータの更新を正しく行うための仕組みの一つで、あるデータに対する更新処理を制御するためのものです。ここで、データを正しく更新するとはど...
1年前
記事のアイキャッチ画像
Next.jsのフルスタックアプリケーションをRailwayにデプロイする
株式会社GIBJapanのフィード
Next.js+tRPC+Prismaで作っているアプリをRailwayにデプロイしたので、手順をまとめてみます。URL: https://frere-memoir-production.up.railway.apphttps://github.com/tekihei2317/frere-memoir開発の過程はこちらのスクラップにまとめています。花束問題のシステムをTypeScriptで作る 手順ローカルでビルドできることを確認するRailwayプロジェクトを作成する動作確認用のブランチを作成してデプロイするデータベースを作成する ローカルでビルドできること...
1年前
記事のアイキャッチ画像
Prisma+MySQLで日時をJSTで保存したくなったときに読む記事
株式会社GIBJapanのフィード
Prismaで日時を保存すると、UTCに変換されて保存されてしまいます。そのため、日時をJSTで保存する方法を調べました。ソースコードはこちらにあります。https://github.com/tekihei2317/prisma-timezone-middleware バージョンprisma 4.11.0MySQL 8.0.31 結論Prismaには、MySQLのDATETIME型をどのタイムゾーンで扱うのかのオプションがないので、UTCで保存するのが無難既存のデータがあるなどの理由でどうしてもJSTで保存したい場合は、Prismaのミドルウェアを使って変換する...
1年前
記事のアイキャッチ画像
Prismaが発行するSQLを観察してみる(参照系)
株式会社GIBJapanのフィード
動機主に参照系で、PrismaがどのようなSQLを発行しているのかが気になったため、調べてみることにしました。ドキュメントをざっくり見た感じでは、発行されるSQLについて記述されているページがなかったため、実際にPrisma Clientを動かして確認してみました。 バージョンprisma 4.10.1MySQL 8.0.31 準備今回は、次のブログアプリ風のスキーマを使って試してみます。schema.prismamodel User { id Int @id @default(autoincrement()) email...
1年前
記事のアイキャッチ画像
ReactでtRPCのミドルウェアっぽいものを作る
株式会社GIBJapanのフィード
ReactとtRPCを使ってアプリを開発しています。サーバーサイドの認可(の一部)でtRPCのミドルウェアを使っており、フロントエンドでも同じようにできる気がしたのでやってみました。 tRPCのミドルウェアとはtRPC(@trpc/server)のミドルウェアは、プロシージャが実行される前に処理を実行するためのもののことです。tRPCのプロシージャは、MVCでいうとシングルアクションのコントローラーです。ミドルウェアは、認可やロギングなどに使われます。Middlewares | tRPCtRPCのミドルウェアの特徴は、次のミドルウェアに値(コンテキスト)を渡せることです。コンテ...
1年前
記事のアイキャッチ画像
Prismaでユニークバリデーションのためのユーティリティを作る
株式会社GIBJapanのフィード
背景ユーザーからの入力がデータベースに存在すること(しないこと)をチェックしたいときがあります。例えば、ユーザー登録をするときにユーザー名が重複していないことを確認したいとします。Prismaで愚直に実装すると、以下のような感じになると思います。async function isUserNameUnique(prisma: PrismaClient, userName: string): Promise<boolean> { const user = await prisma.user.findFirst({ where: { userName } }); ...
1年前
記事のアイキャッチ画像
PrismaでLaravel風のシーダーを作る
株式会社GIBJapanのフィード
シーダーは、アプリケーションを動かすのに必要なデータを登録するもののことです。Prismaでは、以下のようにシーダーがサポートされています。prisma db seedで、package.jsonに登録したシードスクリプトを実行できるprisma migrate resetでデータベースをリセットしたとき、リセット完了後にシードスクリプトを実行してくれるまた、Laravelでは、シーダーを実行するときに特定のシーダーのみを実行する機能があります。これは、開発中に新たに追加したテーブルにデータを登録するときなどに役立ちます。Prisma CLIにはこの機能がなかったため、こ...
1年前
記事のアイキャッチ画像
Prismaでページネーションを実装する(Client extensionsも使ってみる)
株式会社GIBJapanのフィード
Prismaでページ番号ベースのページネーションを実装してみます。また、ページネーションに関する処理をPrisma Client extensionsで共通化してみました。書いたコードはこちらにあります。https://github.com/tekihei2317/prisma-pagination-example/blob/main/scripts/comparison.ts ページネーションを実装するPrismaのfindManyには、SQLのOFFSETとLIMITに対応するskipとtakeがあります。そのため、ページ番号ベースのページネーションは以下のように実装でき...
1年前
記事のアイキャッチ画像
(EN) Laravel 8: Adding Passport Auth to API
株式会社GIBJapanのフィード
https://github.com/TheBlindHawk/Laravel-8.0-API-auth-using-Passport InstallationThe first steps will be the installation steps for a new laravel project:sudo service mysql start //if mysql is not runningcomposer create-project laravel/laravel my-project-namecd my-project-namephp artisa...
1年前
記事のアイキャッチ画像
Elmで倉庫番ゲームを作成してみた
株式会社GIBJapanのフィード
Elmで倉庫番というゲームを作成してみました。倉庫番は、2次元のグリッド上で荷物を目的の位置まで運ぶゲームです。https://github.com/tekihei2317/elm-sokoban-gameElmを使ってみた理由は、現在TypeScriptフルスタックでアプリを開発していて、バックエンドを関数型っぽく実装することの参考になると思ったからです。ちょうどプログラミングElmがKindle Unlimitedになっていたので、読んでElmで何かを作ってみようと思いました。TypeScript による GraphQL バックエンド開発 - Speaker DeckGit...
1年前
記事のアイキャッチ画像
brewを使ってのnodenvの設定
株式会社GIBJapanのフィード
brewを使ってダウンロードbrew install nodenvnodenv initvimを使って設定するvim ~/.zshrc// 入力 => eval "$(nodenv init -)"PATHを設定する。~/.nodenv/shimsは$PATHの始まりに入れる。export PATH=~/.nodenv/shims:$PATH必要なバーションをダウンロードnodenv install 14.0.0そのフォルダーでのnodeを設定するnodenv local 14.0.0
1年前
記事のアイキャッチ画像
Node.jsのconnectをコードリーディングしてみる
株式会社GIBJapanのフィード
connectは、Node.jsのHTTPサーバーにミドルウェアの機能を追加するためのライブラリです。https://github.com/senchalabs/connectここでのミドルウェアは、リクエストの処理の前や後に共通処理を実行するもののことです。ミドルウェアで実行する処理には、セッションの有効化やログ出力などがあります。connectはexpressの3系まで使われていましたが、4系になったときにexpressから削除されたようです。今回はconnectの3.7.0を読みました。senchalabs/connect at 3.7.0 まずはconnectを使ってみ...
2年前
記事のアイキャッチ画像
gitのcheckoutコマンドには3つ使い方がある
株式会社GIBJapanのフィード
「gitのcheckoutって結局どういうコマンドなんですか?」と聞かれたのですが、うまく答えられなかったので調べてみました。調べてみると、checkoutには3つの使い方があることが分かったので、まとめてみようと思います。 そもそもチェックアウトとはどういう意味か?バージョン管理システムにおいてチェックアウトとは、バージョン管理システムから履歴を取り出すことをいいます。反対に、バージョン管理システムに履歴を登録することをチェックインといいます。つまり、gitのチェックアウトはリポジトリから履歴を取り出すという意味です。また、gitのチェックインは、ファイルをステージしてからコミ...
2年前
記事のアイキャッチ画像
type-challengesのオンラインジャッジを作りました
株式会社GIBJapanのフィード
type-challengesのオンラインジャッジ(type-challenges-judge)を作ったので、紹介したいと思います。type-challengesは、TypeScriptの型の演算の問題集です。https://type-challenges-judge.web.app/ type-challenges-judgeでできることtype-challengesの問題の閲覧問題の回答の提出、判定どれぐらい問題を解いたかの確認トップページからtype-challengesの問題を閲覧できます。問題に正解すると、トップページと進捗ページのグラフに反映されます。...
2年前
記事のアイキャッチ画像
Laravel SanctumのSPA認証でつまづいたところのメモ
株式会社GIBJapanのフィード
Laravel SanctumのSPA認証(セッションベースの認証)の実装でかなりつまづいたので、メモを残しておこうと思います。おかげで認証とセキュリティ周りがちょっと分かるようになりました。 結論クロスオリジンのリクエストの場合、axiosはCSRFトークンをCookieから取り出してリクエストヘッダにつける処理を行わないフロントエンドとAPIを同一サイトに置いてSameSiteクッキーで認証すれば、トークンを使わずに(ほぼ)CSRF対策ができる正しいかどうか自信がないので、間違っているところがあれば教えていただけるとうれしいです。 つまづいたところドキュメントや記...
2年前
記事のアイキャッチ画像
Stoplight StudioとOpenAPI Generatorを使ってみる
株式会社GIBJapanのフィード
Nuxt(SPA)とLaravelのプロジェクトで、Stoplight StudioとOpenAPI Generatorを導入してみました。スキーマを定義してフロントエンドの型を生成するまでのメモを書きたいと思います。検証用のリポジトリはこちらです。https://github.com/tekihei2317/stoplight-and-typescript-frontend 環境@openapitools/openapi-generator-cli@2.5.1 Stoplight StudioとはStoplight Studioは、OpenAPIの定義ファイルをGU...
2年前
記事のアイキャッチ画像
ゆるふわTS勢によるtype-challengesにつまづいた人向けの解説
株式会社GIBJapanのフィード
type-challengesをやってみたのですが、TypeScriptの型の演算をほとんどやったことがなかったため、Easyの1問目のPickからつまづいてしまいました。そのため、この問題の解説を書いて理解を整理してみようと思います。結論からいうと、TypeScript HandbookのType Manipulationのところを一通り読んでから取り組むのがオススメです。TypeScript: Documentation - Creating Types from Types 問題文組み込み型のPick<T, K>を実装してください。Pick<T, K&...
2年前