SlideShare a Scribd company logo
1 of 64
Download to read offline


$ rails generate migration CreateUsers
$ ls db/migrate/
20131104023129_create_users.rb
## file: db/migrate/20131104023129_create_users.rb
class CreateUsers < ActiveRecord::Migration
def up
create_table "users" do |t|
t.string "name"
t.string "email"
end
end
def down
drop_table "users"
end
end
## バージョンを上げる
$ rake db:migrate
## バージョンを戻す
$ rake db:rollback
## 再実行(戻して、もう一度上げる)
$ rake db:migrate:redo
## 現在のバージョンを調べる
$ rake db:version
Current version:20131104023129
postgres=> dt users;
List of relations
Schema ¦ Name ¦ Type ¦ Owner
--------+-------+-------+--------
public ¦ users ¦ table ¦ myname
(1 row)
postgres=> select * from schema_migrations;
version
----------------
20131104023129
(1 row)










### Install
$ curl -Lo migr8.rb http://bit.ly/migr8_rb
$ chmod a+x ./migr8.rb
### Setup (PostgreSQL, MySQL, SQLite)
$ export MIGR8_COMMAND="psql -qX -U user1 dbname"
$ #export MIGR8_COMMAND="mysql -s -u user1 dbname"
$ #export MIGR8_COMMAND="sqlite3 dbfile"
### Setup (Editor)
$ export MIGR8_EDITOR="emacsclient -n"
$ #export MIGR8_EDITOR="vim"
$ #export MIGR8_EDITOR="open -a CotEditor"
### ヘルプを表示
$ ./migr8.rb help
### 初期化
$ ./migr8.rb init
### ディレクトリが作られる
$ ls -F migr8/
history.txt # ← バージョン番号の一覧
migrations/ # ← マイグレーションファイル置き場
$ ./migr8.rb new -m "create 'users' table"
# or: ./migr8.rb new --table=users
$ ls migr8/migrations
scjs8350.yaml
# -*- coding: utf-8 -*-
version: scjs8350
desc: create 'users' table
author: alice
vars:
up: ¦
create table users (
id serial primary key
name varchar(255) not null unique,
);
down: ¦
drop table users;
# -*- coding: utf-8 -*-
version: scjs8350
desc: create 'users' table
author: alice
vars:
- table: users
up: ¦
create table ${table} (
id serial primary key
name varchar(255) not null unique,
);
down: ¦
drop table ${table};
### バージョンを上げる
$ ./migr8.rb up
### バージョンを戻す
$ ./migr8.rb down
### 再実行(戻して、もう一度上げる)
$ ./migr8.rb redo
### 現在のバージョンを調べる

$ ./migr8.rb status # 省略可
...(snip)...
postgres=> dt users;
List of relations
Schema ¦ Name ¦ Type ¦ Owner
--------+-------+-------+-------
public ¦ users ¦ table ¦ user1
(1 row)
postgres=> select id, version from _migr8_history;
id | version
---------------
1 | scjs8350
(1 row)


### インデックスを追加
$ ./migr8.rb new --index=users.name
$ ./migr8.rb up
### テーブルを追加
$ ./migr8.rb new --table=groups
$ ./migr8.rb up
### カラムを追加
$ ./migr8.rb new --column=users.group_id
$ ./migr8.rb hist
scjs8350 2013-11-07 23:01:13 # [john] create 'users'
ewwg6691 2013-11-07 23:29:33 # [john] add index
gnqc9473 2013-11-07 23:44:29 # [john] create 'groups'
spvo5800 (not applied) # [john] add 'group_id'


$ cat migr8/history.txt
# -*- coding: utf-8 -*-
scjs8350 # [john] create 'users' table
ewwg6691 # [john] add index to 'users.name'
gnqc9473 # [john] create 'groups' table
spvo5800 # [john] add 'group_id' column


# -*- coding: utf-8 -*-
version: ewwg6691
desc: add index to 'users.name'
author: john
vars:
- table: users
- column: name
- index: ${users}_${column}_idx
up: ¦
create index ${index} on ${table}(${column});
down: ¦
drop index ${index};
# -*- coding: utf-8 -*-
scjs8350 # [john] create 'users' table
ewwg6691 # [john] add index to 'users.name'
gnqc9473 # [john] create 'groups' table
spvo5800 # [john] add 'group_id' column
create table _migr8_history (
id serial primary key
, version varchar(40) not null unique
, author varchar(40) not null
, description varchar(255) not null
, up_script text not null
, down_script text not null
, applied_at timestamp not null default timeofday()
);


begin;
create table ...;
insert into _migr8_history ...;
create index ...;
insert into _migr8_history ...;
alter table ...;
insert into _migr8_history ...;
commit;
$ psql -qX -U user1 dbname < migr8/tmp.sql
$ rm migr8/tmp.sql
psql=> select * from _migr8_history;
....
-[ RECORD 23 ]---------------------------------------
id | 101
version | aaaa1111
up_script | create table ...(snip)...
down_script | drop table ...(snip)...
applied_at | 2014-01-01 12:34:56
-[ RECORD 24 ]---------------------------------------
id | 102
version | bbbb2222
up_script | create index ...(snip)...
down_script | index table ...(snip)...
applied_at | 2014-01-01 12:34:56
-[ RECORD 25 ]---------------------------------------
....
up: |
commit;
alter type ... add value;
begin;










# -*- coding: utf-8 -*-
scjs8350 # [john] create 'users'
ewwg6691 # [john] add index
gnqc9473 # [alice] create 'groups'
spvo5800 # [alice] add 'group_id'
xmss3947 # [john] insert seed data








# -*- coding: utf-8 -*-
scjs8350 # [john] create 'users'
ewwg6691 # [john] add index
<<<<<<< HEAD
gnqc9473 # [alice] create 'groups'
spvo5800 # [alice] add 'group_id'
=======
xmss3947 # [john] insert seed data
>>>>>>> topicbranch




$ ./migr8.rb hist
scjs8350 2013-11-07 12:01:13 # [john] create 'users'
gnqc9473 (not applied) # [alice] create 'groups'
spvo5800 (not applied) # [alice] add 'group_id'
ewwg6691 2013-11-08 20:29:33 # [john] add index
$ ./migr8r.rb apply gnqc9473 spv05800




















$ ./migr8.rb status
## Status: all applied
## Recent history:
scjs8350 2013-11-07 12:01:13 # [john] create 'users'
gnqc9473 2013-11-07 13:54:20 # [alice] create 'groups'
## !!! The following migrations are applied to DB,
## !!! but files are not found.
## !!! (Try `migr8.rb unapply -x abcd1234` to unapply them.)
ewwg6691 2013-11-08 20:29:33 # [john] add index
$ ./migr8r.rb unapply -x ewwg6691









 







$ ./migr8.rb readme ## readmeを表示
$ ./migr8.rb help ## ヘルプ
$ ./migr8.rb init ## 初期化
$ ./migr8.rb new -h ## ヘルプ
$ ./migr8.rb new -m "create table" ## 汎用
$ ./migr8.rb new --table=users ## テーブルを作成
$ ./migr8.rb new --column=users.name ## カラムを追加
$ ./migr8.rb new --index=users.name ## 索引を追加
$ ./migr8.rb new --unique=users.name ## 一意制約を追加
$ ./migr8.rb up -h ## ヘルプ
$ ./migr8.rb up ## 1つだけ適用 (※1)
$ ./migr8.rb up -n 3 ## 3つ適用 (※2)
$ ./migr8.rb up -a ## 全部適用 (※3)
(※1) 未適用のうち最も古いのを1つ適用
(※2) 未適用のうち古い順に3つ適用
(※3) 未適用のものを古い順に全部適用
$ ./migr8.rb down -h ## ヘルプ
$ ./migr8.rb down ## 1つだけ戻す (※1)
$ ./migr8.rb down -n 3 ## 3つ戻す (※2)
$ ./migr8.rb down --ALL ## 全部戻す (※3)
(※1) 適用済みのうち最も新しいものを1つ戻す
(※2) 適用済みのうち新しい順に3つ戻す
(※3) 適用済のものを新しい順に全部戻す
$ ./migr8.rb redo -h ## ヘルプ
$ ./migr8.rb redo ## 1つだけ戻し、再度適用する
$ ./migr8.rb redo -n 3 ## 3つ戻し、再度適用する
$ ./migr8.rb redo --ALL ## 全部戻し、再度適用する
$ ./migr8.rb apply -h ## ヘルプ
$ ./migr8.rb apply version ## 指定したのを適用
$ ./migr8.rb apply version1 version2 ... ## 複数指定も可
$ ./migr8.rb unapply -h ## ヘルプ
$ ./migr8.rb unapply version ## 指定したのを適用
$ ./migr8.rb unapply version1 version2 ... ## 複数指定も可
$ ./migr8.rb unapply -x version ## ファイルがない場合(※)
(※) unapply -x は、マイグレーションファイルを使わず、
DB内の履歴テーブルに格納された down 用 SQL を使う。
「適用されているけどファイルがないマイグレーション」を
戻すときはこの方法を使う。
$ ./migr8.rb show -h ## ヘルプ
$ ./migr8.rb show version ## 内容を表示 (変数展開済)
$ ./migr8.rb show ## 直近のバージョンが対象
$ ./migr8.rb show -x version ## DBテーブルから読み込む
$ ./migr8.rb edit -h ## ヘルプ
$ ./migr8.rb edit version ## ファイルをエディタで開く
$ ./migr8.rb edit ## 直近のバージョンが対象
$ ./migr8.rb edit -r N ## N個前のバージョンが対象
$ ./migr8.rb edit -e editor ## エディタを指定 (※1)
(※1) デフォルトは $MIGR8_EDITOR で指定される
$ ./migr8.rb delete -h ## ヘルプ
$ ./migr8.rb delete --Imsure version ## ファイルを削除(※)
$ ./migr8.rb delete version ## (これは動作しない)
(※) マイグレーションが適用済みならファイルは削除できない。
$ ./migr8.rb status -h ## ヘルプ
$ ./migr8.rb status ## 直近の5個を表示
$ ./migr8.rb status -n N ## 直近のN個を表示
##### 実行例:未適用があると教えてくれる
$ ./migr8.rb status
## Status: YOU MUST APPLY spvo5800 AT FIRST!
## Recent history:
scjs8350 2013-11-07 23:01:13 # [john] create 'users'
ewwg6691 2013-11-07 23:29:33 # [john] add index
gnqc9473 2013-11-07 23:44:29 # [alice] create 'groups'
spvo5800 (not applied) # [alice] add 'group_id'
xmss3947 2013-11-08 19:29:33 # [john] insert seed data
$ ./migr8.rb hist -h ## ヘルプ
$ ./migr8.rb hist ## 履歴を表示
$ ./migr8.rb hist -o ## history.txtをエディタで開く
$ ./migr8.rb hist -b ## 順番を保ったまま、

## history.txtを作り直す(※)
(※) マイグレーションファイル内の摘要(description)と、
history.txt 内のコメントとが一致していないときに使う。
Migr8.rb チュートリアル

More Related Content

What's hot

オブジェクト指向エクササイズのススメ
オブジェクト指向エクササイズのススメオブジェクト指向エクササイズのススメ
オブジェクト指向エクササイズのススメYoji Kanno
 
ソーシャルゲーム案件におけるDB分割のPHP実装
ソーシャルゲーム案件におけるDB分割のPHP実装ソーシャルゲーム案件におけるDB分割のPHP実装
ソーシャルゲーム案件におけるDB分割のPHP実装infinite_loop
 
SQLチューニング入門 入門編
SQLチューニング入門 入門編SQLチューニング入門 入門編
SQLチューニング入門 入門編Miki Shimogai
 
凡人の凡人による凡人のためのデザインパターン第一幕 Public
凡人の凡人による凡人のためのデザインパターン第一幕 Public凡人の凡人による凡人のためのデザインパターン第一幕 Public
凡人の凡人による凡人のためのデザインパターン第一幕 Publicbonjin6770 Kurosawa
 
20分でわかるgVisor入門
20分でわかるgVisor入門20分でわかるgVisor入門
20分でわかるgVisor入門Shuji Yamada
 
インタフェース完全に理解した
インタフェース完全に理解したインタフェース完全に理解した
インタフェース完全に理解したtorisoup
 
Where狙いのキー、order by狙いのキー
Where狙いのキー、order by狙いのキーWhere狙いのキー、order by狙いのキー
Where狙いのキー、order by狙いのキーyoku0825
 
リレーショナルな正しいデータベース設計
リレーショナルな正しいデータベース設計リレーショナルな正しいデータベース設計
リレーショナルな正しいデータベース設計Mikiya Okuno
 
ドキュメントシステムはこれを使え2015年版
ドキュメントシステムはこれを使え2015年版ドキュメントシステムはこれを使え2015年版
ドキュメントシステムはこれを使え2015年版Keiichiro Shikano
 
MySQL 5.7にやられないためにおぼえておいてほしいこと
MySQL 5.7にやられないためにおぼえておいてほしいことMySQL 5.7にやられないためにおぼえておいてほしいこと
MySQL 5.7にやられないためにおぼえておいてほしいことyoku0825
 
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」Takuto Wada
 
JEP280: Java 9 で文字列結合の処理が変わるぞ!準備はいいか!? #jjug_ccc
JEP280: Java 9 で文字列結合の処理が変わるぞ!準備はいいか!? #jjug_cccJEP280: Java 9 で文字列結合の処理が変わるぞ!準備はいいか!? #jjug_ccc
JEP280: Java 9 で文字列結合の処理が変わるぞ!準備はいいか!? #jjug_cccYujiSoftware
 
eStargzイメージとlazy pullingによる高速なコンテナ起動
eStargzイメージとlazy pullingによる高速なコンテナ起動eStargzイメージとlazy pullingによる高速なコンテナ起動
eStargzイメージとlazy pullingによる高速なコンテナ起動Kohei Tokunaga
 
リーンなコードを書こう:実践的なオブジェクト指向設計
リーンなコードを書こう:実践的なオブジェクト指向設計リーンなコードを書こう:実践的なオブジェクト指向設計
リーンなコードを書こう:実践的なオブジェクト指向設計増田 亨
 
新入社員のための大規模ゲーム開発入門 サーバサイド編
新入社員のための大規模ゲーム開発入門 サーバサイド編新入社員のための大規模ゲーム開発入門 サーバサイド編
新入社員のための大規模ゲーム開発入門 サーバサイド編infinite_loop
 
ISUCONで学ぶ Webアプリケーションのパフォーマンス向上のコツ 実践編 完全版
ISUCONで学ぶ Webアプリケーションのパフォーマンス向上のコツ 実践編 完全版ISUCONで学ぶ Webアプリケーションのパフォーマンス向上のコツ 実践編 完全版
ISUCONで学ぶ Webアプリケーションのパフォーマンス向上のコツ 実践編 完全版Masahiro Nagano
 
UE4プログラマー勉強会 in 大阪 -エンジンの内部挙動について
UE4プログラマー勉強会 in 大阪 -エンジンの内部挙動についてUE4プログラマー勉強会 in 大阪 -エンジンの内部挙動について
UE4プログラマー勉強会 in 大阪 -エンジンの内部挙動についてcom044
 
並列化による高速化
並列化による高速化 並列化による高速化
並列化による高速化 sakura-mike
 
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところ
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところ
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところY Watanabe
 

What's hot (20)

オブジェクト指向エクササイズのススメ
オブジェクト指向エクササイズのススメオブジェクト指向エクササイズのススメ
オブジェクト指向エクササイズのススメ
 
ヤフー社内でやってるMySQLチューニングセミナー大公開
ヤフー社内でやってるMySQLチューニングセミナー大公開ヤフー社内でやってるMySQLチューニングセミナー大公開
ヤフー社内でやってるMySQLチューニングセミナー大公開
 
ソーシャルゲーム案件におけるDB分割のPHP実装
ソーシャルゲーム案件におけるDB分割のPHP実装ソーシャルゲーム案件におけるDB分割のPHP実装
ソーシャルゲーム案件におけるDB分割のPHP実装
 
SQLチューニング入門 入門編
SQLチューニング入門 入門編SQLチューニング入門 入門編
SQLチューニング入門 入門編
 
凡人の凡人による凡人のためのデザインパターン第一幕 Public
凡人の凡人による凡人のためのデザインパターン第一幕 Public凡人の凡人による凡人のためのデザインパターン第一幕 Public
凡人の凡人による凡人のためのデザインパターン第一幕 Public
 
20分でわかるgVisor入門
20分でわかるgVisor入門20分でわかるgVisor入門
20分でわかるgVisor入門
 
インタフェース完全に理解した
インタフェース完全に理解したインタフェース完全に理解した
インタフェース完全に理解した
 
Where狙いのキー、order by狙いのキー
Where狙いのキー、order by狙いのキーWhere狙いのキー、order by狙いのキー
Where狙いのキー、order by狙いのキー
 
リレーショナルな正しいデータベース設計
リレーショナルな正しいデータベース設計リレーショナルな正しいデータベース設計
リレーショナルな正しいデータベース設計
 
ドキュメントシステムはこれを使え2015年版
ドキュメントシステムはこれを使え2015年版ドキュメントシステムはこれを使え2015年版
ドキュメントシステムはこれを使え2015年版
 
MySQL 5.7にやられないためにおぼえておいてほしいこと
MySQL 5.7にやられないためにおぼえておいてほしいことMySQL 5.7にやられないためにおぼえておいてほしいこと
MySQL 5.7にやられないためにおぼえておいてほしいこと
 
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
 
JEP280: Java 9 で文字列結合の処理が変わるぞ!準備はいいか!? #jjug_ccc
JEP280: Java 9 で文字列結合の処理が変わるぞ!準備はいいか!? #jjug_cccJEP280: Java 9 で文字列結合の処理が変わるぞ!準備はいいか!? #jjug_ccc
JEP280: Java 9 で文字列結合の処理が変わるぞ!準備はいいか!? #jjug_ccc
 
eStargzイメージとlazy pullingによる高速なコンテナ起動
eStargzイメージとlazy pullingによる高速なコンテナ起動eStargzイメージとlazy pullingによる高速なコンテナ起動
eStargzイメージとlazy pullingによる高速なコンテナ起動
 
リーンなコードを書こう:実践的なオブジェクト指向設計
リーンなコードを書こう:実践的なオブジェクト指向設計リーンなコードを書こう:実践的なオブジェクト指向設計
リーンなコードを書こう:実践的なオブジェクト指向設計
 
新入社員のための大規模ゲーム開発入門 サーバサイド編
新入社員のための大規模ゲーム開発入門 サーバサイド編新入社員のための大規模ゲーム開発入門 サーバサイド編
新入社員のための大規模ゲーム開発入門 サーバサイド編
 
ISUCONで学ぶ Webアプリケーションのパフォーマンス向上のコツ 実践編 完全版
ISUCONで学ぶ Webアプリケーションのパフォーマンス向上のコツ 実践編 完全版ISUCONで学ぶ Webアプリケーションのパフォーマンス向上のコツ 実践編 完全版
ISUCONで学ぶ Webアプリケーションのパフォーマンス向上のコツ 実践編 完全版
 
UE4プログラマー勉強会 in 大阪 -エンジンの内部挙動について
UE4プログラマー勉強会 in 大阪 -エンジンの内部挙動についてUE4プログラマー勉強会 in 大阪 -エンジンの内部挙動について
UE4プログラマー勉強会 in 大阪 -エンジンの内部挙動について
 
並列化による高速化
並列化による高速化 並列化による高速化
並列化による高速化
 
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところ
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところ
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところ
 

Viewers also liked

Osc2015 hokkaido postgresql-semi-stuructured-datatype
Osc2015 hokkaido postgresql-semi-stuructured-datatypeOsc2015 hokkaido postgresql-semi-stuructured-datatype
Osc2015 hokkaido postgresql-semi-stuructured-datatypeToshi Harada
 
レシピブログのサービス設計と今後の展望
レシピブログのサービス設計と今後の展望レシピブログのサービス設計と今後の展望
レシピブログのサービス設計と今後の展望Masaki Nakagawa
 
Lagom で学ぶ Reactive Microservices Architecture @ 第3回Reactive System Meetup i...
Lagom で学ぶ Reactive Microservices Architecture @ 第3回Reactive System Meetup i...Lagom で学ぶ Reactive Microservices Architecture @ 第3回Reactive System Meetup i...
Lagom で学ぶ Reactive Microservices Architecture @ 第3回Reactive System Meetup i...TIS Inc.
 
今すぐ使えるクラウドとPostgreSQL
今すぐ使えるクラウドとPostgreSQL今すぐ使えるクラウドとPostgreSQL
今すぐ使えるクラウドとPostgreSQLSoudai Sone
 
HAWQをCDHで動かしてみた
HAWQをCDHで動かしてみたHAWQをCDHで動かしてみた
HAWQをCDHで動かしてみたadachij2002
 
Ivsctonightandday2016winter moringsession awsreinvent2016recap
Ivsctonightandday2016winter moringsession awsreinvent2016recapIvsctonightandday2016winter moringsession awsreinvent2016recap
Ivsctonightandday2016winter moringsession awsreinvent2016recapTadashi Okazaki
 
初心者がAWSでWebサービスを始めるまで 〜たった3ステップでWebページは公開できる〜
初心者がAWSでWebサービスを始めるまで 〜たった3ステップでWebページは公開できる〜初心者がAWSでWebサービスを始めるまで 〜たった3ステップでWebページは公開できる〜
初心者がAWSでWebサービスを始めるまで 〜たった3ステップでWebページは公開できる〜Takeshi Wakamatsu
 
【自社プロダクト開発エンジニア募集中】エーピーコミュニケーションズ 先進開発グループ
【自社プロダクト開発エンジニア募集中】エーピーコミュニケーションズ 先進開発グループ【自社プロダクト開発エンジニア募集中】エーピーコミュニケーションズ 先進開発グループ
【自社プロダクト開発エンジニア募集中】エーピーコミュニケーションズ 先進開発グループAPCommunications-recruit
 
[D31] PostgreSQLでスケールアウト構成を構築しよう by Yugo Nagata
[D31] PostgreSQLでスケールアウト構成を構築しよう by Yugo Nagata[D31] PostgreSQLでスケールアウト構成を構築しよう by Yugo Nagata
[D31] PostgreSQLでスケールアウト構成を構築しよう by Yugo NagataInsight Technology, Inc.
 
最上級の簡易性を備えたオープンソースDBクラウド基盤 Composeのご紹介
最上級の簡易性を備えたオープンソースDBクラウド基盤 Composeのご紹介最上級の簡易性を備えたオープンソースDBクラウド基盤 Composeのご紹介
最上級の簡易性を備えたオープンソースDBクラウド基盤 Composeのご紹介IBM Analytics Japan
 
PL/CUDA - Fusion of HPC Grade Power with In-Database Analytics
PL/CUDA - Fusion of HPC Grade Power with In-Database AnalyticsPL/CUDA - Fusion of HPC Grade Power with In-Database Analytics
PL/CUDA - Fusion of HPC Grade Power with In-Database AnalyticsKohei KaiGai
 
仕事で使うちょっとしたコードをOSSとして開発メンテしていく - Django Redshift Backend の開発 - PyCon JP 2016
仕事で使うちょっとしたコードをOSSとして開発メンテしていく- Django Redshift Backend の開発 - PyCon JP 2016仕事で使うちょっとしたコードをOSSとして開発メンテしていく- Django Redshift Backend の開発 - PyCon JP 2016
仕事で使うちょっとしたコードをOSSとして開発メンテしていく - Django Redshift Backend の開発 - PyCon JP 2016Takayuki Shimizukawa
 
サーバーワークス re:invent_2016~新サービス・アップデート紹介~
サーバーワークス re:invent_2016~新サービス・アップデート紹介~サーバーワークス re:invent_2016~新サービス・アップデート紹介~
サーバーワークス re:invent_2016~新サービス・アップデート紹介~Serverworks Co.,Ltd.
 
20160927_守るべきは、大量の情報資産を管理するデータベース! ~ユーザ事例から見るデータベースのセキュリティ対策~ by 株式会社インサイトテクノ...
20160927_守るべきは、大量の情報資産を管理するデータベース! ~ユーザ事例から見るデータベースのセキュリティ対策~ by 株式会社インサイトテクノ...20160927_守るべきは、大量の情報資産を管理するデータベース! ~ユーザ事例から見るデータベースのセキュリティ対策~ by 株式会社インサイトテクノ...
20160927_守るべきは、大量の情報資産を管理するデータベース! ~ユーザ事例から見るデータベースのセキュリティ対策~ by 株式会社インサイトテクノ...Insight Technology, Inc.
 
35歳でDBAになった私がデータベースを壊して学んだこと
35歳でDBAになった私がデータベースを壊して学んだこと35歳でDBAになった私がデータベースを壊して学んだこと
35歳でDBAになった私がデータベースを壊して学んだことShinnosuke Akita
 
20160929_InnoDBの全文検索を使ってみた by 株式会社インサイトテクノロジー 中村範夫
20160929_InnoDBの全文検索を使ってみた by 株式会社インサイトテクノロジー 中村範夫20160929_InnoDBの全文検索を使ってみた by 株式会社インサイトテクノロジー 中村範夫
20160929_InnoDBの全文検索を使ってみた by 株式会社インサイトテクノロジー 中村範夫Insight Technology, Inc.
 
地方エンジニアがPostgreSQLを通じて成長した話
地方エンジニアがPostgreSQLを通じて成長した話地方エンジニアがPostgreSQLを通じて成長した話
地方エンジニアがPostgreSQLを通じて成長した話Soudai Sone
 
[data analytics showcase] B16: Live Demo! データ分析基盤を支えるデータレプリケーション技術とデータワークロード分...
[data analytics showcase] B16: Live Demo! データ分析基盤を支えるデータレプリケーション技術とデータワークロード分...[data analytics showcase] B16: Live Demo! データ分析基盤を支えるデータレプリケーション技術とデータワークロード分...
[data analytics showcase] B16: Live Demo! データ分析基盤を支えるデータレプリケーション技術とデータワークロード分...Insight Technology, Inc.
 
[CB16] 80時間でWebを一周:クロムミウムオートメーションによるスケーラブルなフィンガープリント by Isaac Dawson
[CB16] 80時間でWebを一周:クロムミウムオートメーションによるスケーラブルなフィンガープリント by Isaac Dawson[CB16] 80時間でWebを一周:クロムミウムオートメーションによるスケーラブルなフィンガープリント by Isaac Dawson
[CB16] 80時間でWebを一周:クロムミウムオートメーションによるスケーラブルなフィンガープリント by Isaac DawsonCODE BLUE
 

Viewers also liked (20)

Osc2015 hokkaido postgresql-semi-stuructured-datatype
Osc2015 hokkaido postgresql-semi-stuructured-datatypeOsc2015 hokkaido postgresql-semi-stuructured-datatype
Osc2015 hokkaido postgresql-semi-stuructured-datatype
 
レシピブログのサービス設計と今後の展望
レシピブログのサービス設計と今後の展望レシピブログのサービス設計と今後の展望
レシピブログのサービス設計と今後の展望
 
Lagom で学ぶ Reactive Microservices Architecture @ 第3回Reactive System Meetup i...
Lagom で学ぶ Reactive Microservices Architecture @ 第3回Reactive System Meetup i...Lagom で学ぶ Reactive Microservices Architecture @ 第3回Reactive System Meetup i...
Lagom で学ぶ Reactive Microservices Architecture @ 第3回Reactive System Meetup i...
 
今すぐ使えるクラウドとPostgreSQL
今すぐ使えるクラウドとPostgreSQL今すぐ使えるクラウドとPostgreSQL
今すぐ使えるクラウドとPostgreSQL
 
HAWQをCDHで動かしてみた
HAWQをCDHで動かしてみたHAWQをCDHで動かしてみた
HAWQをCDHで動かしてみた
 
PostgreSQLアーキテクチャ入門
PostgreSQLアーキテクチャ入門PostgreSQLアーキテクチャ入門
PostgreSQLアーキテクチャ入門
 
Ivsctonightandday2016winter moringsession awsreinvent2016recap
Ivsctonightandday2016winter moringsession awsreinvent2016recapIvsctonightandday2016winter moringsession awsreinvent2016recap
Ivsctonightandday2016winter moringsession awsreinvent2016recap
 
初心者がAWSでWebサービスを始めるまで 〜たった3ステップでWebページは公開できる〜
初心者がAWSでWebサービスを始めるまで 〜たった3ステップでWebページは公開できる〜初心者がAWSでWebサービスを始めるまで 〜たった3ステップでWebページは公開できる〜
初心者がAWSでWebサービスを始めるまで 〜たった3ステップでWebページは公開できる〜
 
【自社プロダクト開発エンジニア募集中】エーピーコミュニケーションズ 先進開発グループ
【自社プロダクト開発エンジニア募集中】エーピーコミュニケーションズ 先進開発グループ【自社プロダクト開発エンジニア募集中】エーピーコミュニケーションズ 先進開発グループ
【自社プロダクト開発エンジニア募集中】エーピーコミュニケーションズ 先進開発グループ
 
[D31] PostgreSQLでスケールアウト構成を構築しよう by Yugo Nagata
[D31] PostgreSQLでスケールアウト構成を構築しよう by Yugo Nagata[D31] PostgreSQLでスケールアウト構成を構築しよう by Yugo Nagata
[D31] PostgreSQLでスケールアウト構成を構築しよう by Yugo Nagata
 
最上級の簡易性を備えたオープンソースDBクラウド基盤 Composeのご紹介
最上級の簡易性を備えたオープンソースDBクラウド基盤 Composeのご紹介最上級の簡易性を備えたオープンソースDBクラウド基盤 Composeのご紹介
最上級の簡易性を備えたオープンソースDBクラウド基盤 Composeのご紹介
 
PL/CUDA - Fusion of HPC Grade Power with In-Database Analytics
PL/CUDA - Fusion of HPC Grade Power with In-Database AnalyticsPL/CUDA - Fusion of HPC Grade Power with In-Database Analytics
PL/CUDA - Fusion of HPC Grade Power with In-Database Analytics
 
仕事で使うちょっとしたコードをOSSとして開発メンテしていく - Django Redshift Backend の開発 - PyCon JP 2016
仕事で使うちょっとしたコードをOSSとして開発メンテしていく- Django Redshift Backend の開発 - PyCon JP 2016仕事で使うちょっとしたコードをOSSとして開発メンテしていく- Django Redshift Backend の開発 - PyCon JP 2016
仕事で使うちょっとしたコードをOSSとして開発メンテしていく - Django Redshift Backend の開発 - PyCon JP 2016
 
サーバーワークス re:invent_2016~新サービス・アップデート紹介~
サーバーワークス re:invent_2016~新サービス・アップデート紹介~サーバーワークス re:invent_2016~新サービス・アップデート紹介~
サーバーワークス re:invent_2016~新サービス・アップデート紹介~
 
20160927_守るべきは、大量の情報資産を管理するデータベース! ~ユーザ事例から見るデータベースのセキュリティ対策~ by 株式会社インサイトテクノ...
20160927_守るべきは、大量の情報資産を管理するデータベース! ~ユーザ事例から見るデータベースのセキュリティ対策~ by 株式会社インサイトテクノ...20160927_守るべきは、大量の情報資産を管理するデータベース! ~ユーザ事例から見るデータベースのセキュリティ対策~ by 株式会社インサイトテクノ...
20160927_守るべきは、大量の情報資産を管理するデータベース! ~ユーザ事例から見るデータベースのセキュリティ対策~ by 株式会社インサイトテクノ...
 
35歳でDBAになった私がデータベースを壊して学んだこと
35歳でDBAになった私がデータベースを壊して学んだこと35歳でDBAになった私がデータベースを壊して学んだこと
35歳でDBAになった私がデータベースを壊して学んだこと
 
20160929_InnoDBの全文検索を使ってみた by 株式会社インサイトテクノロジー 中村範夫
20160929_InnoDBの全文検索を使ってみた by 株式会社インサイトテクノロジー 中村範夫20160929_InnoDBの全文検索を使ってみた by 株式会社インサイトテクノロジー 中村範夫
20160929_InnoDBの全文検索を使ってみた by 株式会社インサイトテクノロジー 中村範夫
 
地方エンジニアがPostgreSQLを通じて成長した話
地方エンジニアがPostgreSQLを通じて成長した話地方エンジニアがPostgreSQLを通じて成長した話
地方エンジニアがPostgreSQLを通じて成長した話
 
[data analytics showcase] B16: Live Demo! データ分析基盤を支えるデータレプリケーション技術とデータワークロード分...
[data analytics showcase] B16: Live Demo! データ分析基盤を支えるデータレプリケーション技術とデータワークロード分...[data analytics showcase] B16: Live Demo! データ分析基盤を支えるデータレプリケーション技術とデータワークロード分...
[data analytics showcase] B16: Live Demo! データ分析基盤を支えるデータレプリケーション技術とデータワークロード分...
 
[CB16] 80時間でWebを一周:クロムミウムオートメーションによるスケーラブルなフィンガープリント by Isaac Dawson
[CB16] 80時間でWebを一周:クロムミウムオートメーションによるスケーラブルなフィンガープリント by Isaac Dawson[CB16] 80時間でWebを一周:クロムミウムオートメーションによるスケーラブルなフィンガープリント by Isaac Dawson
[CB16] 80時間でWebを一周:クロムミウムオートメーションによるスケーラブルなフィンガープリント by Isaac Dawson
 

Similar to Migr8.rb チュートリアル

More Better Nested Set
More Better Nested SetMore Better Nested Set
More Better Nested Setxibbar
 
Cinnamon - simple deploy tool
Cinnamon - simple deploy toolCinnamon - simple deploy tool
Cinnamon - simple deploy toolYuki Shibazaki
 
Rails3.1rc4を試してみた
Rails3.1rc4を試してみたRails3.1rc4を試してみた
Rails3.1rc4を試してみたTakahiro Hidaka
 
omoon.org の裏側 〜FuelPHP の task 活用例〜
omoon.org の裏側 〜FuelPHP の task 活用例〜omoon.org の裏側 〜FuelPHP の task 活用例〜
omoon.org の裏側 〜FuelPHP の task 活用例〜Sotaro Omura
 
mysqlcasual6-fabric
mysqlcasual6-fabricmysqlcasual6-fabric
mysqlcasual6-fabricdoublemarket
 
Rails and twitter #twtr_hack
Rails and twitter #twtr_hackRails and twitter #twtr_hack
Rails and twitter #twtr_hacki7a
 
What's Temporal model FuelPHP東京勉強会03
What's Temporal model FuelPHP東京勉強会03What's Temporal model FuelPHP東京勉強会03
What's Temporal model FuelPHP東京勉強会03Takayuki Yamaguchi
 
2014/11/08 第3回 一撃サーバー構築シェルスクリプト勉強会(懇親会もあるよ!) 発表資料
2014/11/08 第3回 一撃サーバー構築シェルスクリプト勉強会(懇親会もあるよ!) 発表資料2014/11/08 第3回 一撃サーバー構築シェルスクリプト勉強会(懇親会もあるよ!) 発表資料
2014/11/08 第3回 一撃サーバー構築シェルスクリプト勉強会(懇親会もあるよ!) 発表資料Yasutaka Hamada
 
どこよりも早い Spring Boot 1.2 解説 #渋谷Java
どこよりも早い Spring Boot 1.2 解説 #渋谷Javaどこよりも早い Spring Boot 1.2 解説 #渋谷Java
どこよりも早い Spring Boot 1.2 解説 #渋谷JavaToshiaki Maki
 
Ruby on Rails Tutorial Chapter8-10
Ruby on Rails Tutorial Chapter8-10Ruby on Rails Tutorial Chapter8-10
Ruby on Rails Tutorial Chapter8-10Sea Mountain
 
シラサギハンズオン 東京
シラサギハンズオン 東京シラサギハンズオン 東京
シラサギハンズオン 東京Yu Ito
 
Mojoliciousをウェブ制作現場で使ってみてる
Mojoliciousをウェブ制作現場で使ってみてるMojoliciousをウェブ制作現場で使ってみてる
Mojoliciousをウェブ制作現場で使ってみてるjamadam
 
Introduction to JShell: the Java REPL Tool #jjug_ccc #ccc_ab4
Introduction to JShell: the Java REPL Tool #jjug_ccc #ccc_ab4Introduction to JShell: the Java REPL Tool #jjug_ccc #ccc_ab4
Introduction to JShell: the Java REPL Tool #jjug_ccc #ccc_ab4bitter_fox
 
jQuery Mobile 1.3 最新情報
jQuery Mobile 1.3 最新情報jQuery Mobile 1.3 最新情報
jQuery Mobile 1.3 最新情報yoshikawa_t
 

Similar to Migr8.rb チュートリアル (20)

More Better Nested Set
More Better Nested SetMore Better Nested Set
More Better Nested Set
 
Ansible入門
Ansible入門Ansible入門
Ansible入門
 
Cinnamon - simple deploy tool
Cinnamon - simple deploy toolCinnamon - simple deploy tool
Cinnamon - simple deploy tool
 
Rails3.1rc4を試してみた
Rails3.1rc4を試してみたRails3.1rc4を試してみた
Rails3.1rc4を試してみた
 
Ci tutorial
Ci tutorialCi tutorial
Ci tutorial
 
omoon.org の裏側 〜FuelPHP の task 活用例〜
omoon.org の裏側 〜FuelPHP の task 活用例〜omoon.org の裏側 〜FuelPHP の task 活用例〜
omoon.org の裏側 〜FuelPHP の task 活用例〜
 
mysqlcasual6-fabric
mysqlcasual6-fabricmysqlcasual6-fabric
mysqlcasual6-fabric
 
OpenStack Grizzly構築手順書
OpenStack Grizzly構築手順書OpenStack Grizzly構築手順書
OpenStack Grizzly構築手順書
 
Maatkitの紹介
Maatkitの紹介Maatkitの紹介
Maatkitの紹介
 
Rails and twitter #twtr_hack
Rails and twitter #twtr_hackRails and twitter #twtr_hack
Rails and twitter #twtr_hack
 
What's Temporal model FuelPHP東京勉強会03
What's Temporal model FuelPHP東京勉強会03What's Temporal model FuelPHP東京勉強会03
What's Temporal model FuelPHP東京勉強会03
 
2014/11/08 第3回 一撃サーバー構築シェルスクリプト勉強会(懇親会もあるよ!) 発表資料
2014/11/08 第3回 一撃サーバー構築シェルスクリプト勉強会(懇親会もあるよ!) 発表資料2014/11/08 第3回 一撃サーバー構築シェルスクリプト勉強会(懇親会もあるよ!) 発表資料
2014/11/08 第3回 一撃サーバー構築シェルスクリプト勉強会(懇親会もあるよ!) 発表資料
 
どこよりも早い Spring Boot 1.2 解説 #渋谷Java
どこよりも早い Spring Boot 1.2 解説 #渋谷Javaどこよりも早い Spring Boot 1.2 解説 #渋谷Java
どこよりも早い Spring Boot 1.2 解説 #渋谷Java
 
Mina 20130417
Mina 20130417Mina 20130417
Mina 20130417
 
Ruby on Rails Tutorial Chapter8-10
Ruby on Rails Tutorial Chapter8-10Ruby on Rails Tutorial Chapter8-10
Ruby on Rails Tutorial Chapter8-10
 
シラサギハンズオン 東京
シラサギハンズオン 東京シラサギハンズオン 東京
シラサギハンズオン 東京
 
Mojoliciousをウェブ制作現場で使ってみてる
Mojoliciousをウェブ制作現場で使ってみてるMojoliciousをウェブ制作現場で使ってみてる
Mojoliciousをウェブ制作現場で使ってみてる
 
Introduction to JShell: the Java REPL Tool #jjug_ccc #ccc_ab4
Introduction to JShell: the Java REPL Tool #jjug_ccc #ccc_ab4Introduction to JShell: the Java REPL Tool #jjug_ccc #ccc_ab4
Introduction to JShell: the Java REPL Tool #jjug_ccc #ccc_ab4
 
jQuery Mobile 1.3 最新情報
jQuery Mobile 1.3 最新情報jQuery Mobile 1.3 最新情報
jQuery Mobile 1.3 最新情報
 
Using Dancer
Using DancerUsing Dancer
Using Dancer
 

More from kwatch

How to make the fastest Router in Python
How to make the fastest Router in PythonHow to make the fastest Router in Python
How to make the fastest Router in Pythonkwatch
 
なんでもID
なんでもIDなんでもID
なんでもIDkwatch
 
Nippondanji氏に怒られても仕方ない、配列型とJSON型の使い方
Nippondanji氏に怒られても仕方ない、配列型とJSON型の使い方Nippondanji氏に怒られても仕方ない、配列型とJSON型の使い方
Nippondanji氏に怒られても仕方ない、配列型とJSON型の使い方kwatch
 
【SQLインジェクション対策】徳丸先生に怒られない、動的SQLの安全な組み立て方
【SQLインジェクション対策】徳丸先生に怒られない、動的SQLの安全な組み立て方【SQLインジェクション対策】徳丸先生に怒られない、動的SQLの安全な組み立て方
【SQLインジェクション対策】徳丸先生に怒られない、動的SQLの安全な組み立て方kwatch
 
O/Rマッパーによるトラブルを未然に防ぐ
O/Rマッパーによるトラブルを未然に防ぐO/Rマッパーによるトラブルを未然に防ぐ
O/Rマッパーによるトラブルを未然に防ぐkwatch
 
正規表現リテラルは本当に必要なのか?
正規表現リテラルは本当に必要なのか?正規表現リテラルは本当に必要なのか?
正規表現リテラルは本当に必要なのか?kwatch
 
【公開終了】Python4PHPer - PHPユーザのためのPython入門 (Python2.5)
【公開終了】Python4PHPer - PHPユーザのためのPython入門 (Python2.5)【公開終了】Python4PHPer - PHPユーザのためのPython入門 (Python2.5)
【公開終了】Python4PHPer - PHPユーザのためのPython入門 (Python2.5)kwatch
 
PHPとJavaScriptにおけるオブジェクト指向を比較する
PHPとJavaScriptにおけるオブジェクト指向を比較するPHPとJavaScriptにおけるオブジェクト指向を比較する
PHPとJavaScriptにおけるオブジェクト指向を比較するkwatch
 
SQL上級者こそ知って欲しい、なぜO/Rマッパーが重要か?
SQL上級者こそ知って欲しい、なぜO/Rマッパーが重要か?SQL上級者こそ知って欲しい、なぜO/Rマッパーが重要か?
SQL上級者こそ知って欲しい、なぜO/Rマッパーが重要か?kwatch
 
Fantastic DSL in Python
Fantastic DSL in PythonFantastic DSL in Python
Fantastic DSL in Pythonkwatch
 
What is wrong on Test::More? / Test::Moreが抱える問題点とその解決策
What is wrong on Test::More? / Test::Moreが抱える問題点とその解決策What is wrong on Test::More? / Test::Moreが抱える問題点とその解決策
What is wrong on Test::More? / Test::Moreが抱える問題点とその解決策kwatch
 
PHP5.5新機能「ジェネレータ」初心者入門
PHP5.5新機能「ジェネレータ」初心者入門PHP5.5新機能「ジェネレータ」初心者入門
PHP5.5新機能「ジェネレータ」初心者入門kwatch
 
Pretty Good Branch Strategy for Git/Mercurial
Pretty Good Branch Strategy for Git/MercurialPretty Good Branch Strategy for Git/Mercurial
Pretty Good Branch Strategy for Git/Mercurialkwatch
 
Oktest - a new style testing library for Python -
Oktest - a new style testing library for Python -Oktest - a new style testing library for Python -
Oktest - a new style testing library for Python -kwatch
 
文字列結合のベンチマークをいろんな処理系でやってみた
文字列結合のベンチマークをいろんな処理系でやってみた文字列結合のベンチマークをいろんな処理系でやってみた
文字列結合のベンチマークをいろんな処理系でやってみたkwatch
 
I have something to say about the buzz word "From Java to Ruby"
I have something to say about the buzz word "From Java to Ruby"I have something to say about the buzz word "From Java to Ruby"
I have something to say about the buzz word "From Java to Ruby"kwatch
 
Cより速いRubyプログラム
Cより速いRubyプログラムCより速いRubyプログラム
Cより速いRubyプログラムkwatch
 
Javaより速いLL用テンプレートエンジン
Javaより速いLL用テンプレートエンジンJavaより速いLL用テンプレートエンジン
Javaより速いLL用テンプレートエンジンkwatch
 
Underlaying Technology of Modern O/R Mapper
Underlaying Technology of Modern O/R MapperUnderlaying Technology of Modern O/R Mapper
Underlaying Technology of Modern O/R Mapperkwatch
 
How to Make Ruby CGI Script Faster - CGIを高速化する小手先テクニック -
How to Make Ruby CGI Script Faster - CGIを高速化する小手先テクニック -How to Make Ruby CGI Script Faster - CGIを高速化する小手先テクニック -
How to Make Ruby CGI Script Faster - CGIを高速化する小手先テクニック -kwatch
 

More from kwatch (20)

How to make the fastest Router in Python
How to make the fastest Router in PythonHow to make the fastest Router in Python
How to make the fastest Router in Python
 
なんでもID
なんでもIDなんでもID
なんでもID
 
Nippondanji氏に怒られても仕方ない、配列型とJSON型の使い方
Nippondanji氏に怒られても仕方ない、配列型とJSON型の使い方Nippondanji氏に怒られても仕方ない、配列型とJSON型の使い方
Nippondanji氏に怒られても仕方ない、配列型とJSON型の使い方
 
【SQLインジェクション対策】徳丸先生に怒られない、動的SQLの安全な組み立て方
【SQLインジェクション対策】徳丸先生に怒られない、動的SQLの安全な組み立て方【SQLインジェクション対策】徳丸先生に怒られない、動的SQLの安全な組み立て方
【SQLインジェクション対策】徳丸先生に怒られない、動的SQLの安全な組み立て方
 
O/Rマッパーによるトラブルを未然に防ぐ
O/Rマッパーによるトラブルを未然に防ぐO/Rマッパーによるトラブルを未然に防ぐ
O/Rマッパーによるトラブルを未然に防ぐ
 
正規表現リテラルは本当に必要なのか?
正規表現リテラルは本当に必要なのか?正規表現リテラルは本当に必要なのか?
正規表現リテラルは本当に必要なのか?
 
【公開終了】Python4PHPer - PHPユーザのためのPython入門 (Python2.5)
【公開終了】Python4PHPer - PHPユーザのためのPython入門 (Python2.5)【公開終了】Python4PHPer - PHPユーザのためのPython入門 (Python2.5)
【公開終了】Python4PHPer - PHPユーザのためのPython入門 (Python2.5)
 
PHPとJavaScriptにおけるオブジェクト指向を比較する
PHPとJavaScriptにおけるオブジェクト指向を比較するPHPとJavaScriptにおけるオブジェクト指向を比較する
PHPとJavaScriptにおけるオブジェクト指向を比較する
 
SQL上級者こそ知って欲しい、なぜO/Rマッパーが重要か?
SQL上級者こそ知って欲しい、なぜO/Rマッパーが重要か?SQL上級者こそ知って欲しい、なぜO/Rマッパーが重要か?
SQL上級者こそ知って欲しい、なぜO/Rマッパーが重要か?
 
Fantastic DSL in Python
Fantastic DSL in PythonFantastic DSL in Python
Fantastic DSL in Python
 
What is wrong on Test::More? / Test::Moreが抱える問題点とその解決策
What is wrong on Test::More? / Test::Moreが抱える問題点とその解決策What is wrong on Test::More? / Test::Moreが抱える問題点とその解決策
What is wrong on Test::More? / Test::Moreが抱える問題点とその解決策
 
PHP5.5新機能「ジェネレータ」初心者入門
PHP5.5新機能「ジェネレータ」初心者入門PHP5.5新機能「ジェネレータ」初心者入門
PHP5.5新機能「ジェネレータ」初心者入門
 
Pretty Good Branch Strategy for Git/Mercurial
Pretty Good Branch Strategy for Git/MercurialPretty Good Branch Strategy for Git/Mercurial
Pretty Good Branch Strategy for Git/Mercurial
 
Oktest - a new style testing library for Python -
Oktest - a new style testing library for Python -Oktest - a new style testing library for Python -
Oktest - a new style testing library for Python -
 
文字列結合のベンチマークをいろんな処理系でやってみた
文字列結合のベンチマークをいろんな処理系でやってみた文字列結合のベンチマークをいろんな処理系でやってみた
文字列結合のベンチマークをいろんな処理系でやってみた
 
I have something to say about the buzz word "From Java to Ruby"
I have something to say about the buzz word "From Java to Ruby"I have something to say about the buzz word "From Java to Ruby"
I have something to say about the buzz word "From Java to Ruby"
 
Cより速いRubyプログラム
Cより速いRubyプログラムCより速いRubyプログラム
Cより速いRubyプログラム
 
Javaより速いLL用テンプレートエンジン
Javaより速いLL用テンプレートエンジンJavaより速いLL用テンプレートエンジン
Javaより速いLL用テンプレートエンジン
 
Underlaying Technology of Modern O/R Mapper
Underlaying Technology of Modern O/R MapperUnderlaying Technology of Modern O/R Mapper
Underlaying Technology of Modern O/R Mapper
 
How to Make Ruby CGI Script Faster - CGIを高速化する小手先テクニック -
How to Make Ruby CGI Script Faster - CGIを高速化する小手先テクニック -How to Make Ruby CGI Script Faster - CGIを高速化する小手先テクニック -
How to Make Ruby CGI Script Faster - CGIを高速化する小手先テクニック -
 

Recently uploaded

PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000Shota Ito
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略Ryo Sasaki
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムsugiuralab
 
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。iPride Co., Ltd.
 
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By DanielPostman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Danieldanielhu54
 
IoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptxIoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptxAtomu Hidaka
 
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。
新人研修のまとめ       2024/04/12の勉強会で発表されたものです。新人研修のまとめ       2024/04/12の勉強会で発表されたものです。
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。iPride Co., Ltd.
 
UPWARD_share_company_information_20240415.pdf
UPWARD_share_company_information_20240415.pdfUPWARD_share_company_information_20240415.pdf
UPWARD_share_company_information_20240415.pdffurutsuka
 
20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directory20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directoryosamut
 

Recently uploaded (9)

PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システム
 
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
 
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By DanielPostman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Daniel
 
IoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptxIoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptx
 
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。
新人研修のまとめ       2024/04/12の勉強会で発表されたものです。新人研修のまとめ       2024/04/12の勉強会で発表されたものです。
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。
 
UPWARD_share_company_information_20240415.pdf
UPWARD_share_company_information_20240415.pdfUPWARD_share_company_information_20240415.pdf
UPWARD_share_company_information_20240415.pdf
 
20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directory20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directory
 

Migr8.rb チュートリアル

  • 1.
  • 2.
  • 3.
  • 4.
  • 5. $ rails generate migration CreateUsers $ ls db/migrate/ 20131104023129_create_users.rb
  • 6. ## file: db/migrate/20131104023129_create_users.rb class CreateUsers < ActiveRecord::Migration def up create_table "users" do |t| t.string "name" t.string "email" end end def down drop_table "users" end end
  • 7. ## バージョンを上げる $ rake db:migrate ## バージョンを戻す $ rake db:rollback ## 再実行(戻して、もう一度上げる) $ rake db:migrate:redo ## 現在のバージョンを調べる $ rake db:version Current version:20131104023129
  • 8. postgres=> dt users; List of relations Schema ¦ Name ¦ Type ¦ Owner --------+-------+-------+-------- public ¦ users ¦ table ¦ myname (1 row) postgres=> select * from schema_migrations; version ---------------- 20131104023129 (1 row) 

  • 9.
  • 10.
  • 12. ### Install $ curl -Lo migr8.rb http://bit.ly/migr8_rb $ chmod a+x ./migr8.rb ### Setup (PostgreSQL, MySQL, SQLite) $ export MIGR8_COMMAND="psql -qX -U user1 dbname" $ #export MIGR8_COMMAND="mysql -s -u user1 dbname" $ #export MIGR8_COMMAND="sqlite3 dbfile" ### Setup (Editor) $ export MIGR8_EDITOR="emacsclient -n" $ #export MIGR8_EDITOR="vim" $ #export MIGR8_EDITOR="open -a CotEditor"
  • 13. ### ヘルプを表示 $ ./migr8.rb help ### 初期化 $ ./migr8.rb init ### ディレクトリが作られる $ ls -F migr8/ history.txt # ← バージョン番号の一覧 migrations/ # ← マイグレーションファイル置き場
  • 14. $ ./migr8.rb new -m "create 'users' table" # or: ./migr8.rb new --table=users $ ls migr8/migrations scjs8350.yaml
  • 15. # -*- coding: utf-8 -*- version: scjs8350 desc: create 'users' table author: alice vars: up: ¦ create table users ( id serial primary key name varchar(255) not null unique, ); down: ¦ drop table users;
  • 16. # -*- coding: utf-8 -*- version: scjs8350 desc: create 'users' table author: alice vars: - table: users up: ¦ create table ${table} ( id serial primary key name varchar(255) not null unique, ); down: ¦ drop table ${table};
  • 17. ### バージョンを上げる $ ./migr8.rb up ### バージョンを戻す $ ./migr8.rb down ### 再実行(戻して、もう一度上げる) $ ./migr8.rb redo ### 現在のバージョンを調べる
 $ ./migr8.rb status # 省略可 ...(snip)...
  • 18. postgres=> dt users; List of relations Schema ¦ Name ¦ Type ¦ Owner --------+-------+-------+------- public ¦ users ¦ table ¦ user1 (1 row) postgres=> select id, version from _migr8_history; id | version --------------- 1 | scjs8350 (1 row) 

  • 19. ### インデックスを追加 $ ./migr8.rb new --index=users.name $ ./migr8.rb up ### テーブルを追加 $ ./migr8.rb new --table=groups $ ./migr8.rb up ### カラムを追加 $ ./migr8.rb new --column=users.group_id
  • 20. $ ./migr8.rb hist scjs8350 2013-11-07 23:01:13 # [john] create 'users' ewwg6691 2013-11-07 23:29:33 # [john] add index gnqc9473 2013-11-07 23:44:29 # [john] create 'groups' spvo5800 (not applied) # [john] add 'group_id' 

  • 21. $ cat migr8/history.txt # -*- coding: utf-8 -*- scjs8350 # [john] create 'users' table ewwg6691 # [john] add index to 'users.name' gnqc9473 # [john] create 'groups' table spvo5800 # [john] add 'group_id' column
  • 22.
  • 23.
  • 24. # -*- coding: utf-8 -*- version: ewwg6691 desc: add index to 'users.name' author: john vars: - table: users - column: name - index: ${users}_${column}_idx up: ¦ create index ${index} on ${table}(${column}); down: ¦ drop index ${index};
  • 25. # -*- coding: utf-8 -*- scjs8350 # [john] create 'users' table ewwg6691 # [john] add index to 'users.name' gnqc9473 # [john] create 'groups' table spvo5800 # [john] add 'group_id' column
  • 26. create table _migr8_history ( id serial primary key , version varchar(40) not null unique , author varchar(40) not null , description varchar(255) not null , up_script text not null , down_script text not null , applied_at timestamp not null default timeofday() );
  • 27.
  • 28. begin; create table ...; insert into _migr8_history ...; create index ...; insert into _migr8_history ...; alter table ...; insert into _migr8_history ...; commit;
  • 29. $ psql -qX -U user1 dbname < migr8/tmp.sql $ rm migr8/tmp.sql
  • 30. psql=> select * from _migr8_history; .... -[ RECORD 23 ]--------------------------------------- id | 101 version | aaaa1111 up_script | create table ...(snip)... down_script | drop table ...(snip)... applied_at | 2014-01-01 12:34:56 -[ RECORD 24 ]--------------------------------------- id | 102 version | bbbb2222 up_script | create index ...(snip)... down_script | index table ...(snip)... applied_at | 2014-01-01 12:34:56 -[ RECORD 25 ]--------------------------------------- ....
  • 31. up: | commit; alter type ... add value; begin;
  • 32.
  • 33.
  • 35.
  • 36. 
 
 # -*- coding: utf-8 -*- scjs8350 # [john] create 'users' ewwg6691 # [john] add index gnqc9473 # [alice] create 'groups' spvo5800 # [alice] add 'group_id' xmss3947 # [john] insert seed data
  • 38.
  • 39. 
 # -*- coding: utf-8 -*- scjs8350 # [john] create 'users' ewwg6691 # [john] add index <<<<<<< HEAD gnqc9473 # [alice] create 'groups' spvo5800 # [alice] add 'group_id' ======= xmss3947 # [john] insert seed data >>>>>>> topicbranch
  • 40.
  • 41.
  • 42. 
 
 $ ./migr8.rb hist scjs8350 2013-11-07 12:01:13 # [john] create 'users' gnqc9473 (not applied) # [alice] create 'groups' spvo5800 (not applied) # [alice] add 'group_id' ewwg6691 2013-11-08 20:29:33 # [john] add index $ ./migr8r.rb apply gnqc9473 spv05800
  • 44.
  • 45. 
 
 $ ./migr8.rb status ## Status: all applied ## Recent history: scjs8350 2013-11-07 12:01:13 # [john] create 'users' gnqc9473 2013-11-07 13:54:20 # [alice] create 'groups' ## !!! The following migrations are applied to DB, ## !!! but files are not found. ## !!! (Try `migr8.rb unapply -x abcd1234` to unapply them.) ewwg6691 2013-11-08 20:29:33 # [john] add index $ ./migr8r.rb unapply -x ewwg6691
  • 48.
  • 49.
  • 51.
  • 52. $ ./migr8.rb readme ## readmeを表示 $ ./migr8.rb help ## ヘルプ $ ./migr8.rb init ## 初期化
  • 53. $ ./migr8.rb new -h ## ヘルプ $ ./migr8.rb new -m "create table" ## 汎用 $ ./migr8.rb new --table=users ## テーブルを作成 $ ./migr8.rb new --column=users.name ## カラムを追加 $ ./migr8.rb new --index=users.name ## 索引を追加 $ ./migr8.rb new --unique=users.name ## 一意制約を追加
  • 54. $ ./migr8.rb up -h ## ヘルプ $ ./migr8.rb up ## 1つだけ適用 (※1) $ ./migr8.rb up -n 3 ## 3つ適用 (※2) $ ./migr8.rb up -a ## 全部適用 (※3) (※1) 未適用のうち最も古いのを1つ適用 (※2) 未適用のうち古い順に3つ適用 (※3) 未適用のものを古い順に全部適用
  • 55. $ ./migr8.rb down -h ## ヘルプ $ ./migr8.rb down ## 1つだけ戻す (※1) $ ./migr8.rb down -n 3 ## 3つ戻す (※2) $ ./migr8.rb down --ALL ## 全部戻す (※3) (※1) 適用済みのうち最も新しいものを1つ戻す (※2) 適用済みのうち新しい順に3つ戻す (※3) 適用済のものを新しい順に全部戻す
  • 56. $ ./migr8.rb redo -h ## ヘルプ $ ./migr8.rb redo ## 1つだけ戻し、再度適用する $ ./migr8.rb redo -n 3 ## 3つ戻し、再度適用する $ ./migr8.rb redo --ALL ## 全部戻し、再度適用する
  • 57. $ ./migr8.rb apply -h ## ヘルプ $ ./migr8.rb apply version ## 指定したのを適用 $ ./migr8.rb apply version1 version2 ... ## 複数指定も可
  • 58. $ ./migr8.rb unapply -h ## ヘルプ $ ./migr8.rb unapply version ## 指定したのを適用 $ ./migr8.rb unapply version1 version2 ... ## 複数指定も可 $ ./migr8.rb unapply -x version ## ファイルがない場合(※) (※) unapply -x は、マイグレーションファイルを使わず、 DB内の履歴テーブルに格納された down 用 SQL を使う。 「適用されているけどファイルがないマイグレーション」を 戻すときはこの方法を使う。
  • 59. $ ./migr8.rb show -h ## ヘルプ $ ./migr8.rb show version ## 内容を表示 (変数展開済) $ ./migr8.rb show ## 直近のバージョンが対象 $ ./migr8.rb show -x version ## DBテーブルから読み込む
  • 60. $ ./migr8.rb edit -h ## ヘルプ $ ./migr8.rb edit version ## ファイルをエディタで開く $ ./migr8.rb edit ## 直近のバージョンが対象 $ ./migr8.rb edit -r N ## N個前のバージョンが対象 $ ./migr8.rb edit -e editor ## エディタを指定 (※1) (※1) デフォルトは $MIGR8_EDITOR で指定される
  • 61. $ ./migr8.rb delete -h ## ヘルプ $ ./migr8.rb delete --Imsure version ## ファイルを削除(※) $ ./migr8.rb delete version ## (これは動作しない) (※) マイグレーションが適用済みならファイルは削除できない。
  • 62. $ ./migr8.rb status -h ## ヘルプ $ ./migr8.rb status ## 直近の5個を表示 $ ./migr8.rb status -n N ## 直近のN個を表示 ##### 実行例:未適用があると教えてくれる $ ./migr8.rb status ## Status: YOU MUST APPLY spvo5800 AT FIRST! ## Recent history: scjs8350 2013-11-07 23:01:13 # [john] create 'users' ewwg6691 2013-11-07 23:29:33 # [john] add index gnqc9473 2013-11-07 23:44:29 # [alice] create 'groups' spvo5800 (not applied) # [alice] add 'group_id' xmss3947 2013-11-08 19:29:33 # [john] insert seed data
  • 63. $ ./migr8.rb hist -h ## ヘルプ $ ./migr8.rb hist ## 履歴を表示 $ ./migr8.rb hist -o ## history.txtをエディタで開く $ ./migr8.rb hist -b ## 順番を保ったまま、
 ## history.txtを作り直す(※) (※) マイグレーションファイル内の摘要(description)と、 history.txt 内のコメントとが一致していないときに使う。