Rubyとは一体どんな開発言語なのでしょうか?
日本人が開発したプログラミング言語というくらいは耳にしたことがあるかと思います。
本記事では、Rubyとは具体的に何ができて何ができなくて、学ぶにはどうすればよいのだろうかを探ります。
解説の前に、現役プログラマーの方へ向けてプログラミングの定番「Hello World」を、JavaとRubyでそれぞれ作ってみました。コードをご覧ください。
// JavaでHello Worldを実装してみる class HelloWorld { public static void main(String[] args) { System.out.println("Hello, World!"); } }
# RubyでHello Worldを実装してみる puts "Hello, World!"
どちらが良いということはないのですが、それなりに雰囲気のちがいを感じますよね。
前置きが長くなりました。早速始めましょう。
目次
Rubyとは
Rubyとは、冒頭で触れたとおり「日本人のまつもとゆきひろ氏が考案、開発したプログラミング言語」です。
人間が話す言語には日本語や英語、中国語があるように、プログラミングにも言語というものが存在します。プログラミングではJavaやPHP、Rubyがあります。Rubyは数あるプログラミング言語の1つです。
Rubyの歴史
Rubyは1993年2月24日に生まれ、1995年12月に発表されました。名称のRubyの由来は、その頃すでに存在していたプログラミング言語Perlが6月の誕生石であるPearl(パール:真珠)と同じ発音なので、まつもと氏の同僚の誕生石(7月)のルビーを取って名付けられました。
ところでRubyが誕生した1950年といえば、近年のプログラミングの歴史の中でどういう位置づけなのでしょうか?この頃他に何があったのか、ちょっとのぞいていみましょう
-
- 1990年 グイド・ヴァンロッサムによってPythonが開発される
-
- 1991年 マイクロソフトがMicrosoft Visual Basicを発表。
-
- 1995年 ボーランドがDelphiを発表。
-
- 1995年 サン・マイクロシステムズがJavaを発表。
-
- 1995年 ラスマス・ラードフがPHP/FI(のちのPHP)を開発。
-
- 2002年 マイクロソフトがC#を発表。
現在40代のエンジニアの方々には、懐かしい思いのする年表です。
こう並べてみると、Javaと同じ年にRubyが発表されたことに驚きです。それまでは汎用機が主流でしたが、オープンシステム化の流れが加速し始めた頃です。流れに乗ってJavaがどんどん勢力を伸ばし、誰も彼もがJavaに乗り換える一方、Rubyもしっかりと成長していたようです。
Rubyでできること
Rubyはプログラミング言語であることが分かったのですが、一体何ができるのでしょうか?以降それを探っていきます。
Webシステム開発(Rails, Sinatra)
Rubyといえばコレ!というくらいです。ただしこれはRubyというより、Rubyをベースとしたフレームワーク(いわゆるパーツのライブラリー)を活用するのが前提です。具体的には、Ruby on RailsやSinatraがあります。どちらが優れているというわけではありませんが、Railsの方がより有名です。
2つのフレームワークを見てみましょう。
Ruby on rails
Ruby on RailsとはMVCベースのWebシステム開発フレームワークです。2004年に初バージョンがリリースされ、2018年1月現在の最新バージョンは5です。
こちらが公式ホームページです。すべて英語です。簡単に内容を抜粋してみましょう。
モダンなWebアプリ開発をしたくても、そのための学習は相当な労力を要します。しかしRailsを使うと、簡単にかつ楽しくできます。
Railsは、魅力的なWebアプリを開発するために必要なものをすべて含んでいます。巨大かつ親切なコミュニティが、あなたの学習をサポートしてくれます。
あなたはすでに、Railsで開発されたWebサービスをお使いかもしれません。例えば、GitHubやShopfy、AirBnb、Hulu、Cookpadがあります。有名なサイトだけ名前を挙げましたが、2004年のリリース以来、それこそ何十万というWebアプリがRailsによってリリースされています。
Railsはオープンソースで提供されていますので、無償で使うだけでなく、Railsをよりよくするための活動に参加することも可能です。すでに4500人もの人々が参加しています。
Sinatra
Railsばかりでは不公平なので、Sinatraも本家英語サイトから、部分的に抜粋します。
Sinatraは、必要最小限の労力で、Webアプリを開発できるDSL(ドメイン固有言語:何かに特化した言語。ここではWebアプリ構築専用の言語という意味)です。
SinatraはカリフォルニアのBlake Mizeranyによって設計、開発されました。Sinatraは企業の強力な支援のおかげで活動を継続できました。過去にHeroku、GitHub、そしてEngine Yard、現在ではTravis CIから経営的かつ気持ちのこもった支援を受けてきました。
ということです。
ちなみにSinatraのトップページにある以下のソースを実行した結果、どうなるかお分かりですか?
require 'sinatra' get '/frank-says' do 'Put this in your pipe & smoke it!' end
HTTPメソッドのgetでfrank-saysというアドレスにアクセスがあったら以下のように表示せよ、という意味です。環境構築して「アプリのトップURL/frank-says」というアドレスにアクセスすると、 ‘Put this in your pipe & smoke it!’と画面に表示されます。
つなげてみると「frank says “put this in your pipe and smoke it!”」となります。frankというのはトップページを見ると、どうもフランクシナトラのようです。おしゃれですね。
Sinatraは軽量なフレームワークです。上記のソースを確認するときも、gemコマンド1つでSinatraをインストールし、上記のソースファイルを作り、即実行。そこまで数分とかかりませんでした。
組み込み(mruby)
意外ですが、Rubyは組み込みに使えます。正確にはmrubyです。mrubyとは「Rubyの良さを組み込みへ」を合言葉に、まつもとゆきひろ氏主導で開発された組み込み用のRubyです。mrubyは軽量かつ省メモリで動作するので、家電やボードへの組み込みはもちろん、さらにスマホアプリやゲーム・ソフトウェアへの組み込み、テキストエディタの機能拡張にも対応しています。
mrubyをもとに作られたmod_mrubyを使って、Apache自体の制御や機能拡張ができます。応用すればレスポンス増大にともなって自動で別サーバーを立ち上げて負荷分散といったことが可能です。
RubyといえばRails、というくらいWebアプリのイメージが強いRubyですが、決してそれだけではないのです。
Macのデスクトップアプリ開発(MacRuby)
MacRubyを使って、Mac用のデスクトップアプリ開発ができます。2008年5月にAppleによって発表されて以来、一時はObjective-Cの代替となる安定した製品にまでなりました。
しかし現在このキーワードで検索しても、最近の情報はほとんどありません。MacRubyの流れを受けて、RubyMotionがその代わりになったからです。
2011年11月にリード開発者であるLaurent SansonettiがAppleを去りScratchwork Developmentを設立、2012年5月にはRubyMotion 1.0が発表されました。
通常Androidアプリ開発にはAndroidSDK、iOSアプリやMacOSアプリ開発はSwiftといった切り分けができており、クロスさせることはできません。
RubyMotionを使うと、それだけでAndroid、iOS、MacOSアプリ開発すべてが、しかもRubyで開発することができます。Rubyはできるけど、Swiftは敷居が高そう・・・と思っていた方は、ぜひこちらのRubyMotionのサイトをご覧ください。とても分かりやすくまとめられています。
Rubyのメリット
数あるプログラミング言語がある中で、あえてRubyを使うことのメリットは何でしょうか?
シンプルで読みやすいコードが書ける
冒頭で書いたHelloWorldのプログラムを見てもお分かりかと思います。その他、もう少し具体例を見てみましょう。
(比較のためにJavaを出しますが、決してJavaが悪いというわけではありません。)
ソースファイルと同階層にあるtest.txtというファイルを読み込んで出力するプログラムです。まずはJavaから。
import java.io.File; import java.io.FileReader; import java.io.FileNotFoundException; import java.io.IOException; class fileRead{ public static void main(String args[]){ try{ File file = new File("test.txt"); FileReader filereader = new FileReader(file); int ch; while((ch = filereader.read()) != -1){ System.out.print((char)ch); } filereader.close(); }catch(FileNotFoundException e){ System.out.println(e); }catch(IOException e){ System.out.println(e); } } }
次にRubyです。
begin File.foreach('test.txt') do |f| puts f end rescue SystemCallError => e puts %Q(class=[#{e.class}] message=[#{e.message}]) end
単純に短ければ良いというわけではありませんが、雰囲気からしてシンプルになったのはお分かりでしょうか。
すべてがオブジェクト
Rubyの世界では、すべてがオブジェクトです。文字列だけでなく、数値すらもオブジェクトです。どういう意味かというと、見てもらったほうが早いかもしれません。
要件:数値を1から5まで表示せよ。
Javaならこうなります。
class fromOnetoFive { public static void main(String[] args) { int i = 1; for(cnt=0; cnt > 5; cnt++) { System.out.println(i.toString()); } }
Rubyではこうです。
5.each do | i | puts i end
他のオブジェクト指向言語でも、オブジェクト+ドットでメソッドを呼び出しますよね。まさしくそのノリで、5ですらオブジェクトなので、ドットとeachをつなげてeachメソッドを実行できるのです。
数値ですらオブジェクト、という証です。
他言語ならこういうあつかいができず、数値そのものの操作をするときには別途ラッパークラスを使うといった一手間が必要になります。
Rubyの将来性
現在すでに安定した地位を獲得したRubyです。求人数やGoogleトレンドサーチ、ブログサイトの記事件数など、どんな観点で見ても安定した感のある人気です。
ここでは別の観点でRubyの将来性を考えてみましょう。
IoT分野
IoT(Internet of Things:モノのインターネット)が叫ばれるようになってずいぶん時間が経ちます。2020年には500億のデバイスが人間を介さず通信するようになるという予測もあり、その予測が現実になると今までできなかったようなサービスが多数発表されるでしょう。
そんな世界において、Rubyの活躍する場はあるのでしょうか?
デバイスへの組み込みプログラムは、大半がCまたはC++で作られています。今後もその大きな流れはすぐには変わらないでしょう。では、IoTの流れが加速していく中で、そのスピードにCやC++で付いていけるでしょうか?もちろん可能なのですが、生産性の高いRubyを組み込みで使うことができれば、よりIoTの流れが加速するかもしれません。
現に、今現在それが可能となっています。
CやC++を使ってすでに開発された資産から、mrubyのプログラムを呼び出すことができます。その逆で、mrubyからCやC++のプログラムを呼び出すのも可能です。
つまり、IoTとRubyは実に相性が良いのです。今後の流れに期待できます。
ビッグデータ分野
この分野においては、残念ながらRubyはまだ波に乗れていません。
RubyにはPythonがもつ豊富なライブラリやGoogleのTensorflow(テンソルフロー)といったフレームワークに対抗するだけのツールはまだありません。
ただし、何もないかといえばそうではありません。
PyCallを使えば、NumPyやpandasといったPythonのライブラリを、Rubyから呼び出すことができます。またApache Arrowという、それ自体はツールではありませんが大量データを扱うためのフォーマットがあります。これがRubyにも対応しています。つまりPythonで処理した大量データをこの形式にして、Rubyであつかえるのです。
これはすなわち、大量データ処理をRubyで実装できることを意味します。
今後の発展に注目できますね。
おすすめRuby学習サービス5選
ドットインストール
初心者向け学習サイトの定番!もちろんRubyのコースもあります。Rubyを終えたらRuby on Railsのコースもありますので、ぜひチャレンジしてみてください。
Progate
こちらも初心者向け学習サイトとして有名です。ドットインストールと同様、Rubyだけに限らず多彩なコースが用意されているのがいいですね。
Udemy
若干レベルが高くなりますが紹介しておきます。先ほどのサイトとは異なり、コースごとの買取で、コースを購入すると無期限で視聴できるのも嬉しいですよね。定期的にセールをやっています。
Schoo
Ruby専用のサイトではありませんが、Ruby以外も実にさまざまなコースがラインナップされています。プレミアム会員も月額980円からなので、コスト的に魅力です。
Railsチュートリアル
Ruby専用ではありませんが、Railsの世界まで踏み込めるので紹介しておきます。こちらも若干レベルが高いのですが、最後までたどり着いたときは、成長を実感できているでしょう。
おすすめRuby入門書5選
今度は定番の入門書です。
たのしいRuby 第5版 (SBクリエイティブ)
Ruby本の定番です。初版から14年読み続けられています。確かに網羅性は高く説明も豊富なのですが、若干教科書っぽいので最後までたどり着くのに気合が要るかもしれません。
>> たのしいRuby 第5版 (SBクリエイティブ) 出版社サイトはコチラ
改訂2版 パーフェクトRuby (技術評論社)
パーフェクトシリーズのRuby版です。こちらもよく見かけます。前版ではRuby1.9だったのですが、改訂版はRuby2.4に対応しています。前版にはなかったテスト関連の内容も追加されています。
独習Ruby (翔泳社)
独習シリーズのRuby版です。内容は良いのですが、2009年06月17日から版が上がっておらず、当時の安定版であったRubyの1.8.6をベースとしています。この点は非常に注意してください。
プロを目指す人のためのRuby入門 (技術評論社)
「言語仕様からテスト駆動開発・デバッグ技法まで」といったサブタイトルがついているとおり、内容が初心者から上級者まで幅広く対応できます。
>> プロを目指す人のためのRuby入門 出版社サイトはコチラ
Ruby on Rails 5アプリケーションプログラミング (技術評論社)
学習の定番であるScaffoldingから、SCSSやCoffeeScriptまで踏み込んで解説してあるので、読み応えがあります。
>> Ruby on Rails 5アプリケーションプログラミング 出版社サイトはコチラ
Rubyのサンプルコードが調べられるサイト3選
ある程度知識が付くと、今度はサンプルが欲しくなりますよね。実際の使い方を知りたくなったら、以下のサイトを活用してください。
Qiita(キータ)
トップページにある「Qiitaは、プログラミングに関する知識を記録・共有するためのサービスです。」というフレーズは伊達ではありません。キーワード検索で知りたいことを検索すると、モノによっては相当な数の記事がヒットします。
RubyLife
網羅性が高いので、頭から順番に見ていくのがよいでしょう。内容も奇抜なものはなく、平易なサンプルが多いので見やすいです。
逆引きRuby
知りたいテーマがはっきりと決まっている場合は、このサイトがオススメです。
まとめ
Rubyとは何かに始まって、将来性や学習サイトまでを解説しました。
今まで述べてきたことをまとめてみると、Rubyを習得すればさまざまなことができる!といえます。Web開発も、組み込みも、IoTもビッグデータも・・・今のうちにRubyを習得しておくと得をするのはいうまでもありません。