テーブル名、カラム名をカスタマイズ

TypeORMのデフォルト命名規則だと「テーブル名は単数形」「カラム名はcamelCase」になります。これを「テーブル名は複数形」「カラム名はsnake_case」に変更することも可能です。ここではテーブル名、カラム名をカスタマイズする方法を取り上げます。

Decoratorで個別指定

@Entity @JoinTable などは、オプションで独自のテーブル名を指定することができます。
@Column @JoinColumn などは、オプションで独自のカラム名を指定することができます。

デフォルト設定を変更( namingStrategy )

独自のStrategyを作成

デフォルトの命名処理はDefaultNamingStrategyに記述されています。この処理を継承で独自の命名処理に上書きします。

例として、CustomNamingStrategy.ts というファイルに以下処理を記述しました。

import * as pluralize from 'pluralize'
import { DefaultNamingStrategy, NamingStrategyInterface } from 'typeorm'
import { snakeCase } from 'typeorm/util/StringUtils'

export default class CustomNamingStrategy extends DefaultNamingStrategy implements NamingStrategyInterface {
  tableName(targetName: string, userSpecifiedName: string): string {
    return userSpecifiedName ? userSpecifiedName : pluralize.plural(snakeCase(targetName))
  }

  columnName(propertyName: string, customName: string, embeddedPrefixes: string[]): string {
    return customName ? customName : snakeCase(propertyName)
  }

  joinColumnName(relationName: string, referencedColumnName: string) {
    return snakeCase(pluralize.singular(relationName) + '_' + referencedColumnName)
  }

  joinTableName(
    firstTableName: string,
    secondTableName: string,
    firstPropertyName: string,
    secondPropertyName: string,
  ) {
    return snakeCase(firstTableName + '_' + secondTableName)
  }

  joinTableColumnName(tableName: string, propertyName: string, columnName: string) {
    return snakeCase(pluralize.singular(tableName) + '_' + (columnName || propertyName))
  }
}

namingStrategyオプションに指定

CustomNamingStrategy.tsormconfig.jsonnamingStrategy に指定します。ただし、jsonのままだとCustomNamingStrategy.ts を読み込めないので、ormconfig.ts に変更します。

import CustomNamingStrategy from './CustomNamingStrategy'

module.exports = {
  type: 'mysql',
  host: 'localhost',
    // 省略
  namingStrategy: new CustomNamingStrategy(),
}

補足

snakeCase

$ node
> const snakeCase = require('typeorm/util/StringUtils').snakeCase
undefined
> snakeCase('errorLog')
'error_log'

単語を複数形にする( pluralize )

単語を複数形にするために pluralizeを利用しています。

npm install pluralize --save
npm install @types/pluralize --save-dev

これで以下のような変換をすることができます。

$ node
> const pluralize = require('pluralize')
undefined
> pluralize.plural('apple')
'apples'
> pluralize.singular('apples')
'apple'
> 
> pluralize.plural(snakeCase('errorLog'))
'error_logs'

参考

【エンジニア向け】仕事を見つける方法

転職する

転職エージェントを活用する

転職サイトの場合、自身でサイト上から企業を探す必要があります。 一方「レバテックキャリア」 などの転職エージェントの場合、エージェントが企業を紹介してくれます。エージェントが間に入ることにより、日程調整や、条件交渉などもサポートしてくれます。

転職ドラフトを活用する

転職ドラフト」は、 企業がITエンジニアをドラフトという形で指名するサービスです。年収が最初に提示されるなどのメリットがあります。 ただ、初回登録時にレジュメ作成が必要で、すでにエンジニア経験が豊富にあるエンジニア向けのサービスかと思います。 レジュメ作成が手間ですが、自身のキャリアを見直す機会になり、他の仕事探しにも役立つはずです。

エンジニア転職保証のあるスクールを活用する

ある程度、開発経験のあるかたであれば、独学で必要なスキルを身につけることができるはずです。ただ、別業種からエンジニアに転職したい場合など、1から独学で学ぶのはハードルが高いです。そういった方は、スクールの活用を検討しても良いと思います。 「TechAcademy」は、エンジニア転職保証コースを提供しています。給付金制度の対象講座として認定されているため、金銭面の負担も抑えることができます。

フリーランスとして活動する

レバテックフリーランス」「ITプロパートナーズ」「ギークスジョブ」は、フリーランスエージェントサービスです。 エージェントによって、支払いサイトなど細かい違いはありますが、まずは良い案件を見つけることが重要です。 登録自体は無料なので、複数エージェントに登録して、より多くの案件を紹介してもらうのがおすすめです。

logo
わくわくBank.
技術系の記事を中心に、役に立つと思ったこと、整理したい情報などを掲載しています。