Blog::kobaken

prove t/foo/bar/baz.t

最近プログラミングが楽しい

6/16(金) は、久々のオフライン開催の吉祥寺.pm #33でした。懇親会含め楽しませてもらいました!主催のid:magnoliak ありがとうございました!

ここでは、話したことを書いてみたいと思います。

まず最初に、久々のオフライン開催おめでとうございます!いや〜〜〜、主催のmagnoliaさんよかったですね!おめでとうございます!


改めて、こんにちは。こばけんと言います。

エンジニア組織開発責任者をしたり、開発生産性の可視化サービスを作っていました。 今は、はてなさんやDiverseさんで業務委託をしながら、起業の準備をしています。

技術コミュニティでは、Japan Perl Associationの理事として、YAPCという技術カンファレンスの運営やPerlのドキュメントを整備するワーキング・グループを運営しています。

2019年にYAPC::Tokyoのリーダーをしていたのですが、その時、magnoliaさんとは一緒に運営をして、お世話になりました。

YAPC::Hiroshima 2024 の準備中です。これが一番大事な情報ですね。お楽しみに!


あと、37歳で、小学生の娘がいます。可愛いですね。*1

それでですね、今日、話す話は、スライドを公開しないと思います。スライドだけだと伝わらないと思っていて。(ブログに全部書く形で公開してみます。伝われば幸い。)

いや、もちろん、炎上するような危ない話題ではないです。

Tweetいただくのは大丈夫です。「娘さん可愛い」などツイートいただければと!

それで、今日お伝えたいしたいことは、率直な話です。


「最近プログラミングが楽しい」ってことです。

37歳、今年38歳。こういうことを、おおっぴらに言うことは、多少幼いかもしれないですが、 ですが、楽しいものは楽しいんですよね。何が悪いんだと開き直っていきます。

こんな話がしたいと思ったキッカケは、graphql-jsをperlに移植をしていて、めちゃくちゃ楽しかったからです。

今回、吉祥寺.pmのテーマは「原点」で、自分なりにふりかえりました。


これが私の原点だと思いました。エンジニアの道を選んだのは、プログラミングが楽しいから。

あ、もちろん、楽しくない時もあるんですよ。例えば、自分は費用対効果を求め過ぎて、調整が面倒になりコトが進まないとかイヤ。考えるのはいいんですけどね。コトが進んだ方が良いですね。

それで、自分は、graphql-jsの移植が面白かったんですが、 この話、どこが面白かったか具体的に話してもいいですか?


お品書きは3つです。


graphql-jsのスターの数を今朝数えてみたら、19,600ありました。graphql-jsは、TypeScriptで書かれたGraphQLの見本となる実装で、この実装を参考に様々な言語に移植されてるOSSです。

OSSを開発していて、これだけのスターは、自分では集められないです。

ですが、移植をすると、graphql-jsが見てる世界が垣間見える気がするんですよね。

例えば、エラーのフィードバック。GraphQLのクエリのparseに失敗したら、何行目のどこでどんなエラーが起きたのかまできちんと返す。エラーのフィードバックを丁寧にした方が良いというのは、当然に感じられる話ですが、実際やろうと思うと面倒で、これを愚直にやりきってるのが流石と思うんですよね。

19,600スターの世界をつまみ食い。これが1つめの楽しさです。


2つ目はyak shavingyak shavingは、目的を叶えるために、次から次へ問題が出てくる状態のことで、あまりポジティブな意味はないかもしれないです。


Perlには、GraphQLの移植実装はすでにあります。運用にも乗せていて、動きます。が、課題を感じています。一つはパフォーマンスで、もう一つは、メンテナンス性です。

graphql-jsを忠実に移植してこの問題を解決できるのではないかと思ってます。それはつまり、非同期処理やTypeScriptの型表現も込みで移植するということです。

が、忠実に移植しようとすると、次から次へと問題が出てきて、 まさにyak shavingです。


これが、面白いんですよね。 普段の開発ではなかなか出会わない問題にワクワクする。未知の問題に挑戦するのが楽しい。


例えば、この実装パターンは、この移植の副産物です。

左のコードは、足し算をする関数です。引数、返り値を動的に型チェックしています。 このコードは、DEBUGがfalseなら、コンパイラが最適化をして、DEBUGのブロックが畳み込まれて、右のコードと等価になります。つまり、実行時の型チェックのオーバーヘッドを無くせます。

動的型チェックするモジュールは多数ありますが、それらと比較して、仕組みはシンプルです。constantプラグマと、型モジュールを使ってるだけで、すぐ使えます。

この実装パターンは、コンパイルすると型チェック関連の情報が消えるので、生々しいTypeScriptを書いている感覚に近いですね。

忠実な移植はしつつも、依存モジュールをできるだけ減らそうという要求があったので、この実装パターンを考えました。もし「なんかいい感じの型システムがほしい」といった漠然とした要求だと考えなかった実装パターンと思います。


そして、この次々と出てくる問題を一つ一つ解決していく達成感が良いですね。 達成できたら、19,600スターの世界が見える。俗な言い方をすれば、「おれすげー」ができて面白いです。


まとめるとこうです。


3つ目です。この子たちが便利なのは言わずもがなですが、敢えて言わせてもらうと、移植とすこぶる相性がいいです。

言語間の移植は、ゴールは明確ですが、地味な作業が正直多いです。そして、答えがわかっている作業は飽きますよね。つまらない。その辺を代わりにしてくれます。

まず、Copilot君。このgifでは、graphql-jsのテストコードを貼り付けておいたら、Perlへの変換をリコメンドしてくれてます。テストは決まったイディオムで書かれてるので、Copilot君の変換精度が高くて、ただクリックするおじさんになれます。

思考に実装速度が追いつく感覚で、楽しいです。


次に、ChatGPT先生。 知らない場所で行き詰まった時にヒントをくれます。

真顔で嘘をつきますが、人間だってそれは同じなので、手がかりがあるだけマシです。 自分の場合、開発が一度頓挫するとまたエンジンをかけるのが大変なので、本当に助かります。

おかげで、今、一番、プログラミングが楽しいかもしれないです。

ただ、1つ、ChatGPT先生に文句が言いたいことが・・


PerlのXSについて話かけたとき、「Perlの深淵を理解する必要がある」と毎度警告するのはやめてほしいですね*2


まとめるとこう。


全体をまとめます。 「プログラミングが楽しい」これが私の原点です。graphql-jsの移植をしていて最近特に楽しいと感じました。世界的に参照されているOSSをつまみ食いしたり、未知の問題に挑戦できて楽しいです。AIがつまらないところを助けてくれるのも良いです。結果、最近特にプログラミングが楽しいです。

以上です。ありがとうございました!

リポジトリはこちらです。19,600スターください。

github.com

github.com


おわりに

せっかくのオフラインでの登壇だったので、オンラインだと話しづらいことをネタにしました。聞いている人の反応をリアルタイムに見ながら話せるのが4年ぶりで、緊張もあったのですが、嬉しかったです。帰ってきた実感があります。吉祥寺.pm 楽しかったです!

*1:登壇翌日。ブログを書いている今、父の日のプレゼントをもらいました。ありがとう。

*2:perlgutsにそういった警告があるので、それを学習しているのだろうと懇親会で話しました。