CTO 藤村がホストするPodcast、論より動くもの.fmの第17回を公開しました。今回はエンジニアの卜部とプログラミング言語を開発する喜びと大変さ、ソフトウェア開発のやりがい、難しいと感じることについて話しました。
論より動くもの.fmはSpotifyとApple Podcastで配信しています。フォローしていただくと、新エピソード公開時には自動で配信されますので、ぜひフォローしてください。
テキストで読みたい方は下記からご覧ください。
コードを書かないで済むなら、それが正義
藤村:こんにちは、論より動くもの.fmです。論より動くもの.fmは、STORES のCTO 藤村が技術とか技術じゃないことについてざっくばらんに話すPodcastです。今日はエンジニアの卜部昌平さんに来てもらいました。
卜部:よろしくお願いします。
藤村:自己紹介を簡単にお願いします。
卜部:はい。卜部と言います。STORES では何をやってるっていうことにすればいいんでしたっけ?
藤村:全社的な課題解決及び研究開発などを担うCTO室でエンジニアとして活躍していただいております!
卜部:ありがとうございます。基本的には、軸足としてバックエンドからインフラ寄りをやっています。人が足りないこともあるのでフロントエンドというか、Web管理画面みたいなものを作ったりとかもあるんですけど、多くの時間はTerraformを書いているというのが最近の感じですかね。
藤村:ありがとうございます。具体的にどんなことをやっているんですか?
卜部:Terraformを書いているんですけど、新しいプロダクトを作っていて、それの基本というか、インフラの部分を作ったり、その上で動くプログラムを書いています。これもやっぱりバックエンド寄りではあります。
藤村:どんなやつなんですか?
卜部:STORES もいろいろプロダクトが増えてきたので、それぞれのプロダクトとやりとりをするっていう意味で、今回やっているのはwebhookをそれぞれのプロダクトに作ってもらって、そこに向かってイベントを投げていくっていう、投げる側のやつですね。なので、相互にイベントをやりとりする部分のミドルウェアに近いのかな?っていうものを作ろうとしていて、まだ出てないんで今後どうなるかなという感じではあります。
藤村:Terraformでクラウドサービスソムリエ業みたいな、組み合わせ業みたいな感じになっているんですか?
卜部:なんかそうなりましたね。入社した瞬間はそんなことは思ってなくて、Terraformを書き始めたのはこの会社に入ってからなので。この会社で学ばせていただいて、頑張ってやっているうちにいつの間にかそれが本業になってきたという感じですね。
藤村:読者のみなさんに説明すると、卜部さんと僕ってもう1年以上?もっと長いか。同じチームで働いてて、よく知っている話が多いので、改めて聞くみたいになっているんですけど。卜部さんもコードを書かないで済むなら、それが正義みたいなところが強くありますよね。
卜部:そうですね。コードを書かないとか、あるいは既存のフレームワークの王道的な使い方に乗っていくのが一番いいかなと思うことが多いですね。
藤村:組み合わせるなり、既存の仕組みを使うなりして、うまくいくことを目指そうとしているなっていうのを一緒に仕事してて感じることが多いです。
卜部:なかなかうまくいかないことも、多いんですけど。うまくハマるとかっこいいし、結局提供する側も一番考えている組み合わせだと、バグも少ないとか、一番スケールしやすいとか、おいしいことが多いと思うので。そういうふうになると嬉しいだろうなと思いながらやってますね。
藤村:そうですよね。自分で作るよりクラウドベンダーが提供しているものの方が安定してますもんね。
卜部:かつ僕らがお客様に提供していく価値ってクラウドベンダーではないと思うので、僕らが提供すべき価値に集中していかなきゃいけなくて。それ以外の、必要だけど僕らじゃないところはうまく乗っていって、レバレッジを効かせていくのがいいんだろうなって思っています。
藤村:そうですよね。たまに自分で作りたくなっちゃうんですけど、やっぱ我慢して、ちゃんと作るのが重要っていう。
卜部:僕もプログラミング言語を作ったりしているので、作りたくなる欲はよくわかるって感じです。
藤村:たしかに。話は変わるようで変わらない感じなんですけど、新プロダクトの前も同じチームだったじゃないですか。何をやっていたか簡単に紹介してもらえますか?
卜部:CRM(STORES ブランドアプリ)のチームだったんですけど、その頃は人が少なかったので、既存のTerraformがあったのを見たりしつつ、Railsのコードをガッツリ読んだり、触ったりして、Railsエンジニアっぽく動いていました。
藤村:一般的なRailsを直すRailsエンジニアみたいな感じで一緒にやってましたよね。
卜部:そうですね。藤村さんがDatadogを整備してくれたので、Datadogを見ながら今ここが詰まってるみたいなのをモグラたたきのように潰していくのをどんどんやっていました。
藤村:モグラたたき業は楽しかったですね。ガクンと数値が下がったりもするじゃないですか。
卜部:やることが明確だったので、これやればいいんだ!みたいな。わかりやすくてよかったです。
藤村:卜部さんってこれまでRailsで仕事をしてたことってあるんですか?
卜部:あると言えばありますよ。でもすごい間があいちゃったので、その前にRailsをやっていた時は2.3から3に変わるくらい。
藤村:ちょうど10年前くらいですね。
卜部:ですかね。2.3から3は大工事で、すごく変わって大変だったという記憶があります。
藤村:インターナルが全部書き変わったに近いレベルで。
卜部:そう、Merbっていうのに。懐かしい名前だ。Merbがマージされて、インターナルがガラッと書き変わったという事件があったので、それで結構大変だった。
藤村:僕、当時松田明さんとチームが一緒で『WEB+DB PRESS』のRails3特集を松田さんが隣で一生懸命書いている状況でした。あの時面白かったですけどね、全部「おお変わった」みたいな、しかもMerbがマージされるに近い感じになったみたいな。
卜部:Railsはすごいですね。最近でもローダー周りが変わったりとか、非常にアグレッシブな開発が続いているし。Ruby本体も更新してくれみたいな感じになっていて、「Rubyが新しくなりすぎなんですけど」みたいなことは一切言われたことないので。もっとガンガンやってくださいみたいな雰囲気なので、すごいなと思います。
作ったものをみんなが使ってくれているのが嬉しい
藤村:ちょっと話は変わりますが、卜部さんってRuby本体の開発もされていますよね。改めて聞いてみたかったのが、プログラミング言語の開発ってどんな大変なことがあるんですか?ってところなんですけど。
卜部:大変なところは、そもそも大きいプロダクトで、あんまり小分けになってないんですよね。コンポーネントに分かれたりしてなくて、ゴンとでっかいプロダクトが一個ある状況。Rubyはたまたまそうっていう話かもしれなくて、他の言語だともっと小分けになっているかもしれないんだけど。Rubyはあんまり内部が複数のコンポーネントに分かれていないので、全体を把握しないと手を入れづらいところがありますね。
藤村:例えば僕らってCRMのRailsのシステムを一緒に見てたじゃないですか。あれと比べるとどれぐらいのボリュームなんですか?
卜部:多分全然大きくて、まずプログラミング言語って呼ばれるプログラムの字面を判断する部分が結構大きい。オブジェクトシステムって呼ばれるStringとかArray、Hashが一つと、その他にUnicodeのハンドリングとかさまざまなものがあったり。あとはいわゆる処理系VMって呼ばれるものがあったり、等々していて、まあまあ大きいですね。Cという謎の太古の昔の言語で書かれていて、Rubyと比べて全然見通しが悪いんですよね。クラスとかモジュールとかもないので。あれ、これを呼んでるこの関数ってどこにあるんだー、みたいなところを頑張って探さないといけなくて、ちょっと大変。
藤村:我々が業務で触っているRailsプロジェクトとは全然比べ物にならない規模のコードベースが、Cというなかなか不便なプログラミング言語で書いてあるみたいな。
卜部:そうですね。戦い方を考えないとメモ帳でやっても負けてしまうみたいな感じで、昔はEmacsっていうのがエディタとしては推奨されていましたね。最近だとVSCodeがとても流行りだし、強力になってきているので、VSCodeを使っている人も多いと思います。
藤村:コードジャンプみたいなところで、そういうのがないとつらい感じですか?
卜部:そうですね。
藤村:いやーなかなか。僕はやったことがないし、やったことがない人が多いので、みんなどう大変なんだろうみたいなのが、わかるようでわかんないところなんじゃないかなと。規模が大きい以外にもいろいろあると思うんですけど、どういうところが大変ですか?
卜部:規模が大きいこと以外のつらさでいうと、開発体制っていう意味で偉い人がいません。作者はいるんだけど、作者がお金を払ってみんなが開発しているわけではないので、みんな趣味でやっています。そこのコーディネーションというか、意見を取りまとめて大きくやっていくモチベーションを作っていくところが難しさとしてはありますよね。自分は新しい機能を入れたいんだみたいなモチベーションの人もいれば、自分は新しい機能を入れずにもっと安定化させるところをやりたいんだみたいなモチベーションの人がいたりとかして。わりとコンフリクトが起きることもあるので、そこをどういうふうにしていこうかね、というところがそこそこ悩ましいですね。
藤村:逆にそういうコンフリクトがあるからこそ、中庸にちゃんと着地できてるところもありそうですね。
卜部:そうですね。まあ過去あんまりうまくいかなかったことも多々あって、みんなですごい苦労しながら今の状況に落ち着いてきたところがあるんですけど。さすがに最近は落ち着いてきているっていう感じかな。開発者会議というのも行われたりして、大体合意形成もできるようになってきているし、あとバグトラッカーが一応機能していて、バグトラッカーの上で議論がうまくまとまることもあります。
藤村:なんか過去盛り上がったけど、ポシャった幻の大機能みたいなのあったりするんですか?
卜部:今パッと出てこないくらいたくさんあって、何かが足りなくって入らなかったとかはありますね。例えばユースケースが足りなかったり。この機能かっこいいぜと思って入れようと思ったんだけど、かっこいいだけでは入らなかったとか。こういうふうに使うと便利になるっていうのがちょっと足りなかったねとか。あと結構ありがちなのは名前が足りなくて入らない。名前がグッと来ないんだよねと、4、5年塩漬けになることが多々あって。Ruby本体にメソッド名を入れるとなかなか変えられないので、一発目から正解を入れないといけないのでプレッシャーがありますね。
藤村:僕もよく見聞きします。まつもとさんが「名前がなぁ」て止まるというか。
卜部:あれは結構すごいと思ってて、妥協しないんですよね。名前が変とかっていう時に。おそらくだけど本人の中で何だかしっくり来ないところがある時に、何だかしっくり来ないっていうのを、でもいっかとならずに、しっくり来ないところを違う、いやだめってみたいなのをちゃんと言い続けるっていうのが、やっぱりデザイナーとしては必要なところだと思うので。それをちゃんと言っているのはすごいなと思います。
藤村:Rubyの標準ライブラリを使っていて、なんだろうこれ?みたいなところがないというか、スルスルと使えるようになっているというか。そういうところがすごいなって、プロダクトとしてすごいなって思うところですね。
卜部:ちょっとそれに甘えすぎてドキュメントが少ないって言われてたこともあったので、頑張ってドキュメント書いたりとかも最近はあるんですけど。
藤村:なるほどなぁ。大変なところの話ばっかりになっちゃったんですけど、達成感というか喜びみたいなところでいうと、どんなところがありますか?
卜部:そうですね。僕らが作ったものをみんなが使ってくれているのがやっぱり嬉しくて。何だかんだでみなさんのお手元のMacとかにも、ちょっと古いバージョンのRubyが入っていたりとかするので、日々使われているんだなって思うのが嬉しいですね。
藤村:そうですよね。なんかプログラミング言語の関係って結局なんか一日生きてて動いてて、今いろんなところでコンピューターに繋がっているものが動いてるじゃないですか。そう考えると、一日で何回Rubyの処理系動いたんだろうとか、たまに想像するとすごいなって思う時ありますよね。
卜部:Rubyに限らず、いろんな例えばライブラリだったりとか、Linuxカーネルだったりとか、そういう普段意識せずに使っているものがあると思うので、プログラミング言語に限らずそういうところに貢献していくと、自分が知らぬ間に使われていたわ、嬉しい!みたいなのがあると思いますね。ある時面白かったのが、北朝鮮が公開した最新の金正恩の映像にiMacが映ってて「お、俺のプログラムを使っているんだ」っていう楽しさがありました。
藤村:これ改めて読者の皆さんにアピールしときたいんですけど、そんなこと生きていてそうそうないと思うんですよ。卜部さんサラッと言ってるけど、本当にすごいことだと思うんですよね。
卜部:いやでも意外にあれですよ、TypeScriptとかはコントリビュートするチャンスがみなさんもあると思うし、そういうところにコントリビュートできると世界中でバーッと使われますよね。あとWasmとかそういうやつね。動かせるようになると実は世界中で使われているぞ、みたいになると思うし、あとちょっと専門性が必要だけどSSL周りとかですかね。そういったみんなが使ってそうなフレームワークがあると思うので、ぜひ楽しんで。もちろん興味がないといけないので、つまらなくてつらいと思いながら書くのは違うと思うんだけど、楽しみながらやれるところを見つけてみるといいんじゃないですかね。
不確実性が高いところに挑んでいくプログラムは、やりがいもあるし難しさもある
藤村:改めて、オープンソースソフトウェアに関わるのは素敵なことだなって、今日は思いましたみたいな感じで、謎の締まり方になってきたんですけど。最後に一個だけ聞いてみたいのが、ソフトウェア開発で卜部さんが思う難しいことを3つ挙げるとしたら何ですか?
卜部:3つも挙げるんですね。
藤村:2個でも大丈夫ですけど、3つは欲張りです。
卜部:ソフトウェア開発で難しいこと。基本的に全部難しいじゃないですか、ソフトウェア開発って。僕、自分で書いたソフトウェアが一発で動いたこととか多分ないので、大抵苦労しながら作っているし大体難しいと思う。
ただそんな中でも難しい領域と簡単な領域みたいなのはあるとは思っていて、新しいことをやろうとする時はすごく頭を使うし難しいことだし、正解がないことがありますよね。作っているんだけど、これで正しいんだっけみたいな。TypeScriptの話がちょっと出ましたけど、型パズルとかは楽しい一方で、正解がある。コンパイルが通りさえすればいいので。楽しいんだけど、もうちょっと今作っているプロダクトって当たるんだっけみたいな、わからないみたいなところ。不確実性が高いじゃないですか。不確実性が高いところに挑んでいくプログラムは、やりがいもあるし難しさもあるかなって思いますね。
それから、ソフトウェア開発の難しさっていうのはちょっと違うかもしれないですけど、ある程度のプログラムになってくると一人じゃ作れなくなってくるんですよね。一人でガっとコード書くのをやる方だと思うし、手も動く方だと思うんですけど、それにしても僕一人で作れるものってやっぱり限界があって。ある程度以上大きくなってくると他の人も巻き込みながら、みたいな感じで作っていかなきゃいけないっていうところが出てくるっていう話があります。そこの相転移でもないけど、ある程度自分で書いた方が早いところと自分で書くだけでは間に合わないっていうところがあって、そこのポイントをうまく切り替えていかないとある種のところで限界が出てくるっていうのはあって、現時点で僕が課題を感じてるのはそこですね。
ある程度の規模になってくれば、そういうふうに切り替えていかなきゃいけないっていうのはわかるんだけど、そのある程度の規模ってどこ?みたいなところがなかなか難しいなと思ってますね。
藤村:そうですね。
卜部:みんなをコーディネーションして、みたいな動き方をすることもあったし、Rubyもやってたこともあるんですけど、そういうふうになってくると、どんどん今度は手を動かすタイミングが減ってくるので。手を動かさないといけない、勘が鈍ったりするなぁみたいなのもあったりして、そこのところのバランスが大変そうだなと思いながら。プレイングマネージャーの人ってどうやって両立してるんですかね、僕にはできないなみたいな感じ、っていう難しさですかね。あるよなぁと思いながら見てます。
藤村:ある程度のところまでは1人で考えきって作った方がいいみたいなのも、卜部さんと僕の中でコンセンサスかなと思うんですけど。それはそうっていうのは一個重要な観点であるとして。
卜部:フェーズもあると思っていて、一番最初からみんなで話し合って決めてもしょうがないんですよ。ある程度動くところまでは1人でやった方がいいんだけど、途中で手放した方がよくってみたいなところですね。
藤村:それをどう手放すかっていうのは、どこなんだみたいな。
卜部:本当に最初の時にパッと手放した方がいいのか、ある程度自走できるようになるところまでは育てた方がいいのかとか。難しさ、正解がどこにあるんだろうみたいなのを常に悩んでいますね。
藤村:ここまでいけば後はコロコロと回っていくだろうみたいなのが見えたらいいんですけど、そんなにクリアに見えるものばかりではないっていう。
卜部:ここまで見えたらもう回っていくだろうと思って手を離したら、誰も拾ってくれずにポテンとなっちゃうこともあったりして。なかなか難しいですね。今の話は多分ソフトウェア開発とかじゃなくて、もっといろんな開発全般にそうだと思うんだけど。でもその辺は難しいですね。
藤村:ありがとうございます。まだ聞いてみたいことはあるんですけども、時間がきたので終わろうかなと思います。卜部さんありがとうございました。
卜部:ありがとうございました。
藤村:#論より動くもの で感想をお待ちしております。そして僕らと一緒に働いてくれるエンジニアのみなさんも募集しているので、ぜひお声がけください。ということで、卜部さんありがとうございました。
卜部:ありがとうございました。(完)
次回の更新をお楽しみに!
STORES ではエンジニアを募集しています。論より動くもの.fmを聴いて、少しでも STORES に興味を持たれた方は、ぜひカジュアル面談に遊びに来てください!