こんにちは、hachi8833です。RubyとRailsのコアコミッターとして著名なAaron Patterson氏(GitHub名: tenderlove)の30分にわたるロングインタビューを今週と来週の2回に分けてお送りいたします。HTTP/2、Rack、WebAssemblyといった技術的な話題や、GitHubやRailsセキュリティチームでの仕事、趣味や日本語学習、若手開発者へのアドバイスなど、多岐にわたった内容です。
概要
原著者の許諾を得て翻訳・公開いたします。
- 元記事: INTERVIEW: Aaron Patterson, Rack, Github and BBQ
- 著者: Vera Rabkina
- 元サイト: RubyroidLabs Blog: 有用な記事が多く、おすすめです。
写真はすべて元記事からの引用です。
[インタビュー] Aaron Patterson(前編): Rack、Github、バーベキューなど(翻訳)
Aaron Patterson氏はRubyの世界で多くの尊敬と賞賛を集めている開発者です。RubyとRuby on Railsのコアチームメンバーとして、Aaronはプロ開発者としての素晴らしいスキルのみならず、それを上回る人柄のよさでも知られています。RubyConf.BYの会場でAaronに会ったValentine Zavadskiy(RubyroidLabs CEO)とDmitry Zhlobo(Datarockets)が、Rubyの将来像からAaronの好きなバーベキューのレシピに至るまであらゆることを質問しました。
1. GitHubについて
現在はGitHubで働いていらっしゃいますね。GitHubでどんなことをなさっているのか、あなたの経験やバックグラウンドを交えてお聞かせいただけますか
はい。私はGitHubで働いておりまして、ここ最近のプロジェクトはRubyのガベージコレクタ(GC)に取り組むことがかなり多くなっています。私はシステムプラットフォームチームに所属していて、そこでは下のレイヤーに関することを扱っています。しかしここ最近私がそのチームで集中的にやっているのは、もっぱらRubyのGCです。基本的にGCをハックしてますね。
つまりRubyよりC言語を使うことが多い?
RubyよりC言語の方が多いですね、やっぱり。私は今でもRuby関連の面倒を見なければなりませんが、ここ最近、一日のほとんどはC言語のコーディングに終始しています。残念なことに(笑)。
2. 日本語について
日本語を学んだ理由はもしかしてそれでしょうか?
ですね。実際、私がRubyを学び始めた頃、たしか2006年ごろだったと思いますが、コード例をググって調べまくっていたときに、あるブログ記事を見かけたんです。そのブログは日本語だけで書かれていて、コードは読めるものの、それ以外のところはさっぱりでした。そこに何と書いてあるのかをどうしても知りたかったのが、日本語を学ぶようになったきっかけですね。あれから11年経った今では日本語ブログ記事を読めるようになりました。日本語ブログを読めるようになったことについて、それ以上の意味はありませんが。
日本語ブログを読めるようになってよかったことは?何か得たものは?
ありませんでした。11年かけてわかったのは、その日本語ブログは別によくなかったということでした。
3. プログラミングのきっかけ
ひとつありきたりな質問をさせてください。プログラミングをするようになった経緯は?今のあなたはC言語もRubyも同じように使っていますが、そこに至るまでのエピソードなどがありましたらお願いします
プログラミングに夢中になったのは高校生のときでした。実はその前にプログラミングの授業を取っていたんですが、ちゃんとした授業と言えるものではなく、小学校の教室にパソコンが1台置いてあったというだけなんですが、そのパソコンでよく遊んでました。最初の体験はだいたいそんな感じでしたが、実際にプログラミングを始めたのは高校のときだったと思います。初めて自分のパソコンを手に入れたのは1988年で、最初に書いたプログラムはBASICでした。当時パソコンの本を一冊持っていたんですが、その巻末にすごく長い天気予報のプログラムが掲載されていたんです。基礎的な機械学習でやるみたいに、データを入力して天気がどうなるかを予測する感じのものです。そして私はそのプログラムを自分で書いて入力しました。6ページぐらいにはなったでしょうか、でもそのときはこれっぽっちも動きませんでした。今度はプログラムを隅から隅までチェックし、本と一字一句違わないよう注意深く入力したのですが、それでも動きませんでした。そのときは「こいつダメだ。こんなんじゃ何にもできやしない。」って思いましたね。それが最初のプログラミング体験です。
4. GitHubとRails
GitHubの話に戻りましょう。GitHubはpublicなRailsで動いているのですか?
もちろんpublicです(訳注: Railsに手を加えていないということ)。productionはRails 3.2で動いていますが、現在はRails 4へのアップグレードを進めていてリリース直前です。そう遠くないうち、あと数か月もすれば4.2にアップグレードされるのではないでしょうか。まだ失敗するテストが10個ほど残っていますが、それをつぶせばリリースは間近です。
そのテスト、削っちゃったらどうですかw
まったくですね。削ってしまえば丸く収まります。
あなたは今でもGitHubがRailsアプリだとお考えでしょうか?
もちろん。GitHubは巨大なRailsアプリですよ。周辺にはたくさんのシステムがありますが、それでもメインのアプリは間違いなくRailsです。ひとつの巨大なモノリスといえますが、そこではサービスも多数動いています。私たちはWebサーバーでGitを動かしていません。バックエンドサーバーがあって、Webサーバーと通信しています。巨大モノリスと多数のマイクロサービスが通信しているので、マイクロサービスと言う方が当たっているかもしれません。奇妙に思われるかもしれませんが、私たちはモノリスと呼んでいます。しかし戦略的には、アプリからあるものを抽出したと考えています。それでもRailsアプリであることは間違いありません。
モノリスの世話はおおむね順調ですか?
GitHubをモノリスとして扱い続けるべきかどうかについてはこれまでも会議でさんざん議論になりました。そのときの議論や、マイクロサービスに移行すべきかどうかという議論で中心になったのは、デプロイの迅速さです。GitHubでの仕事の進め方はこんな感じです: 誰かがバグを修正し、プルリクをレビュアーに送信する。レビュアーが合否を出したら、バグを修正した者がproductionにコードをデプロイしなければなりません。
GitHubには多くのエンジニアがいて、業務時間内はほとんど10分おきぐらいにデプロイしています。エンジニアがたくさんいる環境では、10分待ちでも長すぎるという問題があります。変更点をデプロイするのに列の最後尾に並び、並んでいるエンジニアの数☓10分だけ待たされるなど耐え難いことです。今構想中のソリューションはこんな感じです: もしもっと多くの小規模なサービスに分割すれば「OK、バグの修正が必要だけど、バグはこのサービスにあるから自分がやっておくよ」という具合にできるでしょう。そうすれば、そのアプリのデプロイ待ちは従来のアプリの待ちより短くなります。
マイクロサービスへの書き換えは可能だと思いますか?どのぐらい大変になりそうですか?
そこのところはわかりません。書き換えを行うということではなく、単に「アプリから抽出できる機能は抽出しよう」と考えているに過ぎません。認証関連のコードなどがそうです。そうした機能は特定のサービスに引っ越すなどするかもしれません。そうした箇所のコードを見て、そこからコードを切り出して他のサービスに置けるかどうかを見るということです。
RubyやRails以外の環境、たとえばJavaなどに移行するという話はありますか?
それはないと思います。既にC言語のコードやC++のコードもたくさんありますので。取り組まなければならないコードは多いのですが、そのほとんどはRubyです。どうやったらメインのアプリが他の言語に移行できるのか、私には見当もつきません。実のところバックエンドサービスの1つで、レガシーコードが実際にErlangサーバーで使われていましたが、その部分はうまくスケールアップできないことが判明したため、ErlangからRubyに切り替えました。今はその部分はRubyのサーバーになっています。メインのWebサーバーは他のサーバーと通信しなければなりませんが、そのプロトコルは何とErlangなんです。しかし通信するサーバーはどちらもRubyで書かれているので、Erlangプロトコルを喋ってはいてもRubyサーバーです。その部分はさすがに変だなと思いますね。
5. バーベキューとベーコン作り
ところでバーベキューがお好きだそうで
はい、好きです。
バーベキュー好きが高じて、肉を買いつける会社までお持ちだとか
そのとおりです。
お好みのバーベキューレシピを教えていただいてよろしいですか?
私が好きなのはベーコン作りの方なんです。ベーコン作りは実にいいものです。基本的にガーリック、月桂樹、黒砂糖、塩だけを使い、豚バラ肉に詰め込んでから冷蔵庫で数日寝かせ、3時間ほど燻製にするだけです。これでベーコンの一丁上がり。本当においしいですよ。
ベーコン好き向けのハッシュタグを作りませんか?#aaronbacon
とか。もうすぐ夏ですし、ベーコンを作ったらそれであなたにお知らせすると
おお、それはいいですね。
(来週の後編に続く)
[インタビュー] Aaron Patterson(後編): Rack 2、HTTP/2、セキュリティ、WebAssembly、後進へのアドバイス(翻訳)
追記
「RubyConf」→「RubyConf.BY」
「日本語ブログは良くなかった」→「その日本語ブログは良くなかった」
link: Aaron Patterson(前編): GitHubとRails、日本語学習、バーベキュー: https://t.co/AbfpNg0kRM— Yukihiro Matsumoto (@yukihiro_matz) 2017年7月5日
御大自らツッコミいただき恐縮です。ただいま(7/5 19:02)指摘のとおり修正および本項を追記いたしました。