Shoeisha Technology Media

CodeZine(コードジン)

記事種別から探す

CoffeeScriptベストプラクティス集
Node.jsアプリケーション編(3)

CoffeeScriptによるモダンなWebアプリケーション開発 第5回

  • LINEで送る
  • このエントリーをはてなブックマークに追加
2012/05/02 14:00

 最近話題の新言語『CoffeeScript』をとりあげた連載「CoffeeScriptによるモダンなWebアプリケーション開発」。連載第3回からはベストプラクティス編として、CoffeeScriptでNode.jsアプリケーションを開発する際によく使われる実用的な開発手法を4回に分けて紹介しています。CoffeeScriptの歴史や概要については過去の連載も参照ください。

目次

データベースへのアクセス

O/Rマッピング

 データベースへアクセスするためのO/Rマッパーとして代表的なものにSequelize(MITライセンス)があります。Sequelizeを使うと、MySQLとSQLiteを同じAPIで扱うことができます。

O/Rマッパー

 プログラムにおけるインスタンスをリレーショナルデータベースのレコードに1対1で対応させて保存したり検索したりすることをO/Rマッピングと呼ぶ。O/Rマッパーとは、O/Rマッピングを行うためのライブラリやツールのこと。データベースに直接アクセスするよりも抽象的な操作ができ、大幅にソースコードの量を減らすことができる。ORMとも呼ばれる。O/RはObject-Relationalの略。

Sequelizeのインストール

 Sequelizeをインストールするには、プロジェクトのディレクトリで以下のコマンドを実行します。

$ npm install sequelize

 SQLiteを使う場合は、SQLite用のモジュールもインストールします。

$ npm install sqlite3

Sequelizeインスタンスの作成

 Sequelizeインスタンスの作成時にデータベースへの接続情報を指定します。MySQLに接続する場合は次のように記述します。オプションの指定は任意です。

Sequelize = require 'sequelize'

sequelize = new Sequelize データベース名, ユーザ名, パスワード, オプション

 一方、SQLiteに接続する場合は次のようにdialectオプションを指定します。

Sequelize = require 'sequelize'

sequelize = new Sequelize '', '', '',
  dialect: 'sqlite'
  storage: 'SQLiteデータベースファイル名'

インスタンス作成時のオプション

 new Sequelizeの第4引数に指定できるオプションのうち主なものは次の通りです。( )内の大文字の値はデフォルト値を意味します。例えば(TRUE/false)と記載してある場合、そのオプションを指定しない場合はtrueを指定したものとみなされます。

  • host(文字列):接続先ホスト。デフォルトはlocalhost。
  • port(数値):接続先ポート。デフォルトは3306。
  • logging(TRUE/false):SQLのログ出力を有効にするか。
  • dialect(文字列):使用するSQL形式。mysqlまたはsqliteが指定可能。デフォルトはmysql。
  • storage(文字列):SQLiteの場合にストレージとして使うファイルのパス。デフォルトはインメモリデータベース(:memory:)。
  • maxConcurrentQueries(数値):データベースへの最大同時発行クエリ数。デフォルトは50。

 例えば、192.168.1.1の3307番ポートで稼働しているMySQLに接続するには次のように記述します。

sequelize = new Sequelize 'database', 'username', 'password',
  host: '192.168.1.1'
  port: 3307

モデルの定義

 データベースにアクセスするには、まずデータを表すモデルを定義します。モデル1つはデータベースのテーブル1つに相当します。モデルの定義はsequelize.define(テーブル名, カラム一覧, オプション)で行います。オプションの指定は任意です。カラム一覧はオブジェクトで渡し、キーとしてカラム名(列名)を、値としてデータ型を指定します。例えば、firstNamelastNamedateOfBirthという3つのフィールドを持つPersonモデルを定義するにはリスト1のように記述します。

[リスト1]Personモデルの定義
Person = sequelize.define 'Person',
  firstName:   Sequelize.STRING
  lastName:    Sequelize.STRING
  dateOfBirth: Sequelize.DATE

 データ型は表1のものが使用できます。

表1:Sequelizeで使えるデータ型
Sequelizeの型 対応するMySQLの型
Sequelize.STRING VARCHAR(255)
Sequelize.TEXT TEXT
Sequelize.INTEGER INTEGER
Sequelize.DATE DATETIME
Sequelize.BOOLEAN TINYINT(1)
Sequelize.FLOAT FLOAT

 sequelize.define()の第3引数にオプションを指定する場合は次のように記述します。

Person = sequelize.define 'Person',
  # カラム一覧
  firstName:   Sequelize.STRING
  lastName:    Sequelize.STRING
  dateOfBirth: Sequelize.DATE
,
  # オプション
  paranoid:    true
  underscored: true

 この第3引数には以下のオプションを指定できます。指定はすべて任意です。

  • classMethods(オブジェクト):モデルのクラスメソッド(後述)。
  • instanceMethods(オブジェクト):モデルのインスタンスメソッド(後述)。
  • timestamps(TRUE/false):タイムスタンプ用のカラム(updatedAt、createdAt)を作成するか。
  • paranoid(true/FALSE):trueを指定した場合、レコード削除時に実体を削除せずdeletedAtを設定する。timestampsオプションがtrueの場合のみ機能する。一般的にSoft Deleteと呼ばれる機能。
  • underscored(true/FALSE):trueを指定した場合、自動的に追加されるカラムの名前でキャメルケースの代わりにアンダースコアを使う。例えばupdatedAtの代わりにupdated_atというカラム名になる。
  • freezeTableName(true/FALSE):trueを指定した場合、テーブル名を複数形に変換せず、プログラム内で記述された通りの名前を使う。

  • LINEで送る
  • このエントリーをはてなブックマークに追加

著者プロフィール

  • 飯塚 直(イイヅカ ナオ)

    1984年東京都生まれ。 高校時代に趣味でPerlやJavaを使ってプログラミングを始める。 慶応大学湘南藤沢キャンパス卒業後、共同通信社にてニュースサイトの開発などを担当。 その後、面白法人カヤックにてソーシャルゲームの開発などを手がける。 2012年現在、カヤックを退社し...

バックナンバー

連載:CoffeeScriptによるモダンなWebアプリケーション開発

もっと読む

おすすめ記事

All contents copyright © 2006-2017 Shoeisha Co., Ltd. All rights reserved. ver.1.5