
2025.04.01
「学びを仕事に活かせ」はリスキリングの禁句 パーソル総研・上席主任研究員が語る、経営者が陥りがちな誤解
diselを活用してSQLを作成しよう(全1記事)
リンクをコピー
記事をブックマーク
ダンヒョンジュン氏(以下、ダン):それでは、私のから発表させていただきます。「dieselを活用してSQLを作成しよう」という話題として、ORMの1つである「Diesel」を紹介したいと思っています。
では、パイオニア株式会社のダンヒョンジュンから発表します。簡単な流れです。自己紹介はもう終わっているので飛ばしますね。次はDieselとは何かということと、Dieselで開発して良かったこと、辛かったこと。あとはDieselの実装の簡単な例。あとは最後の一言という流れになります。
言っておきたいことです。私は2023年4月から初めてRustを使ってDieselを経験してきたので、短い経験ですが、「私でもこういうのを感じた」ということを伝えられたらと思います。
まず「Dieselとは何か?」というと、RustのORMライブラリの1つです。「ORMとは何か?」というと、Object-Relational Mapping、つまりRustでSQLを扱うためのツールの1つです。
RustにはいろいろなORMのライブラリが存在しますが、その中でDieselは一番の割合を示しているものです。それによって得られる良いこととしては、ドキュメントが世の中にいっぱい存在する、参考になるものがものすごく多いことが1つの良いところではないかなと、信頼性がある程度あるのではないかなということですね。
実際に私がDieselを触ってみてちょっと感じたこととか、辛かったことの紹介をします。
まず特徴としては、型安全性を持っていて、クエリをコンパイルする際に検査を行ってくれます。同じ型安全性という特徴があるRustと相性が良いのではないかなと思っていました。
あとはマクロの機能があります。(スライドを示して)これもそうなんですが、コンパイル時に自動でマイグレーションを行って、クエリを作成してくれるんですよね。それによって手間がかからないというのがありました。
あとは、トランザクションと複数のクエリを一連の操作としてグループ化してくれたり、マイグレーションで、データベーススキーマを変更するための安全で簡単な方法を提供してくれたりすることもあります。
(スライドを示して)こちらの表ですが、ORM(について)で、最近だと2つの中で選ぶのではないかな。Dieselと「SeaORM」という、もう1つのORMのライブラリがあります。それぞれの特徴があって、(SeaORMには)Dieselでは対応していないデータベースエンジンもあったりします。
私としてはDieselがおすすめなんですが、これに何て書いてあるかというと、初心者としてはけっこうチャレンジ的なライブラリであるということで、初心者の方は勉強しなければいけないこともけっこうあったりするのもあり、コミュニティのサポートが確立しています。機能とパフォーマンス面ではけっこうこなれているライブラリかなと思っています。
実際にDieselを使ってみて良かった点をいくつか紹介したいと思います。
先ほども言ったとおり、参考にする資料がとても多いです。私みたいな初心者は、なんかうまくいかなかった時とか、最初に導入する時には、ネットとかで情報を調べたり、ドキュメントを参考にすることが多いんですが、Dieselは多くの方が利用されているライブラリなので、参考にする資料がとても多いのは良いところ、長所になるのではないかと思っております。
あとはマイグレーションを行う時に、外部制約のスキーマを自動で生成してくれるので、作成する手間がありません。それによってJOINとかもとても簡単にできています。
(スライドを示して)具体例のコードですが、INNER JOINを行う時にはONとかの指定が必要ですが、Dieselでは要らないと思います。
あとは、簡単に更新用の構造体の定義ができて……。まぁ更新用だけではないんですが、いろいろな構造体の定義ができて、プライマリキーによる特定も可能です。
(スライドを示して)例えばこちらのコードですが、「Queryable」は「クエリができるよ」という意味で、「Identifiable」は、「プライマリキーによる特定が可能だよ」という定義を指定します。そうすると、プライマリキーによって、テーブルの中で特定ができるようになります。
あとは「AsChangeset」という定義が指定されているんですが、こちらは「更新用の構造体ですよ」という意味ですね。これによってこの構造体は更新用で使われていることがわかって、実際に使う時にも「update」、更新用でこの構造体を利用して使うことができます。
一方、やはり弱点もあります。実際に触ってみて、Dieselは強力な拡張可能なツールですが、初めて使うにはやはり勉強することもたくさん存在するかもしれないということを実感しました。
あとは、自動で生成されたり、必要になるコードの量がけっこう多いので、実際に書いてみると実感できると思いますが、膨大なプロジェクトでは可読性がちょっと落ちるかもしれないです。
あとは、プロシージャおよびトリガーサポート、またはデータベースのエンジンのサポートには、一部限界が存在しているということです。こういう弱点も存在しています。
次は簡単な実装の例です。準備などはDieselの公式のドキュメントに細かく書いてあるので、そちらを参考にしてもらえればと思います。
(スライドを示して)こちらもDBの接続をする時のコードの例になります。
こちらがモデルの定義の例です。一応、スキーマのファイルの中では、マイグレーションを行う時、コンパイルの際に自動でスキーマが生成されます。なので、こちらに関しては実際に(自分の手で)書くことはほとんどなく、簡単にできるかなと思っています。
こちらを参考にして実際のモデルのコードを作成します。その際に、「Queryable」「Selectable」「Insertable」「AsChangeset」みたいに、何に使う構造体であるのかを定義します。
その次は、実際の簡単な例です。(スライドを示して)SELECT文だと、例えばこのようなSQL文があるとしたら、先ほど言ったとおり、「Selectable」と定義した構造体を使ってフィルターを絞って、「load」というメソッドを使って、SELECTを行います。
INSERTも同じく構造体を定義する際に、「Insertable」という名前で定義を行います。そうすると、「こちらはINSERTに使う構造体ですよ」という意味になり、Dieselの「insert_into」というメソッドを使ってINSERTできるようになります。
次はUPDATE、更新です。更新も同じく構造体の定義が必要で、その時は先ほどの「AsChangeset」という名前で構造体を定義します。その後、対象をフィルタリング関数を使って絞って、「set」で更新の値を入れて更新するかたちになります。
DELETEに関しましては「delete」のメソッドを使って、対象を絞って、フィルタリング関数を使ってDELETEを行います。
フィルタリングの関数に関しても、とてもいろいろなケースに応じて全部用意されているので、とても使いやすかったなと思っています。
そのほか、項目の数がものすごく多くなったり、SQL文がすごく複雑になったり、型がうまくサポートされていないものも存在したんですが、その際にはSQL文を直接叩かないといけなかったので、「sql_query」を使って実装を行っていました。
(スライドを示して)「sql_query」の使い方はこちらになります。このようにSQL文を直接書いて、「?」のところにバインドを行います。型、値のかたちでバインドを行って、実装を行います。
最後の一言です。やはり開発者としては、Dieselが良いというよりは、プロジェクトの要件とチームの技術的な好みに基づいて適切なORMツールを選択する必要があって、それが一番大事かなと思っています。
その中で、今回紹介したDieselが1つの例になって、参考になればいいかなと思っています。
以上です。ご清聴ありがとうございました。
関連タグ:
2025.03.25
減点を恐れてモチベ低下、果ては離職も… あらゆる“会社の害虫”を大繁殖させる「ラスボス」の正体
2025.03.24
最悪の場合、組織を死に至らせる“会社の害虫”とは 誤った意思決定や品質不祥事を招く要因
2023.02.13
小6で「ヤマギシ会」に入り、23歳まで子どもだけで集団生活 「お金が存在しない」コミューン育ちの青年が社会に出て知ったこと
2025.03.25
ムダな仕事がなくならない“マッチョな職場”を変えるには 近年の過度な「KPI主義」が組織に与えた影響
2025.03.27
交渉で「落としどころを探る」という考えは捨てるべき プロが教える、チャンスを逃さない条件交渉のコツ
2025.03.19
組織をダメにする“害虫”の正体は間違った思い込み AIやDXなど手段のみにこだわるダメ上司の見極め方
2025.03.24
気づけばモラル崩壊……人材育成に無頓着な企業の末路 業績アップや採用にもつながる“人への投資”の重要性
2025.03.21
マネージャーの「自分でやったほうが早い」という行動で失うもの 効率・スピード重視の職場に足りていない考え方
2025.03.21
査定時期に上司から1年前の失敗を指摘される理不尽 変えられない過去を議論する「成果主義」の弊害
2025.01.07
1月から始めたい「日記」を書く習慣 ビジネスパーソンにおすすめな3つの理由
2025.03.25
減点を恐れてモチベ低下、果ては離職も… あらゆる“会社の害虫”を大繁殖させる「ラスボス」の正体
2025.03.24
最悪の場合、組織を死に至らせる“会社の害虫”とは 誤った意思決定や品質不祥事を招く要因
2023.02.13
小6で「ヤマギシ会」に入り、23歳まで子どもだけで集団生活 「お金が存在しない」コミューン育ちの青年が社会に出て知ったこと
2025.03.25
ムダな仕事がなくならない“マッチョな職場”を変えるには 近年の過度な「KPI主義」が組織に与えた影響
2025.03.27
交渉で「落としどころを探る」という考えは捨てるべき プロが教える、チャンスを逃さない条件交渉のコツ
2025.03.19
組織をダメにする“害虫”の正体は間違った思い込み AIやDXなど手段のみにこだわるダメ上司の見極め方
2025.03.24
気づけばモラル崩壊……人材育成に無頓着な企業の末路 業績アップや採用にもつながる“人への投資”の重要性
2025.03.21
マネージャーの「自分でやったほうが早い」という行動で失うもの 効率・スピード重視の職場に足りていない考え方
2025.03.21
査定時期に上司から1年前の失敗を指摘される理不尽 変えられない過去を議論する「成果主義」の弊害
2025.01.07
1月から始めたい「日記」を書く習慣 ビジネスパーソンにおすすめな3つの理由