Forkwell Press

エンジニアの生き様をウォッチするメディア

エンジニアは「ポエム」ではなく「コード」を書け!− Ruby / Railsコミッター 松田 明(a_matsuda)氏

エンジニアのキャリアを支援する Forkwell は、ITエンジニア向けポートフォリオサービスのリニューアルを行い、「Forkwell Portfolio」として2017年6月に β版をローンチしました。

今回は、国内唯一の Ruby / Railsコミッターであり、Forkwell 運営会社・grooves の取締役を務める松田明(@a_matsuda)氏を招いて、「Forkwell Portfolio」を実際に使用していただき、レビューしてもらいました。

後半では、松田氏の考える「エンジニアのあるべき姿」とは、それを実現するために Forkwell Portfolio がどんな役割を担うことができるのか…といった点を、Forkwell プロダクトマネージャー・谷内(@yachibit)が深掘りしていきます。

だから「技術系SNS」は流行らない?国内唯一の Ruby / Railsコミッターから Forkwell をレビューしてもらった

谷内:
本日はよろしくお願いします! Forkwell Portfolio を使いながら、松田さん視点でプロダクトの改善点を率直に教えていただければと思います。

さっそくですが、GitHubリポジトリを登録すると、コードを解析してスキルを可視化するためのグラフがアウトプットされるので試してもらえますか?

松田:
はい、登録しました。

お、コミットの粒度がわかるんですね。ほとんどのコミットが5行未満だ、まじか。いつだか800行くらい変更して Rails につっこんだ覚えがあるけど。

松田さんのコミットの粒度グラフ。ほとんどが5行以内の変更のようだ


松田:
活動時間もわかるんですね、午前中の時間帯によく活動しているつもりだったけどあまり多くないな…。

松田さんの活動時間のグラフ。いつ寝ているのか...


松田:
曜日別もあるのか、火曜日のコード変更量が多いのは、Asakusa.rb の日だからだきっと(笑)。面白いですね。

松田さんの曜日別のコード変更量。土日も活動していることがわかる


谷内:
ありがとうございます。このコード変更量グラフの可視化の仕方についてどう思われますか?

松田さんの週間のコード変更量(ただし連携されているリポジトリのデータのみを描画)


松田:
「この日は何があったんだろう」と思い出すきっかけにはなりますね。ただ、これを見ることができて何が嬉しいかというと…?? うーん、可視化の仕方は違えど、GitHub の「草」と何が違うんでしょうね。Forkwell Portfolio と GitHub とで、草が生えている時期が一致しそうな気がします。

「技術系SNS は流行らない」の定説

松田:
何年も前に Forkwell で、ポートフォリオ機能の超初期版のような、同じようなものを作ったことがあります。リポジトリの他にも Slide Share とか他サービスからスライド引っ張って登録できて、スキルタグがあってフォローがあって……SNS っぽいやつをやっていましたね。

リリース後は Matz(まつもとゆきひろ氏)も登録していて、結構な数のユーザーに一瞬使われていたものの、全部クローズしましたね。

谷内:
「スキルを可視化する」という意味では今回と同じものだったんですね。

松田:
他にも同様のサービスは過去にいくつか登録してみましたけど、そのどれもが長続きしていないようです。この手のサービスって流行らないですよね。なんでだろうな??
「GitHub 戦闘力が出ます」「偏差値が出ます」みたいなの、一度登録して二度と見ないですよね。Twitter で回ってきて「どれどれ」ってやってみて、「Ruby偏差値80、ふーん」みたいな。偏差値だと新しく人が登録するごとに変化が出てくるのでしょうけど、「だから何?」ってなりますよね。

谷内:
何か目的があって使うのではなくて、「面白そうだからちょっと見てみよう」くらいで登録してみる、ということですか。

松田:
結局、日本でそういう技術系SNS が流行らなかったのは実利がないからじゃないかな? 「とりあえず解析して終わり」だけじゃ意味ないし、よっぽど自己顕示欲が強いエンジニアでもなければ、使い続けないですよね。

スキル可視化の落とし穴? 50の言語で「Hello World」すると…

松田:
スキル可視化できるサービスをひっくるめた課題で言うと、評価に偏りがあったりしますよね。
以前、GitHub で使っている言語の数だけバッジが付いていくようなサービスがあって、バッジが何十種類も付くことで、評価がやたら高くなるんですけど、40〜50の言語で Hello World を書いている人が「すごいできる」雰囲気になっていて、地獄だなって思った記憶があります。逆に、ちゃんと実力があってそういうことする人もいますけど…評価がブレることに変わりはないので、あの状況は他山の石として覚えておいてほしいですね。

先ほど話したバッジもそうですけど、リポジトリだけで評価を下すのは平等ではないですよね。数万行のファイルを入れて消して…でズルして点稼ぎしても、自分で作って誰にも使われていないプロダクトを何千行更新していても、コードの変更量だけが見られて同じ評価になる。

例えば、雑な言い方ですけど、GitHub のスター数と読み書きされた行数をかけ算していく、みたいな重み付けをすると、どれだけ人の役に立っているか/社会にどれだけインパクトを与えているか、というのに近い感覚の評価ができるかもしれませんね。

谷内:
行数、コミット数はある程度の指針になりますかね。重み付けが適正にされるならば。

松田:
行数、Rubyist は不利ですね。Java勢に勝てる気がしない(笑)。

谷内:
たしかに(笑)。 話は変わるのですが、松田さんは他人のリポジトリをどんな風に見ていらっしゃるのでしょうか。

松田:
例えば RubyKaigi の CFP(登壇者審査) では、あまり知らない人でももっともな自己推薦ができちゃうので、「本当にコードを書いているの?」みたいなのを GitHub 上で見て、「ああ、書いてる書いてる」って。

contribution 数のトータルは、その人の活動量がぱっと見で分かりやすいですが、本当にコードを書いているのか、GitHub の草は生えているのか、プライベートリポジトリは…とか色々含めると、もう分からないんですよね。

谷内:
ここを見たあと、リポジトリの中身も見たりしますか?

松田:
もちろん見ます。結局、ソースコードを自分の目で見てちゃんと読まないと、リポジトリの様子は分からないですね。星の数やフォークの数が多い方が良いとか、最終更新日がいつだとか、あまり関係ない気がするな。「3時間前に仕事をサボってコミットしているな」とかは分かるんですけど(笑)。

谷内:
ありがとうございます。現状ではまだまだなところがたくさん見えました。

続きまして、松田さんの考える評価されるべきエンジニア像について教えてください。



エンジニアは「ポエム」ではなく「コード」を書け!

「目立たないけど貢献している人」がきちんと評価されるべき

谷内:
Forkwell Portfolio にひと通りダメ出ししていただいたところで、Forkwell がこの先実現できそうな世界観についておうかがいしたいです。

松田:
世の中、コードを書いている人が目立っているとも限らなくて、そういった人にちゃんとスポットライトがあたって、かつ正しく評価される仕組みができそう、と感じました。そうなると嬉しいですね。

例えば「Ruby の有名な人」で言うと、Matz(まつもとゆきひろ氏) は誰もが知っていますが、「Rubyリポジトリに最もコミットしている人」に関しては、Rubyユーザーのうち半分ぐらいしか知らないと思うんです。さらに3番目にコミットしている人、4番目にコミットしている人…となるとほとんどの人が分からないはずなので、そういう人がきちんと評価されるべきだなと。

Rails にも、Rafael という「パッチモンスター」がいて、彼が積み重ねた7,000コミットを見るとすごいんですよ。人の書いた Pull Request に誰よりも早く目を通して、ひたすらレビューしてマージ。マージの鬼です。 ただ、何の機能を作っているわけでもないのでほとんど目立っていないんですよね。Pull Request を書いた人だったら、「コメントしてくれましたよね」「マージしてくれた人ですね」と分かるはずですけど。Rails Contributors のランキングは、このマージの数までちゃんとカウントしていてすごいなと思っています。

谷内:
責任を持ってマージしている、多大な貢献をしている人である、というのが見えますね。マージだけでなくて、Pull Request の数がめちゃくちゃ多い人、レビューを積極的にしてくれる人、なんかもいますよね。

松田:
いますね、めちゃめちゃ仕事しているな、という人。なぜだか知らないけど、レビューをいっぱいしてくれる人は、ちゃんと自分でコードも書いていますね…どうやって時間を捻出しているんだろう。

谷内:
そういう方々って、どうして有名にならないんですかね? かなり多くの人に貢献してきたはずなのに。

松田:
うーん。やっぱり、裏方的な役割で貢献している人よりも、自分の名前でやっているプロダクトを持っている人が目立ちますよね。 Rafael のようなすごく貢献しているのに目立たない人の働きを、Forkwell Portfolio のようなツールで可視化することで、実はすごい! というのが分かるようになると良いですね。

Rails で言うと、人が出してきた Issue や Pull Request に対してコメントを付けて適切なところに dispatch する「Issueチーム」があって、目立たないところで非常に重要な貢献をしています。

ところで、この Issueチームのメンバーが全然足りてなくて、もっと人手が欲しいところなんですよね。
Pull Request が730個もあってオープンで放置されている状態、これは結構異常事態なんですよ。1,000に到達するとさすがにまずいので、なんとか3桁で抑えたいと。Issue が400超、これも減らしたいですね、今いる人でカバーしきれていないんです。

谷内:
すごい数ですね。重複があっても気づかなそう。

松田:
もちろん調べてから出してほしいけど、「重複してるかも」と報告をためらうよりは出してもらえた方がありがたいです。重複していても、今いるメンバーがよしなにしてくれるはずです。

ということで、自分の行動をオープンにしている人はたくさんいても、他人の問題を親身になって解決してあげようという人は、やっぱり少ないです。「多大な貢献につながる目立たない仕事」をやりがたる人は、なかなかいないですね。

世の中を良くするコードの定義は「オープンである」こと

谷内:
松田さんにとって、「エンジニアのあるべき姿」はどういったものでしょうか?

松田:
エンジニアという大きなくくりだとわからないですけど、僕というエンジニアに関して言えば「楽しいからやっている」ことが前提で、GitHub みたいな SNS 上で色んな人がいて面白いよね、という話になります。

GitHub でいっぱい草が生えている人を企業が雇うべきか…という視点でいうと、どうなんでしょうね。単純に、草を生やすことにかけている労力を、業務に直結するような本を読むことに割いてくれたほうが、よっぽど仕事上で役立つ人材になるかもしれない、とは思いますけど。

僕個人の経験ですが、例えば Railsチームの話をすると、このコミッター一覧にアイコンが並んでいる人たち、僕、全員リアルで会ったことがあるんですよ、多分。そういった意味では、Rails をすごくよく知っていると思います。 コミッターの人って、年1回アメリカ国内で開催される RailsConf というカンファレンスで顔を合わせて、コミッターディナーという場で食事をするんです。その場にいられる権利が手に入る、ということが、僕にとっては嬉しいことですね。

谷内:
企業に属するエンジニアということではなく、個人としての楽しみを見出していらっしゃるんですね。

松田:
そうですね。そういうのが好きな人・好きじゃない人どちらもいると思いますが、僕個人は好きでやっています。 自分が好きでコードを書いて、それを晒す生活をしていたら、たまたまそういうものが評価される時代が来てしまった。なので、今僕が人に薦めるべきなのかどうかもよくわかっていないのが正直なところですね。

ちなみに Rails はすごい多国籍軍で開発しているんですよ。アメリカ、スペイン、イギリス、日本、ブラジル、ウルグアイ、コロンビア、デンマーク……基本的にオンラインで、リアルで会うのは年1回のカンファレンスだけ。Excel で仕様書を作ったりもしません。

そんな OSS 界隈で、効率よくプロダクト開発を進められるチーム体制、開発ノウハウが醸成されて、「役に立つものだ」というのが広まって世の中の様々なプロダクト開発現場に下りてきていますよね。だからこそ、仕事で GitHub を使ってレビューして、CI を回して、みたいなのが当たり前になってきている。そうなっている状況を見るに、オープンソースの文化から学ぶべきところは多いですよね。

谷内:
OSSコミュニティーで貢献することで、自然と気付くことができる・培っていける力があるんですね。

松田:
はい。なので、オープンソースの文化を理解してしっかり貢献している人がチームに入るのは、「やり方を分かっている人」という点で保証できそうですね。ちゃんとコミットできて、レビューができて、ちゃんと Pull Request 上で価値を出せる人である、ということは少なくとも分かる。きっとテストコードもドキュメントも書くだろうし…Rails にコミットしている人は、ちゃんとできている人だと思います。

谷内:
松田さんは、ご自身の書いたコードを表に出していたことがフックになって、結果的に RailsConf といった場に招かれるようになったことが嬉しい、とおっしゃいましたね。逆に、自分の情報を表に出していない、コードを晒していない人が松田さんと同じ立場にいらっしゃる、ということはあるのでしょうか?

松田:
そこで言うと、この Forkwell Portfolio の目指す世界観である「コードを書いて世の中を良くする」という、”コードを書く” が具体的にどの部分を指しているのか、という話になりますね。

僕にとって「コードを書く」というのは、コードを書くことに付随する様々なアクティビティーをすべてひっくるめて、「コードを書く」という表現なんですよね。プライベートリポジトリのコードをオープンにすること、あるいは他人のプロダクトに Pull Request を投げて、アップストリームにバグを報告して修正するところまで含めて、「コードを書く」と言いたいんです。

なぜなのかというと、自分の PC の中で完結しているコードって、その PC の中にしかないので、「コードを書いて世の中を良く」しているかというと、ちょっと違いますよね。そのコードをオープンにすることで、世界中のみんなが使うためのコードになって、1行のコードが累計何百万行の分だけ世の中を良くしている活動になる、そうなって初めて「コードを書いて世の中を良くする」ことにつながります。

…自分が書きたいから書く、というのが大前提なので、「世の中を良くする」とか言いたくないんですけどね。あくまで「自分がコードを書いて勉強になった」で完結するのではなくて、「ちゃんと世間の役に立っているか」どうかですかね。でも役に立っているとも言いたくない(笑)。

谷内:
最初から「人のために」と言いだすんじゃなくて、まず「自分のために」が当然あるんだ、ということに自覚的でいらっしゃるんですね。

松田:
そうですね。だって自分のプロダクトで Issue が挙がっていたらやっつけるじゃないですか。それと同じノリで、OSS でも適当に Issue をクリックしてパッチ書いて「直したよ」って言ったら、その Issue を挙げた人には、少なくとも感謝されると思うんですね。それは contribution に近いですね。
僕はその人に感謝されるということには興味がなくて、自分で踏んだ問題は直したいけど、他人の問題とかどうでもいいんです。

谷内:
自分で発見した問題を自分で解決して…という、「自分のために」でやっていったら結果的に誰かに感謝される。でもそれを、「Issue 挙げた人のためにやってくれたね、ありがとう」とかそういうことを言われるのは違う、そんなんじゃないよ、という。

松田:
はい、そういうモチベーションはないですね。
現場で書いたコードをプラグインにするのも、抽象化して汎用化できそうだからそこまでやっておくか、というものが多いです。明らかに趣味みたいなものも、たまにありますけどね。

谷内:
好奇心から入って、知らず知らずの内に草分けになっていた、みたいな感じですね。

松田:
日本人はそこが多分弱くて、プロダクトを作って OSS で出す人はあまり多くないですね。Vimプラグインはありますね、Vim界は特殊ですよね。Railsプラグインみたいなのを作っている人、あまり思いつかないです。

これは手前みそになるんですけど、Asakusa.rb という大変素晴らしい「何とか.rb」があって(笑)。元ネタは米シアトル発祥の Seattle.rb なんです。「とにかくみんなでコードを書こう」という集まりで、世界中の「何とか.rb」の元祖ですね。

Seattle.rb の何がすごいかというと、めちゃめちゃプロダクトを作っているんですよ。Projects を見ると具体的に分かるんですけど、Ruby のパッケージシステムそのものをメンテしているとか、エコシステム的なところを支えているのが、ことごとく Seattle.rb のプロダクトだったりして、すごいんですよね彼らは。

谷内:
彼らは勉強目的でここに来ているというよりは、その場で「とにかく作る」ことを目指しているんですか?

松田:
とにかく作る。Ruby で何か作りたい人たちが集まって、毎週火曜日、Ruby Tuesday に集まって、とにかくハックしてプロダクトをどんどん出していく…もう13〜14年続いています。めちゃめちゃ格好良いですよね。

放課後に集まって毎週やっている、サークル活動みたいなものですね。ただやりたいからやっている、みたいなのが積み重なってできたすごい集まり、というか。毎週新しいものの発見があって、インターネットとつながって成果が世界中で共有されているんですね。ちゃんとコードを書いてプロダクトを作って、世の中に公開している人たちが、しっかり評価されています。

谷内:
Asakusa.rb も、こんなふうにしていきたいですか?

松田:
はい。Asakusa.rb は日本で2番目の「何とか.rb」なんです。まさに Seattle.rb みたいなことをやりたいと思って、2008年に立ち上げましたが、いつまでたっても、僕らはこうはなっていないですね…どうしてだろうな。みんながみんな、コードを書きに来る人ばかりでもないからですね、今のところは。

実際に手を動かすエンジニアが評価されるフェアな世界が良い

谷内:
最後に、日本のエンジニアの評価についておうかがいさせてください。

松田:
日本のエンジニア界、ブログとかポエムを書いている人の方が目立っちゃうんですよね。間違った方向に進んでいるなと感じます。コードを書いている人はそんなに注目されないけど、何もコードは書いていなくても情報発信している人が「やたらできる」と見られたりしますよね。そういう人が出してきた Pull Request が本当にひどくて絶望することもあって、「コードを書いていない人でも目立てる世の中なんだな」と実感します。

谷内:
コードを書いていない、というのはどんな風に分かるものなんでしょうか?

松田:
コーディングテストなんかでコードを書いている様を眺めると、できること・できないことが見えるので一発で分かります。あとは、適切な粒度でコミットできるか。モデルを作ったぐらいでなくて、index 作ったらコミットするかな、とか…人によって基準は違うと思いますけど。それからちゃんとテストを書いて、コミットコメントもちゃんと書けているか、などで判断しますね。

谷内:
それだけで結構分かるものなんですね。

松田:
コードを書いている人が評価される世の中、良いと思いますね、実際。オープンにすることでお互い評価しやすくなるし、できる・できないがわかりやすいし、フェアだと思います。

谷内:
ありがとうございます。今の Forkwell Portfolio がその世界を作ることができるかと言えばまだまだですが、本日いただいたお話も踏まえて、もっともっといい方向に持っていけると思いました。引き続き、面倒を見てもらえると嬉しいです!



[宣伝] Forkwell はコードを書いている人が評価される世の中を作りたいと願っています。

Forkwell Portfolio」上で GitHub リポジトリを登録すれば、あなたのコードをグラフィカルに可視化することができます。

あなたもグラフを作って、松田さんや周りのエンジニアと比べてみませんか?

登録はこちらから