STORES Product Blog

こだわりを持ったお商売を支える「STORES」のテクノロジー部門のメンバーによるブログです。

ミュータビリティ自体が悪いわけではない/基礎理論は廃れない【ep.28 #論より動くもの .fm】

CTO 藤村がホストするPodcast、論より動くもの.fmの第28回を公開しました。今回は STORES のエンジニア yubrotと言語の副作用や第26回プログラミングおよびプログラミング言語ワークショップ(PPL 2024)の感想について話しました。

論より動くもの.fmはSpotifyとApple Podcastで配信しています。フォローしていただくと、新エピソード公開時には自動で配信されますので、ぜひフォローしてください。

podcasters.spotify.com

テキストで読みたい方は下記からご覧ください。

副作用はあった方がいいのか、ない方がいいのか

藤村:こんにちは、論より動くもの.fmです。論より動くもの.fmは、STORES のCTOである私、藤村が技術や技術じゃないことについてざっくばらんに話すPodcastです。今日はSTORES で一緒に働いているエンジニアのyubortさんに来てもらいました。yubrotさん、こんにちは。

yubrot:こんにちは。

藤村:yubrotさんと僕は先週 PPLというプログラミング言語の学会に一緒に参加して、わからんわからんって言いながらエンジョイしていた仲でもあります。読者のみなさんにyubrotさんのことを紹介したいので、簡単に自己紹介をお願いします。

yubrot:ハンドルネーム yubrotと言います。今はSTORES でソフトウェアエンジニアをやっています。仕事ではRailsとかNext.jsとか、アプリケーションレイヤーをメインにしつつ、 いろいろやってます。趣味のプログラミングでは自作プログラミング言語を頑張ってたりします。あとはエンデュランス系のモクモクとやる運動、登山とかが好きです。よろしくお願いします。

藤村:お願いします。まずプログラミング言語の話をしたいんですけど、僕は最初にyubrotさんと面談をしたときにGitHubを見てたまげたんですよね。yubrotさんはプログラミング言語は何が一番得意なんですか?

yubrot:最近書いてる言語が一番得意っていう説はありますね。でも言語の方向性としては 副作用が使える関数型言語が一番得意かもしれないです。

藤村:副作用が使いにくい関数型言語もずいぶん書けると思うんですけど、副作用はあった方がいいですか?あった方がいいというか、あんまり制御されてない方がいい?

yubrot:難しいですよね。最近考えてなかったから言語化が鈍くなってるな。

藤村:副作用があった方がいいか、ない方がいいかはあまり日常的には考えないですよ。

yubrot:Haskellとかやってて副作用がない *1 利点はめっちゃ感じるんですけど、ここまでやらなくてもいいかなみたいな気持ちは正直あるかな。

藤村:面倒くさいですもんね。

yubrot:あとRustを触って、Rustがいま実用されてる言語の中だと、ミュータビリティを一番うまく扱えてる言語かなと思っていて、それを感じるとミュータビリティ自体が悪いということでもなくて、うまく扱えればいいのかなって思ってますね。

藤村:僕はRustを一生懸命書いたことがないんですけど、ミュータビリティの扱いはどこら辺がいいんですか?

yubrot:言語レベルでshared XOR mutableを実現しようと頑張って、しっかりやってるところですかね。それの利点が思ったよりたくさんあるなってRustを書いてると感じたり。あと逆にRustを書いてから他の言語を触ると、今までノーガードで並行プログラミングをやってたんだなって感想を持ちますね。

藤村:それって言われたらわかるっていうのと、書かないとわからないでいうと、後者なのかなと思った。

yubrot:そうかもしれないですね。

藤村:体感レベルというか。

yubrot:思ったより容易に地雷を踏んでるよなって感覚。

藤村:俺たちは今までこんなに簡単に地雷を踏んでたのか、そしてこれは防げたのかみたいな?

yubrot:そうですね。

どんな自作言語を作っているのか

藤村:自作の言語はどんなものなんですか?

yubrot:ずっと昔からセルフホスティングされた自作言語を作りたいなっていう目標を一回立ててから延々と終わらなくて。紆余曲折あってあの言語仕様だったらいけると思って作ったので、あんまり言語仕様にこだわってないというのはありつつも、特徴としては型システムはHindley–Milner 型システムにHaskellの型クラスみたいなのが乗っていて、かつ言語機能を小さくするためにLisp系のマクロ、S式を評価してS式を作り返して返すマクロが動きます。

藤村:マクロで色んなことをまかなおうみたいな発想?

yubrot:そうですね、特にシンタックス面って言語の装飾されてる部分というか、かわいくしている部分は全部マクロでやって、中身の部分は小さくしてる。

藤村:地の文を処理する部分が一番大変ですもんね。

yubrot:本当に大変なのはバックエンドだと思うんすけど、やることがめっちゃ増えるのとセルフホスティングする時に全部作り直さないといけないっていうのもあるから、小さく保ちたいんですよね。

藤村:僕はマクロがある言語を作ったり、マクロがある言語をたくさん使ったりしたことがめっちゃあるわけじゃないんですけど、小さい言語仕様としてマクロを作って、それをベースにして他の欲しいものを作ってあげるっていう戦略はすごい合理的だと思う一方、何でもできる技を用意しちゃうみたいな諸刃の剣だったりもする?

yubrot:全然しますね。

PPL 2024の感想

藤村:そうですよね。yubrotさんの自作言語の話をしていると、あと15分ぐらい語れそうなので本編にいくと、冒頭でも話したんですけど、PPL プログラミングおよびプログラミング言語ワークショップという学会に行ってきました。STORES から5人で参加しました。

これはなんで行こうとしたかというと、僕はプログラミング言語理論とかプログラミング言語の理論をうまく活用したソフトウェアやプログラミング言語が好きで、興味があったので一度は行ってみたいなと思っていた。あと STORES はポテンシャル採用といって、新卒採用みたいなやつですけど、その採用もしているので学生さんと会えるといいなという目的があって行きました。PPL自体はどうでしたか?

yubrot:こういう場もあるよなみたいな月並みな感想を思ったりしましたね。僕らは普段ひたすらサービスのことを考えて、日々を過ごしているんだなと思ったりしましたね。

藤村:リフレッシュ効果がありませんでしたか?

yubrot:かなりありますよね。

藤村:普段自分たちがやっていることを異常に遠くから眺めるみたいな、そういうリセットの空間だった。

yubrot:そうですね。

藤村:やっぱり僕たちはアプリケーションやっているんだなって思いましたね。

yubrot:たしかに。

藤村:理論のいちインスタンスとしてプログラミング言語とかがあって、それをさらに応用してるっていうことなんで、だいぶアプリケーションって先にあるんだなって思いましたよね。

yubrot:普段仕事上で考え事をしてても、ここまで考えていいんだっけっていうか、考えること自体に一定の区切りをつけて結論を出すみたいなことをするから、そういう意味でも、それぞれが持ってるひとつの課題に対して考え続けるみたいな、こういう場もあるよなっていうのも感じました。

藤村:ここまで詳細度を上げようとすると、こんな基礎的な部分まで踏みこんでいかないといけないのかみたいな。僕がいいなと思ったのは、ああいう基礎理論の勉強をするとどこら辺までいって打ち止めにするのか当たりがつけやすくなる。ここから先はもう素朴集合論になるからやめようみたいな、そういうのがあるじゃないですか。無限にこれなんでだっけ?の遡行をしちゃうのを、どこまでいけるかを逆に知ることでほどほどにできるようになるみたい な。そういうふうに役に立つことがある?そんなことないか。

yubrot:そうか?

藤村:自分は深みにハマりにいっていたので、言い過ぎかもしれない。

yubrot:思っていたよりさらにわからなかったですね。

藤村:そうですね。学会に行って大体みんなわかることだったら、それはそれで問題ですもんね。

yubrot:たしかに。

藤村:科学ってわからないことをやるものだから、学会で話してることのほとんどがわからないってのはそりゃそうだよなって思う。しかも我々研究職じゃない立場からすると、自分たちの理解の10歩ぐらい先の話が展開されてるなって思う反応は正しい気がする。 芸の肥やしになればいいなって思って聞いてたんですけど、これはいつ使うんだろうみたいな。それが基礎研究なんでしょうね。

yubrot:どこかがそのうち実る。

藤村:この業界20年近く働いていて持っている教訓の一つとして、何が流行るかあんまりわからないっていうのと、何が流行るかわからないけど、基礎理論は廃れないって思っていて、それが僕は基礎理論を大切だと思っている理由なんだよな。

yubrot:たしかに。

藤村:自分は私大文系卒なんでマジで数学ができない、哲学科だったから論理学とかはちょっとわかるけど、とはいえわからないのでコツコツ、コツコツわからないなりに勉強してきて、PPLに参加するとチョットわかる話もそこそこあるみたいなのがあってよかった。自分の思い出話ですけど。そういうのがいつか使える場面はあると思うんですよね。何かを理解するときに、ブラックボックスになる部分が少なくなる。

yubrot:たしかに。自作言語とか自作OSとかって作ったものそれ自体は到底役に立つものではないんだけど、それが筋トレというか、そこで色々知識を得て地味に役立つことがある気がしますね。

藤村:理解するために作るみたいなのはありますよね。

yubrot:ありますね。

藤村:PPLで扱ってるトピックは作るものばかりではないんだけど、理論的な基礎を理解するっていうのもそれに似ているところがあるのかもしれない。ちょっと勉強しようかなとか、こういう技術を触ってみようかなって思うものはありましたか?

yubrot:あんまりないかな (笑)。でもなんか形式言語のことを全然わかってなくて、わかったらちょっと面白く読める読み物が増えそうだなと思ったから、ちょっとやってみてもいいかなって気がしましたね。

藤村:『正規表現技術入門』ってWEB+DB PRESSから出ている本があって面白いですよ。PPL 2024で発表もされてた新屋先生が共著者の本です。正規表現って面白くて、僕は正規表現ってUnixを作っている人が必要に迫られて作ったものだろうって勝手に想像してたんですけど、言語を形式的に扱うための理論的なツールから発達した。それがCでうまく実装できたから便利に使われるようになった。そっちからだったんですか?みたいな衝撃があってめっちゃ面白かったですね。

yubrot:なるほど、読んでみよう。

藤村:想像をはるかに超えて理論的な扱いができるものでびっくりしました。正規表現を作った人はクリーネ先生ですよ。クリーネ閉包とかの。ラムダ計算でも出てくるんですが、いわゆる初期の計算科学の大ボスみたいな人です。

yubrot:数学者なのか。

藤村:僕が印象に残ったのは、なんだろうな。正規表現の話なのかな、面白かったですね。もう一回ちゃんと勉強して、もう一歩深く理解できるようになりたいなと思います。あと濃度とかの話が出てくるじゃないですか。濃度とか、そんな手になじむ思考ツールまではよく理解してないなと思ったから、もう一回ちゃんと勉強しようかなって思いました。何のためにと言われると、それはちょっとわからないですけど。

ということで、時間が近づいてきたので終わろうと思います。yubrotさんにはエンデュランススポーツの魅力についても聞きたかったんですよ。それはまたゆっくり話をしてもらいたいです。

yubrot:はい。

藤村:今日は一緒にPPLに行った STORES のエンジニアのyubrotさんに登場してもらいました。#論より動くもの で感想をお待ちしてます。お便り募集フォームもあるので、お便りもいただけると嬉しいです。お便りいただけるとそのトピックについてお話しできるので、僕としてもすごく助かります。

docs.google.com

そして STORES では、基礎理論に関心があるエンジニアの方も、そうじゃないエンジニアの方も、一緒にいいプロダクトを作る仲間を募集しているので、お気軽にお声掛けください。ということで、yubrotさんありがとうございました。

yubrot:ありがとうございました。

藤村:論より動くもの.fmを終わろうと思います。ご機嫌よう。(完)


STORES ではエンジニアを募集しています。論より動くもの.fmを聴いて、少しでも STORES に興味を持たれた方は、ぜひカジュアル面談でお話しましょう!

jobs.st.inc

*1:強く切り出されてる