SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

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

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

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

  • X ポスト
  • このエントリーをはてなブックマークに追加

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

  • X ポスト
  • このエントリーをはてなブックマークに追加

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

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を指定した場合、テーブル名を複数形に変換せず、プログラム内で記述された通りの名前を使う。

会員登録無料すると、続きをお読みいただけます

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

次のページ
モデルのデータベースへの反映

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
CoffeeScriptによるモダンなWebアプリケーション開発連載記事一覧

もっと読む

この記事の著者

飯塚 直(イイヅカ ナオ)

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

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/6529 2012/05/02 14:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング

pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy