The Codest
  • 会社概要
  • サービス
    • ソフトウェア開発
      • フロントエンド開発
      • バックエンド開発
    • Staff Augmentation
      • フロントエンド開発者
      • バックエンド開発者
      • データエンジニア
      • クラウドエンジニア
      • QAエンジニア
      • その他
    • アドバイザリー
      • 監査&コンサルティング
  • 産業
    • フィンテック&バンキング
    • E-commerce
    • アドテック
    • ヘルステック
    • 製造業
    • 物流
    • 自動車
    • アイオーティー
  • 価値
    • CEO
    • CTO
    • デリバリー・マネージャー
  • チーム
  • Case Studies
  • ノウハウ
    • ブログ
    • ミートアップ
    • ウェビナー
    • リソース
採用情報 連絡先
  • 会社概要
  • サービス
    • ソフトウェア開発
      • フロントエンド開発
      • バックエンド開発
    • Staff Augmentation
      • フロントエンド開発者
      • バックエンド開発者
      • データエンジニア
      • クラウドエンジニア
      • QAエンジニア
      • その他
    • アドバイザリー
      • 監査&コンサルティング
  • 価値
    • CEO
    • CTO
    • デリバリー・マネージャー
  • チーム
  • Case Studies
  • ノウハウ
    • ブログ
    • ミートアップ
    • ウェビナー
    • リソース
採用情報 連絡先
戻る矢印 戻る
2016-07-09
ソフトウェア開発

複数のブランチにまたがるデータベース構造の管理

トマシュ・コワレフスキ

アプリの開発は、新しい機能の実装やパッチの適用だけを意味するわけではない。時には変更を元に戻し、プロジェクトの前の段階に戻らなければならないこともある。複数のブランチにまたがって作業しているときに頻繁に発生する問題は、データベース構造の適切なバージョンを維持することです。railsを使用するプログラマーは、自由に使える既製のソリューションを持っています。これらのソリューションは、データベースの変更の実装と制御をサポートします。ここでは、マイグレーションがどのように機能し、どのような可能性をもたらすかについては説明しません。

アプリのデータベースレイヤーは独立した存在であり、マイグレーションによってのみ制御される。新しいマイグレーションを作成する際には、データベース構造の計画された変換を可逆的なものにすることを忘れないでください。もちろん、極端なケースでは 不可逆マイグレーション での ダウン method. This will also inform us about the fact that the migration cannot be reversed. There are different types of changes that we make in the migration – creating, modifying and removing tables, columns or indexes. Deleting and modifying operations are the most sensitive to change. Why? Let’s consider the following scenario:We are working with the master branch, which is our main working path. Currently we have one table:

 class CreateArticles < ActiveRecord::Migration
   def change
     create_table :articles do |t|
       t.string :名前
       t.text :説明
       t.string :status, null: false
       t.タイムスタンプ null: false
     終了
   終了
 終了

私たちの 記事 モデルにはこのようなバリデーションがある。 名称, 記述 そして ステータス の属性を持つ。

 class Article < ActiveRecord::Base
   validates :name, presence: true
   validates :description, presence: true
   validates :status, presence: true
 終了

私たちは、このような変更を実施している。 記事 テーブル 特徴 開発ブランチを削除し ステータス コラム

 クラス RemoveStatusColumnFromArticles < ActiveRecord::Migration
   def change
     remove_column :articles, :status, :string
   終了
 終了

我々は移行を実行する:

 $ [example/feature]: bundle exec rake db:migrate
 
 -- remove_column(:articles, :status, :string)
   -> 0.0717s

データベースのスキーマが変更される:

diff --git a/db/schema.rb b/db/schema.rb
index 2a100a9..76438c1 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -11,14 +11,13 @@ #

このファイルをバージョン管理システムにチェックインすることを強く推奨する。

-ActiveRecord::Schema.define(version: 20150605120350) do
+ActiveRecord::Schema.define(version: 20150605120955) do
  createtable "articles", force: :cascade do |t|.
    t.string "名前"
    t.string "description"
- t.string "status", null: false t.datetime "createdat", null: false
    t.datetime "updated_at", null: false
  終了

終了

次に、変更を 特徴 ブランチに切り替える。この問題をシミュレートするために、現在のブランチをmasterに切り替えます。マイグレーションによって基本構造が変更され ステータス 列の 特徴 ブランチ。次のコマンドを使ってみよう:

Article.create!(name: "Kaboom", description: "Loremipsum...", status: "active")

上記を実行するとどうなるか コード?エラーです: ActiveRecord::UnknownAttributeError: Article の属性 'status' が不明です。 これはデータベースの構造バージョンに互換性がないためです。ブランチをマスターに変更する前に、マイグレーションをロールバックする必要があります。 ステータス 列から 記事 テーブル

ブランチを切り替える前に、移行をロールバックする必要があるかどうかを確認するためには、どうすればいいでしょうか?バージョン管理システム(ここでは ギット)役に立つエイリアスを作ることで、自分たちの仕事をチェックすることができる:

 ~/.gitconfig
 [エイリアス]
  migrations = "!f() { git diff --name-only $1..$2 db/migrate | tr -d '[A-Za-z/_.]'; }; f".

を実行する。 gitマイグレーション・マスター機能 コマンドを実行すると、移行バージョンのリストが表示される。 特徴 で見つけることができない。 マスター.

 $ [example/feature]: git migrations マスター機能
 20150605120955

この情報のおかげで、マスターに切り替える前にデータベース構造で行われた変更を簡単にロールバックすることができる。

 $ [example/feature]: bundle exec rake db:migrate:down VERSION=20150605120955
 
 -- add_column(:articles, :status, :string)
   -> 0.0009s

マイグレーションをロールバックした後にすべきもう一つのことは、データベーススキーマのステータスをリストアすることである。

$ [example/feature]: git status
ブランチ機能
コミット用にステージされていない変更:
 (コミットする内容を更新するには "git add ..." を使う)
 (作業ディレクトリの変更を破棄するには "git checkout -- ..." を使う)

変更: db/schema.rb

コミットに変更は追加されません("git add" や "git commit -a" を使用します)。
$ [example/feature]: git checkout db/schema.rb
$ [例/機能]: git ステータス
ブランチ機能
コミットするものがありません。

これで簡単に マスター ブランチだ。

この例題は複雑な問題ではないが、データベースの構造を維持することがいかに重要かを理解するのに役立つだろう。

関連記事

上昇する矢印とコスト効率や節約を象徴する金貨が描かれた減少する棒グラフの抽象的なイラスト。左上にはThe Codestのロゴと、ライトグレーの背景に "In Code We Trust "のスローガン。
ソフトウェア開発

製品の品質を落とさずに開発チームを拡大する方法

開発チームの規模を拡大中ですか?製品の品質を犠牲にすることなく成長する方法を学びましょう。このガイドでは、スケールする時期、チーム構成、採用、リーダーシップ、ツールなどの兆候に加え、The Codestがどのように...

ザ・コデスト
ソフトウェア開発

将来を見据えたウェブ・アプリケーションの構築:The Codestのエキスパート・チームによる洞察

The Codestが、最先端技術を駆使してスケーラブルでインタラクティブなウェブアプリケーションを作成し、あらゆるプラットフォームでシームレスなユーザー体験を提供することにどのように秀でているかをご覧ください。The Codestの専門知識がどのようにデジタルトランスフォーメーションとビジネス...

ザ・コデスト
ソフトウェア開発

ラトビアを拠点とするソフトウェア開発企業トップ10社

ラトビアのトップソフトウェア開発企業とその革新的なソリューションについて、最新記事でご紹介します。ラトビアの技術リーダーたちがあなたのビジネスをどのように向上させるかをご覧ください。

thecodest
エンタープライズ&スケールアップ・ソリューション

Javaソフトウェア開発の要点:アウトソーシングを成功させるためのガイド

outsourcingのJavaソフトウェア開発を成功させるために不可欠なこのガイドを読んで、The Codestで効率性を高め、専門知識にアクセスし、プロジェクトを成功に導きましょう。

thecodest
ソフトウェア開発

ポーランドにおけるアウトソーシングの究極ガイド

ポーランドのoutsourcingの急増は、経済、教育、技術の進歩がITの成長とビジネス・フレンドリーな環境を促進していることによる。

ザ・コデスト

ナレッジベースを購読して、IT部門の専門知識を常に最新の状態に保ちましょう。

    会社概要

    The Codest - ポーランドに技術拠点を持つ国際的なソフトウェア開発会社。

    イギリス - 本社

    • オフィス 303B, 182-184 High Street North E6 2JA
      イギリス、ロンドン

    ポーランド - ローカル・テック・ハブ

    • ファブリチュナ・オフィスパーク、アレハ
      ポコジュ18、31-564クラクフ
    • ブレイン・エンバシー, コンストルクトースカ
      11, 02-673 Warsaw, Poland

      The Codest

    • ホーム
    • 会社概要
    • サービス
    • Case Studies
    • ノウハウ
    • 採用情報
    • 辞書

      サービス

    • アドバイザリー
    • ソフトウェア開発
    • バックエンド開発
    • フロントエンド開発
    • Staff Augmentation
    • バックエンド開発者
    • クラウドエンジニア
    • データエンジニア
    • その他
    • QAエンジニア

      リソース

    • 外部ソフトウェア開発パートナーとの協力に関する事実と神話
    • 米国から欧州へ:アメリカの新興企業がヨーロッパへの移転を決断する理由
    • テックオフショア開発ハブの比較:テックオフショア ヨーロッパ(ポーランド)、ASEAN(フィリピン)、ユーラシア(トルコ)
    • CTOとCIOの課題は?
    • The Codest
    • The Codest
    • The Codest
    • Privacy policy
    • ウェブサイト利用規約

    Copyright © 2026 by The Codest. All rights reserved.

    jaJapanese
    en_USEnglish de_DEGerman sv_SESwedish da_DKDanish nb_NONorwegian fiFinnish fr_FRFrench pl_PLPolish arArabic it_ITItalian es_ESSpanish nl_NLDutch etEstonian elGreek jaJapanese