mysql2を使用してTiDBに接続します。
TiDBはMySQL互換のデータベースであり、 mysql2はRubyで最も人気のあるMySQLドライバの1つです。
このチュートリアルでは、TiDBとmysql2を使用して以下のタスクを実行する方法を学ぶことができます。
- 環境をセットアップしてください。
- mysql2を使用してTiDBに接続します。
- アプリケーションをビルドして実行します。オプションで、基本的な CRUD 操作用のサンプルコードスニペットを見つけることができます。
注記:
このチュートリアルは、 TiDB Cloud Starter、 TiDB Cloud Essential、 TiDB Cloud Dedicated、およびTiDB Self-Managedに対応しています。
前提条件
このチュートリアルを完了するには、以下が必要です。
TiDBクラスタをお持ちでない場合は、以下の手順で作成できます。
TiDBに接続するには、サンプルアプリを実行してください。
このセクションでは、サンプルアプリケーションコードを実行してTiDBに接続する方法を説明します。
ステップ1:サンプルアプリのリポジトリをクローンする
サンプルコードリポジトリをクローンするには、ターミナルウィンドウで以下のコマンドを実行してください。
git clone https://github.com/tidb-samples/tidb-ruby-mysql2-quickstart.git
cd tidb-ruby-mysql2-quickstart
ステップ2:依存関係をインストールする
サンプルアプリに必要なパッケージ( mysql2およびdotenvを含む)をインストールするには、次のコマンドを実行します。
bundle install
既存プロジェクトの依存関係をインストールする
既存のプロジェクトの場合、以下のコマンドを実行してパッケージをインストールしてください。
bundle add mysql2 dotenv
ステップ3:接続情報の設定
選択したTiDBのデプロイオプションに応じて、TiDBに接続してください。
私のTiDBページに移動し、対象のTiDB Cloud StarterまたはEssentialインスタンスの名前をクリックして、概要ページに移動します。
右上隅の「接続」をクリックしてください。接続ダイアログが表示されます。
接続ダイアログの設定がご使用のオペレーティング環境と一致していることを確認してください。
- 接続タイプは
Publicに設定されています。 - ブランチは
mainに設定されています。 - 「接続」は
Generalに設定されています。 - オペレーティングシステムは、アプリケーションを実行するオペレーティングシステムと一致します。
- 接続タイプは
まだパスワードを設定していない場合は、 「パスワードを生成」をクリックしてランダムなパスワードを生成してください。
.env.exampleをコピーして.envに名前を変更するには、次のコマンドを実行します。cp .env.example .env.envファイルを編集し、環境変数を以下のように設定し、接続ダイアログで対応するプレースホルダー{}を接続パラメータに置き換えます。DATABASE_HOST={host} DATABASE_PORT=4000 DATABASE_USER={user} DATABASE_PASSWORD={password} DATABASE_NAME=test DATABASE_ENABLE_SSL=true注記
TiDB Cloud StarterおよびTiDB Cloud Essentialの場合、パブリック エンドポイントを使用する際には
DATABASE_ENABLE_SSLを介して TLS 接続を有効にする必要があります。.envファイルを保存します。
私のTiDBページに移動し、対象のTiDB Cloud Dedicatedクラスタの名前をクリックして概要ページに移動します。
右上隅の「接続」をクリックしてください。接続ダイアログが表示されます。
接続ダイアログで、「接続タイプ」ドロップダウンリストから「パブリック」を選択し、 「CA証明書」をクリックしてCA証明書をダウンロードします。
IP アクセス リストを設定していない場合は、最初の接続の前に、 [IP アクセス リストの設定] をクリックするか、「IP アクセス リストを設定する」の手順に従ってIPアクセスリストを設定する。
TiDB Cloud Dedicated は、パブリック接続タイプに加えて、プライベート エンドポイントおよびVPC ピアリング接続タイプもサポートしています。詳細については、 TiDB Cloud Dedicatedクラスタに接続します参照してください。
.env.exampleをコピーして.envに名前を変更するには、次のコマンドを実行します。cp .env.example .env.envファイルを編集し、環境変数を以下のように設定し、接続ダイアログで対応するプレースホルダー{}を接続パラメータに置き換えます。DATABASE_HOST={host} DATABASE_PORT=4000 DATABASE_USER={user} DATABASE_PASSWORD={password} DATABASE_NAME=test DATABASE_ENABLE_SSL=true DATABASE_SSL_CA={downloaded_ssl_ca_path}注記
TiDB Cloud Dedicatedクラスタへの接続にパブリックエンドポイントを使用する場合は、TLS接続を有効にすることをお勧めします。
TLS接続を有効にするには、
DATABASE_ENABLE_SSLをtrueに変更し、DATABASE_SSL_CAを使用して、接続ダイアログからダウンロードしたCA証明書のファイルパスを指定します。.envファイルを保存します。
.env.exampleをコピーして.envに名前を変更するには、次のコマンドを実行します。cp .env.example .env.envファイルを編集し、環境変数を以下のように設定し、対応するプレースホルダー{}を独自の TiDB 接続情報に置き換えてください。DATABASE_HOST={host} DATABASE_PORT=4000 DATABASE_USER={user} DATABASE_PASSWORD={password} DATABASE_NAME=testTiDBをローカルで実行している場合、デフォルトのホストアドレスは
127.0.0.1で、パスワードは空です。.envファイルを保存します。
ステップ4:コードを実行して結果を確認する
サンプルコードを実行するには、以下のコマンドを実行してください。
ruby app.rb
接続が成功すると、コンソールには次のようにTiDBのバージョンが出力されます。
🔌 Connected to TiDB cluster! (TiDB version: 8.0.11-TiDB-v8.5.4)
⏳ Loading sample game data...
✅ Loaded sample game data.
🆕 Created a new player with ID 12.
ℹ️ Got Player 12: Player { id: 12, coins: 100, goods: 100 }
🔢 Added 50 coins and 50 goods to player 12, updated 1 row.
🚮 Deleted 1 player data.
サンプルコードスニペット
以下のサンプルコードスニペットを参考に、独自のアプリケーション開発を完成させてください。
完全なサンプルコードと実行方法については、 tidb-samples/tidb-ruby-mysql2-quickstartリポジトリを参照してください。
接続オプションを使用してTiDBに接続します
以下のコードは、環境変数で定義されたオプションを使用してTiDBへの接続を確立します。
require 'dotenv/load'
require 'mysql2'
Dotenv.load # Load the environment variables from the .env file
options = {
host: ENV['DATABASE_HOST'] || '127.0.0.1',
port: ENV['DATABASE_PORT'] || 4000,
username: ENV['DATABASE_USER'] || 'root',
password: ENV['DATABASE_PASSWORD'] || '',
database: ENV['DATABASE_NAME'] || 'test'
}
options.merge(ssl_mode: :verify_identity) unless ENV['DATABASE_ENABLE_SSL'] == 'false'
options.merge(sslca: ENV['DATABASE_SSL_CA']) if ENV['DATABASE_SSL_CA']
client = Mysql2::Client.new(options)
注記
TiDB Cloud StarterおよびTiDB Cloud Essentialの場合、パブリック エンドポイントを使用する際には
DATABASE_ENABLE_SSLを介して TLS 接続を有効にする必要があります**が**、mysql2 gem が特定の順序で既存の CA 証明書を検索してファイルが見つかるまで検索するため、DATABASE_SSL_CAを介して SSL CA 証明書を指定する必要はありません。
データを挿入する
次のクエリは、2 つのフィールドを持つ単一のプレーヤーを作成し、 last_insert_idを返します。
def create_player(client, coins, goods)
result = client.query(
"INSERT INTO players (coins, goods) VALUES (#{coins}, #{goods});"
)
client.last_id
end
詳細については、データを挿入するを参照してください。
クエリデータ
以下のクエリは、IDで指定された特定のプレイヤーのレコードを返します。
def get_player_by_id(client, id)
result = client.query(
"SELECT id, coins, goods FROM players WHERE id = #{id};"
)
result.first
end
詳細については、 クエリデータを参照してください。
データの更新
以下のクエリは、IDで指定された特定のプレイヤーのレコードを更新しました。
def update_player(client, player_id, inc_coins, inc_goods)
result = client.query(
"UPDATE players SET coins = coins + #{inc_coins}, goods = goods + #{inc_goods} WHERE id = #{player_id};"
)
client.affected_rows
end
詳細については、データの更新を参照してください。
データを削除する
以下のクエリは、特定のプレイヤーのレコードを削除します。
def delete_player_by_id(client, id)
result = client.query(
"DELETE FROM players WHERE id = #{id};"
)
client.affected_rows
end
詳細については、データを削除するを参照してください。
ベストプラクティス
デフォルトでは、mysql2 gem は、ファイルが見つかるまで特定の順序で既存の CA 証明書を検索できます。
- Debian、Ubuntu、Gentoo、Arch、またはSlackwareの場合
/etc/ssl/certs/ca-certificates.crt /etc/pki/tls/certs/ca-bundle.crtは RedHat、Fedora、CentOS、Mageia、Vercel、または Netlify 用です。- OpenSUSE 用
/etc/ssl/ca-bundle.pem /etc/ssl/cert.pemmacOS または Alpine (Docker コンテナ)
CA証明書のパスを手動で指定することも可能ですが、異なるマシンや環境によってCA証明書の保存場所が異なる可能性があるため、複数の環境に展開するシナリオでは大きな不便が生じる可能性があります。そのため、柔軟性と異なる環境への展開の容易性を考慮して、 sslcaをnilに設定することをお勧めします。
次のステップ
- mysql2 ドライバーの使用法について詳しくはmysql2 のドキュメントご覧ください。
- 開発者ガイドデータを挿入する、データの更新データを削除するSQL 取引SQLパフォーマンス最適化などの章を読んクエリデータ、TiDB アプリケーション開発のベスト プラクティスを学びましょう。
- プロフェッショナルなTiDB開発者向けコースコースを通じて学習し、試験に合格するとTiDB認定資格を取得します。
お困りですか?
- 不和or スラックコミュニティに質問してください。
- TiDB Cloudのサポートチケットを送信してください
- TiDB Self-Managedのサポートチケットを送信してください