Rubyに乗り換えて感じたことのまとめRubyはじめに最近、言語の型について語っているブログをよく見かけます。Rubyに乗り換えて感じていることを書きたいな〜と思っていたので、このタイミングでちょっと書いてみることにします。今回のエントリはあくまで僕個人が感じていることを書くだけであって、別に言語の優劣を述べようとしているわけではありません。そもそもプログラマ個人のバックグラウンドや知識、スキル等々によって感じ方や見解は異なってしかるべきだと思うので、その前提で読んでもらえればと思います。僕のバックグラウンドまず、最初に僕のバックグラウンドを紹介します。この業界に入って最初の3年ぐらいはJavaをよく書いていた。Hibernateとか、そういう時代。前職ではC#/ASP.NETをよく書いていた。型推論とかLINQとかは結局実務では使わずじまいだった。Rubyを本格的に使い始めてからは今で1年ぐらい。中級者と名乗れるかなと思うぐらい。使っているエディタはVim。あと、前職ではVBScriptやJScriptを使ってお助けプログラムみたいなものはよく書いていました。Ruby以外のスクリプト言語の経験が皆無、とかいうわけではないです。StudioのようなIDEが恋しくなるときがあります。IDEが恋しいときはこんなことをやりたいときです。ブレークポイントを付けてデバッグ実行したい変数やメソッドの定義元にジャンプしたい変数名やメソッド名を一括でリファクタリングしたいもちろん、Vimでもプラグイン等である程度カバーはできるのですが、標準機能で簡単に実現できるのはIDEのメリットかなと思います。RubyにもいくつかIDEがあるようですが、僕はまだちゃんと使ったことがないので詳細に比較することはできません。デバッグ実行は激しくハマってしまったときの重要なツールになるので、Rubyの開発環境でも早く改善しないといけないな〜と思っているところです。RubyにもRubyMineがあります!IDEが恋しいと書きましたが、現在はRuby用IDEのRubyMineを使っています。有料ですが、お金を払う価値はあるとても便利なIDEです!詳しくはこちらの記事をご覧ください。qiita.comqiita.comライブラリやフレームワークのバージョンアップ時はコンパイラチェックがほしい後方互換性のない変更点がライブラリやフレームワークのバージョンアップに含まれる場合はコンパイラのチェックがあるとうれしいなと思います。Grep検索や自動テストを駆使すればある程度のところまではカバーできますが、コンパイラがエラーを出してくれる方が精神衛生上安心です。タイポで変にハマるときもある当然と言えば当然ですが、Rubyはタイポしていても実行するまで分かりません。わからないエラーの原因を調査していったら、実は自分のタイポが原因だった、ということはたまにあります。Rubyでも意外といけるじゃんと思ったところ大規模なプログラムで大事なのは言語の選択よりもプログラマのスキル大規模なプログラムや他人の書いたコードを変更するときは、JavaやC#の方が安心できるんじゃないかと思いましたが、そのあたりはRubyでも問題ありませんでした。そもそもソニックガーデンのプログラマが書くコードはどれも読みやすくてDRYが徹底されているので、「直すのはたぶんここだな」というポイントさえ見つければ、たいてい問題なく変更が完了するからです。JavaやC#で書かれた小さなプログラムであっても、スキルに難のあるプログラマが書いたコードを変更するときの方がはるかに苦痛でした。Vimにはもっとリッチな自動補完用のプラグインがありますが、設定が悪かったのか僕はあまりしっくりこなかったので、今はVim標準の補完機能を使っています。型情報がコードになくてもコードは読めるケースバイケースなので絶対ではありませんが、コードに型情報がなくても他人の書いたRubyのコードは読みやすいと思います。users"のように自明な型名をつけるぐらいなら、"users"とだけ書けば良いRubyの方が読みやすいです。コードを書くときも、型情報がコードに出てこないので、それがかえってわかりやすい変数名やメソッド名を考えるための暗黙的な強制力になっている気もします。予備知識が全くないライブラリのコードを読んだりするときは「ここにはどのクラスのオブジェクトが入るんだ?」と分からなくなることもあるので、型情報を付けてほしい場合もあります。Rubyの方がいい!と思ったところIDEの起動やコンパイルの待ち時間がなくなったJavaやC#を書いていた頃はIDEの起動やコンパイルの待ち時間が長いことがかなり大きな不満でした。会社から支給されていたのがへっぽこPCだったという理由も大きかったと思います。逆に今使っているマシンはかなり高性能なので、単純にRubyの方が軽いと断言することはできないと思います。実際rakeタスクを起動したり、Railsのassetsをコンパイルしたりする時間は結構長いです。ちなみに、待ち時間でついTwitterを見たりしてしまうぐらいの時間を僕は「長い」と定義しています。DSLやテストコードのスタブ/モックが柔軟に書けるRubyのような動的な言語だと、事前にメソッドがなくても実行時にこしらえると言うことが可能です。以下はFactoryGirlというテスト用のデータを生成するライブラリのコードです。このコードにある"email"や"name"はRubyの構文上はメソッドです。プログラマはどこかで事前にemailやnameといったメソッドを定義しておく必要はありません。ライブラリが「未定義のメソッドはモデルの属性と見なす」といったルールで動的にメソッド呼び出しを処理してくれます。結果として、「あたかも設定ファイルのようなRubyプログラム」が書けるわけです。endendまた、テストコードのスタブやモックもJUnitやNUnitを使っていた時代に比べてかなり簡単に書けます。'テストなう'})もっとも、このあたりはイマドキのJavaやC#なら色々と便利なやり方があるんだと思いますが。便利なライブラリの導入が簡単RubyやRailsには便利なGem(Rubyライブラリ)がたくさんあります。JavaやC#でもたくさんありますが、いくつかのGemでは「これはスゴすぎる!!」と驚きました。kaminariというGemを使えば、ControllerとViewを数行変えるだけでWebのページング処理が実現できます。%>他にも「導入するだけでOK」とか「設定ファイルを変更するだけでOK」みたいなGemがよくあります。このあたりはRubyの柔軟性がなせる技なんじゃないかと思います。その他Rubyに乗り換えて感じたことデバッグ時にライブラリのコードを読むようになったRubyはスクリプト言語なので、ほぼすべてのプログラムをテキストファイルとして読むことができます。ライブラリが思ったように動かないときはライブラリのコードを読んで原因を調査することが多くなりました。JavaやC#でもオープンソースプロダクトであればコードを読むことはできるのですが、jarやdllだったりするのでついついドキュメントやネットの情報ばかりを追いかけていました。これは習慣的なところも大きいので必ずしも言語の違いが原因とは言えないですけどね。Rubyはプログラマひとりひとりの存在感が大きい便利なGemを初めて使うときはたいていそのGemが置いてあるGitHubリポジトリに一度はアクセスします。GitHubページを見ると、そのGemの作者やコードのコミッタの情報がすぐ目に飛び込んできます。Javaを使っていた頃は「Apacheプロジェクト」「Jakartaプロジェクト」というなプロジェクト名でライブラリが提供されていたり、C#だとそもそもオープンソースライブラリの数自体がJavaやRubyよりも少ない印象だったりして、あまりプログラマ個人の存在を意識することはありませんでした。Rubyを使っていると、「この人はすごいRubyプログラマだな〜」と感じることが以前に比べてずいぶん増えた印象です。そもそも、RubyのパパことMatzさんの存在感がかなり大きいですもんね。Railsは簡単なフレームワークだとよく言われていますが、YESかNOで答えろと言われたら、僕はNOだと思っています。確かに、単純なブログアプリやマスターメンテナンス画面を作るだけなら簡単ですが、実務で作るプログラムはそんなに単純ではありません。Railsを始めた最初の頃はサンプルコードに載っていないような、ちょっとひねった仕様を実現するのに結構苦労しました(というか今も時々苦労してます)。あと、実務でコードを書くときはRails単体ではなく、かならず周辺のGemも必要になってきます。Gemも確かに便利なのですが、サンプルコード以外のことをやろうとするとやっぱり、「はて、どうやるんだ、コレ??」と悩んでしまうことが多いです。Railsやよく使うGemに本当に精通している人なら爆速で作れると思いますが、そうでない場合、このあたりはどんな言語やフレームワークを選んでも結局大差ないのかも、と思ったりします。Rubyは書いてて楽しいこれは完全に100%主観であることを分かった上であえて書きますが、僕はやっぱりRubyは書いてて楽しい言語だと思います。楽しいというか、使えば使うほど手に馴染む革製品のような良さを感じます。多少のデメリットはあっても「好きだから許す」と思いながらRubyを使っています。まとめというわけで今回はJava/C#からRubyに乗り換えて感じたことをいろいろ書いてみました。最初に書いたように、プログラマ個人のバックグラウンドや知識、スキル等々によって感じ方や見解は異なるので、人によっては「あんたは何を言ってるんだ」と思うようなところもあったんじゃないかと思います。すべての言語において隅から隅まで精通している人なんていないはずなので、こういう話は誰が書いても多かれ少なかれツッコミどころが出てくるんじゃないかと思います。宗教戦争を巻き起こしやすいので、言語の根源的な優劣を決めつけるような書き方は避けるべきですけどね。このエントリがRubyに乗り換えようと思っている人の何か参考になれば幸いです。tryRubyを使い始める前に同じようなテーマで書いてみたエントリです。僕の当時の想像と実際がどう違ったのか比較してみると面白いかもしれません。先月、CodeIQにビンゴカード作成問題を出題しました。はてなブログPro株式会社ソニックガーデンで働くRubyプログラマ。2017年11月に「プロを目指す人のためのRuby入門」を出版。blog)はてなブログをはじめよう!JunichiItoさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。