Upgrade to Pro — share decks privately, control downloads, hide ads and more …

NestJS をかじってみた / MIERUNE BBQ #01 / #mierune

NestJS をかじってみた / MIERUNE BBQ #01 / #mierune

MIERUNE BBQ #01 の登壇資料
https://mierune.connpass.com/event/284183/

NestJS の導入と、少し触ってみたデモ。

Kihara, Takuya

May 31, 2023
Tweet

More Decks by Kihara, Takuya

Other Decks in Technology

Transcript

  1. NestJS をかじってみた
    MIERUNE BBQ #01
    2023/05/31
    tacck / 木原卓也
    1

    View full-size slide

  2. 2
    木原 卓也
    Kihara,Takuya / @tacck
    生活協同組合コープさっぽろ
    デジタル推進本部システム部
    Amplify Japan User Group
    運営メンバー
    AWS Community Builder
    Q2 2021, 2022, 2023 / Category: Front-end Web and Mobile
    好きなフィギュアスケートの技
    スプレッド・イーグル
    ゆるWeb勉強会@札幌
    主催

    View full-size slide

  3. 今日お話しすること
    • NestJS をかじってみた話
    • 詳しいことは話せません
    3

    View full-size slide

  4. NestJSとは
    • サーバサイド(Backend)向けのフルスタックフレームワーク
    • TypeScriptベースで開発
    • ランタイムはNode.js
    https://nestjs.com/
    4

    View full-size slide

  5. ざっくりどういうことができるか
    • 他の言語のフルスタックフレームワークと似た感じ
    • DI (Dependency Injection) のサポート
    • ORM のサポート
    • CLI による Scaffolding (ベースとなるコード生成)
    • その他は勉強中です…
    5

    View full-size slide

  6. デモ
    • アプリ作成
    • URLパス追加
    • ORM (Sequelize) を利用
    6

    View full-size slide

  7. アプリ作成
    $ nest new sample-project
    (...)
    🚀 Successfully created project sample-project
    👉 Get started with the following commands:
    $ cd sample-project
    $ npm run start
    Thanks for installing Nest 🙏
    Please consider donating to our open collective
    to help us maintain this package.
    🍷 Donate: https://opencollective.com/nest
    7

    View full-size slide

  8. URLパス追加
    src/app.controller.ts
    @Get('/hi')
    getHi(): string {
    return this.appService.getHi();
    }
    8
    src/app.service.ts
    getHi(): string {
    return 'Hi There!';
    }

    View full-size slide

  9. ORM (SEQUELIZE) を利用
    src/app.module.ts
    imports: [
    SequelizeModule.forRoot({
    database: 'sample',
    dialect: 'sqlite',
    storage: 'database/database.sqlite3',
    models: [User],
    }),
    UsersModule,
    ],
    9
    src/users/entities/user.entity.ts
    import { Column, Model, Table } from 'sequelize-
    typescript';
    @Table
    export class User extends Model {
    @Column
    firstName: string;
    @Column
    lastName: string;
    @Column({ defaultValue: true })
    isActive: boolean;
    }
    $ nest g res users
    ? What transport layer do you use? REST API
    ? Would you like to generate CRUD entry points? Yes

    View full-size slide

  10. ORM (SEQUELIZE) を利用
    src/users/users.service.ts
    constructor(
    @InjectModel(User)
    private userModel: typeof User,
    ) {}
    10
    src/users/users.service.ts
    create(createUserDto: User) {
    return this.userModel.create({
    lastName: createUserDto.lastName,
    firstName: createUserDto.firstName,
    isActive: createUserDto.isActive,
    });
    }
    findAll() {
    return this.userModel.findAll();
    }
    src/users/users.module.ts
    imports: [SequelizeModule.forFeature([User])],
    ],

    View full-size slide

  11. まとめ
    • NestJS を使って、 TypeScript (Node.js) でも
    快適なフルスタックフレームワークライフを過ごせそう!
    • もう少し使い込んでみます。
    11

    View full-size slide

  12. 宣伝
    12
    JJUG CCC 2023 Spring
    2023/06/04
    FaaS における Java 起動時間の比較
    (AWS / Azure / GCP)
    16:40-17:00
    オンライン配信あり
    私の発表するトラックは
    リアルタイム配信ありません。
    https://eventregist.com/e/luIcqEmpqPI2

    View full-size slide