How I Turned My Personal Storage Accounts Into a Massive S3 Bucket for $0

As developers, we’ve all been there: you’re building a hobby project, a side hustle, or a microservice, and you need object storage. You look at AWS S3 or dedicated cloud providers, and the costs start adding up. Meanwhile, most of us have hundreds of gigabytes of idle, wasted space sitting in our personal Google Drive, Dropbox, or Mega accounts.

I wanted to find a way to use that personal cloud…

Read more →
How we built multi-tenant isolation in NestJS that even a junior dev can't break

About a year ago, a junior dev on our team wrote a cleanup job that nuked records without a tenant filter. In staging,
thankfully — but it wiped out an entire test tenant's data and took half a day to restore. That was the wake-up call.

We run a multi-tenant NestJS + TypeORM SaaS (shared database, shared schema, tenant_id column on everything). The
classic approach is "just remember to add…

Read more →
NestJS: The Backend Framework That Makes Node.js Feel Grown-Up 🚀

If you have ever tried to build a large Node.js backend and thought, _"Why does this feel like I'm making it up as I go?"_ — you are not alone.

Express is powerful. Fastify is fast. But neither one tells you _how_ to structure your project. You end up inventing your own patterns, copying folder structures from tutorials, and praying nothing breaks when the project grows.

That is exactly the…

Read more →
LambdaにのせたNestJSでapp.enableCors();を指定しているのにCORSエラーがでたので解消するまでを記録した

POSTメソッドを叩いたらエラーが出た

NestJSで作成したAPIをLambdaに乗せ、API Gatewayでエンドポイントを作成した。

フロントエンドはNextJSで作成し、Vercelにデプロイした。

で、無事画面表示とGetが成功し、得たいデータが表示された。

ただPOST APIを叩いた時

というエラーがでた。

CORSは有効にしている

上のエラーを読む限り、CORSに関するエラーということがわかる。

ただNestJSの方でCORSは有効にしている。

該当のソースは下記の通り。

Getはできているし、CORSもきっと有効に出来ているに違いない。

じゃあ、なんでPOSTはできないの?

沼に落ちた。

解決方法

ちなみに同じ状況に陥った人のために先に解決方法を載せておくと、下記のようにawait…

Read more →
NestJsで作成したプロジェクトをAWSのLambdaにあげて動かすまでの作業ログを残しておく

個人開発プロジェクトのバックエンドをNestJSで作成した。 公開したいので、awsのLambdaに乗せて動かしてみることにした。

初めてのaws、いつかの自分のために記録として一挙手一投足のログを残しておくことにする。

前提

バージョンは上記の通り。

で、Dockerの設定ファイルを諸々作ったが、使っていないので、ない前提でいく。

さて、それでは進めていく。

AWSアカウントの作成

AWSの公式ウェブサイトでアカウントを作成する必要がある。

で新規アカウント作成ができる。

その後、認証コードを経て、

AWS アカウント作成の流れを参考にすればいけるけど、意外と時間画かかったし、アカウント作成時にクレジットカードを登録することはいい気がしない。

とりあえず、これでアカウント作成が完了した。

必要なパッケージのインストール

ここからはNestJS-サーバーレスの公式…

Read more →
NestJSのエラーレスポンスをカスタマイズする

NestJSを用いAPI作成をしているのだが、Responseを共通化したいと思ったので、実装してみた。

Responseの定石

とは言えそもそもResponseの形をどのようにするのがいいのかわからなかったので調べた結果、omniti-labs/jsendが参考になりそうだった。 これを参考に以下のような型で返すことにした。

ValidationPipeを使用する場合、エラーレスポンスの形式はBadRequestExceptionがデフォルト

たぶんドキュメントにある通り(Documentation | NestJS - A progressive Node.js framework)なので、ほとんどの場合ValidationPipeを使用することになる。…

Read more →
NestJSでOpenAPIツール「swagger」を生成する

依存関係をインストールする

main.tsを編集する

後は上の記述を編集し、http://localhost:3000/api/を開けば作成されている。

非常に楽なので活用していきたい。

APIをグルーピングする

これだとcatsというタグができるがその中は空になり、すべてがdefaultにグルーピングされる。

任意のグルーピングを作りたい時は、hoge.controller.tsを下記のように変更する。

これで意図した形になる。

NestJSでMySQLと接続するモジュールを外部化し環境変数にする

環境変数化とDB接続のモジュール化

綺麗にって漠然と書いたが、

  • 環境変数化
  • DB接続のモジュール作成

を行っていく。

DB接続のモジュール作成

まずは外部モジュール化する。

で、データ接続用のモジュールを作成する。

次に、app.module.tsの方を編集する。

設定をべたでimportしていたので、それを外部モジュールに変換する。

これで外部化は完了。

環境変数化

次に環境変数化していく。

で、環境変数から読み込むためのパッケージをインストールする。

バージョンは "@nestjs/config": "^2.3.1"だった。

.envファイルをルートに作成し、そこに環境変数を作成する。

DatabaseModuleの読み込みを環境変数に変更する。

これでいままで通りデータが取得できていれば問題ない。

NestJSとclass-validatorでPOST時に検証をする

class-validatorをインストールした

前回はclass-validatorをインストールしDTOと接続した。

が、結果は前回の記事に書いた通りだった。

なので、バリデートを効くようにしたい。

main.tsにバリデートを読み込む

つまりバリデートするという指示が漏れていた。

ただこれだとclass-transformerが足りないと怒られる。

class-transformerをインストールする

これで怒られなくなった。

間違った情報をPOSTする

よし、怒られたのでオッケー。

NestJSでDTO(データ転送用オブジェクト)を使用しCRUD操作を行ってみる

検証ライブラリーをインストール

これは、見出しの通りPOST時に検証してくるライブラリー。

デコレータおよび非デコレータ ベースの検証の使用を許可します。内部的には、validator.jsを使用して検証を実行します。Class-validator は、ブラウザと node.js プラットフォームの両方で動作します。

ちなみにバージョンは"class-validator": "^0.14.0"←の通り。

データ転送オブジェクトを作成する

データ転送オブジェクト (DTO)とは

アプリケーションで受信するデータ用に適切なデータ構造を作成、検証しやすくするもの。
DTO
を使うことで、リクエスト本文から抽出されるオブジェクトの形状を指定でき、検証の組み込みが容易になるとのこと。

ちなみにDTOは英語名(Data Transfer…

Read more →
NestJsとMySQLでCRUD操作を行ってみた

前回の修正と準備

前回testというEntityを作ったけど、わかりにくくなるのでsampleに変更した。

モジュールの作成

まず上記コマンドを使用し、モジュールを作る。なぜモジュール化するかを調べると散らかるので、また別の機会に。

公式ドキュメントに

対応するモジュール ディレクトリ内のドメインの近くに作成することをお勧めします。

と記載されているので、sample.entity.tsを作成したサンプルモジュール内に移行する。

必要なファイルを作成する

controllerとserviceを作成する。

controllerはルーティングを指定し、serviceは処理の記述を書くファイルという認識。

最後に、DBと疎通操作するためのRepositoryを作成する。なぜか作成するコマンドが用意されていないようなので、自作する。

各ファイルを作成する

sample.…

Read more →
NestJsにおけるMigrationと「synchronize: true」を調べてみた

synchronize: true とは

公式ドキュメントを呼んでいる際は読み飛ばしたが、下記のようなことが書かれていた。

Setting synchronize: true shouldn't be used in production - otherwise you can
lose production data.

翻訳すると「設定synchronize:
trueは本番環境では使用しないでください。そうしないと、本番データが失われる可能性があります。」とのこと。読み飛ばすにはあまりにも恐ろしい項目な気もするが、当時に自分は気にも留めなかった。

これがマイグレーション作業と深く結びついている。

この設定は、アプリケーションをデプロイしたときにDBのテーブルがEntityから自動的に生成されるというもの。…

Read more →
Windows11に入れたMySQLとNest.Jsを接続し、テーブルを作成する

MySQLにデータベースを作成する

まず、Windows11にいれたMySQLにデータベースを作成する。

mySQLを立ち上げ、

でログインする。

次に、下記クエリでデータベースを作成する。

を実行する。

と出ればデータベースが作成できている。

念のため、

上記クエリで確認すればデータベースを一覧で確認できる。

NestJsから接続する

TypeORMをインストールする

SQL および NoSQL データベースと統合するために、Nest は@nestjs/typeormパッケージを提供します。Nest がTypeORMを使用するのは、それが TypeScript で利用できる最も成熟したオブジェクト リレーショナル マッパー (ORM) だからです。TypeScript で記述されているため、Nest…

Read more →
Dockerで立ち上げたNextJs・NestJsのプロジェクトでホットリロードを可能にする

Dockerで環境構築したファイルを変更してもブラウザで表示が変更されない

そもそも作成した環境は下記記事の通り。

DockerでnextJsとnestJsの環境構築をする

で、色々検証してみた結果、Dockerを止め、再度立ち上げれば更新されているということが分かった。原因が分かった、これで一件落着とはならない。 何でも不便すぎる。

そこでホットリロードが効くように調査してみた。

結論(いったん諦める)

フロントエンドに限り、ブラウザを更新すれば、表示が更新されることは確認できた。

フロントエンド(NextJs)

フロントエンド(NextJs)側の設定は、docker-compose.ymlに下記変更を加えたらホットリロードが効くようになった。

...ただめちゃくちゃ重い。

何回かやっていると、なんかうまくいかなくなったので、
上記の追加分を削除し、下記で対応した。

Read more →
DockerでnextJsとnestJsの環境構築をする

NextJsとNestJsをDockerで立ち上げる

あくまでもDockerのハンズオンなので別に何でもいいのだが、どうせならということで、次に考えている構成でやってみることにした。

ちなみに【環境構築】NestJS+Next.js+TypeScript+Dockerの環境構築ハンズオンに倣うようにすすめていくので、こちらの記事を参考にした方がいいかもしれない。

docker-compose.ymlファイルを作成する

プロジェクトのルートでdocker-compose.ymlファイルを作成する。そのために下記コマンドを実行する。

実行後、docker-compose.ymlという名前の空ファイルができていることを確認することができる。

このファイルにDockerの設定を書いていく。

設定内容は把握できていないが、これでバックエンドのdocker-compose.ymlが作成で…

Read more →
Page 1