016 2007年、最首社長は言った 「全エンジニアにRuby on Rails教育を!」


こんにちは、id:EC-OneのAkiです。

各所で花火大会も行われ、夏本番!という感じですね。EC-Oneイーシー・ワン)では、毎年恒例の江戸川花火大会見物も行いました。
これで高校野球の放送も始まったら、スイカを食べながらずっと見てしまいそうです。

2007年度の初めにナレッジセンターが始まったときのこと

EC-Oneで社内向けにナレッジセンターを始めた2007年度のこと、「ナレッジセンターとは何なのか」「それをどういう活動で表現していくのか」を担当の開発部長やメンバーと一緒に考えていた時に、担当役員だった社長から、ミッションのひとつとして与えられたのが「全社員がRuby on Railsをやれるようにする」でした。

当時のEC-OneはとあるB2CサイトのRuby on Rails(以下Rails)での開発をたった7週間という短期間で実現したことで、Railsの可能性に自信を持って、後続の案件をいくつか手がけているところでした。
その後もRailsが広がっていくだろうと予想すると、このタイミングでの全社員へのRails教育は必要不可欠な事だったのです。

また、会社全体としてRubyをやっていくんだ、という会社の方向性を社員全員に共有し、実感してもらうことも、裏側の目的としてありました。

教材準備

そこでナレッジセンターが「なるべく教材作りに時間とお金をかけず、受講者にもなるべく受講時間の負担をかけない」という考えで用意した教育コンテンツは「市販の書籍を使って2日間で説明」というものでした。

そこで当時選んだ本がこちらです。

実践 Ruby on Rails Webプログラミング入門―無駄なく迅速な開発環境

実践 Ruby on Rails Webプログラミング入門―無駄なく迅速な開発環境

この本を選んだ理由は以下の通りでした。

  1. 出版されたばかりで内容が(当時としては)新しめ
  2. 1冊で「Ruby文法」「Rails」「ハンズオン」の全てがまかなえる
  3. さほど分厚くなく2日間で終えるのに適量

正誤表と補足

ところが、ナレッジセンターがその本の内容を自分で試してみたり人に教えたりしようとしてみると、この本には簡単な間違いや説明なしに使われているテクニックが多数ありました。
そこで、間違いについては以下のような正誤表を作って受講者に配布しました。

「実践 Ruby on Rails Webプログラミング入門」正誤表 2007/9/1

○:大したことではない
△:ちょっとしたこと
×:重大なこと (deprecatedも含む)

P.21 ○
誤:WEBrcik
正:WEBrick

P.25 get_text.rhtml、P.26 図1-11 ○
URLが「Message」とあるが、小文字で良い。
(URLはどちらでもよいが、他のページは小文字なので)

P.26 ×
誤:@params
正:params
参考:http://www.yotabanana.com/lab/20061127.html#p02

P.26 ×
最初にアクセスするURLが書いていない。以下になる。
http://localhost:3000/message/get_text

P.26 ○
図1-10はgetTextではなくget_text。
図1-11はdisplayTextではなくshow_text。

P.34 ○
case文の章に「swicth」とあるが正しくは「switch」。

P.34 △
case文のコード例で「flag」という名前の変数なのに「case1」等の文字列が入るのはおかしい。

P.39 ○
Bandクラスに「Freddy」とあるが、フレディ・マーキュリーQueenのシンガーなので、Bandクラスにあるのはおかしい。

P.43 ○
誤:今まで何度となく出てきて「puts」
正:今まで何度となく出てきた「puts」

P.46 attr_writerのサンプルソース △
誤:attr_writer:name
正:attr_writer :name

P.61 ○
「matz」が説明なしに登場しているが、Rubyを作ったまつもとゆきひろ氏を指す。 → http://www.rubyist.net/~matz/

P.88 ×
CREATE TABLEにおいてテーブル名やカラム名が「'」で囲まれているが、これがあるとエラーになる。
(「'」がつくのは、MySQL Query Browserのテーブル作成確認画面等の表示の際)

P.88 当該ページ第3節1行目 ○
誤:Aciton
正:Action

P.100,P.104,P.108,P.113,P.122,P.124
誤:
require "rubygems"
require_gem "activerecord"
正:
require 'active_record'
※require 'rubygems'が不要なのは、インストーラWindows環境変数RUBYOPTを設定した為。
  その為、Windows以外ではrequire 'rubygems'が必要となる場合がある。

P.101 ×
「my_customer.delete(1)」とあるが、deleteはクラスメソッド(特異メソッド)なのでインスタンスに対して呼べない筈。
(ちなみにJavaのクラスメソッドはインスタンスに対しても呼べる)
「Customer.delete(1)」とすべき。

P.103 ○
「p my_customer.basket.name」とあるが、左ページのクラス図では買い物かごに名前というカラムは
ない。

P.107 ×
customersテーブルにprefecture_idが14のレコードをinsertしようとすると外部参照制約エラーとなる
事前にprefecturesテーブルのidが14のレコードをinsertしておく必要あり

P.120 1行目 ○
誤:Validiator
正:Validator

P.134,161,211,212,225,232 ×
誤:
<%= start_form_tag 〜 %>
〜
<%= end_form_tag %>
正:
<% form_tag 〜 do %>
〜
<% end %>

P.151,159,204 △
誤:@content_for_layout
正:yield

P.169 ×
誤:map.connect 'programid/:'programid', :controller => 'sample', :action => 'index'
正:map.connect 'programid/:programid', :controller => 'sample', :action => 'index'

P.169 ×
誤:<%= link_to '情報登録', :action => 'entry', :'programid => program.id %>
正:<%= link_to '情報登録', :action => 'entry', :programid => program.id %>

P.169 ×
誤:http://localhost:3000/sample/entry?programid=XXXXXXX
正:/sample/entry?programid=XXXXXXX

P.176 △
rake -T・rake --tasksは、railsアプリケーションのディレクトリで実行する
必要がある。

P.177 8行目 ○
誤:「app/test」
正:「test」

P.182,209,210,221,223,231 ×
誤:rake migrate
正:rake db:migrate

P.182 中央付近の行 ○
誤:schma_info
正:schema_info

P.198 ×
誤:create database webnote_development;
正:create database webnote_development character set utf8;

P.201 リスト 7-4 ×
誤:webnote2_development
正:webnote_development

P.201 リスト 7-5 ×
誤:@headers〜
正:headers〜

P.202 リスト7-6 ×
誤:(memopages.rb)
正:(memopage.rb)

P.202 リスト7-6・P.213 リスト7-14 ×
human_attribute_nameは既にdeprecated。
しかし、その代りのhumanizeとは単純置換が出来ず、使用方法も難しい為、
今回はdeprecatedを承知でhuman_attribute_nameを使用するものとする。

P.203 ×
誤:update_atという名前のカラム
正:updated_atという名前のカラム

P.212 △
リスト7-12で3つめの

上記の正誤表は自由に使っていただいてかまいませんが、あくまでナレッジセンターが作成したもので、出版社であるソーテック社や著者の皆様が公式に出されているものではありません。その点はご了承下さい。*1

この正誤表を使うと共に、説明なしに使われているテクニックや説明を厚くしたい箇所については、その場で補足しながら説明する事にしました。

こうやって「間違いが多い」「説明なしに使われているテクニックが多い」と書くと、ちょっと技術本としては難があるように聞こえてしまうかもしれませんが、基本的な知識をほんの2日間で一通り学習できる、という点では今でも「いい本を選択した」という思いは変わっていません。
ちなみに出版社や著者の方にメールや電話で「間違いを直して内容に補足をして出しなおしませんか」というお話もしてみましたが、思うように話は進まず... 今となってはRailsもかなりバージョンアップしているので、折角いい本なのだから最新のRailsにそった内容にして出しなおすといいのになぁ、と個人的には思っています。

この本を使って、2007年度中にかなりの人数のエンジニア*2が無事、Ruby on Railsの教育を受講する事が出来ました。

Rubyビジネス・コモンズでの発表

この社内講習を通して得られたのが「Javaで開発をしている人間がRubyを学ぶとき、ここにつまづきやすい」というポイントでした。
そこで、ナレッジセンターでは上記の本と社内講習を行って得た知識を元に、JavaRubyの違いについて簡単にまとめを行い、Rubyのコミュニティでそれを発表しました。
特にJava言語を主に使ってきた人たちに取ってRubyのどの部分に驚きを感じるか、という視点での資料です。2008年2月当時のものですが、「Java使いから見たRubyの特色」というタイトルでSlideBoomにアップしておきましたので、よろしければご覧になってみてください。

Java使いから見たRubyの特色
(SlideBoomのEmbedははてなダイアリーには貼れなかったので、画像をリンクにしておきます)

上記の資料と2007年度のRuby on Rails社内教育が非常に有効だったという事は、つい先日社外の講師(JRubyのコア開発者Thomas Enebo氏)を招いて社内セミナーを開催した際に、参加した社員が積極的にコアな質問を投げかけていたことからも、実感することができました。もちろん、実案件ではもっともっといろんな知識が必要ですが、それはプロジェクトの組閣時に「実案件の経験のあるメンバー」と「教育は受けたが実案件の経験はないメンバー」とを組み合わせることでカバーしています。

ナレッジセンターでは「社内でRubyの開発者を育てたいけれど、教育プログラムを作れる人がいない...」「Rubyの開発案件を受注したいけれど、実開発の経験がないので、何かあったら質問出来る技術者を探している」というお悩みのご相談にのります。トライアルで質問を無料で受け付けるキャンペーンも実施しておりますので、お気軽にお問い合わせ下さい!







JavaRuby及び周辺のOSSを用いた開発に関して、企業があらゆる悩みごとを相談できるのが、ナレッジセンターの「レスキューサービス」です。
どんな相談でも親身に受け付けますので、レスキューサービスってなに?もっと知りたい!と思った方はお気軽に問い合わせ下さい。
問い合わせ画像リンク

*1:正誤表では著作権法32条に基づく引用の範囲と判断し、「誤」の部分に本文からの引用を行っています

*2:それぞれの業務の都合もあったため、全員とはいきませんでしたが...