こんにちは、ストリートアカデミーのCTO北川です。
先日コチラでご紹介したとおり当社の技術顧問に就任した松田氏。日本人として唯一、OSS(オープンソースソフトウェア)のRuby及びRuby on Rails両方のコミッターを務める著名な方なのですが、技術顧問就任にあたって現在どのように開発チームと関わっているかを聞くべく現場のチームメンバーと座談会を行いました。若手エンジニアはかくあるべしと膝を打つ金言が飛び交い、エンジニアのみならず、非エンジニアにとっても興味津々の会になりました!
参加者:
松田 明(技術顧問)
北川 徹(CTO)
堀部沙耶(エンジニア)
嶋本洋也( エンジニア)
北川:
それでは、松田さんを囲んでざっくばらんに聞いていきたいと思いますが、技術顧問として松田さんがいることで実際どんな関わり方がチームメンバーとしてできているかや、具体的に一緒に行なったことで印象に残っていることはありますか?
嶋本:
そうですね、雑談ベースでOSS開発の裏話とか聞けるのも印象に残ってますが(笑)、それはそれとして業務の具体的な話で言うと、実際にある機能を開発している時に、大量のデータを処理する際時間がかかり過ぎていました。
どうすれば処理速度を上げて実行時間を短縮できるのか、というところで、実装レベルでの相談をすることができ、とても助かりました。自分の実装に確信が得られたというか。
コードレベルでの指摘は勿論、gemのReadmeに記載されている使い方について、「どうしてこの一行が必要なのか」とか、OSS作者ならではの視点がとても勉強になります。
松田:
中身を知ってるから答えられるということはいっぱいありますね。ちなみにその件は具体的に言うとパラレル処理する時のActive Recordのwith_connectionのことですね。
北川:
たしかに。そのgemのReadmeには
# maybe helps: explicitly use connection pool
Parallel.each(User.all, in_threads: 8) do |user|
ActiveRecord::Base.connection_pool.with_connection do
user.update_attribute(:some_attribute, some_value)
end
end
と、Active Recordの振る舞いを理解している前提で書いてありますね。
こういった、既にある仕組みをよく利用させてもらう側から言うと、今の話にあったような、「この使い方であってるのかな」とか、「ここってなんでこうなってるんだろう」みたいな疑問について、結局ソースコードを追って読んで理解していくしかないのですが、中身を知ってる人がいると読んだあとの「こういうことだよね?」という疑問に対して確証を得られたり、「そこはこういう考え・背景で書かれてる」という、コードに書いてない情報や設計思想、別の関連する箇所の処理まで含めて知れる。ということのメリットは圧倒的にありますよね。
もっと言うと、松田さんの話は、誰がそうしたか、とか、その時コミッターの間ではこんな議論があった、とかの補足情報付きだったりするのでとても面白いです。
その一方で、「なんとなくわかった」「多分そうなはず」くらいの理解レベルで実装を進めてしまうとあとでそのツケが回ってくると。
松田:
ですね。とかく僕らはドキュメントを書かずに済ましがちなので、ドキュメントだけじゃなくてソースコードもどんどん読む習慣をつけていただいたほうが良いです。よく冗談めかして「ソースコードがドキュメントだ」とか言ったりしますが、Ruby界隈の人たちはあんまり冗談だと思ってない節があります。とにかくドキュメントは書きたくない。ソフトウェアも、理想としてはAppleのiPhoneみたいに、分厚いマニュアルがなくても使い方が伝わって誰でも正しく使える、というのが理想ですが、なかなかそう上手くはいかないですよね。
北川:
「ストアカ」はRuby on Railsで動いているのですが、かなりコアなところでFWやライブラリの設計上は想定されていないトリッキーな使い方をしていたり、動いてはいるけどそもそもの使い方が間違っていたり、Lintツールの設定が的確になされていなかったりということがあったのも、それらの積み重ねなんですよね。。
松田:
まあお互い頑張りましょう、ということで。でも、立場上こういう発言をしていいのかはよくわからないんですが、自分としてはOSSの発展のためにこういう仕事をしているところも正直あります。みんなにバグを踏んでもらって、アップストリームで直していくということを、自分の使命だと思っているところもあります。
なので皆さん、たとえばドキュメントを読んで、意味わかんねーよ、って思ったら、まあパッチをくれるのが理想ではあるんですが、とりあえず僕に個人的に教えてくれるのも大歓迎です。ソースコードもどんどん読んで、ツッコミやフィードバックをたくさんいただけるととても助かります。
正しい道筋と正しい順番で学ばなければ成長が間に合わない時代
北川:
そうですね!! 「ストアカ」ももっとガンガン攻めて開発してバグをどんどん踏み、OSSに貢献するチームになっていきたいと思います!
さやたむ(堀部)は、具体的に松田さんとの関わりで印象的な出来事ってありますか?
堀部:
入社した直後に松田さんに「読書量が足りてなくて会話が通じてないから、お前らたくさん本読んでこい」て言われまして(笑)。お薦めして頂いた本が色々あり、技術書からエッセイまでとても参考になりました。
松田:
共通の語彙を持っていると話が早いじゃないですか。あの本に載っていたあれだよ、みたいな形で。たとえば「達人プログラマー」では寓話みたいなのがよく出てくるんですけど、それを読んだ人同士の間では共通の語彙ができて、話が通じやすくなる。昔の人が犯した過ちを繰り返さないという意味でも、ベストプラクティスを知るという意味でも、本を一冊読むことで手に入れられるものはとても多いです。ので、闇雲に手を動かす前に、本でできる勉強は本でやったら良い。本当はイチから自分で手を動かして学んでいってもいいとは思うんですけど、今の時代のエンジニアは学ばなければいけないことが多すぎるんですよね。なので、効率よく学ぶ必要があります。
嶋本:
それ、すごくわかります。今の時代の情報量に合わせた学び方の難しさを、まさに感じているところで、技術や言語もたくさんあるし、完成されたコンテナ技術やJSのフレームワーク、Railsもですが使えるものが揃っている中で、それを支えている技術を触らずに上のものがたくさんある状態で、どこをどう攻略していくのかというのが難しいなと思ったりしますね。
松田:
僕らの世代ってプログラミングを始めるには入りやすかった時代だと思うんです。テクノロジーの進歩に伴って一歩一歩学べたんですよね。2018年のこの時代にプログラミングを習得しようと思っても、もうある程度すべてが出来上がっている。情報量が膨大すぎて正しく攻略するのが難しい。本当は基礎からじっくり勉強するべきなんだけど、そればっかりだと苦行みたいだし、現場で使い物にならない。正しい道筋と正しい順番で学ばなければ成長が間に合わないよ、というところで、うまくバランスをとる必要があると思います。
そんな中、ここにいる皆さんはRuby on Railsを今やっているわけですけど、いい線いっているというか、正しい選択をしているとは思いますね。Railsアプリは深いところが全部わかっていなくてもとりあえず物が作れる手応えを手軽に味わえて、そこを軸にして深掘りすることもできて、モチベーションを保ちながら楽しく学び続けられると思います。
若手エンジニアがOSSコミュニティに触れる意義
北川:
その 「手応え」、俗に言う「オレってばスゲー感」ってやつですね。わかります。(笑)
何事も学ぶのであれば、楽しく学べたほうが効果的・効率的ですよね。
このあたりまでは主にRailsの話をしてきたと思いますが、つづいてRubyに関しての話題を伺っていきたいと思います。
Rubyの言語仕様以外の特徴として、国産言語である点と、松田さんも含めて実際に作っている人たちを中心としたエンジニアコミュニティやイベントが活発で面白い、というのがありますよね。
そういえばさやたむ(堀部)も今年のRubyKaigi*でいい出会いがあったって言ってたよね?
*RubyKaigi
松田さん主催のRubyの国際カンファレンス。今年は仙台で開催された。
堀部:
はい。RubyKaigiに参加させて頂き、いろいろな方を紹介頂いたご縁で、今度はRailsGirlsという女性エンジニアによるRailsイベントに運営メンバーとして関わることになりました。
松田:
はい。よろしくお願いします。そうやって僕を足がかりにOSSのコミュニティに入ってきてもらって、たくさんの人と関わって会話をしていくことで、自身の成長に繋げてほしいと思いますね。
北川:
OSSコミュニティの皆さんって意外に面白いというか、いろんな事やってる人が多いですよね。その意味でも社会人としても勉強になるというか。
松田:
そうですね。なんかギークな人たちってずっとパソコンいじってるイメージですけど、実際にはプログラミングしかしてない人みたいなのってぜんぜん居ないんですよね。Matzをはじめ、Rubyコミッターのみんなはやたらと多趣味で教養人で何故かやたらと世界史に詳しかったりするし、DHHなんかプログラマー兼プロレーサーですよね。
僕は自分の知らないことについて知ってる人と話すのが好きなんですよ。CTOの北川さんも日本酒のことをよく知っているし、そんな感じで単に仕事の話や人の噂話みたいなのよりも、物やコトの話をするのが僕は好きなんです。そういう部分でも、会社に閉じこもってるよりも、社外のコミュニティに触れて色々な人と話をするのは皆さんにとってもとても良いことだと思います。
技術や知識のエネルギーが通う「ストアカ」の魅力
北川:
確かに。そうやってOSSコミュニティーや中の人達と接点をもつ事で社会人としての幅や深みが広がっていく。また、逆に、いろいろな事に興味をもって楽しく学びつつける事で、OSSコミュニティーとも、より深く繋がれるようになる。ということになりますね。
では最後に、「ストアカ」というプロダクトの魅力や可能性について松田さんはどう感じていますか?
松田:
人と人が出会うコミュニティという点では、とても可能性があるプロダクトだと思います。技術なり知識が流れるというエネルギーの移動を促進するプラットフォームとして魅力を感じますね。それがもっとナチュラルにできるような形になるといいなと思います。
技術顧問として「ストアカ」に参画して、僕がこれまでやってきたことはどちらかというと既存のアプリケーションの技術的な負債を、綺麗にして解消していくということが多かったんですよね。
今はある程度これが終わって、ここから新しいことをやっていくという段階です。これからチームのメンバーともどんどん面白いことをしていこうね、って話しています。
北川:
はい!そうですね!まさにこれからなのでとても楽しみです。
さて、それではこのあたりで今回は締める事にしたいと思います。
本日は皆さんありがとうございました!
全員:
ありがとうございましたー。
日常の開発におけるメンター的役割からOSSコミュニティへの足がかり役としても「ストアカ」に大きく貢献頂いている松田さん。この座談会を通じて、「ストアカ」の開発現場やエンジニアの雰囲気が伝われば幸いです。座談会でも触れた「松田さんがお薦めする、若手Rubyエンジニアに読んでもらいたい本」を選んで頂いたので、ぜひ参考にしてみてください。
また「ストアカ」ではエンジニアを絶賛採用してます!
この記事を読んで少しでも興味をお持ち頂けた方、是非是非お気軽にご連絡下さい。
- 松田さんがお薦めする、若手Rubyエンジニアに読んでもらいたい本 (コメント付き)-
【エッセイ系】
達人プログラマー
必読。とにかく読め。
ハッカーと画家
なるべく若いうちに読んでもらって、思いっきり影響を受けてほしい。
情熱プログラマー
RubyWorld Conferenceの予習用 & サイン色紙用に。
パターン、Wiki、XP ~時を超えた創造の原則
最高にエキサイティングな歴史読み物。
【基礎系】
Webを支える技術
Webプログラマー必読の書。
入門Git
現代のプログラマーはGitが使えないと何もできないので、まずこの本を。
リーダブルコード
この本に書いてあるぐらいのことはいちいち教えなくて済むとありがたい。
エクストリームプログラミング
これは読んでおいてもらわないとチーム開発ができない。
【Ruby系】
初めてのRuby
他言語で実務経験のある若手に真っ先に勧めた本。
Rubyのしくみ
Rubyがどうやって動いているのか気になったら。
メタプログラミングRuby
こういう本もあるよ、ということで。