中国吉林大学の研究チームは、通称バッキーボールと呼ばれるサッカーボールのような構造の炭素分子に高い圧力と温度をくわえて崩壊させ、ダイヤモンドよりも硬いカーボンガラスの作成に成功しました。
これは最近報告された「AM-Ⅲ」というカーボンガラスに次いで、世界で2番目に硬いガラスです。
⇧ 「硬度10ダイヤモンドパワー!(悪魔将軍『キン肉マン』)」を超える硬度が実現されていたとは...
ちなみに、
宝石の硬さを示す硬度は「モース」硬度と「ヌープ硬度」の2種類が主に使われています。その中でもより一般的に使われているのは「モース硬度」 という尺度です。
⇧ 宝石は「モース」硬度ってものが使われることが多いそうな。
今回も、「TypeScript」についてです。
レッツトライ~。
Prismaと言う名のORM(Object Relational Mapping)
公式のドキュメントによりますと、
Prisma is an open source next-generation ORM. It consists of the following parts:
⇧ ということで、「次世代のORM」という謳い文句を掲げていらっしゃるのですが、これまでの「TypeScript」の「ORM」を使ったことも無いので、何が違うかが分からんというね...
Prismaを試してみる
とりあえず、公式のドキュメントによりますと、
Getting Started
The Quickstart is based on a preconfigured SQLite database. You can also get started with your own database (PostgreSQL and MySQL) by following one of these guides:
⇧ ということで、どっちかで導入していく感じですかね。
自分の環境では、
⇧ 上記記事で既に「TypeScript」のプロジェクトを作成しているので、「Add Prisma to an existing project」の場合で、試してみます。
で、「PostgreSQL」の場合の「データベース」の接続設定は、
⇧ 上記によりますと、「.env」ファイルの「DATABASE_URL」の値を自分の利用してるデータベースに対する接続設定にすればOKらしい。
■データベースの作成
とりあえず、prisma用にデータベースを作成することにします。
■データベースの接続設定
.envファイルの「DATABASE_URL」の値で設定していく感じのようです。
DATABASE_URL="postgresql://USER:PASSWORD@HOST:PORT/DATABASE?schema=SCHEMA"
自分の場合は、以下のような感じになりました。
■テーブルの作成
テーブルの作成についても、
⇧ SQL文で作成しておく必要があるようです。
作成しておきます。
■schema.prismaの更新
データベースの「schema」と「schema.prisma」の内容を同期させる必要があるようです。
■@prisma/clientのインストールと「prisma.schema」ファイルの同期
「prisma.schema」ファイル側で変更した内容を、「@prisma/client」に反映させるには、「@prisma/client」パッケージをインストールしておく必要があるようです。
「@prisma/client」は実際に、「TypeScript」側で「Prisma」を利用するのに必要ということの模様。
⇧ というイメージ図なんですが、データベースに何か変更があった場合、
という流れになるみたい。
というわけで、「@prisma/client」をインストール。
「node_modules」の「@prisma」に「client」が追加されてます。
とりあえず、試してみる。
import { PrismaClient } from "@prisma/client"; const prisma = new PrismaClient(); async function main() { await prisma.user.create({ data: { name: "Alice", email: "alice@prisma.io", Post: { create: { title: "Hello World" }, }, Profile: { create: { bio: "I like turtles" }, }, }, }); const allUsers = await prisma.user.findMany({ include: { Post: true, Profile: true, }, }); console.dir(allUsers, { depth: null }); } main() .catch((e) => { throw e; }) .finally(async () => { await prisma.$disconnect(); });
⇧ 各テーブルに登録もされてるようです。
う~ん、
⇧ 用意されてるメソッドを利用していく感じとは思うんだけど、
- Prismaはスキーマを記述するDSLに制限があってさらにつらいですね。しかもコア部分がRustで書かれていて、Escape hatcheが用意されていないです。Prismaの思想は、「provide an abstraction layer that makes you more productive compared to writing SQL」なのでこの辺は今後も期待できなさそうですね。
https://tech.hicustomer.jp/posts/type-safe-sql-library-for-nodejs/
⇧ 上記サイト様によりますと、かなり制限がある模様...
「TypeScript」でデータベースを扱うよりは、「Java」「C#」「PHP」「Python」などのようなサーバーサイド言語側でデータベースを扱ったほうが良いのかな?
毎度モヤモヤ感が半端ない...
今回はこのへんで。