C# vs Ruby

Sansan Advent Calendar 11日目の記事です。

弊社には BtoB と BtoC、2つのサービスがあります*1BtoB のほうは C#、BtoC のほうは Ruby で開発されています。エンジニアのスキルセットとしてもかなり違っているようです。世の中的には C#Ruby はいろいろ違いすぎて、並べられること自体あまりないです。これらが比較にあがるのは弊社ならではだと思うので、弊社カレンダーを機に比較してみようと思います。

ちなみにぼくは BtoB のほうで C# を使って開発をしています。Ruby については、弊社の採用選考時に何か見せるものがないとあかんな…と思ってRuby で適当に何か書いた記憶がありますが、ほぼ完璧に忘れました*2。そんなわけで、C# に対して若干愛着はありますが、今回は公平に比較するため、比較項目としては世間一般に受け入れられている標準的な3つの指標を使いました

比較1:Visual Studio と相性がいいか?

最強のIDEです。これを使えない言語はもはや論外、その時点で選択肢から外れると言っても過言ではないでしょう。単純なキーワードマッチを超えたセマンティックなシンタックスハイライト、IntelliSense*3、リアルタイムなエラー分析、多様なリファクタリングツールなど、とにかくあらゆる便利機能が搭載されています。

C#Visual Studio は相性抜群です。Visual Studio 2015 では最新バージョンの C# 6.0 が使えます。Visual Studio を使ったときの C# の書きやすさはすさまじく、その関係性は徹底した練習の積み重ねにより息ぴったりのリズムネタを繰り出す芸人さながらであり、例えるならテツアンドトモのような一体感です。

一方で RubyVisual Studio の相性ですが、これはかなり距離があると言わざるを得ません。一応、がんばればどうにかならなくもないらしいですが、テツアンドトモの一体感には及ぶべくもありません。

比較2:Roslyn と相性がいいか?

Roslyn とは、 Visual Studio 2015 から新たに搭載された .NET Compiler Platform のコードネームです。上記のとおり Visual Studio はあらゆる便利機能を提供するため、コードに対してゴリゴリに構文解析・意味解析をかけます。一方、コンパイラ構文解析・意味解析をします。両者は同じコードに対して同じことをしてことをしてるんだから、Visual Studio もそのコンパイラを使ったらええやん?でもコンパイラと違ってコードの変更も即時適用したいやん?ということでそれらを満たすために作られたのが Roslyn です。

さて、C# と Roslyn の相性ですが、これが意外にも、最高の相性なのです。なぜなら、Roslyn は .NETコンパイラであり、C# .NET 上で動くことを想定して作られた言語だからです*4。その相性たるやすさまじく、 C# を「テツ」とするなら Roslyn は「トモ」。まさに阿吽の呼吸であり、なんでだろぉ~不可避なのです。

一方、Ruby と Roslyn の相性です。小一時間考えましたが、イニシャルの"R"が同じ以外の共通点を見出すことができませんでした。

比較3:ReSharper と相性がいいか?

Resharper とは、Visual Studio のアドオンとして提供されているリファクタリングツールです。「使ってへん変数があるで」「命名規則に沿ってへんで」「こう書いたほうが綺麗やで」「ここぬるぽで落ちるかもやで」「using 足りひんで、足しといたるわ」とか教えてくれて、確実にぼくより賢いです。コードの質が格段に上がります。これがない世界では、ぼくはいまごろ未確認クソコード量産生命体として政府の研究対象になっていたに違いありません*5

C#ReSharper の相性は、もう、めっちゃ最高です。ReSharper の対応言語は C#/VB.NET/XAML/ASP.NET/ASP.NET MVC/JavaScript/TypeScript/CSS/HTML/XMLであり、まさに C#/.NET開発において、なくてはならないツールです。では、C# を「テツ」とするなら、ReSharper はなんでしょうか…?そう、「トモ」ですC# と Roslyn がテツアンドトモであると同時に、C#ReSharper もまたテツアンドトモなのです。Roslyn と ReSharperトモアンドトモなのです。

一方、Ruby。"R"が同じ。以上。

結果

比較結果を定量化し、表にまとめたものが以下です。

比較項目 C# Ruby
1. Visual Studio と相性がいいか? 100 3
2. Roslyn と相性がいいか? 100 0
3. ReSharper と相性がいいか? 100 0
合計 300 3

厳正なる3つの比較を行った結果、意外にもC# がやや優勢のようです。誤解のないように言っておきますが、Ruby がいまどきのイケてる言語であることは間違いありません。ただ今回の結果から、C# はそのイケてる言語の約100倍イケてるということが明らかになったのです。

3つもの比較によってほぼ結論は出ているのですが、ここで1つ重要な比較を追加しておきます。それは、技術顧問との相性です。技術顧問の力を最大限に活用し、よりよい開発をしていくためには、技術顧問が精通している言語を使用することが大きなメリットになります。これを加味した比較結果が以下になります。ちなみに、弊社の技術顧問にMatz氏が就任されています

結果(最終版)

比較項目 C# Ruby
1. Visual Studio と相性がいいか? 100 3
2. Roslyn と相性がいいか? 100 0
3. ReSharper と相性がいいか? 100 0
4. Matz氏と相性がいいか? 2 768342391083256
合計 302 768342391083259

ハイ C# 終了〜〜〜〜〜〜〜〜〜〜!!!!
明日出社したら Visual Studio アンインストールしよ〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜!!!!!!!!!
全部 Ruby にしよ〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜!!!!!!!!!

Ruby に書き換えよ〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜!!!!!!!!!!!!!!
Rubyエンジニア 32493295418人採用しよ〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜!!!!!!!!!!!!!!

Ruby 最高〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜!!!!!!!!!!!!!!!!!!!!!!

*1:それぞれにiOS/Androidアプリもありますが今回は割愛

*2:1年前にエンジニア未経験として中途採用です。

*3:セマンティックなコード補完

*4:正確には、 C#コンパイルされて生成する IL が .NETCLI仕様に準拠して実装されている

*5:ReShaper でも解決できないレベルのクソコードは毎日せっせと量産しています。