かなりすごいブログ

今年こそRubyを始めたいあなたに!ももんが流・最強のRuby学習法

Ruby Advent Calendar 2013 1日目

Ruby Advent Calendar 2013、1日目の記事になります。

こんにちは。1日目の記事ということでかなり緊張しています。

さて、いつもネタ記事ばかり書いている私ですが、さすがに1日目ということで、入門的な内容、つまり、これからRubyを始めたい方のための記事を書いてみたいと思います。真面目に。

実は、私もRubyを使い始めてから1年も経っていないのですが、ある学習法を取り入れることで、飛躍的にRuby力を向上させることに成功しました。今回はその方法をお伝えします。

ステップバイステップ、ももんが流Ruby学習方法

ステップ1

まず、
Minecraftを購入します。

Minecraft-logo

Minecraft

ステップ2

Minecraftで遊びます。

2013-04-06_19.38.552013-03-31_20.16.13

images by aoisensi

ステップ3

「そろそろマルチプレイやるかー」と言ってマルチサーバーを立てて遊びます。

tumblr_miolg2ceuM1s6y1aoo1_1280tumblr_mipit1mkUU1s6y1aoo1_1280tumblr_mirok2luZZ1s6y1aoo1_1280tumblr_mirojz6AJQ1s6y1aoo1_1280tumblr_mirok4G3Ik1s6y1aoo1_1280tumblr_mirojxWtUQ1s6y1aoo1_1280

photos by sixeight

ステップ4

「ほうほう、CraftBukkitという非公式サーバー実装があって、ユーザーが開発したBukkitプラグインを追加することにより色々な機能を追加することができるのかー」と言ってマルチサーバーを公式のものでなくCraftBukkitに移行します。

ステップ5

「MinecraftはJava製なので、オリジナルのBukkitプラグインを作るにはJavaを書く必要があるのかー。どうせならJRubyで書きたいなぁ」と思います。

ステップ6

「おお、PuruginというBukkitプラグインを使えば、JRubyでBukkitの挙動を拡張できるのか!」と思い、Puruginをインストールします。

purugin_logo_big

ステップ7

Minecraftで遊びながらJRubyによるプログラミングを行うことで、Ruby力がメキメキと上昇します。

また、普通人間は毎日18時間Minecraftをプレイしますが、これは、Minecraftで遊ぶ時間の1/3をPuruginによる開発に費やすことで、毎日6時間Rubyの学習を無理なく続けられることを意味します。

ステップ8

気付いたらRuby力が向上していた

真面目な解説

はい、ということですごい真面目にステップバイステップでのRuby学習方法をお伝えしました。嘘です、不真面目でした。

しかし、上に書いた内容は全くのネタというわけではなく、私が実際にRuby力を向上させた方法でもあります。

この方法には、プログラミングを学習する上でのすごく大事な要素が詰まっています。

  • 楽しみながら学べること
  • 複数人での開発によって、他の人の良いコード学び、自分の悪いコードを改めることができること
  • ゲームの動作速度に影響を与えないために、非効率的すぎるコードの書き方を改められること

プログラマ同士で集まりマルチサーバーの挙動をJRubyで拡張していく、という遊び方をすることで、自然にお互いがコードレビューを行っていく形になりますし、他のプレイヤーが書いた良いコードを読むことでRubyへの理解力が深まります。特に、私にとってのujihisaさんの様な、レベルの高いプログラマと一緒に遊ぶことができれば、その成長は顕著でしょう。

また、今回はPuruginというBukkitプラグインをご紹介しましたが、私の場合、私の友人でありプログラミングの師匠でもあるujihisaさんが開発したmckokoroという同類のプラグインにてJRubyによるBukkitの拡張を行っていました。

https://github.com/akechi/mckokoro

mckokoroPuruginより優れている点として、CraftBukkitサーバーの再起動を伴わずに機能の追加などを行える、動的デプロイ機能が挙げられます。これは、githubのwebhookを起点としてmckokorosinatraを用いて用意しているAPIを叩くことで、mckokoroがgithubから最新のコードを取得し、JRubyコードをそのまま評価することで実現されています。

これにより、再起動を行わず素早くMinecraftの機能拡張を行っていけるので、特に複数人で遊ぶ際にとても重宝します。

あなたにmckokoroでなくPuruginをご紹介したのは、mckokoroは配布を前提として作られていないので、コアの実装とmckokoroプラグイン(JRubyによってBukkitの挙動を拡張する部分)の実装が分離されておらず、全てがひとつのgitリポジトリにまとまってしまっているためです。

そういった事情から、mckokoroを導入すると、私やujihisaさんが遊んでいるBukkitサーバーの機能拡張が全て付属してきてしまうのですが、それでも良いので試してみたいという方は私が書いた「CraftBukkitからmckokoroまでの導入手順」を参考にして頂ければと思います。

現在、mckokoroの後続ソフトウェアであるneocloftというBukkitプラグインの開発が進められています。

neocloft

これは、誰でもご自分のBukkitサーバーに導入できるように、neocloftコアneocloftアプリ(JVM言語によってBukkitの挙動を拡張する部分)の実装が疎結合になっています。また、neocloftでは、JRubyだけでなく、コードのeval機構を持った任意のJVM言語、つまりClojureやJythonなどを使ってneocloftアプリを記述することが可能です。mckokoroと同じく再起動を伴わない動的デプロイにも対応しているので、ClojureやPythonの勉強をしたい方にも良いのではないでしょうか。neocloftの正式リリース時には、詳細な導入解説記事を書く予定です。

おわりに

いかがでしたでしょうか。この記事があなたがRubyを学習するためのきっかけになれば幸いです。

Ruby Advent Calendar 2013、2日目の担当はanoworlさんです。内容は「最高のWeb API開発」との事らしいので、明日は多分真面目な記事が読めるのではないかと思います。