1. The Perfect Introvert
  2. SP15-2 2020 年代のライブラリ..
2022-12-17 30:55

SP15-2 2020 年代のライブラリ Prisma w/ usami

Usami さんをゲストに迎えて、ソフトウェア工学者、TypeScript、Prisma、Django Congress JP 2022 などについて話しました。


全5回の第2回です。続きは2022/12/24に公開予定です。


ソフトウェア工学者


TypeScript、プレインテキストのパース


プログラミング言語


Node.js Prisma


Django Congress JP 2022


※この番組は2022年11月17日に収録しました。



パーソナリティへの質問、コメントなどは下記の Google Form から投稿ください。


お便り投稿フォーム: https://forms.gle/xrLC4nny2PKA9AXC7



---

Send in a voice message: https://anchor.fm/tak428k/message

This is a public episode. If you would like to discuss this with other subscribers or get access to bonus episodes, visit tak428k.substack.com
00:00
なんか全然違う話ですけど、ケント・ベック繋がりではあるけど、ちょっと違う話で。
けっこうケント・ベックとか、他にもちょっとパッと名前出てこないけど、
そんなアジャイルソフトウェア宣言に関わったソフトウェア工学者っていっぱいいるじゃないですか。
はいはい。
まあそういう人が書いた本とかってあるんだけど、案外読んでないですよね。
それこそケント・ベックだとテスト駆動開発とか、マーティン・ファウラーさんだっけ?のリファクタリングとか、知ってはいるけど読んではないなみたいな。
私けっこうその辺りの本好きで大体読んでます。
そうなんですね。
テスト駆動開発とリファクタリング、あとボブおじさん、アンクルボブのクリーンコードとか。
いわゆる名長みたいに言われてる人だったり、あの辺りっていうとちょっと語弊があるけど、
いわゆるソフトウェア工学の第一人者的、第一人者っていうとまた語弊があるけど、
いわゆるソフトウェアエンジニアが思い浮かべるソフトウェア工学者たちのことって、
人によっては全然知らなかったりするじゃないですか。
そうですね。
この辺けっこう温度差を感じるときはありますね。
確かに。ソフトウェアエンジニアの中でもってことですよね。
そうですそうです。
ケント・ベックのテスト駆動開発にこういうこと書いてあってみたいなことを言うと、
そう言われるわけじゃないけど、ケント・ベックって誰ですか的な感じのリアクションをされるときってあったりする。
それって何だろうね。なんかジャニーズファンなのにキムタコを知らないみたいな。そんなことある?みたいな。
そういう感情を個人的には受けるんだけど。
そのレベルなのかちょっとわかんないですけど。
まあでもこの辺りの人たちけっこうオブジェクト思考プログラミングの前世時代に主に活躍した人たちだと思うんで、
最近のそれこそフロントから入った人とか、最近の言語はそもそもあんまり活躍オブジェクト思考じゃないっていうのもあるじゃないですか。
はいはい。
この辺であんまりこういうデザインパターンとかもそうだけど、そういうのから入るっていうのがそこまで昔ほど一般的じゃなくなってるのかもしれないですね。
03:12
うん。そうかもしれない。
確かにフロントエンドのアーキテクチャってオブジェクト思考だからとかじゃないって質問ね。
うん。フロントエンドっていう領域自体ができたのが多分本当にここ最近の話だと思うんで。
フロントエンドというのを特別扱いしないといけなくなったのはここ最近ですね。
うん。まあそれこそ昔はJQueryで書いてたりとかっていうのはあったにせよ。
うん。
ですね。
なんて言えばいいんだろう。JQuery時代はね、宣言型UIの逆。
うん。
日本語、全然日本語出てこない。宣言型UIの逆をやればよかったけど。
うん。
まあね、なんかもっと真面目に考えないといけないから、いろんなことを。
フロントエンドは移り変わりが早いですからね。
それで言うとNode.jsができてからたった13年しか経ってないんですよ。
ああ。
そりゃあ移り変わり早いわけですよ。語言語とそんなに歴史変わんないですよ。
語ってできたのいつでした?2009年?
2000年代後半じゃないかな、語言語は。
あ、そうなんですか。
うん。Pythonはね、言うて30年前だし、Cとかになると50年前とかになるし。
やっぱ全然枯れ具合が違いますよね。
うん。Pythonは意外と古いですもんね。
古いっすね。
なんかPythonは新しい言語って書いてあるワールドプレスのブログとかよく見るけどね。
別に新しくはないよって見るたびに思うけど。
うん。まあ言語としては新しくはないですね。
最近なんか違う技術とかって触ったりしてます?
そうっすね。
仕事を趣味に限らず。
正直あんまり触れてないっすね。
うん。
自分用ツールを地味にメンテナンスし続けてるぐらいかな。
自分用ツール。
その僕が小説を書く用ツールを作ってて。
えー。
それタイプスクリプト製のCLIツールなんですよ。
コマンドラインツール。
CLIをタイプスクリプトって珍しいですね。
そうなんかな。
タイプスクリプトを採用した理由はParserを作るんですけど、JSのライブラリ使ったんですよ。
うんうん。
これが理由です。
あーそのライブラリを使いたかったっていう。
06:01
そうですそうです。
あと一応ブラウザで動かせたらいいなって思っていたというのはある。
Parser GeneratorをJSにしたのはそれが理由で。
僕が最初使うんだからCLIツールでいいじゃんと思ってCLIにしてるんだが、
いずれフロントエンドを作っても楽しいのではと思ってはいる。
けど作り始めてはいないっていう感じ。
それは小説の何をするっていうやつでしたっけ。
マークダウンではないんだが、
自分で定義したフォーマットがあって、
自分でって言うのは僕が定義したフォーマットの通りに、
そのフォーマットに沿って小説を書くと、
フィクシブ小説とか小説家になろうとかのフォーマットに変えてくれるっていう。
へー。
そんなに便利じゃないんだけど。
そういうツールです。
プラットフォームごとに特定のフォーマットがあるんですか。
そうなんですよ。
僕はフィクシブ小説にしか投稿してないので、
それ以外のフォーマットをまともにサポートしてないんだけど、
一応フィクシブ小説はルビーの打ち方とか、
見出しの付け方とかがちょっと変なことをしないといけなくて、
かぎ括弧で括ってコマンドみたいなの打ってみたいなことをしないといけなくて、
それをマグナムみたいにシャープって写すと見出しにするみたいな感じのツール。
なるほど。
じゃあその自分で定義したシンボルを使ったら、
うまいこと変換してくれるっていう。
そうですそうです。
これは面白そうですね。
そう。
実際に自分で作ってみてわかったのは、パーサーを定義するのは死ぬほどむずいということがわかった。
テキストのパースって、
プレーンテキストをパースするのってめちゃくちゃ難しいってよく言いますよね。
めちゃくちゃ難しいですね。
小説って結構いろいろ細かいルールあって、
例えば行頭一文字開けないといけないですよねとか、
でもその辺は序の口でビッグリマークがあると、そのスペース開けないといけないんだよ。
僕もパーサー作るまで知らなかったんだけど、そんなルール。
そうなんだと思って、
実際反映させてみようとすると、小説ってビッグリマーク二つ並べたりするじゃん。
ウェブ小説なんだから。
そうするとさ、普通に実装するとビッグリマークビッグリマークって並ぶべきところに全角スペース開いちゃっておかしくなっちゃったりとか。
あと鍵かっこを閉めるじゃん。
09:00
鍵かっこを閉める前にそのビッグリマークがあるときは全角文字開けなくていいのよ。
結構めんどくさいね。ただビッグリマークの後に全角空白開けるっていうことをやるのがめちゃくちゃ難しい。
つらそう。
そう。なんかめちゃくちゃ難しいということが分かりました。
ビッグリマークの次に何が来るかによってそれを開けるかどうかを判断しないといけないですね。
そうそうそう。で、僕が作ってるのはpeg parserっていう、peg.jsっていうラベルで使ってるんだけど、
なんか正規表現をなんかもうちょっといろいろ機能を足したみたいな、
Parserを定義するためのDSL的な感じで。
でも中身はほとんど正規表現なんですよね。
だから正規表現でそのビッグリマークの後に何の文字が来たか、これだったらこうするみたいなのとかをいろいろ書いてて、
いやー昔の自分よく書いたなっていう気になりますね。
結構前に作ったんですか?
結構前ですね。この間なんかそのParser直さないといけなくて直したんだけど、
これ何がどうなってんだって自分で分かんなかったですね。
よくあるけど本当に本当に分かんないかったね。
もう1年とか経つと完全に他人どころですからね。
いやーそう。Parser定義するのは難しいですよ。
Parserを定義しようと思ったことがない人生でした。幸いにして。
プログラミング言語を作るのとは多分違う難しさですね。プレインテキストをParserするのは。
プログラミング言語を作るのはそれはそれで難しいしやりがいがあることだと思うけど、
プログラミング言語を作ってみたことありますか?
プログラミング言語をどうやったら作れるんでしょうね。
僕は作ったことないんですよ。
プログラミング言語を作るための工程を学んだことはあります。
語言語で作るインタープリターって本があって、
あれ頭から最初まで、最後まで社境すると1個インタープリターで動く言語が作れます。
語はちょっとやってみたいなと思ってるんですよね。
そうなんですね。
僕は語はそんなに詳しくないんですけど、
コマンドラインツールを作るのにはすごい便利だなっていうのを結構長いこと思ってますね。
シングルバイナリーで動くんですよ。
これが良いですね。
12:01
最終的には1個のチェックオファイルになりますもんね。
そこに近い状態まではいけるんだけど、
特定の位置に特定のバイナリーがないと動かないみたいなことがあったりするんで。
非同期処理がめちゃくちゃやりやすいって聞きますよね。
それはよく聞きますね。
実はあんまりその辺は詳しくないんですよね。
まだ全然ガッツリ勉強する前なんですけど、
日本語について喋ってるポッドキャストとかをいろいろ聞いてたら、
そういう非同期処理がすごい直感的に書けるみたいな話をよく聞くんで、
面白そうやなっていう。
Node.jsがやっぱり非同期処理では結構割とよく使われる選択肢というか、
Webのバックエンドでは。
Node.jsというかWebっぽい言語で非同期処理がかなり深いところからインストールされてるのはNode.jsっていうのが第一候補ですからね、基本的には。
ですよね。
JSじゃないやつでそういう代替があるかって考えると、
Goが良さそうなのかなっていう気がしてるんですけど、
最近ラストもすごい人気ですよね。
ラスト人気ですね。
ラストってWeb APIを作るための言語として使ってる人っているんですかね。
あんまりよくわかんないんですけど。
まあ、存在はすると思うけど、個人的な意見だけど、
別にそこまで流行りはしないんじゃないっていう気はしてますね。
システム言語っていう感じですよね、どっちかっていうと。
システムプログラミング言語という振れ込みですよね、基本的には。
C++を安全にしましたっていう振れ込みのはず。
そっち方面もできたら強いだろうなと思うけど、
Webのバックエンドをゴリゴリにやっていくっていうんであれば、Goの方が向いてそうだなっていう気がしているっていうところですね。
それはなんか僕もそう思いますね。
ただ一方でGoでモノリシックなAPIを作るイメージはなんか湧かないので、
これは完全に想像なんだけど。
Goはマイクロサービス的なのをやっていきたいっていう現場の方が向いている気はしますね。
マイクロまでいかなくてもサービス分割するときにGoという選択肢があるよねみたいな。
なんかそういう感じの印象がありますね。
まあでも非同期処理がうまいことできるんだったら、その辺りのマイクロサービス間の通信とかも多分いい感じにさばけそうだし、
15:04
それはあるかもしれないですね。
そうですね。僕はそんなにGoに詳しくないんで何とも言えないですけど。
GoだとGoに詳しくないといけないっていうのは宮川さんが言ってた気がしますね。
ああ、他の言語とかなりやり方が違うっていう。
そうそう。
なんか実際僕もプロダクションでGoを書いたことはないからわかんないけどね、その辺。
プロダクションのところでどうデバッグするのかは確かにわかんない。
全然知らないっていうのはある。
まあでもGoをやってみたいと言いつつ最近はなんだかんだノードJSを使ってるんですけど。
ほうほう。あれはノードJSなんですか?ランタイムは。バンとか使ってたりしてないですか?
ああ、そういうことですか。そこまでまだエッジなことはしてないですね。
ああ、なるほど。
なんかあれなんですね。新しい言語の勉強とかフレームワークの勉強というよりは、仕事で結構認証系のことやってるので、
はいはいはい。
その関連のOOSとかOIDCとかの実装っていうんですかね。
OOSのプロバイダー側のダミー実装みたいなことをやって、ちょっと勉強しようかなと思ってたんですよね。
そのプロトタイプ的なものをノードJS的なもので作ってるんですか?
そうですそうです。
なるほどなるほど。
それがいい感じになったらGoでも書いてみようかなとか思ってるんですけど。
勉強兼ねて。
いいですね。
いや、僕ダメなんですよね。新しくプログラミング言語を学ぼうっていうときに全然ウェブアプリ作んないんですよね、僕。
本当ですか?何作るんですか?
いや、コマンドラインツールばっかり作ってますよ、基本的に。
CAIの方が分かりやすいっていうか。
プログラミング言語を試すという意味では考えることが少なくていいんですよね。
文法を知るとかそういう意味では。
認証系、Googleアカウントと連携して認証するみたいな、そういう感じなんですか?
そのGoogleアカウント側のやつをなんか実装するみたいな、要は認証、認可エンドポイントとかトークンエンドポイントとかを実装してトークンを発行するみたいなことを最終的にはできたらいいなっていう感じですね。
なるほど。何とかで認証するっていう、あのボタンの方を作る。
そうですね。
それは確かにやらないと分からない気がする。
18:03
そうですね。本気でがっつり実装しようとしたら多分めちゃくちゃ大変なんですけど。
ある程度省略して簡略版みたいなやつだったら結構何とかなりそうだし、割と使う側のあれも分かってくるんで、その認証基盤を使う側の。
だから結構いいかなっていう感じですね。
まあ確かにOAuthのクライアントIDを発行するみたいなところとかも含めて作ろうと思うと大変ですね。
大変というかやらないと分からないことがいっぱいある気がしますね。
うん。認可コードを発行してそれをどっかに保存しとくとか。
普段使う側的には何気なく使ってますけどね。
うん。で、そこでプリズマっていうやつを使ったんですけど、それが結構いい感じっていう話ですね。
ああ、プリズマね。タイプスクリプトのORマッパーっていうイメージがないけど。
ORマッパーではあるんですけど、戻ってくる値があれなんですよね。
普通はクラスのインスタンスが返ってくるじゃないですか。
はいはい。
ノードJSだとTypeOMとかが結構そういうORMでは割と有名で、
ただプリズマは返ってくるのが普通のオブジェクトなんですよね、JavaScriptの。
ああ、普通に連想配列的な感じでくるんですか。
そうですそうです。
いわゆるPojoっていう普通のJavaScriptオブジェクトが返ってきて、
なのでクエリビルダー的な感じのORMっていう位置づけですね。
へえ。
ただクエリビルダーみたいになんか自分でコミュニケーションを作ったりとか、
プリズマのクライアントから必要な情報をそれこそ宣言的に書いていけば、
サクッと情報が取り出せる、データが取り出せるっていうところでいいですね。
なるほど。あれサクッと取り出せるのは、
そうですね、そのスキマを定義するんですけど、
スキマがなんか変わったDSLみたいな独自文法のスキマを定義して、
そこでモデルを決めるんですね。
でそのモデルが変わったときに、
そのスキマが変わったときに、
スキマが変わったときに、
それが変わったDSLみたいな独自文法のスキマを定義して、
そこでモデルを決めるんですね。
でそのモデルに従ってプリズママイグレートってコマンドを打つと、
DBのマイグレーションが走って、
それと同時に、
21:00
それと同時じゃないか、
その後にプリズマのクライアントっていうのをジェネレートする、
それもコマンドでやるんですけど、
それをやるとそのスキマに沿った形でクライアントが生成されて、
で型定義ファイルとかもできるんですね。
なので、例えばユーザーっていうモデルがあったとしたら、
prisma.user.createとかってやったら、
あとは必要な情報が全部コードヒントというか、
エディター上でインファーされるっていうか、
表示されるわけですね。
そうですね。
めちゃくちゃ開発体験がいいっていう。
2020年代のライブラリって感じですね。
そうですね。
アップデートとかするときのペイロードとかも、
普通は自分でタイプとかインタフェースとか定義しないといけないですけど、
そういうのもクライアントの自動生成された型定義ファイルに全部入ってるんで、
それをただ読んであげれば、
引数の型とかもいい感じに決まるっていう。
なのでめちゃくちゃプロダクティビリが高いですね。
なるほど。
prisma、名前はよく聞くなと思っていたけど、
そういう感じなんだ。
思ったより、
ちゃんとORマッパーだから開発者体験がいいのかなって漠然と思っていたけど、
ORマッパーの部分というよりかは、
その周辺が充実してるって感じですね。
そうですね。
クライアントとかもマイグレーションとか含めて、
全体的にライブラリとしてすごい使い勝手がいいっていう感じしますね。
なるほど。
私も名前をよく聞く程度だったんで、
とりあえず聞いてよく聞くから使ってみようかぐらいの感じで使ったんですけど、
なかなか面白いですよ。
なるほどな。
さすがにバックエンドで使うライブラリですよね。
そうです。
JavaScriptのフレームワークだったら基本的にほとんど対応してて、
マイクスプレスとかネストJSとかネクストJSとか、
クライアントもほぼ全部、
GraphQLとかも対応してたりするんで、
本当に至れり尽くせりって感じですね。
うん、ですね。
ジャン語のORMもすごい便利ではあるけど、
24:02
結構あれが片方感というか、
コードのエディターのあれが効かないのが結構ありますよね。
まあね。
特にリレーションで引っ張ってきた時とか、
だいたい絵になっちゃうっていう辛みが。
いやー、それは本当に思いはするやつですね。
うん。
思うことには思うんだが、割と諦めているところもありますね。
うん。
まあ、それをもっとTypeScriptっていうのはすごいですね。
いやー、いいですよ、TypeScript。
うん。
まあ、TypeScript自体はとても面白いと思うし、
実際すごくいいなって思いますね。
うん。
ただな、JavaScriptなんだよな、もともとは結局。
JavaScriptですね、確かに。
別に比較するもんではないんだけど、
Pythonに型ヒントがくっついてあんまり使い心地が良くないのと、
JavaScriptにいい型がついているのっていう風に考えると、
なんかどっちもどっちだなっていう気が個人的にはしますね。
いや、プログラミング言語全てそうなんだけど、
なんかどっちも68点ですみたいな、なんかそういう感じですね。
そうですね。
まあ、Pythonの方が書きやすいっていうところもあるっちゃあるし。
うん。
ただTypeScriptをコンパイルしてエラーが出なかったら、
とりあえずはなんていうか、
NullとかUndefined参照みたいなそういうエラーはほぼほぼ防げるんで、
そこの安心感は結構ありますね。
それはそうですね。
それぐらいはPythonでもやれるようになってほしいなっていう思いはありますね、確かに。
結構3、4割ぐらいはそういうNull参照とかのエラーな気がするんで、
そこが防げるのは結構でかいような気が。
特にJavaScriptは起きやすいからね。
気を抜くとすぐUndefinedになるから。
そうですね。
っていう話でした、最近の開発。
僕はそうですね、開発っぽい話だと、
最近Django Congress 2022に行ってきました。
いいですね。オフライン開催。
そう、オフライン開催のイベントに、
27:00
技術イベントだとリアル3年ぶりに行った気がする。
2020年は1月に1回イベント行ったんだけど、
それは別に技術ブログのイベントであって、技術のイベントではなかったんで。
技術ブログのイベントってあるんですね。
企業テックブログどうやってやっていこうみたいな。
ギリギリね、1月20何日とかだったと思う。
2020年。
あと1週間ぐらいすると、
GMOさんがフルリモートワークに移行するみたいな、それぐらいのとき。
ギリギリですね。
そう、超ギリギリだった。
2020年にイベント行ったのはマジでそれだけだったもんな。
オフライン。
まだ全然余裕で缶ビールをマスクなしで飲んでいた時代ですよ。
イベントでですか?
イベントでビールが出てたんですか?
そうそう、イベントで。
それはいいな。
あれが最後でしたね。
本当に最後ではないと思うけどね。
まだ未来があるから。
ジャンゴコングレス自体も3年ぶりってことですよね。
ジャンゴコングレスは去年は一応やったんじゃなかったかな。
そうですね。
オンラインオフラインどっちもやったんじゃなかったかな、去年は確か。
今年は東京でやって。
オンラインイベントに出てて一方的に知っていたけど、YouTubeライブとかで一方的に見ていたけど、
別に質問も話しかけもできてなかったみたいな人と話せてよかったですね。
大多数はそういう人ですもんね。
会社の実際のプラクティスみたいなのを知れたのはすごい面白かったですね。
例えば?
例えば、すごい細かい話だとウエスキーあるじゃないですか。
ウエスキーのログフォーマットを整えましょうみたいなティップスがあって、
すげえわかると思って。
実践的ですね。
あとそれ日経新聞社さんだったんだけど発表してたの。
日経ジャンルですかね。
そうなんですよ。
日経さんは性質上、例えばプッシュ通知を出した時とかにものすごい数のアクセスが来るらしいんだよね。
だからその接続数が一気にガッて増えた時に、いかにして負荷を下げるっていうのもあるし、
30:04
そもそもアクセスが来ないようにキャッシュをするっていうのもあるし、
みたいなところでいくつか工夫してることがあるみたいで。
その辺の細かい話とか。
ちょっと詳細忘れたけど、エンジンXの設定をどうするかみたいなことまで話してた気がする。
ちらっとスライド1枚。
スライドがなんか事後で公開されてたような気がしたんで、そこに日経のやつもあったな。
いやー面白かったですね。
話はまだまだ続きますが、続きはまた次回。
この番組ではお便りを募集しています。
概要欄にあるGoogleホームからどしどしお送りください。
30:55

コメント

スクロール