STORES Product Blog

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

好きなプログラミング言語は?PPL初参加で感じたこと【PPL 2024 非公式ふりかえり会 文字起こしレポート前編】

2024年3月22日に『PPL 2024 非公式ふりかえり会』を開催しました。イベントでお話した内容を文字起こし形式で紹介します。

hey.connpass.com

なぜPPLに協賛したのか、協賛してみてどうだったのか

藤村:まず自己紹介から始めます。STORES でCTOをやっている藤村です。PPLには今回初めて参加しました。

笹田:笹田です。プログラミング言語 Rubyのインタープリタの開発を STORES でフルタイムでやっています。プログラミング言語に関する学会ということで、PPLは3回目の出席でした。今回は STORES に転職したというのもあって、顔見せも兼ねて発表させていただきました。よろしくお願いします。

遠藤:遠藤と言います。笹田さんと同じく STORES でRubyの開発をしています。PPLは学生のときに2回、前職で1回参加して、今回で4回目か5回目だと思います。コロナ前とはだいぶ雰囲気が変わったので別の学会みたいだなという印象がありました。今回はポスター発表をしました。よろしくお願いします。

yubrot:STORES でアプリケーションの開発をやっているyubrotと申します。PPLに参加しないかと藤村さんに誘われて、初めて参加しました。よろしくお願いします。

えんじぇる:STORES で技術広報をやっておりますえんじぇると申します。PPLには参加できてないんですけど、今日みなさんのお話を聞いて楽しもうと思います。よろしくお願いします。

藤村:STORES はPPLにゴールドスポンサーとして協賛させていただきました。なぜ協賛することになったかをお話します。STORES はお店で使う業務ソフトウェアをまるごと揃えようというような事業をやっています。流通規模もそこそこあり、エンジニアもたくさん必要なんですね。今はエンジニアが100人以上いる大所帯になっていて、新卒採用もやっています。PPLが今年も開催されることを知って、PPLに行くと学生さんにも会えるのではないかという目的と、あとは僕自身がPPLで扱ってるトピックに個人的な関心があるので、僕自身の知的好奇心もあり、スポンサーしたいなと思いました。

普段は学会とかではなく、プログラミング言語ごとのエンジニアコミュニティや技術系コミュニティのカンファレンススポンサーをよくやっていて、学会という場でのスポンサーは 初めてだったので手探りではあったんですけど、楽しめてよかったなと思っています。

笹田:スポンサーについてちょっと掘り下げてもいいですか? 今回のイベントに参加いただいている方は学会関係の方がいらっしゃるので、企業がどう考えているのかを知るいい機会だと思うんですよ。スポンサーしてどうでしたか?

藤村:スポンサーとしてお金を出させていただく以外にもいくつか貢献できることがあると思っています。エントランスで学生さんに「就職先を探してる人はシールをつけてください」と案内されていたと思うので、採用方面で学生さんとお話しするのは悪いことではない と思ってるんですよね。いろいろな方とお知り合いになれて、その後に続きそうな縁もあったので大変ありがたいなと思っています。

これは僕の個人的な考えですけど、プログラミングとかコンピュータの仕事をしていて、理論のかなり深いところ、基礎的なところから理解してる方がソフトウェアを書く仕事をすると、高い能力を発揮するっていうのは体感値としてあるんですね。そういう意味でもPPLに来ているような学生さんは、スタートアップで採用してる私から見て非常に魅力的な人が多いし、高い能力を持ってると評価しています。そういう方とたくさん知り合えて、仲良くなれたのはよかったです。

弊社はWebアプリケーションとかモバイルアプリケーションのバックエンドシステムの半分以上がRubyなんですね。なので、Rubyが長期的に進展していくことが事業上も重要で、Rubyを辞めることはできないので、笹田さんと遠藤さんがRubyの開発を STORES の仕事の一部としてやっています。発表させていただくことで、プログラミング言語の研究のアカデミックなコミュニティにも貢献できてたらいいなと思っているので、発表できた のも大変ありがたいです。

笹田:えんじぇるさんは技術広報としてどうでしたか? 参加してないのでコメントしづらいかもしれないですけど。

えんじぇる:藤村さんが仰っていた通り学会にスポンサーをするが初めてで、空気感がわからなかったんですけど『好きなプログラミング言語はなんですか?』のパネルが好評だったみたいでよかったです。ブースの担当者もパネルをきっかけにいろんな人とお話しできて楽しかったと言ってました。

好きなプログラミング言語をポストイットに書いていただきました!これは集計結果です

藤村:あのパネルは面白かったですね。普段のカンファレンスではなかなか見られない。Hello Worldを全部の言語で書いてみようと思ったんですけど、まず文字列を出力できるかよくわからないっていうのもあったし、実装がまだ公開されてないとか、実装がまだないものもあって面白かったですね。

先生方とかにもよくしてもらって、非常に温かく受け入れていただいていたのではないかと勝手に思っています。楽しく過ごせた3日間でした。来年も協賛させてもらえたらと思っています。

笹田:ここで希望とかを言っておくと気にしてくれるかもしれません。

藤村:なんだろうな、企業側にやってほしいことがあったらぜひ相談していただきたいですね。

例えばRubyKaigiだと今年はナーサリースポンサーといって、託児所の企画運営をするスポンサーをやっています。去年はオフィシャルのアフターパーティーの手配とオーガナイズをやっていたので、会社としてそういうことをやることは可能です。不確定な状態でもいいので、相談していただけると嬉しいですね。企業側に手伝えることがあったらお声掛けください。

大規模言語モデル

藤村:本編にいこうと思います。1日目の招待講演から話しましょうか。 『コードレビュー AI によるプログラミング学習支援』はどうでしたか? 大規模言語モデル を使ってプログラミングをやったり、プログラミングの支援をしたりというセッションは多かったですね。僕も印象に残りました。

笹田:時流に乗った、これからのAI時代のプログラミング教育をどうするんだっていうところでわかりやすい話でした。

藤村:大規模言語モデルを使ってプログラムを書くという面だと、仕事で利用してる人の話も面白いかもしれないなと思いました。職場でAIを使ってコードを書いてる人は何をやっているのかは面白いのかもなと思いましたね。あとは AIZU ONLINE JUDGE(以下AOJ)の話もあって、老舗だけど開発がだんだん進んでいって、APIも公開されているというのは聞いていて面白かったです。こういうツールがあるからAIによるプログラム学習もそれ前提に進められるっていうのは、なるほどなって思ったんですけど。遠藤さんはAOJを解いていたと聞いたんですけど。

遠藤:10年以上前で、バージョンアップする前なのであまり覚えておらず、ちょっとだけ触ったぐらいですね。

藤村:本編と関係ないんですけど、僕は会津大学について詳しく知らなかったんですけど、コンピュータの単科大学が日本にあるのが驚きだったし、それが福島県にあるっていうのも興味深いなと思いました。では、本編に戻って、プログラムの上からいってみましょうか。

遠藤:『Automating Relational Program Verification』は正直わからなかったですね。

笹田:海野さんにわからないって言っちゃいました。

遠藤:背景知識がなすぎてわからなかった。

藤村:わかってはないんですけど、トレースの集合同士を比べたりすると新たな証明ができるかもしれないっていう話なのだろうと思って。確かにそれはコンカレンシーとかパフォーマンスの課題では役に立つところもありそうだなと思いました。

笹田:トレースという言葉は、我々はよく泥臭い話で使うんですけど、あの理論とどれくらい離れてるのかはよくわからない。

藤村:そうですね、そのトレースがどのトレースなのかは自分もよくわからなくて。自分のメモには「トレースって何?多分簡約のこと、簡約の過程のこと」と書いてあります。 その想像の下にやると確かにあるかもしれんとか思ったけど、わかったわけではないって感じでしたね。

Constrainted Horn Clausesが流行ってることを全然知らなくて、Prolog とかの話でちょくちょく見てたんですが。

笹田:次の『Higher-Order Property-Directed Reachability』の話は、学生さんが他の学会で喋られた話をPPLでもご紹介いただいたという枠ですね。

藤村:『大規模言語モデルによるプログラム自動修正の摂動を用いた信頼性検証』ですが、摂動ってなんだろうと思ったけど、プログラムをちょっとずつ変えていくっていう話なのかとわかってなるほどと思いましたね。コードをいじりながら自動で修正させていくという手法をとるとLLMが賢くやるんじゃないかっていう話で、面白く聞けたし、僕らが書いてる業務のコードでもこういう方法でプログラムを直してるみたいなのが、もしかしたら将来あるかもねと思いました。

遠藤:LLMの挙動をかなり慎重に評価してたやつですよね。

笹田:PPLのチャットに遠藤さんが「どれくらい普遍の知見なのか」ってコメントを書いてますね。

遠藤:そうでしたね。

笹田:今の段階で評価したのがどれくらい、どういう意味があるのかっていう。

遠藤:最近のLLMの進化がヤバいので、全然わからないですよね。1年前はこうだったというのが、果たして1年後に同じ傾向が残っているのかどうなのか。画像生成でも指がちゃんと描けないと言われていましたが、もう改善されてきてるとも言いますね。

藤村:そうなんですよね。

笹田:LLMについてのポスター発表も何個かあったし、研究としては追っかけていかないっていうところだと思うんですが。

藤村:僕はGitHub Copilotだったり、GitHub Copilotより一歩進化したエディタでCursorっていうのがあって、それを使ってコードを書いてたりするんですけど。LLMがちゃんと動いてるかを気にせずに使えるものが出てくればいいなって感覚で使ってるんで、ちゃんと動いてるかを検証するには、こういうふうに正しく科学の検証の仕方をするしかないよなって思いました。

与田話ですけど、人間の脳の挙動のモデルを真似したすごく大きいものを作ったら、性能がよくなったっていうのが今の大規模言語モデルだそうです、もちろんそれだけじゃないんですけど。ニューラルネットみたいなものだと思うんですけど、それが正しく動いてるのかを 検証する方法が実証科学のやり方でやるしかないのが面白いなって思いましたね。生物学とか社会科学の研究みたいなやり方で研究するしかない っていうのが、人間が作ったけど自然みたいな挙動をしてる。

笹田:自然科学のアプローチなんですね。

藤村:そうです、自然科学なんですよね。

SATySFi、エラー生成クイズ

藤村:次の『プレゼンテーションスライド作成のためのSATySFiノートブック環境』はどうでしたか?

笹田:学生発表賞を受賞されていました。SATySFiっていう組版システムをJupyter Notebookみたいなので書けるようにしたという内容でした。いろんな実装の話やSATySFiの開発者の方から突っ込まれてたりして 面白かったんですけど、発表者の方にJupyter Notebookが好きなんですかって聞いたら嫌いなんですよと言ってましたね。

藤村:あれがめちゃくちゃ面白かった。

笹田:それでちゃんと研究として仕上げられたのはすごいなと思いました。

藤村:汎用的なツールの環境なのかもしれないですね、Jupyter Notebookみたいな。

笹田:書きやすいって言いますよね。書きやすいというか研究がしやすい。 研究ノートとして。

藤村:面白かったですね。他、1日目のセッションで面白いなと思ったものはありましたか?

遠藤:『コード縮小と構文主導トークン生成を用いたエラー生成クイズの問題作成ツール』は、面白い着眼点だなって感じました。プログラムの初心者にエラーを読ませるために、そのエラーメッセージを出すようなプログラムを書きなさいっていう問題設定で、おそらく半自動で生成するためのシステムを作ったという話でしたね。

笹田:すごく計算時間を使ってたやつだっけ?そんなに頑張ってやるのかと思って、すごいなと思いました。手動でやるにはやっぱり大変なのかな。

遠藤:手で作って評価したっていうのはもう既に前の研究としてあるらしいっていうのを発表後に聞きましたね。

笹田:なるほど。

遠藤:それを踏まえてより自動生成するっていうところにフォーカスして、今回は発表したという話でした。

笹田:今スライドを見ましたが、127時間を80分に短縮できてよかったという話をしてましたね。

藤村:結構かかるんだな。

笹田:学生さんの成績はこれで上がったんですかね。

藤村:上がったらなおいいですね。

遠藤:成績はどうなんでしょうかね、評価するのは大変そうですね。

笹田:目的がエラーを読ませるためっていうのは、なるほどって感じですごかったですね。

遠藤:成績を上げるというよりは、自習をしやすくするのが目的なのかなと思いながら聞いてました。修得するまでの時間がどのくらい長いかっていうのを評価するんですかね、きっと。

笹田:そうかもしれない。

藤村:エラーを生成させる、エラークイズはなかなか面白いなって思いました。次は『命令型プログラムの安全性検証のための所有権主導変換』なんですけど、yubrotさんはどうでしたか?

yubrot:全体を通して言えるんですけど、話せることが中々ないんですよね。わかんないって話が多くて。

藤村:所有権の話はちょこちょこ見られましたね。プログラミング言語理論の今のフロンティアなのだろうか?

笹田:所有権とかエリアシングの話とかは昔からある話ではありますよね。

Lensって使いますか?

藤村:『Characterizations of Partial Well-Behaved Lenses』はなんとなく触ったことはあったけど、Lensの復習になってよかったです。

yubrot:Partial Lensでも大体同じようなことが成り立つんだなって。

藤村:Totalの方が嬉しいけど、Partialでもやれることはあるんだっていうところは面白かったですね。Lensを少しやったことがある人にはありがたい発表、勉強になりました。

遠藤:Lensをやってないからわかりませんでした。

藤村:yubrotさんはHaskellをそこそこ書いてた人だと思うんですけど、Lensって使いますか?

yubrot:使うとやりすぎかなみたいな感じになりがちですが、便利は便利なんですよね。

藤村:愚直にレコードを掘れば大丈夫みたいな問題にしかまだぶちあたったことがなくて。

yubrot:そういう意味だとFunctional Updateっていうか、GetとPutがペアの操作構文があると便利ですよね。

藤村:手数は減りますよね、読みやすくもなりそう。

yubrot:特にネストした構造は、今だと割と構造体の一部だけ書き換えて新しい構造体を作って返す言語機能があっても書くのが面倒だったりする。それをLensは書きやすく書ける。JavaScriptのImmerは手続き的な処理をそういうふうに解釈して適用してくれるみたいなのがありますけど。

藤村:ライブラリ?

yubrot:ライブラリですね。

藤村:仕事で導入するとどうなるんでしょうね?でも難しいですよね。仕事でJavaScriptやTypeScriptで高度な関数プログラミングのライブラリを導入するのってたまにやりたくなるけど、我慢するかって愚直に書いたりしがち。

笹田:メンテナンスが大変?

藤村:そういう意欲的なライブラリは(メンテナンスが)続かなくなりがちなんですよね。高度なテクニックを使って書かれたコードをそのライブラリがメンテナンスされなくなった後に、高度じゃないものに書き換えようとすると、心が辛くなってくる。結構な手数がかかって大変、悩ましいなって。

yubrot:Immerは手続き的に書きたいというところがモチベーションにあるのかなって思っていて、それで使われてる印象ですね。直接Lensっぽい表現をライブラリとするんじゃなくて、こういう感じのFunctional Updateのいい感じの抽象、プラクティカルな抽象みたいな。

藤村:(コード例を見て)すごく簡単になってるように見えますね。

yubrot:ブロックの中で破壊的変更をするコードを書くと、Functional Updateをするような構造、 新しいデータを作る処理として解釈してくれる。

藤村:面白そうではあるが、これがいつまでメンテナンスされるんだろうなみたいな気持ちになる。でもこういうのがいつの間にか本流に取り込まれたりするから油断はできない。

yubrot:これは割と使われているんじゃないかな。

藤村:そうなんですね。 ちょっと戻りまして、1日目が終わった後はどう過ごしましたか?私たち STORES のメンバーと学生さん、そしてAKRさんで飲みに行って楽しかったですね。技術の話をずっとしてたような気がするが、何を話したのか覚えてない。そんな感じで1日目は終わりました。

PPLに参加したことで脳がリセットされた

藤村:2日目にいきます。招待講演は『岩村の補題、超限帰納法と Isabelle/HOL』でしたが、前提知識が足りなすぎたなというのが僕の反省ですね。予習をしようにも付け焼き刃でどうにかなるものではないので悩ましいなと思ったんだけど、ちょっとだけ集合論の本とかをパラパラめくったりもしたので、なんとなくわからなくもないみたいなところまではいけました。

笹田:わかりやすく喋ってくださいましたね。

藤村:僕にもわかるかもしれないと一瞬希望を持ちつつ聞いてました。その他、印象に残ったものはありましたか?

笹田:『When Is Context-Freeness Distinguishable from Regularity? An Extension of Parikh's Theorem』ですね。Parikhの定理というのがあると知って、なるほどと思って聞いてました。藤浪さんは研究していて、こういう性質に興味を持ったりするんですか?

藤浪さん:Parikhの定理は面白いなと思って調べたことはありますね。

笹田:性質自体は私でもわかったんですが、なんでこれを研究しようと思うんだろうなって。

藤浪さん:正規言語の代数的な性質というか、正規言語が有理言語みたいに言われることと関係がある話かなって思いました。

藤村:素人の僕から見て思うのは応用に向かったり、実用的なモチベーションがあってなされる研究と数学の研究をしている人が言う「ここになんか有用な性質があるかもしれない」っていうモチベーションは結構違うと思っています。それで言うとPPLでは基礎研究、後者の部分もあるんだろうと僕は理解しているんですけど、その基礎研究として面白い性質があるかもしれないっていうのを掘っていくと何かが出てくることもあるんだろうなと思って。

こういう研究は僕みたいに実用でプログラミングをしている人間は触れる機会がほとんどないので、こういう話が僕は何だかんだ一番面白かったですね。こんなふうな考え方とか構造ができるのかっていうのは面白いし、ここでしか味わえないタイプのものだなと思って味わい深く聞いてました。

藤浪さん:なるほど。

藤村:これは僕の感想ですけど、そういうのを浴びたり考えたりしていると仕事っていうコンテキストから一時的に離れることができるので、技術とかコンピュータを使って事業をしているとか、そういうことが一体何なのかを捉え直すいい機会になって大変ありがたかったですね。PPLに参加していても、個人的なモチベーション形成とか考え方のアップデートっていう面ではよかったです。

yubrot:脳がリセットされましたね。

藤村:脳がリセットされる感じがめっちゃあってよかったです。(後編に続く)

product.st.inc

ポテンシャル採用のお知らせ

26年卒の学生の方、既卒、第二新卒の方を対象としたポテンシャル採用をしています。中長期実務インターンも通年で募集しています。ぜひご応募ください。詳しくは下記のサイトをご覧ください。

jobs.st.inc