諸事情あって社内転職した話

この記事は Sansan Advent Calendar 2017 の 20 日目にあたるものです。

まさかの id:dotrikun話が被って しまいました。しかもあっちの方がジョブチェンジ具合は大きくて参考になること書いてる。。。

社内転職して Ruby エンジニアになりました

諸事情あり、別システムを開発する社内の別部署に異動して、 C# エンジニアから Ruby エンジニアになりました。
それに伴って、技術スタックも大きく変わっています。

前: Windows, C#, ASP.NET MVC, PostgreSQL 他  
今: Linux/Mac, Ruby, Rails, MySQL 他  

開発するシステムのアーキテクチャや特徴、開発チームの構成も変わりました。

前: モノリシック、リッチ UI、複雑な業務要件・仕様、30〜40人で一つのシステムを開発  
今: マイクロサービス、UI なし (社内向けにちょっとだけ)、個々のサービスは比較的シンプルな業務要件、10 人以下で二つのシステムを開発  

同じ会社で同じソフトウェア開発でしょ?と舐めてた部分があったのですが、実際は色々と違って驚きました。
この記事ではそれについての感想を書いていきます。

書いている人について

社会人になってからずっと、 web アプリ開発をやってきました。

サーバ側の業務コードは C# か PoweShell でしか書いたことがありません。(VB...? 知らない子ですね)
プライベートでも C# です。
ちょっとしたスクリプトを書きたいときは、 PowerShell か、LINQPad + C# でした。

RubyRails 3 が出たときに Rails ガイドを見ながらちょっとサンプルアプリ作ったくらいなので、
まだまだ Ruby に関する理解は足りません。以降の記述についてはそのあたりを考慮して多少おかしなところは温かい目で見てもらえると幸いです。

言語について

言語についての比較は web に多々転がっていると思うので省略します。
時間のある方は 弊社 C# エンジニアが比較記事を書いている ようですのでご参照ください。

まあコード規約と型は欲しいです。

Visual Studio の偉大さを知る

C# + Visual Studio + Resharper が便利すぎます。

今は Rubymine を使っています。
Rubymine も Visual Studio に負けず劣らず基本的な便利機能は揃ってはいますが、auto complete や定義元へのジャンプ、
リファクタリングの精度に大きな開きを感じます。

とはいえ、これは IDE が悪いというより Ruby が動的型付けなので仕方ないことなんでしょうね。

. と tab を押しておけばそれっぽいコードが書けた頃に比べるとキータイプの量は増えた気がします。

typo してしまったりとか、(単純に名前で検索してるっぽいので) メソッド定義元が大量に出てくるといった場面に直面すると、
やっぱり Visual Studio がいいなぁと思ったりはします。(IronRuby の話はやめましょう)

Railsツンデレ

RailsDSL とかマクロとか、すごく便利ですね。

知らなかったらコード読んでも何やってるか分からないという参入障壁の高さや、ちょっと変わったことをやろうとしたときに
大変という話はあると思いますが、全体的には楽に開発が出来るフレームワークだと思います。

また、究極は要件によるという話はあれど、フレームワークの設計思想に非常に敏感であると感じました。

あれをしたいこれをしたいと考えて Rails ではあまりやらないようなことをすると、 rail に乗ろう とか DHH の意向に沿わない とたしなめられます。
皆が同じような価値観・認識を持って開発していることは Rails 開発のすごいところだと思います。
同じ Rails 開発なら、別会社に転職してもすんなり溶け込める気がします。

ASP.NET で言うと Scott Hanselman の前でも同じこと言えんの? になるかもしれません。こう言われてどう感じるかは人によります。

テスト書くのが楽

本当に楽。

モックを挿すのがとても簡単という単純な話なのですがね。

あとは、テスティングフレームワークRspec を使っているのですが、書き方がある程度統一されるので他人のテストも読みやすいです。
let や豊富なマッチャーなど、痒いところに手が届く感じもいいです。
英文的に自然になるかどうかはあまり気になりませんでした。

FactoryBot というライブラリを使ってテストデータも簡単に作成できます。

開発スタイル

やっぱり関わる人数が違うと、開発スタイルは全然違うなという印象を受けます。

例えば、プルリクエストマージされる速度が圧倒的に速いです。
システムの大きさに対して一人の開発者が見える範囲が相対的に大きいので、他人が書いたコードに対する信頼度が違うのかなと考えています。

誤解の無いように補足すると、別に信頼してるから良いという話ではないです。
レビューで拾われるべきことが拾われないこともあります。何を優先するかのスタイルの違いですね。

転職してみようか

なんかもうちょっと色々あった気がしますが、もういい時間なのでまとめます。

環境が変わると新しい自分に出会えるので、何か煮詰まってたら転職を考えたらいいんじゃないかと思います。
私は新しい環境になかなか馴染めなくて、意外と頭が固くなってることに気づきました。
社内転職が出来るのであれば、新しい環境と言いつつも知っている人が何人かいるので質問がしやすかったり、 最悪元の環境に戻れるという安心感も得られていいですね。