ORMdrizzletechはじめにこんにちは。ORMの概要やマイグレーションの仕組み構築について書いてきました。ORMを運用する中で直面した課題とその解決策を一部紹介できればと思います。実際に運用で使われている方や、これから使ってみたいからどんな課題や解決方法があるのかを事前にチェックしておきたい人向けに書いています!概要や導入方法については前回の記事を参照ください。今回は以下の課題について見ていきます。employee_performance_reviewsとperformance_metricsの二つのテーブルがあったとします。(適当に考えました)従業員のパフォーマンスレビューの記録と、パフォーマンス評価の指標が格納されるテーブルです。employee_performance_reviewsテーブルはperformance_metricsテーブルのidを参照する外部キーを持っているとします。この場合、通常の外部キー制約の書き方で書くと以下のようになります。わかりやすくするため最低限のカラム定義で書きます。int("id").primaryKey().autoincrement(),});外部キー制約の記述についてのドキュメントhttps://orm.drizzle.team/docs/indexes-constraints#foreign-keyこの定義のもと作られる外部キーの文字数は76文字となり、MySQLの制約の文字数である64文字を超えてしまい、以下のような指摘が返されます。long以前railsを使っていた時にも同様なエラーに直面したことがあったことを思いだしました。ORMでは以下のようにして独自に外部キーの設定を行うことができ、名前も自分でつけることができるようになります。要は自動で作ってもらっていたのを手動で定義して作りましょうということです。int("id").primaryKey().autoincrement(),});【公式ドキュメント】外部キー制約に独自で名前をつける書き方これで制約の文字数制限を解消できました!トランザクションの処理の中で、生成したレコードのidを使用したい場合トランザクション処理をしていて、作成したレコードのidを使いたい場合があるかと思います。その際のシンプルな書き方があったので紹介します。最初に、普通に書いた場合の例は以下のようになります。user[0].insertId);}以下はclientsというテーブルで試した例ですが、insertによって返されるオブジェクトはこのようになっています。上記のように書いても問題はないですが、$returningId()を使うとinsertの結果でinsertIdが取得できるため簡潔に書くことができます。変数idに、insertしたusersのidが格納されている});【参考】$returningIdについてなお、$returningId()はMySQLドライバの時だけ使用でき、PostgreSQLもしくはSQLiteを使用しているときは、returningとして特定のカラムを返す書き方が使えます。以下の場合はidを持ったuserオブジェクトが取得できています。});他のカラムも欲しい場合は以下のようにすることで、追加したカラムを持つuserオブジェクトを返すことができます。});【参考】returningについてこれで簡潔なトランザクションを書くことができるようになります。seedの仕組みって本当にないのか?改めて公式を見てみましたが、現時点で公式提供のものはありません。いうpackageが今後リリースされる予定と書かれていました👀https://orm.drizzle.team/docs/kit-seed-data前回の記事ではseed.tsを作ってseedデータのクエリを書いてtsxで実行するように構築しました。調べてみるとyoutubeでも同様に書かれている人がいました。こちらの方はテーブルごとにseedファイルを作成し、それを一つのファイルにまとめて実行コマンドを打つというやり方をされています。`https://www.youtube.com/watch?v=vyU5mJGCJMw&t=3140sではこのやり方以外にはないのかというと、公式から手動でカスタムマイグレーションファイルを作成してそこにseedデータを投入する記述を書いてgenerete→migrateするといいよと書かれていました。https://orm.drizzle.team/docs/kit-custom-migrationsこのやり方でもいいかと思います。generate→migrateを使わずpushを使っている場合はこのフローは使用できないので、この場合はやはりseed.tsを使って実行コマンドに組み込むのが良いかなという現状ですね。studioという便利なデータベース管理ツールが用意されています。https://orm.drizzle.team/drizzle-studio/overviewドキュメントにもある通り、既にデータベースの設定が済んでいればすぐに使えるようになるのでおすすめです。シンプルで見やすく使いやすい点がおすすめです。Drizzleの軽量さが現れているようで個人的に好きです。最近drizzle公式のドキュメントが大幅に改良されて、図解や説明が前よりも分かりやすくなってい流ように感じます。何ができるのかを調べるときに公式ドキュメントを見るのが1番分かりやすいかもしれません。全部に目を通すのは余程余裕がないと難しいと思うので、今回のような記事でかいつまんでトピックを拾っていただいて詳細を追っていただくといいのかなと思います。ここまで読んでいただきありがとうございました!何か学びになれましたら幸いです。より固定トリドリのプロダクト開発部では通年採用を実施しています!ユーザの幸せについて真剣に議論したり、「やってみたい」で新しい技術に挑戦をしてみたり、気づいたら30分雑談していたり、ゆるく真面目に開発しています。blogPublication株式会社トリドリのEngineeringに関わる人が更新していくPublicationです。Proよくある質問LinksX(Twitter)GitHubメディアキットLegal利用規約プライバシーポリシ。