狠狠撸

狠狠撸Share a Scribd company logo
ビットバンク株式会社
罢测辫别厂肠谤颈辫迟製フレームワーク「狈别蝉迟」のご绍介
@d-yokoi
2018.8
Copyright ? bitbank, inc.
自己紹介
? ビットバンクでサーバーサイドを担当
? Node.js, TypeScript
? 前職ではモバイルゲームを開発
? C++, C#, PHP, etc.
Daiki Yokoi
Copyright ? bitbank, inc.
目的とアジェンダ
狈别蝉迟について広く浅く绍介し、興味を持ってもらう
? Nestを使い始めるまで
? そもそもどんな課題があったのか
? Nest入門
? 前提となる基礎知識をつける
? Nestの機能紹介
? どのようなことができるのか
Copyright ? bitbank, inc.
Nestを使い始めるまで
Copyright ? bitbank, inc.
? 既存のアプリは Node.js (v6) + Express という構成
? コードの透明性と柔軟性が高い
? データ構造がわかりにくく、可読性が低い
? フロントエンドチームの知見も借りられる
? TypeScript + Angular で開発している
Nestを使い始めるまで
新規開発はTypeScriptでやりたい
Copyright ? bitbank, inc.
Nestを使い始めるまで
TypeScript化と同時により効率的な開発手法を模索
? DIの導入
? ユニットテストの効率化など
? ルーティング効率化
? ハンドラの登録をよりモダンな形で行えないか
? APIドキュメント
? スプレッドシートでの手動管理から脱却
? 自動でSwaggerUIに繋ぎこみたい
Copyright ? bitbank, inc.
? InversifyJS [1]
? IoCコンテナ
? routing-controllers [2]
? デコレータでハンドラを登録できる
? tsoa [3]
? APIドキュメントの自動生成
[1] http://inversify.io/
[2] https://github.com/typestack/routing-controllers
[3] https://github.com/lukeautry/tsoa
Nestを使い始めるまで
いくつかのツールを試してみた
Copyright ? bitbank, inc.
Nestを使い始めるまで
これらが統合されたフレームワークが欲しくなった
? 各ツールの守備範囲が微妙に噛み合わない
? ツールごとの前提条件や制約もあり、まとめ上げるのが少し面倒
Copyright ? bitbank, inc.
Nestを使い始めるまで
そこで見つけたのがNest
Copyright ? bitbank, inc.
Nestを使い始めるまで
Nestを使ってみることに
? もともと欲しかった機能が一通り揃っていた
? オリジナルのDIコンテナ
? デコレータでのハンドラ登録
? APIドキュメントの生成
? ポピュラーになりそう
? 日本語情報が全くない中、GitHubのスターは5000超え (2018/03時点)
? Angularのカンファレンスにも登場
Copyright ? bitbank, inc.
Nest入門
Copyright ? bitbank, inc.
Nest入門
? 簡単に言うとクラスの集まり
? 例)UserModule = UserController + UserService + …
? 関係性の強いクラスでまとめるべき
? 複数のモジュールがツリー状になって一つのアプリを構成
? 頂点のモジュールは ApplicationModule と命名されるのが一般的
フレームワーク独自のモジュールという概念がある
Copyright ? bitbank, inc.
Nest入門
モジュールツリーのイメージ
Copyright ? bitbank, inc.
Nest入門
? コントローラー
? 各エンドポイントへのリクエストハンドラを持つクラス
? プロバイダ
? コントローラー以外のクラス
? ロジックを持ち、コントローラーや別のプロバイダから呼び出される
モジュール内の各クラスは以下の2つに分類される
Copyright ? bitbank, inc.
Nest入門
コントローラーではデコレータでハンドラを登録する
@Controller(‘users’)
class UserController {
@Get(‘:id’)
create(@Param(‘id’) id: string) {
// GET /users/1 等をハンドリングする
}
@Post()
create(@Body() body: CreateUserRequest) {
// POST /users をハンドリングする
}
}
Copyright ? bitbank, inc.
Nest入門
プロバイダは各種ビジネスロジックを担当
UserModule
UserController UserService
UserDetailService
SessionService
Controllers Providers
Copyright ? bitbank, inc.
Nest入門
依存関係はコンストラクタの実装を元に解決される
@Controller(‘users’)
class UserController {
constructor(private readonly userService: UserService) {}
// 略
}
---
@Injectable()
class UserService {
constructor(private readonly userDetailService: UserDetailService) {}
// 略
}
---
class UserDetailService {
Copyright ? bitbank, inc.
Nest入門
? ツリー状のモジュール群がアプリケーションを構成
? トップのモジュールは Application Module と命名する
? モジュールは関係性の強いクラスの集合
? コントローラークラス => リクエストハンドラ
? プロバイダクラス => ビジネスロジック
? クラス間の依存関係はコンストラクタの実装を元に解決される
? モジュールをまたぐクラス間の依存関係の解決手段もある
ここまでのおさらい
Copyright ? bitbank, inc.
@Module({
imports: [UserModule]
})
export class ApplicationModule {}
---
import { NestFactory } from '@nestjs/core';
import { ApplicationModule } from './app.module.ts';
async function bootstrap() {
const app = await NestFactory.create(ApplicationModule);
await app.listen(3000);
}
bootstrap();
Nest入門
モジュールが作成できたらサーバーを起動できる
ツリーのトップのモジュールを渡す
Copyright ? bitbank, inc.
Nestの機能紹介
Copyright ? bitbank, inc.
? コントローラの実装を解析してドキュメントを生成する
? 必要に応じてデコレータで追加の情報を与えられる
APIドキュメントを自動で作成し、SwaggerUIに連携
Nestの機能紹介
Copyright ? bitbank, inc.
Nestの機能紹介
ロギングやレスポンスの整形に便利なインターセプタ
? ハンドラの実行前後に処理を差し込むことができる
? リクエスト開始時と終了時のログを簡単に紐づけることができる
? レスポンスにメタデータを追加したりするのにも便利
? いわゆるアスペクト指向プログラミングをサポートしてくれる
Copyright ? bitbank, inc.
@Injectable()
export class LoggingInterceptor implements NestInterceptor {
intercept(contexct: ExecutionContext, call$: Observable<any>): Observable<any> {
const requestId = uuid.v4();
console.log(`[Before] requestId: ${requestId}`);
return call$.pipe(
tap(() =>
console.log(`[After] requestId: ${requestId}`)
),
);
}
}
Nestの機能紹介
ロギングやレスポンスの整形に便利なインターセプタ
一つのメソッド内で
前後の処理を記述できる
Copyright ? bitbank, inc.
Nestの機能紹介
リクエストパラメータと同時に定義するバリデーション
class CreateUserRequest {
@Length(10, 100)
@IsEmail()
readonly mail!: string;
}
@Controller(‘users’)
class UserController {
@Post()
create(@Body() body: CreateUserRequest) {
// 新規ユーザーを作成
}
}
この時点では以下が全て完了している
- リクエストボティのパース
- 指定したクラスへの変換
- バリデーションの実行
各バリデーションをデコレータで定義
- class-validatorが提供するもの
- カスタマイズも可能
Copyright ? bitbank, inc.
Nestの機能紹介
Passportでの認証もサポート
? Passportはポピュラーな認証ツール
? JWT (JSON Web Token) やSAMLなど多様な認証手法が実装されている
? @nestjs/passportという公式パッケージがある
? 認証部分をアスペクト指向で実装する枠組みを提供してくれる
Copyright ? bitbank, inc.
Nestの機能紹介
ガードによってアクセスコントロールを実現
? ガードは不正なリクエストを弾くための仕組み
? canActivateというインターフェースが用意されている
? リクエストデータを受けてboolean値を返すメソッドを実装するだけ
? 登録されたハンドラの実行前に評価される
? ビットバンクのあるアプリケーションではAPIごとに権限を設定
? Nestの全モジュールをスキャンしてAPI一覧を取得
? これを各ユーザーに割り当てる
? あとはガードの中でユーザーの権限をチェックすれば良い
Copyright ? bitbank, inc.
? TypeORMはポピュラーな O/R Mapper
? 基本的なユースケースはほぼカバーされている印象
? トランザクションやパーティショニングが絡むと少しだけ手間だが問題ない範囲
? どうにもならなければSQLを直接書くこともできるがあまり使わない
? マイグレーションの仕組みも用意されている
? メンテナーの方が非常にオープンかつ反応が早い
? IssueやPRがすぐ処理される安心感
? @nestjs/typeorm という公式パッケージがある
? TypeORMのリポジトリクラス等を他のクラスと同じように簡単にDIできる
Nestの機能紹介
TypeORMでのデータベースアクセスをサポート
Copyright ? bitbank, inc.
モックを使用したテストを簡単に行える
Nestの機能紹介
? @nestjs/testing という公式パッケージがある
? モジュール内の一部のクラスをモックに差し替えることができる
? 依存先が多いクラスをテストする際に便利
? ユニットテストにもe2eテストにも使える
? 特定のテストフレームワークとの連携はなし
? サンプルではJestというFacebookが開発するツールが使用されている
? JestはテストAPIやモック化の手法が豊富で使いやすい
? カバレッジを計測してHTMLで出力することもできる
? ビットバンクではMochaからJestへの移行が進んでいる
Copyright ? bitbank, inc.
その他
Nestの機能紹介
? CLIツール
? @nestjs/cli という公式パッケージがある
? nest new <app-name> でアプリケーションの雛形ができる
? 個別のコンポーネントを作成することもできる
? コントローラー部分はREST以外にも対応可能
? GraphQL, WebSocket, gRPC, etc.
? MVCにも対応可能
Copyright ? bitbank, inc.
? TypeScriptで開発したい方
? Nestで本格的なアプリケーションを作ってみたい方
? 暗号通貨取引所のバックエンドを支えたい方
最後に
仲間を募集しています :)

More Related Content

What's hot (20)

SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
Takuto Wada
?
惭补惫别苍の真実とウソ
惭补惫别苍の真実とウソ惭补惫别苍の真実とウソ
惭补惫别苍の真実とウソ
Yoshitaka Kawashima
?
厂别谤惫别谤濒别蝉蝉时代の闯补惫补について
厂别谤惫别谤濒别蝉蝉时代の闯补惫补について厂别谤惫别谤濒别蝉蝉时代の闯补惫补について
厂别谤惫别谤濒别蝉蝉时代の闯补惫补について
Amazon Web Services Japan
?
ドメイン駆动设计サンプルコードの彻底解説
ドメイン駆动设计サンプルコードの彻底解説ドメイン駆动设计サンプルコードの彻底解説
ドメイン駆动设计サンプルコードの彻底解説
増田 亨
?
[GKE & Spanner 勉強会] Cloud Spanner の技術概要
[GKE & Spanner 勉強会] Cloud Spanner の技術概要[GKE & Spanner 勉強会] Cloud Spanner の技術概要
[GKE & Spanner 勉強会] Cloud Spanner の技術概要
Google Cloud Platform - Japan
?
罢滨惭贰冲奥础滨罢に関する话
罢滨惭贰冲奥础滨罢に関する话罢滨惭贰冲奥础滨罢に関する话
罢滨惭贰冲奥础滨罢に関する话
Takanori Sejima
?
押さえておきたい、PostgreSQL 13 の新機能!! (PostgreSQL Conference Japan 2020講演資料)
押さえておきたい、PostgreSQL 13 の新機能!! (PostgreSQL Conference Japan 2020講演資料)押さえておきたい、PostgreSQL 13 の新機能!! (PostgreSQL Conference Japan 2020講演資料)
押さえておきたい、PostgreSQL 13 の新機能!! (PostgreSQL Conference Japan 2020講演資料)
NTT DATA Technology & Innovation
?
IT エンジニアのための 流し読み Windows - Microsoft Defender Exploit Guard
IT エンジニアのための 流し読み Windows - Microsoft Defender Exploit GuardIT エンジニアのための 流し読み Windows - Microsoft Defender Exploit Guard
IT エンジニアのための 流し読み Windows - Microsoft Defender Exploit Guard
TAKUYA OHTA
?
础奥厂とオンプレミスを繋ぐときに知っておきたいルーティングの基础知识(颁颁厂滨监修!)
础奥厂とオンプレミスを繋ぐときに知っておきたいルーティングの基础知识(颁颁厂滨监修!)础奥厂とオンプレミスを繋ぐときに知っておきたいルーティングの基础知识(颁颁厂滨监修!)
础奥厂とオンプレミスを繋ぐときに知っておきたいルーティングの基础知识(颁颁厂滨监修!)
Trainocate Japan, Ltd.
?
30分でわかるマイクロサービスアーキテクチャ 第2版
30分でわかるマイクロサービスアーキテクチャ 第2版30分でわかるマイクロサービスアーキテクチャ 第2版
30分でわかるマイクロサービスアーキテクチャ 第2版
Naoki (Neo) SATO
?
それはYAGNIか? それとも思考停止か?
それはYAGNIか? それとも思考停止か?それはYAGNIか? それとも思考停止か?
それはYAGNIか? それとも思考停止か?
Yoshitaka Kawashima
?
Spring bootでweb セキュリティ(ログイン認証)編
Spring bootでweb セキュリティ(ログイン認証)編Spring bootでweb セキュリティ(ログイン認証)編
Spring bootでweb セキュリティ(ログイン認証)編
なべ
?
マルチテナントのアプリケーション実装?実践编?
マルチテナントのアプリケーション実装?実践编?マルチテナントのアプリケーション実装?実践编?
マルチテナントのアプリケーション実装?実践编?
Yoshiki Nakagawa
?
速習!論理レプリケーション ~基礎から最新動向まで~(PostgreSQL Conference Japan 2022 発表資料)
速習!論理レプリケーション ~基礎から最新動向まで~(PostgreSQL Conference Japan 2022 発表資料)速習!論理レプリケーション ~基礎から最新動向まで~(PostgreSQL Conference Japan 2022 発表資料)
速習!論理レプリケーション ~基礎から最新動向まで~(PostgreSQL Conference Japan 2022 発表資料)
NTT DATA Technology & Innovation
?
厂辫补苍苍别谤移行について本気出して考えてみた
厂辫补苍苍别谤移行について本気出して考えてみた厂辫补苍苍别谤移行について本気出して考えてみた
厂辫补苍苍别谤移行について本気出して考えてみた
techgamecollege
?
ドメイン駆動設計 本格入門
ドメイン駆動設計 本格入門ドメイン駆動設計 本格入門
ドメイン駆動設計 本格入門
増田 亨
?
GraalVMのJavaネイティブビルド機能でどの程度起動が速くなるのか?~サーバレス基盤上での評価~ / How fast does GraalVM's...
GraalVMのJavaネイティブビルド機能でどの程度起動が速くなるのか?~サーバレス基盤上での評価~ / How fast does GraalVM's...GraalVMのJavaネイティブビルド機能でどの程度起動が速くなるのか?~サーバレス基盤上での評価~ / How fast does GraalVM's...
GraalVMのJavaネイティブビルド機能でどの程度起動が速くなるのか?~サーバレス基盤上での評価~ / How fast does GraalVM's...
Shinji Takao
?
祝!笔辞蝉迟驳谤别厂蚕尝レプリケーション10周年!彻底绍介!!
祝!笔辞蝉迟驳谤别厂蚕尝レプリケーション10周年!彻底绍介!!祝!笔辞蝉迟驳谤别厂蚕尝レプリケーション10周年!彻底绍介!!
祝!笔辞蝉迟驳谤别厂蚕尝レプリケーション10周年!彻底绍介!!
NTT DATA Technology & Innovation
?
[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス
[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス
[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス
Amazon Web Services Japan
?
顿叠スキーマもバージョン管理したい!
顿叠スキーマもバージョン管理したい!顿叠スキーマもバージョン管理したい!
顿叠スキーマもバージョン管理したい!
kwatch
?
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
Takuto Wada
?
厂别谤惫别谤濒别蝉蝉时代の闯补惫补について
厂别谤惫别谤濒别蝉蝉时代の闯补惫补について厂别谤惫别谤濒别蝉蝉时代の闯补惫补について
厂别谤惫别谤濒别蝉蝉时代の闯补惫补について
Amazon Web Services Japan
?
ドメイン駆动设计サンプルコードの彻底解説
ドメイン駆动设计サンプルコードの彻底解説ドメイン駆动设计サンプルコードの彻底解説
ドメイン駆动设计サンプルコードの彻底解説
増田 亨
?
[GKE & Spanner 勉強会] Cloud Spanner の技術概要
[GKE & Spanner 勉強会] Cloud Spanner の技術概要[GKE & Spanner 勉強会] Cloud Spanner の技術概要
[GKE & Spanner 勉強会] Cloud Spanner の技術概要
Google Cloud Platform - Japan
?
罢滨惭贰冲奥础滨罢に関する话
罢滨惭贰冲奥础滨罢に関する话罢滨惭贰冲奥础滨罢に関する话
罢滨惭贰冲奥础滨罢に関する话
Takanori Sejima
?
押さえておきたい、PostgreSQL 13 の新機能!! (PostgreSQL Conference Japan 2020講演資料)
押さえておきたい、PostgreSQL 13 の新機能!! (PostgreSQL Conference Japan 2020講演資料)押さえておきたい、PostgreSQL 13 の新機能!! (PostgreSQL Conference Japan 2020講演資料)
押さえておきたい、PostgreSQL 13 の新機能!! (PostgreSQL Conference Japan 2020講演資料)
NTT DATA Technology & Innovation
?
IT エンジニアのための 流し読み Windows - Microsoft Defender Exploit Guard
IT エンジニアのための 流し読み Windows - Microsoft Defender Exploit GuardIT エンジニアのための 流し読み Windows - Microsoft Defender Exploit Guard
IT エンジニアのための 流し読み Windows - Microsoft Defender Exploit Guard
TAKUYA OHTA
?
础奥厂とオンプレミスを繋ぐときに知っておきたいルーティングの基础知识(颁颁厂滨监修!)
础奥厂とオンプレミスを繋ぐときに知っておきたいルーティングの基础知识(颁颁厂滨监修!)础奥厂とオンプレミスを繋ぐときに知っておきたいルーティングの基础知识(颁颁厂滨监修!)
础奥厂とオンプレミスを繋ぐときに知っておきたいルーティングの基础知识(颁颁厂滨监修!)
Trainocate Japan, Ltd.
?
30分でわかるマイクロサービスアーキテクチャ 第2版
30分でわかるマイクロサービスアーキテクチャ 第2版30分でわかるマイクロサービスアーキテクチャ 第2版
30分でわかるマイクロサービスアーキテクチャ 第2版
Naoki (Neo) SATO
?
それはYAGNIか? それとも思考停止か?
それはYAGNIか? それとも思考停止か?それはYAGNIか? それとも思考停止か?
それはYAGNIか? それとも思考停止か?
Yoshitaka Kawashima
?
Spring bootでweb セキュリティ(ログイン認証)編
Spring bootでweb セキュリティ(ログイン認証)編Spring bootでweb セキュリティ(ログイン認証)編
Spring bootでweb セキュリティ(ログイン認証)編
なべ
?
マルチテナントのアプリケーション実装?実践编?
マルチテナントのアプリケーション実装?実践编?マルチテナントのアプリケーション実装?実践编?
マルチテナントのアプリケーション実装?実践编?
Yoshiki Nakagawa
?
速習!論理レプリケーション ~基礎から最新動向まで~(PostgreSQL Conference Japan 2022 発表資料)
速習!論理レプリケーション ~基礎から最新動向まで~(PostgreSQL Conference Japan 2022 発表資料)速習!論理レプリケーション ~基礎から最新動向まで~(PostgreSQL Conference Japan 2022 発表資料)
速習!論理レプリケーション ~基礎から最新動向まで~(PostgreSQL Conference Japan 2022 発表資料)
NTT DATA Technology & Innovation
?
厂辫补苍苍别谤移行について本気出して考えてみた
厂辫补苍苍别谤移行について本気出して考えてみた厂辫补苍苍别谤移行について本気出して考えてみた
厂辫补苍苍别谤移行について本気出して考えてみた
techgamecollege
?
ドメイン駆動設計 本格入門
ドメイン駆動設計 本格入門ドメイン駆動設計 本格入門
ドメイン駆動設計 本格入門
増田 亨
?
GraalVMのJavaネイティブビルド機能でどの程度起動が速くなるのか?~サーバレス基盤上での評価~ / How fast does GraalVM's...
GraalVMのJavaネイティブビルド機能でどの程度起動が速くなるのか?~サーバレス基盤上での評価~ / How fast does GraalVM's...GraalVMのJavaネイティブビルド機能でどの程度起動が速くなるのか?~サーバレス基盤上での評価~ / How fast does GraalVM's...
GraalVMのJavaネイティブビルド機能でどの程度起動が速くなるのか?~サーバレス基盤上での評価~ / How fast does GraalVM's...
Shinji Takao
?
祝!笔辞蝉迟驳谤别厂蚕尝レプリケーション10周年!彻底绍介!!
祝!笔辞蝉迟驳谤别厂蚕尝レプリケーション10周年!彻底绍介!!祝!笔辞蝉迟驳谤别厂蚕尝レプリケーション10周年!彻底绍介!!
祝!笔辞蝉迟驳谤别厂蚕尝レプリケーション10周年!彻底绍介!!
NTT DATA Technology & Innovation
?
[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス
[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス
[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス
Amazon Web Services Japan
?
顿叠スキーマもバージョン管理したい!
顿叠スキーマもバージョン管理したい!顿叠スキーマもバージョン管理したい!
顿叠スキーマもバージョン管理したい!
kwatch
?

Similar to 罢测辫别厂肠谤颈辫迟製フレームワーク「狈别蝉迟」のご绍介 (20)

狈辞诲别.箩蝉アプリの开発をモダン化するために取り组んできたこと
狈辞诲别.箩蝉アプリの开発をモダン化するために取り组んできたこと狈辞诲别.箩蝉アプリの开発をモダン化するために取り组んできたこと
狈辞诲别.箩蝉アプリの开発をモダン化するために取り组んできたこと
bitbank, Inc. Tokyo, Japan
?
13016 n分で作るtype scriptでnodejs
13016 n分で作るtype scriptでnodejs13016 n分で作るtype scriptでnodejs
13016 n分で作るtype scriptでnodejs
Takayoshi Tanaka
?
搁补苍肠丑别谤を活用して开発効率を上げる
搁补苍肠丑别谤を活用して开発効率を上げる搁补苍肠丑别谤を活用して开発効率を上げる
搁补苍肠丑别谤を活用して开発効率を上げる
Michitaka Terada
?
Deep-Dive into Scriptable Build Pipeline
Deep-Dive into Scriptable Build PipelineDeep-Dive into Scriptable Build Pipeline
Deep-Dive into Scriptable Build Pipeline
Haruto Otake
?
[AI08] 深層学習フレームワーク Chainer × Microsoft で広がる応用
[AI08] 深層学習フレームワーク Chainer × Microsoft で広がる応用[AI08] 深層学習フレームワーク Chainer × Microsoft で広がる応用
[AI08] 深層学習フレームワーク Chainer × Microsoft で広がる応用
de:code 2017
?
Angularreflex20141210
Angularreflex20141210Angularreflex20141210
Angularreflex20141210
Shinichiro Takezaki
?
痴耻别入门
痴耻别入门痴耻别入门
痴耻别入门
Takeo Noda
?
今こそ知りたいSpring Web(Spring Fest 2020講演資料)
今こそ知りたいSpring Web(Spring Fest 2020講演資料)今こそ知りたいSpring Web(Spring Fest 2020講演資料)
今こそ知りたいSpring Web(Spring Fest 2020講演資料)
NTT DATA Technology & Innovation
?
1891件以上のカーネルの不具合修正に貢献した再現用プログラムを自動生成するsyzkallerのテスト自動化技術(NTT Tech Conference ...
1891件以上のカーネルの不具合修正に貢献した再現用プログラムを自動生成するsyzkallerのテスト自動化技術(NTT Tech Conference ...1891件以上のカーネルの不具合修正に貢献した再現用プログラムを自動生成するsyzkallerのテスト自動化技術(NTT Tech Conference ...
1891件以上のカーネルの不具合修正に貢献した再現用プログラムを自動生成するsyzkallerのテスト自動化技術(NTT Tech Conference ...
NTT DATA Technology & Innovation
?
de:code2018 登壇資料
de:code2018 登壇資料de:code2018 登壇資料
de:code2018 登壇資料
Hiroshi Senga
?
Essentials of container
Essentials of containerEssentials of container
Essentials of container
Toru Makabe
?
キャリア網の完全なソフトウェア制御化への取り組み (沖縄オープンデイズ 2017) / Telecommunication Infrastructure ...
キャリア網の完全なソフトウェア制御化への取り組み (沖縄オープンデイズ 2017) / Telecommunication Infrastructure ...キャリア網の完全なソフトウェア制御化への取り組み (沖縄オープンデイズ 2017) / Telecommunication Infrastructure ...
キャリア網の完全なソフトウェア制御化への取り組み (沖縄オープンデイズ 2017) / Telecommunication Infrastructure ...
KenzoOkuda
?
Kubernetesのしくみ やさしく学ぶ 内部構造とアーキテクチャー
Kubernetesのしくみ やさしく学ぶ 内部構造とアーキテクチャーKubernetesのしくみ やさしく学ぶ 内部構造とアーキテクチャー
Kubernetesのしくみ やさしく学ぶ 内部構造とアーキテクチャー
Toru Makabe
?
エンジニアのための Azure 基礎知識
エンジニアのための Azure 基礎知識エンジニアのための Azure 基礎知識
エンジニアのための Azure 基礎知識
Daiyu Hatakeyama
?
次世代の公司滨罢インフラを支えるエンジニアとは
次世代の公司滨罢インフラを支えるエンジニアとは次世代の公司滨罢インフラを支えるエンジニアとは
次世代の公司滨罢インフラを支えるエンジニアとは
Trainocate Japan, Ltd.
?
【Cloud Week 2015@Hokkaido University】Dockerとインフラ運用自働化とIoT
【Cloud Week 2015@Hokkaido University】Dockerとインフラ運用自働化とIoT【Cloud Week 2015@Hokkaido University】Dockerとインフラ運用自働化とIoT
【Cloud Week 2015@Hokkaido University】Dockerとインフラ運用自働化とIoT
cloudconductor
?
Azure Antenna AI 概要
Azure Antenna AI 概要Azure Antenna AI 概要
Azure Antenna AI 概要
Miho Yamamoto
?
GraalVMを3つの主機能から眺めてみよう(Oracle Groundbreakers APAC Virtual Tour 2020 講演資料)
GraalVMを3つの主機能から眺めてみよう(Oracle Groundbreakers APAC Virtual Tour 2020 講演資料)GraalVMを3つの主機能から眺めてみよう(Oracle Groundbreakers APAC Virtual Tour 2020 講演資料)
GraalVMを3つの主機能から眺めてみよう(Oracle Groundbreakers APAC Virtual Tour 2020 講演資料)
NTT DATA Technology & Innovation
?
The road of Apache CloudStack Contributor (Translation and Patch)
The road of Apache CloudStack Contributor (Translation and Patch)The road of Apache CloudStack Contributor (Translation and Patch)
The road of Apache CloudStack Contributor (Translation and Patch)
Kimihiko Kitase
?
C# て?フ?ロックチェーン実装
C# て?フ?ロックチェーン実装C# て?フ?ロックチェーン実装
C# て?フ?ロックチェーン実装
Yuto Takei
?
狈辞诲别.箩蝉アプリの开発をモダン化するために取り组んできたこと
狈辞诲别.箩蝉アプリの开発をモダン化するために取り组んできたこと狈辞诲别.箩蝉アプリの开発をモダン化するために取り组んできたこと
狈辞诲别.箩蝉アプリの开発をモダン化するために取り组んできたこと
bitbank, Inc. Tokyo, Japan
?
13016 n分で作るtype scriptでnodejs
13016 n分で作るtype scriptでnodejs13016 n分で作るtype scriptでnodejs
13016 n分で作るtype scriptでnodejs
Takayoshi Tanaka
?
搁补苍肠丑别谤を活用して开発効率を上げる
搁补苍肠丑别谤を活用して开発効率を上げる搁补苍肠丑别谤を活用して开発効率を上げる
搁补苍肠丑别谤を活用して开発効率を上げる
Michitaka Terada
?
Deep-Dive into Scriptable Build Pipeline
Deep-Dive into Scriptable Build PipelineDeep-Dive into Scriptable Build Pipeline
Deep-Dive into Scriptable Build Pipeline
Haruto Otake
?
[AI08] 深層学習フレームワーク Chainer × Microsoft で広がる応用
[AI08] 深層学習フレームワーク Chainer × Microsoft で広がる応用[AI08] 深層学習フレームワーク Chainer × Microsoft で広がる応用
[AI08] 深層学習フレームワーク Chainer × Microsoft で広がる応用
de:code 2017
?
今こそ知りたいSpring Web(Spring Fest 2020講演資料)
今こそ知りたいSpring Web(Spring Fest 2020講演資料)今こそ知りたいSpring Web(Spring Fest 2020講演資料)
今こそ知りたいSpring Web(Spring Fest 2020講演資料)
NTT DATA Technology & Innovation
?
1891件以上のカーネルの不具合修正に貢献した再現用プログラムを自動生成するsyzkallerのテスト自動化技術(NTT Tech Conference ...
1891件以上のカーネルの不具合修正に貢献した再現用プログラムを自動生成するsyzkallerのテスト自動化技術(NTT Tech Conference ...1891件以上のカーネルの不具合修正に貢献した再現用プログラムを自動生成するsyzkallerのテスト自動化技術(NTT Tech Conference ...
1891件以上のカーネルの不具合修正に貢献した再現用プログラムを自動生成するsyzkallerのテスト自動化技術(NTT Tech Conference ...
NTT DATA Technology & Innovation
?
de:code2018 登壇資料
de:code2018 登壇資料de:code2018 登壇資料
de:code2018 登壇資料
Hiroshi Senga
?
Essentials of container
Essentials of containerEssentials of container
Essentials of container
Toru Makabe
?
キャリア網の完全なソフトウェア制御化への取り組み (沖縄オープンデイズ 2017) / Telecommunication Infrastructure ...
キャリア網の完全なソフトウェア制御化への取り組み (沖縄オープンデイズ 2017) / Telecommunication Infrastructure ...キャリア網の完全なソフトウェア制御化への取り組み (沖縄オープンデイズ 2017) / Telecommunication Infrastructure ...
キャリア網の完全なソフトウェア制御化への取り組み (沖縄オープンデイズ 2017) / Telecommunication Infrastructure ...
KenzoOkuda
?
Kubernetesのしくみ やさしく学ぶ 内部構造とアーキテクチャー
Kubernetesのしくみ やさしく学ぶ 内部構造とアーキテクチャーKubernetesのしくみ やさしく学ぶ 内部構造とアーキテクチャー
Kubernetesのしくみ やさしく学ぶ 内部構造とアーキテクチャー
Toru Makabe
?
エンジニアのための Azure 基礎知識
エンジニアのための Azure 基礎知識エンジニアのための Azure 基礎知識
エンジニアのための Azure 基礎知識
Daiyu Hatakeyama
?
次世代の公司滨罢インフラを支えるエンジニアとは
次世代の公司滨罢インフラを支えるエンジニアとは次世代の公司滨罢インフラを支えるエンジニアとは
次世代の公司滨罢インフラを支えるエンジニアとは
Trainocate Japan, Ltd.
?
【Cloud Week 2015@Hokkaido University】Dockerとインフラ運用自働化とIoT
【Cloud Week 2015@Hokkaido University】Dockerとインフラ運用自働化とIoT【Cloud Week 2015@Hokkaido University】Dockerとインフラ運用自働化とIoT
【Cloud Week 2015@Hokkaido University】Dockerとインフラ運用自働化とIoT
cloudconductor
?
Azure Antenna AI 概要
Azure Antenna AI 概要Azure Antenna AI 概要
Azure Antenna AI 概要
Miho Yamamoto
?
GraalVMを3つの主機能から眺めてみよう(Oracle Groundbreakers APAC Virtual Tour 2020 講演資料)
GraalVMを3つの主機能から眺めてみよう(Oracle Groundbreakers APAC Virtual Tour 2020 講演資料)GraalVMを3つの主機能から眺めてみよう(Oracle Groundbreakers APAC Virtual Tour 2020 講演資料)
GraalVMを3つの主機能から眺めてみよう(Oracle Groundbreakers APAC Virtual Tour 2020 講演資料)
NTT DATA Technology & Innovation
?
The road of Apache CloudStack Contributor (Translation and Patch)
The road of Apache CloudStack Contributor (Translation and Patch)The road of Apache CloudStack Contributor (Translation and Patch)
The road of Apache CloudStack Contributor (Translation and Patch)
Kimihiko Kitase
?
C# て?フ?ロックチェーン実装
C# て?フ?ロックチェーン実装C# て?フ?ロックチェーン実装
C# て?フ?ロックチェーン実装
Yuto Takei
?

More from bitbank, Inc. Tokyo, Japan (20)

インフラチームの歴史とこれから
インフラチームの歴史とこれからインフラチームの歴史とこれから
インフラチームの歴史とこれから
bitbank, Inc. Tokyo, Japan
?
ヒ?ットハ?ンクのテ?フ?ロイ戦略について
ヒ?ットハ?ンクのテ?フ?ロイ戦略についてヒ?ットハ?ンクのテ?フ?ロイ戦略について
ヒ?ットハ?ンクのテ?フ?ロイ戦略について
bitbank, Inc. Tokyo, Japan
?
ヒ?ットハ?ンク流 アシ?ャイル開発の紹介.pdf
ヒ?ットハ?ンク流 アシ?ャイル開発の紹介.pdfヒ?ットハ?ンク流 アシ?ャイル開発の紹介.pdf
ヒ?ットハ?ンク流 アシ?ャイル開発の紹介.pdf
bitbank, Inc. Tokyo, Japan
?
ヒ?ットハ?ンクて?求められるフ?ロシ?ェクトマネシ?メント
ヒ?ットハ?ンクて?求められるフ?ロシ?ェクトマネシ?メントヒ?ットハ?ンクて?求められるフ?ロシ?ェクトマネシ?メント
ヒ?ットハ?ンクて?求められるフ?ロシ?ェクトマネシ?メント
bitbank, Inc. Tokyo, Japan
?
ヒ?ットハ?ンクて?のネイティフ?アフ?リケーション开発における颁滨冲颁顿环境
ヒ?ットハ?ンクて?のネイティフ?アフ?リケーション开発における颁滨冲颁顿环境ヒ?ットハ?ンクて?のネイティフ?アフ?リケーション开発における颁滨冲颁顿环境
ヒ?ットハ?ンクて?のネイティフ?アフ?リケーション开発における颁滨冲颁顿环境
bitbank, Inc. Tokyo, Japan
?
ヒ?ットハ?ンクのマッチンク?エンシ?ン.辫诲蹿
ヒ?ットハ?ンクのマッチンク?エンシ?ン.辫诲蹿ヒ?ットハ?ンクのマッチンク?エンシ?ン.辫诲蹿
ヒ?ットハ?ンクのマッチンク?エンシ?ン.辫诲蹿
bitbank, Inc. Tokyo, Japan
?
Lightning Network, Swap, Nloop
Lightning Network, Swap, NloopLightning Network, Swap, Nloop
Lightning Network, Swap, Nloop
bitbank, Inc. Tokyo, Japan
?
ヒ?ットハ?ンクにおける少人数て?支えるインフラチームの戦略
ヒ?ットハ?ンクにおける少人数て?支えるインフラチームの戦略ヒ?ットハ?ンクにおける少人数て?支えるインフラチームの戦略
ヒ?ットハ?ンクにおける少人数て?支えるインフラチームの戦略
bitbank, Inc. Tokyo, Japan
?
bitbank Corporate Information
bitbank Corporate Informationbitbank Corporate Information
bitbank Corporate Information
bitbank, Inc. Tokyo, Japan
?
ng build --prod & Continuous Delivery
ng build --prod & Continuous Deliveryng build --prod & Continuous Delivery
ng build --prod & Continuous Delivery
bitbank, Inc. Tokyo, Japan
?
マーブル図で怖くない搁虫闯厂
マーブル図で怖くない搁虫闯厂マーブル図で怖くない搁虫闯厂
マーブル図で怖くない搁虫闯厂
bitbank, Inc. Tokyo, Japan
?
持続的な運用開発のために社内基盤を整えている話 ?auditのCI組み込みやlintの社内PKG化?
持続的な運用開発のために社内基盤を整えている話 ?auditのCI組み込みやlintの社内PKG化?持続的な運用開発のために社内基盤を整えている話 ?auditのCI組み込みやlintの社内PKG化?
持続的な運用開発のために社内基盤を整えている話 ?auditのCI組み込みやlintの社内PKG化?
bitbank, Inc. Tokyo, Japan
?
中规模础苍驳耻濒补谤アプリケーションの再设计
中规模础苍驳耻濒补谤アプリケーションの再设计中规模础苍驳耻濒补谤アプリケーションの再设计
中规模础苍驳耻濒补谤アプリケーションの再设计
bitbank, Inc. Tokyo, Japan
?
仮想通貨取引所 bitbank の IaC の導入と実践
仮想通貨取引所 bitbank の IaC の導入と実践 仮想通貨取引所 bitbank の IaC の導入と実践
仮想通貨取引所 bitbank の IaC の導入と実践
bitbank, Inc. Tokyo, Japan
?
Introduction of bitbank frontend development environment
Introduction of bitbank frontend development environmentIntroduction of bitbank frontend development environment
Introduction of bitbank frontend development environment
bitbank, Inc. Tokyo, Japan
?
DeveloperSuccess として何を届けられるか、様々な分野を経た先として何ができるか
DeveloperSuccess として何を届けられるか、様々な分野を経た先として何ができるかDeveloperSuccess として何を届けられるか、様々な分野を経た先として何ができるか
DeveloperSuccess として何を届けられるか、様々な分野を経た先として何ができるか
bitbank, Inc. Tokyo, Japan
?
ビットコインウォレットで手軽にパスワードレス认証が可能な产颈迟颈诲についての绍介
ビットコインウォレットで手軽にパスワードレス认証が可能な产颈迟颈诲についての绍介	ビットコインウォレットで手軽にパスワードレス认証が可能な产颈迟颈诲についての绍介
ビットコインウォレットで手軽にパスワードレス认証が可能な产颈迟颈诲についての绍介
bitbank, Inc. Tokyo, Japan
?
贰迟丑别谤别耻尘のシャーディング概论
贰迟丑别谤别耻尘のシャーディング概论贰迟丑别谤别耻尘のシャーディング概论
贰迟丑别谤别耻尘のシャーディング概论
bitbank, Inc. Tokyo, Japan
?
Daocasinoにおけるstate channel実装
Daocasinoにおけるstate channel実装Daocasinoにおけるstate channel実装
Daocasinoにおけるstate channel実装
bitbank, Inc. Tokyo, Japan
?
罢测辫别厂肠谤颈辫迟でライトニングネットワークを使ってみよう
罢测辫别厂肠谤颈辫迟でライトニングネットワークを使ってみよう罢测辫别厂肠谤颈辫迟でライトニングネットワークを使ってみよう
罢测辫别厂肠谤颈辫迟でライトニングネットワークを使ってみよう
bitbank, Inc. Tokyo, Japan
?
ヒ?ットハ?ンクのテ?フ?ロイ戦略について
ヒ?ットハ?ンクのテ?フ?ロイ戦略についてヒ?ットハ?ンクのテ?フ?ロイ戦略について
ヒ?ットハ?ンクのテ?フ?ロイ戦略について
bitbank, Inc. Tokyo, Japan
?
ヒ?ットハ?ンク流 アシ?ャイル開発の紹介.pdf
ヒ?ットハ?ンク流 アシ?ャイル開発の紹介.pdfヒ?ットハ?ンク流 アシ?ャイル開発の紹介.pdf
ヒ?ットハ?ンク流 アシ?ャイル開発の紹介.pdf
bitbank, Inc. Tokyo, Japan
?
ヒ?ットハ?ンクて?求められるフ?ロシ?ェクトマネシ?メント
ヒ?ットハ?ンクて?求められるフ?ロシ?ェクトマネシ?メントヒ?ットハ?ンクて?求められるフ?ロシ?ェクトマネシ?メント
ヒ?ットハ?ンクて?求められるフ?ロシ?ェクトマネシ?メント
bitbank, Inc. Tokyo, Japan
?
ヒ?ットハ?ンクて?のネイティフ?アフ?リケーション开発における颁滨冲颁顿环境
ヒ?ットハ?ンクて?のネイティフ?アフ?リケーション开発における颁滨冲颁顿环境ヒ?ットハ?ンクて?のネイティフ?アフ?リケーション开発における颁滨冲颁顿环境
ヒ?ットハ?ンクて?のネイティフ?アフ?リケーション开発における颁滨冲颁顿环境
bitbank, Inc. Tokyo, Japan
?
ヒ?ットハ?ンクのマッチンク?エンシ?ン.辫诲蹿
ヒ?ットハ?ンクのマッチンク?エンシ?ン.辫诲蹿ヒ?ットハ?ンクのマッチンク?エンシ?ン.辫诲蹿
ヒ?ットハ?ンクのマッチンク?エンシ?ン.辫诲蹿
bitbank, Inc. Tokyo, Japan
?
ヒ?ットハ?ンクにおける少人数て?支えるインフラチームの戦略
ヒ?ットハ?ンクにおける少人数て?支えるインフラチームの戦略ヒ?ットハ?ンクにおける少人数て?支えるインフラチームの戦略
ヒ?ットハ?ンクにおける少人数て?支えるインフラチームの戦略
bitbank, Inc. Tokyo, Japan
?
持続的な運用開発のために社内基盤を整えている話 ?auditのCI組み込みやlintの社内PKG化?
持続的な運用開発のために社内基盤を整えている話 ?auditのCI組み込みやlintの社内PKG化?持続的な運用開発のために社内基盤を整えている話 ?auditのCI組み込みやlintの社内PKG化?
持続的な運用開発のために社内基盤を整えている話 ?auditのCI組み込みやlintの社内PKG化?
bitbank, Inc. Tokyo, Japan
?
中规模础苍驳耻濒补谤アプリケーションの再设计
中规模础苍驳耻濒补谤アプリケーションの再设计中规模础苍驳耻濒补谤アプリケーションの再设计
中规模础苍驳耻濒补谤アプリケーションの再设计
bitbank, Inc. Tokyo, Japan
?
仮想通貨取引所 bitbank の IaC の導入と実践
仮想通貨取引所 bitbank の IaC の導入と実践 仮想通貨取引所 bitbank の IaC の導入と実践
仮想通貨取引所 bitbank の IaC の導入と実践
bitbank, Inc. Tokyo, Japan
?
Introduction of bitbank frontend development environment
Introduction of bitbank frontend development environmentIntroduction of bitbank frontend development environment
Introduction of bitbank frontend development environment
bitbank, Inc. Tokyo, Japan
?
DeveloperSuccess として何を届けられるか、様々な分野を経た先として何ができるか
DeveloperSuccess として何を届けられるか、様々な分野を経た先として何ができるかDeveloperSuccess として何を届けられるか、様々な分野を経た先として何ができるか
DeveloperSuccess として何を届けられるか、様々な分野を経た先として何ができるか
bitbank, Inc. Tokyo, Japan
?
ビットコインウォレットで手軽にパスワードレス认証が可能な产颈迟颈诲についての绍介
ビットコインウォレットで手軽にパスワードレス认証が可能な产颈迟颈诲についての绍介	ビットコインウォレットで手軽にパスワードレス认証が可能な产颈迟颈诲についての绍介
ビットコインウォレットで手軽にパスワードレス认証が可能な产颈迟颈诲についての绍介
bitbank, Inc. Tokyo, Japan
?
贰迟丑别谤别耻尘のシャーディング概论
贰迟丑别谤别耻尘のシャーディング概论贰迟丑别谤别耻尘のシャーディング概论
贰迟丑别谤别耻尘のシャーディング概论
bitbank, Inc. Tokyo, Japan
?
罢测辫别厂肠谤颈辫迟でライトニングネットワークを使ってみよう
罢测辫别厂肠谤颈辫迟でライトニングネットワークを使ってみよう罢测辫别厂肠谤颈辫迟でライトニングネットワークを使ってみよう
罢测辫别厂肠谤颈辫迟でライトニングネットワークを使ってみよう
bitbank, Inc. Tokyo, Japan
?

罢测辫别厂肠谤颈辫迟製フレームワーク「狈别蝉迟」のご绍介

  • 2. Copyright ? bitbank, inc. 自己紹介 ? ビットバンクでサーバーサイドを担当 ? Node.js, TypeScript ? 前職ではモバイルゲームを開発 ? C++, C#, PHP, etc. Daiki Yokoi
  • 3. Copyright ? bitbank, inc. 目的とアジェンダ 狈别蝉迟について広く浅く绍介し、興味を持ってもらう ? Nestを使い始めるまで ? そもそもどんな課題があったのか ? Nest入門 ? 前提となる基礎知識をつける ? Nestの機能紹介 ? どのようなことができるのか
  • 4. Copyright ? bitbank, inc. Nestを使い始めるまで
  • 5. Copyright ? bitbank, inc. ? 既存のアプリは Node.js (v6) + Express という構成 ? コードの透明性と柔軟性が高い ? データ構造がわかりにくく、可読性が低い ? フロントエンドチームの知見も借りられる ? TypeScript + Angular で開発している Nestを使い始めるまで 新規開発はTypeScriptでやりたい
  • 6. Copyright ? bitbank, inc. Nestを使い始めるまで TypeScript化と同時により効率的な開発手法を模索 ? DIの導入 ? ユニットテストの効率化など ? ルーティング効率化 ? ハンドラの登録をよりモダンな形で行えないか ? APIドキュメント ? スプレッドシートでの手動管理から脱却 ? 自動でSwaggerUIに繋ぎこみたい
  • 7. Copyright ? bitbank, inc. ? InversifyJS [1] ? IoCコンテナ ? routing-controllers [2] ? デコレータでハンドラを登録できる ? tsoa [3] ? APIドキュメントの自動生成 [1] http://inversify.io/ [2] https://github.com/typestack/routing-controllers [3] https://github.com/lukeautry/tsoa Nestを使い始めるまで いくつかのツールを試してみた
  • 8. Copyright ? bitbank, inc. Nestを使い始めるまで これらが統合されたフレームワークが欲しくなった ? 各ツールの守備範囲が微妙に噛み合わない ? ツールごとの前提条件や制約もあり、まとめ上げるのが少し面倒
  • 9. Copyright ? bitbank, inc. Nestを使い始めるまで そこで見つけたのがNest
  • 10. Copyright ? bitbank, inc. Nestを使い始めるまで Nestを使ってみることに ? もともと欲しかった機能が一通り揃っていた ? オリジナルのDIコンテナ ? デコレータでのハンドラ登録 ? APIドキュメントの生成 ? ポピュラーになりそう ? 日本語情報が全くない中、GitHubのスターは5000超え (2018/03時点) ? Angularのカンファレンスにも登場
  • 11. Copyright ? bitbank, inc. Nest入門
  • 12. Copyright ? bitbank, inc. Nest入門 ? 簡単に言うとクラスの集まり ? 例)UserModule = UserController + UserService + … ? 関係性の強いクラスでまとめるべき ? 複数のモジュールがツリー状になって一つのアプリを構成 ? 頂点のモジュールは ApplicationModule と命名されるのが一般的 フレームワーク独自のモジュールという概念がある
  • 13. Copyright ? bitbank, inc. Nest入門 モジュールツリーのイメージ
  • 14. Copyright ? bitbank, inc. Nest入門 ? コントローラー ? 各エンドポイントへのリクエストハンドラを持つクラス ? プロバイダ ? コントローラー以外のクラス ? ロジックを持ち、コントローラーや別のプロバイダから呼び出される モジュール内の各クラスは以下の2つに分類される
  • 15. Copyright ? bitbank, inc. Nest入門 コントローラーではデコレータでハンドラを登録する @Controller(‘users’) class UserController { @Get(‘:id’) create(@Param(‘id’) id: string) { // GET /users/1 等をハンドリングする } @Post() create(@Body() body: CreateUserRequest) { // POST /users をハンドリングする } }
  • 16. Copyright ? bitbank, inc. Nest入門 プロバイダは各種ビジネスロジックを担当 UserModule UserController UserService UserDetailService SessionService Controllers Providers
  • 17. Copyright ? bitbank, inc. Nest入門 依存関係はコンストラクタの実装を元に解決される @Controller(‘users’) class UserController { constructor(private readonly userService: UserService) {} // 略 } --- @Injectable() class UserService { constructor(private readonly userDetailService: UserDetailService) {} // 略 } --- class UserDetailService {
  • 18. Copyright ? bitbank, inc. Nest入門 ? ツリー状のモジュール群がアプリケーションを構成 ? トップのモジュールは Application Module と命名する ? モジュールは関係性の強いクラスの集合 ? コントローラークラス => リクエストハンドラ ? プロバイダクラス => ビジネスロジック ? クラス間の依存関係はコンストラクタの実装を元に解決される ? モジュールをまたぐクラス間の依存関係の解決手段もある ここまでのおさらい
  • 19. Copyright ? bitbank, inc. @Module({ imports: [UserModule] }) export class ApplicationModule {} --- import { NestFactory } from '@nestjs/core'; import { ApplicationModule } from './app.module.ts'; async function bootstrap() { const app = await NestFactory.create(ApplicationModule); await app.listen(3000); } bootstrap(); Nest入門 モジュールが作成できたらサーバーを起動できる ツリーのトップのモジュールを渡す
  • 20. Copyright ? bitbank, inc. Nestの機能紹介
  • 21. Copyright ? bitbank, inc. ? コントローラの実装を解析してドキュメントを生成する ? 必要に応じてデコレータで追加の情報を与えられる APIドキュメントを自動で作成し、SwaggerUIに連携 Nestの機能紹介
  • 22. Copyright ? bitbank, inc. Nestの機能紹介 ロギングやレスポンスの整形に便利なインターセプタ ? ハンドラの実行前後に処理を差し込むことができる ? リクエスト開始時と終了時のログを簡単に紐づけることができる ? レスポンスにメタデータを追加したりするのにも便利 ? いわゆるアスペクト指向プログラミングをサポートしてくれる
  • 23. Copyright ? bitbank, inc. @Injectable() export class LoggingInterceptor implements NestInterceptor { intercept(contexct: ExecutionContext, call$: Observable<any>): Observable<any> { const requestId = uuid.v4(); console.log(`[Before] requestId: ${requestId}`); return call$.pipe( tap(() => console.log(`[After] requestId: ${requestId}`) ), ); } } Nestの機能紹介 ロギングやレスポンスの整形に便利なインターセプタ 一つのメソッド内で 前後の処理を記述できる
  • 24. Copyright ? bitbank, inc. Nestの機能紹介 リクエストパラメータと同時に定義するバリデーション class CreateUserRequest { @Length(10, 100) @IsEmail() readonly mail!: string; } @Controller(‘users’) class UserController { @Post() create(@Body() body: CreateUserRequest) { // 新規ユーザーを作成 } } この時点では以下が全て完了している - リクエストボティのパース - 指定したクラスへの変換 - バリデーションの実行 各バリデーションをデコレータで定義 - class-validatorが提供するもの - カスタマイズも可能
  • 25. Copyright ? bitbank, inc. Nestの機能紹介 Passportでの認証もサポート ? Passportはポピュラーな認証ツール ? JWT (JSON Web Token) やSAMLなど多様な認証手法が実装されている ? @nestjs/passportという公式パッケージがある ? 認証部分をアスペクト指向で実装する枠組みを提供してくれる
  • 26. Copyright ? bitbank, inc. Nestの機能紹介 ガードによってアクセスコントロールを実現 ? ガードは不正なリクエストを弾くための仕組み ? canActivateというインターフェースが用意されている ? リクエストデータを受けてboolean値を返すメソッドを実装するだけ ? 登録されたハンドラの実行前に評価される ? ビットバンクのあるアプリケーションではAPIごとに権限を設定 ? Nestの全モジュールをスキャンしてAPI一覧を取得 ? これを各ユーザーに割り当てる ? あとはガードの中でユーザーの権限をチェックすれば良い
  • 27. Copyright ? bitbank, inc. ? TypeORMはポピュラーな O/R Mapper ? 基本的なユースケースはほぼカバーされている印象 ? トランザクションやパーティショニングが絡むと少しだけ手間だが問題ない範囲 ? どうにもならなければSQLを直接書くこともできるがあまり使わない ? マイグレーションの仕組みも用意されている ? メンテナーの方が非常にオープンかつ反応が早い ? IssueやPRがすぐ処理される安心感 ? @nestjs/typeorm という公式パッケージがある ? TypeORMのリポジトリクラス等を他のクラスと同じように簡単にDIできる Nestの機能紹介 TypeORMでのデータベースアクセスをサポート
  • 28. Copyright ? bitbank, inc. モックを使用したテストを簡単に行える Nestの機能紹介 ? @nestjs/testing という公式パッケージがある ? モジュール内の一部のクラスをモックに差し替えることができる ? 依存先が多いクラスをテストする際に便利 ? ユニットテストにもe2eテストにも使える ? 特定のテストフレームワークとの連携はなし ? サンプルではJestというFacebookが開発するツールが使用されている ? JestはテストAPIやモック化の手法が豊富で使いやすい ? カバレッジを計測してHTMLで出力することもできる ? ビットバンクではMochaからJestへの移行が進んでいる
  • 29. Copyright ? bitbank, inc. その他 Nestの機能紹介 ? CLIツール ? @nestjs/cli という公式パッケージがある ? nest new <app-name> でアプリケーションの雛形ができる ? 個別のコンポーネントを作成することもできる ? コントローラー部分はREST以外にも対応可能 ? GraphQL, WebSocket, gRPC, etc. ? MVCにも対応可能
  • 30. Copyright ? bitbank, inc. ? TypeScriptで開発したい方 ? Nestで本格的なアプリケーションを作ってみたい方 ? 暗号通貨取引所のバックエンドを支えたい方 最後に 仲間を募集しています :)