20200709のNode.jsに関する記事は4件です。

Macにnode.js,npmのインストール

node.js,npmのインストールの流れ

① Homebrewのインストール
② nodebrewのインストール
③ node.jsのインストール
上記の手順で行います。
node.jsがインストールされれば、同時にnpmもインストールされます。

Homebrewのインストール

terminalコマンド
$ /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

nodebrewのインストール

terminalコマンド
$ brew install nodebrew

nodebrewのバージョンの確認

バージョンを確認することで、インストールがうまく行っているのかを確認できる。

terminalコマンド
$ nodebrew -v

node.jsのインストール

terminalコマンド
$ nodebrew install-binary latest

インストールされたnode.jsのバージョンを確認する。

terminalコマンド
$ nodebrew list

上記を入力すると、下記のようなログが出力される。

出力ログ
v12.14.1

current: v12.14.1

currentの部分が、現在動いているnode.jsです。
次のように出力された場合には、node.jsが有効になっていません。

出力ログ
current: none

有効化するためには、インストール済みのバージョンをuseコマンドで有効化します。

terminalコマンド
$ nodebrew use  v12.14.

node.jsがインストールされれば、npmも同時にインストールされます。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Macにnodebrewでnodeをインストールするまでにしたこと

Macにnodebrewnodeをインストールしようとおもったところ、nodebrewでインストールしたnodeのバージョンとnode -vのバージョンが合っていなかったので、解決した方法を備忘録として残します。

npm、node、nodebrewをアンインストールする

まずはnpmnodenodebrewをインストールしているかを確認します。

ターミナル
$ npm -v
$ node -v
$ nodebrew -v

コマンドでバージョンが確認できない場合はインストールの段階に進みましょう。

バージョンが確認できた場合はアンインストールします。

npmをアンインストールする

まずnpmをアンインストールします。

次のコマンドを順番に実行してください。

ターミナル
$ npm uninstall -f npm
$ rm -rf .npm \
> node_modules

npm -vで確認してバージョンが表示されなければ成功です。

nodeをアンインストールする

nodeをアンインストールします。
nodeをインストールした方法でアンインストールの方法が違います。

よくわからない場合は全て実行してください。

パッケージ版

homebrewでインストールした場合のアンインストール方法

ターミナル
$ brew uninstall node

その他でインストールした場合のアンインストール方法

次のコマンドを順番に実行してください。

ターミナル
$ lsbom -f -l -s -pf /var/db/receipts/org.nodejs.node.pkg.bom \
> | while read i; do
> sudo rm /usr/local/${i}
> done
$ sudo rm -rf /usr/local/lib/node \
>     /usr/local/lib/node_modules \
>     /var/db/receipts/org.nodejs.*

ソース版

which nodeで確認したコードをrm -rfで削除してください。
必ずしも/usr/local/bin/nodeとは限りません。

ターミナル
$ which node
/usr/local/bin/node
$ rm -rf /usr/local/bin/node \
> node_modules

アンインストール後

アンインストール後にnode -vで確認して、バージョンが表示されなければ成功です。

nodebrewをアンインストールする

nodebrewをアンインストールする方法は二つあります。
最初の方法でアンインストールできると思いますが、できなかった場合は次の方法も実行してみてください。

以下がnodebrewをアンインストールするコマンドです。

ターミナル
$ brew uninstall nodebrew

このコマンドを実行した後nodebrew -vでバージョン確認をしましょう。
バージョンが表示されなければ成功です。

この方法でアンインストールができなかった場合は次の方法を試してみてください。

ターミナル
$ brew search nodebrew

このコマンドでnodebrewというディレクトリがあるかを確認します。
あった場合は次を実行してnodebrewのある場所を確認します。

ターミナル
$ brew info nodebrew

場所が確認できた場合はFinderからそこの場所に移動して、nodebrewを直接ゴミ箱に捨ててください。

これでnpmnodenodebrewのアンインストールが終了しました。

nodeのインストール

アンインストールが終了したら、nodeをインストールしていきます。

nodebrewのインストール、環境変数の設定

次のコマンドを順番に実行してください。

ターミナル
$ curl -L git.io/nodebrew | perl - setup
$ export PATH=$HOME/.nodebrew/current/bin:$PATH

nodeのインストール

次にnodeのインストールをします。
インストールするバージョンは最新版にします。

ターミナル
$ nodebrew install-binary latest

インストールしたバージョンの確認

インストールしたバージョンを確認します。

ターミナル
$ nodebrew ls
v14.5.0

current: node

current: nodeとありますが、ここには現在使用しているバージョンが表示されます。
この状態だとまだ使用することができないのでバージョンを設定します。

バージョンの設定

使用するバージョンを設定します。
今回はv14.5.0というバージョンを設定します。

ターミナル
$ nodebrew use v14.5.0

これでバージョンが設定できました。

ターミナル
$ nodebrew ls
v14.5.0

current: v14.5.0

確認すると設定できています。

動作確認

最後にnodeが動作しているか確認しましょう。

ターミナル
$ node -v
v14.5.0

設定したバージョンが表示されれば成功です。

参考サイト

外部サイト

Qiita

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

GASでなんちゃってORマッパー

はじめに

GASでデータを取るのがめんどくさかったのでORマッパー的なものが欲しくなったので作りました。

主な機能

  • テーブル操作
    • find,
    • select
    • discard
    • insert
    • inner
    • join
    • outer join
    • cross join
    • not
    • update
    • transaction (begin, save, commit, rollback)
    • record iterator
    • order by
    • sort
    • sub query
    • create
  • レコード操作
    • get
    • set (update)
    • validation
    • namespace
    • create

Github

使い方

プロジェクト新規作成

$ npm run setup:create

※途中でGoogleアカウントログインを要求されます。

既存プロジェクトにアップする場合

$ npm run setup:clone

Docker起動・終了

$ npm run docker:up
$ npm run docker:down

ログイン

$ npm run login

ソース監視・自動ビルド

$ npm run watch

プッシュ

$ npm run push

サンプル用テーブル(シート)作成

Screen Shot 2020-07-09 at 7.01.04.png

global.growSeeeds = function () {
    growSeeds()
}

※スクリプトエディタ上でグローバル関数growSeeeds()を実行してください。シートとデータが作成されます。

Examples

一部サンプル

GET

declare var global: any;

const users       = McTable.use( { name: 'users' } ) // テーブル(シート)名渡す
// spreadsheetを指定すると他のスプレットシートのデータを読み込ませられる
// const users    = McTable.use( { name: 'users', spreadsheet: SpreadsheetApp.getActiveSpreadsheet() } )
const authorities = McTable.use( { name: 'authorities' } )
const countries   = McTable.use( { name: 'countries' } )

global.doGet = function ( e ) {
    const id = +e.parameter.id

    const resultTable = users
        // usersとauthoritiesをusersのauth_idとauthoritiesのidをキーに外部結合
        .leftOuterJoin( 'auth_id',          authorities, 'id' )
        // 内部結合したテーブルとcountriesをusers.country_idとcountriesのidをもとに外部結合
        .leftOuterJoin( 'users.country_id', countries,   'id' )
        // 結合されたテーブルからusersのidをキーにレコード検索
        .find( { 'users.id': id } )
        // 抽出カラム選択
        .select( [
            'users.id',
            'users.name',
            'countries.id',
            'countries.name_ja',
            'authorities.auth'
        ] )

    resultTable.each(record => {
        const countryId = record.get( 'countries.id' )

        if ( countryId === 'USA' ) {
            // 国籍変更
            record
                .set( 'countries.id', 'JPN' )
                .set( 'countries.name_ja', 'ジパング' )
        }

        const auth = record
            // いちいちauthorities.authと入力するのが面倒なのでネームスペースを設定
            .setNamespace( 'authorities' )
            // authorities.authのデータを取得
            .get( 'auth' )

        // authorities.authが'admin'の場合にレコードを上書き
        if ( auth === 'admin' ) {
            record.set( 'auth', '管理者' )
        }

        const mail = record
            // ネームスペースをリセット
            .resetNamespace()
            .get( 'users.mail' )

        // メールダドレスの登録がなければ変わりのアドレスを設定
        if ( mail === '' ) {
            record.set( 'users.mail', 'sample@_gmail.com' )
        }
    })

    const result = JSON.stringify({
        data: resultTable.hashes()
    })

    return ContentService.createTextOutput( result );
}

// <エントリーポイントURL>?id=1
// こんな感じで帰ってくる
{
  "data":[
    {
      "users.id":1,
      "users.name":"John",
      "countries.id":"JPN",
      "countries.name_ja":"ジパング",
      "authorities.auth":"管理者"
    }
  ]
}

レコード検索

// テーブル取得
const users = McTable.use( { name: 'users' } )

// ---------------------------------------------------------------------------------------------------------------------
// SELECT * FROM users WHERE id=1
// ---------------------------------------------------------------------------------------------------------------------

users.find( { id: 1 } )
// foundUsers.data          //=> [ [ 1, 'John', 'john@_gmail.com', 1, 'USA' ] ]
// foundUsers.cols          //=> [ 'id', 'name', 'mail', 'auth_id', 'country_id' ]
// foundUsers.colsLength    //=> 1
// foundUsers.existsSheet   //=> true
// foundUsers.existsCols    //=> true
// foundUsers.existsRecords //=> true
// foundUsers.records       //=> [ { McRecord } ]
// foundUsers.recordsLength //=> 1
// foundUsers.firstRecord   //=> { McRecord }
// foundUsers.lastRecord    //=> { McRecord }
// foundUsers.mcSS          //=> { McSS }
// foundUsers.mcSheet       //=> { McSheet }
// foundUsers.savepoints    //=> { McSheet }
// foundUsers.latest        //=> { McSheet }


// ---------------------------------------------------------------------------------------------------------------------
// SELECT id, name FROM users WHERE id IN(1, 2) AND name="John"
// ---------------------------------------------------------------------------------------------------------------------

result = users
    .find( { id: [ 1, 2 ], name: 'John' } )
    .select( [ 'id', 'name' ] )

Logger.log( result.hashes() )
// [
//     {
//         name=John,
//         id=1.0
//     }
// ]

// ---------------------------------------------------------------------------------------------------------------------
// SELECT auth_id FROM (SELECT * FROM users WEHERE id NOT 1) WHERE id IN(1, 2, 3)
// ---------------------------------------------------------------------------------------------------------------------

result = users.find( { id: [ 1, 2, 3, 4 ] } ).not( { id: 1 } ).select( [ 'auth_id' ] )

Logger.log( result.hashes() )
// [
//     {
//         auth_id=1.0
//     },
//     {
//         auth_id=1.0
//     },
//     {
//         auth_id=3.0
//     }
// ]

// ---------------------------------------------------------------------------------------------------------------------
// SELECT * FROM users ORDER BY id DESC
// ---------------------------------------------------------------------------------------------------------------------

result = users.orderByDesc( 'id' )

Logger.log( result.hashes() )
// [
//     {
//         id=5.0,
//         name=pochi,
//         mail=foo@gmail.com,
//         country_id=JPN
//         auth_id=3.0,
//     },
//     {
//         id=4.0,
//         name=James,
//         mail=james@_gmail.com,
//         country_id=USA
//         auth_id=3.0,
//     },
//     {
//         id=3.0,
//         name=Emma,
//         country_id=USA,
//         mail=emma@gmail.com
//         auth_id=1.0,
//     },
//     {
//         id=2.0,
//         name=Dick,
//         country_id=USA,
//         mail=dick@_gmail.com,
//         auth_id=1.0
//     },
//     {
//         id=1.0,
//         name=John
//         country_id=USA,
//         mail=foo@_gmail.com,
//         auth_id=1.0,
//     }
// ]

レコード操作1

const users = McTable.use( { name: 'users' } )

const record1 = users.firstRecord               //=> [ 1, 'John', 'foo@_gmail.com', 1, 'USA' ] McRecordはArrayクラスを継承しているので、基本的な振る舞いはArrayクラスと同じ
record1.get( 'id' )                             //=> 1
record1.get( 'name' )                           //=> 'John'
record1.get( 'mail' )                           //=> 'foo@_gmail.com'
record1.get( 'auth_id' )                        //=> 1
record1.get( 'country_id' )                     //=> 'USA'

record1.set( 'id', 999 )                        //=> [ 999, 'John', 'john@_gmail.com',   1, 'USA' ]
record1.set( 'name', 'Smith' )                  //=> [ 999, 'Smith', 'john@gmail.com',   1, 'USA' ]
       .set( 'mail', 'smith@_gmail.com' )       //=> [ 999, 'Smith', 'smith@_gmail.com', 1, 'USA' ]
       .set( 'auth_id', 2 )                     //=> [ 999, 'Smith', 'smith@_gmail.com', 2, 'USA' ]
       .set( 'country_id', 'JPN' )              //=> [ 999, 'Smith', 'smith@_gmail.com', 2, 'JPN' ]
       .hash()                                  //=> { id: 999, name: 'Smith' , mail: 'smith@_gmail.com', auth_id: 2, country_id: 'JPN' }

レコード操作2

const users = McTable.use( { name: 'users' } )
let record

// ---------------------------------------------------------------------------------------------------------------------
// デフォルトモード(strict=false)、バリデートを通らなかったデータは''で登録
// ---------------------------------------------------------------------------------------------------------------------

record = users.Record({
    data: {
        id        : 999,
        name      : 'Smith' ,
        mail      : 'smith@_gmail.com',
        auth_id   : 2,
        country_id: 'JPN'
    },
    validators: {
        // 条件に一致しない( falseを返す )データを弾く
        id        : McRecord.validators.number,
        name      : McRecord.validators.string,
        mail      : McRecord.validators.string,
        auth_id   : McRecord.validators.string, // 数値型の値に文字列用のバリデーションを設定
        country_id: McRecord.validators.string,
    }
})

Logger.log( record )
// [999.0, Smith, smith@_gmail.com, 2.0, JPN]

Logger.log( record.hash() )
// {name=Smith, country_id=JPN, mail=smith@_gmail.com, auth_id=, id=999.0}
// auth_id=には空白が設定される

Logger.log( record.get( 'mail' ) )
// "smith@_gmail.com"



// ---------------------------------------------------------------------------------------------------------------------
// strictモード(strict=true)、バリデートを通らなかったデータがある場合にエラーになる
// ---------------------------------------------------------------------------------------------------------------------

record = users.Record({
    strict: true,
    data: {
        id        : 999,
        name      : 'Smith' ,
        mail      : 'smith@_gmail.com',
        auth_id   : 2,
        country_id: 'JPN'
    },
    validators: {
        // 条件に一致しない( falseを返す )データを弾く
        // バリデーションが設定されていない場合はデータの検証をしない
        auth_id: McRecord.validators.string,
    }
})

// Error: Invalid Col [ auth_id ] Data [ 2 ]

record = users.Record({
    strict: true,
    data: {
        id        : 999,
        name      : 'Smith' ,
        mail      : 'smith@_gmail.com',
        auth_id   : 2,
        country_id: 'JPN'
    },
    validators: {
        // 条件に一致しない( falseを返す )データを弾く
        id        : McRecord.validators.number,
    }
})

// set()内でもバリデーションを行う
record.set( 'id', 'aaa' )
// Error: Invalid Col [ id ] Data [ aaa ]


record = McRecord.create({
    strict: true,
    cols: [ 'id', 'name', 'mail', 'auth_id', 'country_id' ],
    data: {
        id        : 999,
        name      : 'Smith' ,
        mail      : 'smith@_gmail.com',
        auth_id   : 2,
        country_id: 'JPN'
    },
    validators: {
        auth_id: McRecord.validators.string,
    }
})

// Error: Invalid Col [ auth_id ] Data [ 2 ]


// ---------------------------------------------------------------------------------------------------------------------
// 関数を介した作成
// ---------------------------------------------------------------------------------------------------------------------

function createUsersRecord ( data: object ): McRecord {
    const validators = {
        // 設定されていないデータは検査しない
        id  : McRecord.validators.number,
        name: McRecord.validators.string,
        mail: McRecord.validators.string,
    }

    return users.Record( { data, validators } )
}

record = createUsersRecord({
    id        : 999,
    name      : 'Smith' ,
    mail      : 'smith@_gmail.com',
    auth_id   : 2,
    country_id: 'JPN'
})


// ---------------------------------------------------------------------------------------------------------------------
// バリデータ自作
// ---------------------------------------------------------------------------------------------------------------------

// バリデーション用関数
function validateMail ( v: any ) {
    return isString( v ) && /.*@_gmail/.test( v )
}

// バリデーション関数を登録
McRecord.setValidator( 'validateName', v => {
    return isString(v)
})


record = users.Record({
    data: {
        id        : 999,
        name      : 'Smith' ,
        mail      : 'smith@_gmail.com',
        auth_id   : 2,
        country_id: 'JPN'
    },
    validator: {
        /**
         * 条件に一致しない( falseを返す )データを弾く
         * @validator
         * @param   { * } v
         * @returns { boolean }
         */
        mail   : validateMail,
        auth_id: v => v === 1 || v === 2 || v === 3,
        name   : McRecord.validators.validateName
    }
})

トランザクション

users.begin({
    // Set users.savepoints.
    // The savepoint is updated when the instance is created and when the begin function is executed or when the save function is executed
    // users.savepoints holds a duplicate instance of an object type
    // The latest version is recorded in users.latest in numeric type

    /**
     * @param { McTable } users
     */
    handler: users => {
        users.insert( record ).commit()
        users.insert( records ).commit()

        users
            .insert( record )          // insert McRecord
            .insert( records )         // insert McRecord array
            .insert( depulicateUsers ) // insert Mctable records
            .insert({                  // insert object
                id        : 999,
                name      : 'Smith',
                mail      : 'smith@_gmail.com',
                auth_id   : 2,
                country_id: 'JPN'
            })
            .commit()

        // throw new Error( 'Error occurrence!' )
        // It rolls back the data in the sheet using the instance that was saved in the savepoint when the error occurred.
    },

    /**
     * @param { any }     e Error object
     * @param { McTable } rollbacked
     */
    exceptionHander: ( e, rollbacked ) => {
        Logger.log( e )
    }
})

テーブル更新

users.begin({
    handler ( users: McTable ) {
        users
            // レコードを一件インサート
            .insert(record1)
            // レコードを一件インサート
            .insert(record2)
            // 複数レコードをインサート
            .insert(records)
            // テーブルのレコードを纏めてインサート
            .insert(users)
            // nameがPochiのレコードを更新
            .each(record => {
                const name = record.get( 'name' )

                if ( name === 'Pochi' ) {
                    record.set( 'name', 'Tama' )
                }
            })
            // シートへ反映
            .commit()
    },

    exceptionHander ( e: any, rollbackedTable: McTable ) {
        // エラー時にuser.begin()実行時点へシートをロールバック 
        Logger.log( e )
    }
})

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

GASでORマッパー

@@ -1,546 +0,0 @@

-## はじめに

-GASでデータを取るのがめんどくさくてORマッパー的なものが欲しくなったので作りました。

-
-## 主な機能
-- テーブル操作
- - find,
- - select
- - discard
- - insert
- - inner
- - join
- - outer join
- - cross join
- - not
- - update
- - transaction (begin, save, commit, rollback)
- - record iterator
- - order by
- - sort
- - sub query
- - create
-- レコード操作
- - get
- - set (update)
- - validation
- - namespace

- - create

-Github

-## 使い方

-#### プロジェクト新規作成
-```

-$ npm run setup:create

-※途中でGoogleアカウントログインを要求されます。
-
-### 既存プロジェクトにアップする場合
-

-$ npm run setup:clone

-```

-#### Docker起動・終了
-
-$ npm run docker:up
-$ npm run docker:down
-

-#### ログイン
-
-$ npm run login
-

-#### ソース監視・自動ビルド
-
-$ npm run watch
-

-#### プッシュ
-```
-$ npm run push

-```

-### サンプル用テーブル(シート)作成

-Screen Shot 2020-07-09 at 7.01.04.png

-javascript
-global.growSeeds = function () {
- growSeeds()
-}
-

-※スクリプトエディタ上でグローバル関数growSeeeds()を実行してください。シートとデータが作成されます。

-## Examples
-- サンプル用テーブル作成
- - users
- - countries
- - authorities
- - itarator
-- テーブル操作
- - query
- - sub query
- - inner join
- - outer join
- - cross join
- - update
- - transaction
-- レコード操作
- - record
- - namespace
- - validator
-- Api

- - doGet

-### 一部サンプル

-
-#### GET
-``` javascript

-declare var global: any;

-const users = McTable.use( { name: 'users' } ) // テーブル(シート)名渡す
-// spreadsheetを指定すると他のスプレットシートのデータを読み込ませられる
-// const users = McTable.use( { name: 'users', spreadsheet: SpreadsheetApp.getActiveSpreadsheet() } )
-const authorities = McTable.use( { name: 'authorities' } )

-const countries = McTable.use( { name: 'countries' } )

-global.doGet = function ( e ) {

- const id = +e.parameter.id

  • const resultTable = users
  • // usersとauthoritiesをusersのauth_idとauthoritiesのidをキーに外部結合
  • .leftOuterJoin( 'auth_id', authorities, 'id' )
  • // 内部結合したテーブルとcountriesをusers.country_idとcountriesのidをもとに外部結合
  • .leftOuterJoin( 'users.country_id', countries, 'id' )
  • // 結合されたテーブルからusersのidをキーにレコード検索
  • .find( { 'users.id': id } )
  • // 抽出カラム選択
  • .select( [
  • 'users.id',
  • 'users.name',
  • 'countries.id',
  • 'countries.name_ja',
  • 'authorities.auth'

- ] )

  • resultTable.each(record => {

- const countryId = record.get( 'countries.id' )

  • if ( countryId === 'USA' ) {
  • // 国籍変更
  • record
  • .set( 'countries.id', 'JPN' )
  • .set( 'countries.name_ja', 'ジパング' )

- }

  • const auth = record
  • // いちいちauthorities.authと入力するのが面倒なのでネームスペースを設定
  • .setNamespace( 'authorities' )
  • // authorities.authのデータを取得

- .get( 'auth' )

  • // authorities.authが'admin'の場合にレコードを上書き
  • if ( auth === 'admin' ) {
  • record.set( 'auth', '管理者' )

- }

  • const mail = record
  • // ネームスペースをリセット
  • .resetNamespace()

- .get( 'users.mail' )

  • // メールダドレスの登録がなければ変わりのアドレスを設定
  • if ( mail === '' ) {
  • record.set( 'users.mail', 'sample@_gmail.com' )
  • }

- })

  • const result = JSON.stringify({
  • data: resultTable.hashes()

- })

  • return ContentService.createTextOutput( result ); -} - -// <エントリーポイントURL>?id=1 -// こんな感じで帰ってくる -{
  • "data":[
  • {
  • "users.id":1,
  • "users.name":"John",
  • "countries.id":"JPN",
  • "countries.name_ja":"ジパング",
  • "authorities.auth":"管理者"
  • }
  • ] -} - - -#### レコード検索 - javascript - -// テーブル取得 -const users = McTable.use( { name: 'users' } ) - -// --------------------------------------------------------------------------------------------------------------------- -// SELECT * FROM users WHERE id=1 -// --------------------------------------------------------------------------------------------------------------------- - -users.find( { id: 1 } ) -// foundUsers.data //=> [ [ 1, 'John', 'john@_gmail.com', 1, 'USA' ] ] -// foundUsers.cols //=> [ 'id', 'name', 'mail', 'auth_id', 'country_id' ] -// foundUsers.colsLength //=> 1 -// foundUsers.existsSheet //=> true -// foundUsers.existsCols //=> true -// foundUsers.existsRecords //=> true -// foundUsers.records //=> [ { McRecord } ] -// foundUsers.recordsLength //=> 1 -// foundUsers.firstRecord //=> { McRecord } -// foundUsers.lastRecord //=> { McRecord } -// foundUsers.mcSS //=> { McSS } -// foundUsers.mcSheet //=> { McSheet } -// foundUsers.savepoints //=> { McSheet } -// foundUsers.latest //=> { McSheet } - - -// --------------------------------------------------------------------------------------------------------------------- -// SELECT id, name FROM users WHERE id IN(1, 2) AND name="John" -// --------------------------------------------------------------------------------------------------------------------- - -result = users
  • .find( { id: [ 1, 2 ], name: 'John' } )

- .select( [ 'id', 'name' ] )

-Logger.log( result.hashes() )
-// [
-// {
-// name=John,
-// id=1.0
-// }

-// ]

-// ---------------------------------------------------------------------------------------------------------------------
-// SELECT auth_id FROM (SELECT * FROM users WEHERE id NOT 1) WHERE id IN(1, 2, 3)

-// ---------------------------------------------------------------------------------------------------------------------

-result = users.find( { id: [ 1, 2, 3, 4 ] } ).not( { id: 1 } ).select( [ 'auth_id' ] )

-Logger.log( result.hashes() )
-// [
-// {
-// auth_id=1.0
-// },
-// {
-// auth_id=1.0
-// },
-// {
-// auth_id=3.0
-// }

-// ]

-// ---------------------------------------------------------------------------------------------------------------------
-// SELECT * FROM users ORDER BY id DESC

-// ---------------------------------------------------------------------------------------------------------------------

-result = users.orderByDesc( 'id' )

-Logger.log( result.hashes() )
-// [
-// {
-// id=5.0,
-// name=pochi,
-// mail=foo@gmail.com,
-// country_id=JPN
-// auth_id=3.0,
-// },
-// {
-// id=4.0,
-// name=James,
-// mail=james@_gmail.com,
-// country_id=USA
-// auth_id=3.0,
-// },
-// {
-// id=3.0,
-// name=Emma,
-// country_id=USA,
-// mail=emma@gmail.com
-// auth_id=1.0,
-// },
-// {
-// id=2.0,
-// name=Dick,
-// country_id=USA,
-// mail=dick@_gmail.com,
-// auth_id=1.0
-// },
-// {
-// id=1.0,
-// name=John
-// country_id=USA,
-// mail=foo@_gmail.com,
-// auth_id=1.0,
-// }

-// ]

-```

-#### レコード操作1

-``` javascript

-const users = McTable.use( { name: 'users' } )

-const record1 = users.firstRecord //=> [ 1, 'John', 'foo@_gmail.com', 1, 'USA' ] McRecordはArrayクラスを継承しているので、基本的な振る舞いはArrayクラスと同じ
-record1.get( 'id' ) //=> 1
-record1.get( 'name' ) //=> 'John'
-record1.get( 'mail' ) //=> 'foo@_gmail.com'
-record1.get( 'auth_id' ) //=> 1

-record1.get( 'country_id' ) //=> 'USA'

-record1.set( 'id', 999 ) //=> [ 999, 'John', 'john@_gmail.com', 1, 'USA' ]
-record1.set( 'name', 'Smith' ) //=> [ 999, 'Smith', 'john@gmail.com', 1, 'USA' ]
- .set( 'mail', 'smith@_gmail.com' ) //=> [ 999, 'Smith', 'smith@_gmail.com', 1, 'USA' ]
- .set( 'auth_id', 2 ) //=> [ 999, 'Smith', 'smith@_gmail.com', 2, 'USA' ]
- .set( 'country_id', 'JPN' ) //=> [ 999, 'Smith', 'smith@_gmail.com', 2, 'JPN' ]
- .hash() //=> { id: 999, name: 'Smith' , mail: 'smith@_gmail.com', auth_id: 2, country_id: 'JPN' }

-```

-#### レコード操作2

-``` javascript

-const users = McTable.use( { name: 'users' } )

-let record

-// ---------------------------------------------------------------------------------------------------------------------
-// デフォルトモード(strict=false)、バリデートを通らなかったデータは''で登録

-// ---------------------------------------------------------------------------------------------------------------------

-record = users.Record({
- data: {
- id : 999,
- name : 'Smith' ,
- mail : 'smith@_gmail.com',
- auth_id : 2,
- country_id: 'JPN'
- },
- validators: {
- // 条件に一致しない( falseを返す )データを弾く
- id : McRecord.validators.number,
- name : McRecord.validators.string,
- mail : McRecord.validators.string,
- auth_id : McRecord.validators.string, // 数値型の値に文字列用のバリデーションを設定
- country_id: McRecord.validators.string,
- }

-})

-Logger.log( record )

-// [999.0, Smith, smith@_gmail.com, 2.0, JPN]

-Logger.log( record.hash() )
-// {name=Smith, country_id=JPN, mail=smith@_gmail.com, auth_id=, id=999.0}

-// auth_id=には空白が設定される

-Logger.log( record.get( 'mail' ) )

-// "smith@_gmail.com"

-

-// ---------------------------------------------------------------------------------------------------------------------
-// strictモード(strict=true)、バリデートを通らなかったデータがある場合にエラーになる

-// ---------------------------------------------------------------------------------------------------------------------

-record = users.Record({
- strict: true,
- data: {
- id : 999,
- name : 'Smith' ,
- mail : 'smith@_gmail.com',
- auth_id : 2,
- country_id: 'JPN'
- },
- validators: {
- // 条件に一致しない( falseを返す )データを弾く
- // バリデーションが設定されていない場合はデータの検証をしない
- auth_id: McRecord.validators.string,
- }

-})

-// Error: Invalid Col [ auth_id ] Data [ 2 ]

-record = users.Record({
- strict: true,
- data: {
- id : 999,
- name : 'Smith' ,
- mail : 'smith@_gmail.com',
- auth_id : 2,
- country_id: 'JPN'
- },
- validators: {
- // 条件に一致しない( falseを返す )データを弾く
- id : McRecord.validators.number,
- }

-})

-// set()内でもバリデーションを行う
-record.set( 'id', 'aaa' )

-// Error: Invalid Col [ id ] Data [ aaa ]

-
-record = McRecord.create({
- strict: true,
- cols: [ 'id', 'name', 'mail', 'auth_id', 'country_id' ],
- data: {
- id : 999,
- name : 'Smith' ,
- mail : 'smith@_gmail.com',
- auth_id : 2,
- country_id: 'JPN'
- },
- validators: {
- auth_id: McRecord.validators.string,
- }

-})

-// Error: Invalid Col [ auth_id ] Data [ 2 ]

-
-// ---------------------------------------------------------------------------------------------------------------------
-// 関数を介した作成

-// ---------------------------------------------------------------------------------------------------------------------

-function createUsersRecord ( data: object ): McRecord {
- const validators = {
- // 設定されていないデータは検査しない
- id : McRecord.validators.number,
- name: McRecord.validators.string,
- mail: McRecord.validators.string,

- }

  • return users.Record( { data, validators } ) -} - -record = createUsersRecord({
  • id : 999,
  • name : 'Smith' ,
  • mail : 'smith@_gmail.com',
  • auth_id : 2,
  • country_id: 'JPN' -}) - - -// --------------------------------------------------------------------------------------------------------------------- -// バリデータ自作 -// --------------------------------------------------------------------------------------------------------------------- - -// バリデーション用関数 -function validateMail ( v: any ) {
  • return isString( v ) && /.*@_gmail/.test( v ) -} - -// バリデーション関数を登録 -McRecord.setValidator( 'validateName', v => {
  • return isString(v) -}) - - -record = users.Record({
  • data: {
  • id : 999,
  • name : 'Smith' ,
  • mail : 'smith@_gmail.com',
  • auth_id : 2,
  • country_id: 'JPN'
  • },
  • validator: {
  • /**
  • * 条件に一致しない( falseを返す )データを弾く
  • * @validator
  • * @param { * } v
  • * @returns { boolean }
  • */
  • mail : validateMail,
  • auth_id: v => v === 1 || v === 2 || v === 3,
  • name : McRecord.validators.validateName
  • } -}) - - - - -#### トランザクション - javascript -users.begin({
  • // Set users.savepoints.
  • // The savepoint is updated when the instance is created and when the begin function is executed or when the save function is executed
  • // users.savepoints holds a duplicate instance of an object type

- // The latest version is recorded in users.latest in numeric type

  • /**
  • * @param { McTable } users
  • */
  • handler: users => {
  • users.insert( record ).commit()

- users.insert( records ).commit()

  • users
  • .insert( record ) // insert McRecord
  • .insert( records ) // insert McRecord array
  • .insert( depulicateUsers ) // insert Mctable records
  • .insert({ // insert object
  • id : 999,
  • name : 'Smith',
  • mail : 'smith@_gmail.com',
  • auth_id : 2,
  • country_id: 'JPN'
  • })

- .commit()

  • // throw new Error( 'Error occurrence!' )
  • // It rolls back the data in the sheet using the instance that was saved in the savepoint when the error occurred.

- },

  • /**
  • * @param { any } e Error object
  • * @param { McTable } rollbacked
  • */
  • exceptionHander: ( e, rollbacked ) => {
  • Logger.log( e )
  • } -}) - - -#### テーブル更新 - javascript -users.begin({
  • handler ( users: McTable ) {
  • users
  • // レコードを一件インサート
  • .insert(record1)
  • // レコードを一件インサート
  • .insert(record2)
  • // 複数レコードをインサート
  • .insert(records)
  • // テーブルのレコードを纏めてインサート
  • .insert(users)
  • // nameがPochiのレコードを更新
  • .each(record => {

- const name = record.get( 'name' )

  • if ( name === 'Pochi' ) {
  • record.set( 'name', 'Tama' )
  • }
  • })
  • // シートへ反映
  • .commit()

- },

  • exceptionHander ( e: any, rollbackedTable: McTable ) {
  • // エラー時にuser.begin()実行時点へシートをロールバック 
  • Logger.log( e )
  • } -}) - -```
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む