...

Ruby活用のための研究報告書 2011年3月をダウンロード

by user

on
Category: Documents
5

views

Report

Comments

Transcript

Ruby活用のための研究報告書 2011年3月をダウンロード
Ruby による実証開発・研究報告事業
Ruby 活用のための研究報告書
2011 年 3 月 31 日
目次
1.はじめに.............................................................................................................................. 3
(1)本報告書の目的 ............................................................................................................ 3
(2)新規雇用者概要 ............................................................................................................ 4
2.事業概要.............................................................................................................................. 5
3.事業実施スケジュール ........................................................................................................ 6
4.新規雇用者の Ruby の教育内容........................................................................................... 6
5.新規雇用者の Ruby 習熟の目標........................................................................................... 8
6.Ruby を学習した際のつまずき点 ........................................................................................ 9
(1)ヒアリング内容 ............................................................................................................ 9
(2)雇用者 A のヒアリング結果........................................................................................ 10
(3)雇用者 B のヒアリング結果........................................................................................ 16
7.総括................................................................................................................................... 19
8.まとめ ............................................................................................................................... 23
9.用語集 ............................................................................................................................... 25
2
1.はじめに
(1)本報告書の目的
Ruby をより普及させるためには、Ruby によって開発を行うことのできる人材の育成
が重要な鍵となる。Ruby はプログラムを簡潔に記述できる特長を持ち、初学者にとって
も学習しやすい言語であるが、現状では Java などの他の言語に比べて Ruby 技術者の絶
対数はまだまだ少なく、学習方法も十分に確立されているとはいえない。
そのような背景から、本報告書は、本事業で業務に従事する新規雇用者に対し、Ruby
の教育を実施し、その過程でつまずいたところや習得に時間がかかったとこなどを記録し
て原因を調査し、そのような障害を取り除くため、あるいは克服しやすくするための有用
な手段について考察した報告書とし、今後の Ruby の発展・普及に役立てるものとする。
3
(2)新規雇用者概要
本事業は厚生労働省が実施している、「ふるさと雇用再生特別基金事業」において、新規
雇用者を2名採用し、実施する事業である。本事業を通して採用した雇用者は以下のとお
り。
No
1
雇用者
雇用者 A
雇用者情報
年齢:23 歳
採用した年月:2010 年 10 月1日
スキル:大学での授業で C 言語を習得
職業として開発の経験は無し
2
雇用者 B
年齢:30 歳
採用した年月:2010 年 12 月 1 日
スキル:Java を利用したアプリケーション開発(5 年)
Web アプリケーション等の開発経験有り
4
2.事業概要
本事業は、
「松江市内における継続的な雇用機会の創出を図ること、またプログラミング言
語 Ruby の活用普及」を実現するため、次の三つのテーマをすべて満たすような業務を実施
した。
1.
コンピュータに不慣れな人でもホームページ上で Ruby のプログラミングを疑似体
験できるサイトをつくること。また、Ruby の普及促進につながるソフトウェアを作
成しホームページ上からダウンロードして活用できるようにすること。
2.
自治体の業務用システムにおいて Ruby を活用することを目的として実証開発を行
い、Ruby の活用促進を図るためのツールを開発すること。
3.
Ruby を活用するにあたっての課題や普及のための方策について研究報告すること。
上記 1~3 のテーマに基づき、テーマ3以外について以下のような業務を実施した。
(1)「Ruby のプログラミングを疑似体験できるサイト」の作成
Ruby でプログラミングを行う場合、通常、コンピュータに Ruby インタプリタと呼ば
れるプログラムをインストールする必要がある。しかし、Ruby インタプリタのインスト
ールにはコンピュータに関する一定以上の知識が必要であり、コンピュータに不慣れな人
にとっては敷居が高い。
そこで本事業では、Ruby インタプリタのような特別なプログラムをインストールしな
くとも、Internet Explorer や Firefox のような一般的な Web ブラウザ上で Ruby プログ
ラミングを体験できるようなサイトを作成する。
(2)自治体の業務用システムにおいて Ruby の活用促進を図るツールの作成
Ruby の普及において、Ruby on Rails という Web アプリケーションフレームワーク
(Web アプリケーションを効率よく開発するためのソフトウェア)の存在が重要な役割を
果たしており、Ruby on Rails の登場によって Ruby によるアプリケーション開発の効率
が飛躍的に高まっている。Ruby on Rails には、アプリケーションの雛形(大まかな画面
構成や基本的なデータ操作機能を提供する。)を自動生成する機能があり、この機能によっ
て Ruby に不慣れな開発者でも開発をはじめる上での手がかりを得やすい。
しかし、この機能によって提供される雛形は、インターネット上で広く公開されるよう
な Web アプリケーションを想定しており、一般的な業務システムの画面構成とは異なった
画面構成の雛形が生成される。
本事業では、業務システムを意識した画面構成の雛形を自動生成する機能を開発し、自
治体の業務システムで Ruby を活用する上での開発効率の向上を図る。
5
3.事業実施スケジュール
本事業の実施スケジュールを以下に示す。
10 月
11 月
12 月
1月
2月
3月
技術教育
疑似体験システム設計
疑似体験システム開発
疑似体験システムコンテンツ作成
Web サイト構築
業務システムサンプル画面作成
画面雛形の自動生成ツール開発
Ruby 活用についての研究報告
4.新規雇用者の Ruby の教育内容
本事業において、各新規雇用者の Ruby の教育内容を以下に示す。
(1)雇用者 A について
雇用者Aは、プログラミング技術について大学在籍時の教育のみがスキルとして背景
に有り、実際のシステム開発などの経験が無い。そのため、まず Ruby とその他の技術
について以下の事前教育を 1 ヶ月間実施し、本事業を円滑に進めるための基礎を学ん
だ。
Ruby の基本的な学習
動作環境
文法
各種組み込みクラス、ライブラリ等の使い方
Ruby on Rails の基本的な学習
フレームワークの仕組み
ファイル構成
アプリケーションの作成方法
なお、この教育では「たのしい Ruby 第 3 版」及び、
「Rails によるアジャイル Web
アプリケーション開発」の二つの書籍を利用し、実際に雇用者 A が読み進め、不明な
点を既存雇用者に確認しながら学習を行った。
また上記以外にも、本事業の開発を行う上で必要な基礎知識として、以下の教育を行
った。
ネットワークの理解
6
IP アドレスのクラスについて
DNS について
Web アプリケーションの仕組み
HTTP の仕組み
リレーショナルデータベースについて
CGI について
これらの教育の意図として、本事業で Web アプリケーションとして Ruby の疑似体
験を行う Web アプリケーションを開発する必要があるため、ネットワークサービスの
基本的な部分を学んでもらい、開発が円滑に進むよう配慮して実施した。なお、実際の
教育では、既存雇用者と 1 対 1 で説明を行いながら実施した。
上記 2 種類の教育の割合としては、1 ヶ月間において前者と後者で 9:1 の割合で実施
した。
(2)雇用者Bについて
雇用者 B は今まで Ruby の開発経験は実務では無い。ただし、技術者としての興味
から Ruby や Ruby on Rails について勉強した経験が有った。また、弊社の採用面接時
には Ruby on Rails で開発した簡易なプログラムを提示してもらい、Web アプリケー
ションの知識や未知の技術の調査方法など、業務を進めていく上で必要な知識を既に持
っているという背景があった。また、Java での開発経験があることから、実際の開発
工程についても不安要素は無かったため、雇用者 B については事前教育は実施せず、
開発の過程で既存雇用者と話し合いながら Ruby や Ruby on Rails の理解を進めること
とした。
7
5.新規雇用者の Ruby 習熟の目標
本事業において、上記スケジュールを鑑み、新規雇用者の Ruby 習熟の目標を以下に示す。
(1)雇用者 A について
雇用者 A は多くの知識をこれから学ぶという点から、いわゆる新卒のような位置付
けで考慮し、以下を実践できるスキルを持つことを目標とした。
・ Ruby の簡易なプログラムを記載できる知識
Ruby の文法について理解し、プログラムを記載できる知識・技術を身に付け
る。なお、全ての機能を覚えることは難しいため、書籍を見ながらでも作成で
きる能力を身に付ける。
・ Ruby on Rails の仕組みを理解し、簡易なアプリケーションを作成できる知識
Ruby on Rails での Web アプリケーションの作成方法を身につけ、簡易なア
プリケーションを作成できる知識・技術を身に付ける。
また、データベースについても利用し、データベースを利用した Web アプリ
ケーションの開発を経験し、複雑なロジックや技術以外の技術を身に付ける。
(2)雇用者Bについて
雇用者 B は実務経験があるという点から、より実践的な知識・技術を身につける事
を想定し、以下を実践できるスキルを持つことを目標とした。
・ Ruby でアプリケーションを作成する際の包括的な知識
要件に対して、Ruby で実現できる能力を身に付ける。
・ Ruby on Rails の仕組みを理解し、カスタマイズできる知識
Ruby on Rails の構造や実装を理解し、Ruby on Rails のカスタマイズや Ruby
on Rails の機能を活かすことができる知識を身に付ける。
・ オープンソースソフトウェアの開発についての知識
本業務で開発したソフトウェアをオープンソースとして公開するにあたり、ラ
イセンスや著作権表示など、オープンソースソフトウェアの慣習や規定を理解
し、実践できる知識を身に付ける。
8
6.Ruby を学習した際のつまずき点
本業務をとおし、各雇用者について以下のヒアリングを行った。なお、技術の習得以外にも、
Ruby の開発を通して新規雇用者の目標がどう変化したかなどもヒアリングした。
(1)ヒアリング内容
項
ヒアリング内容
ヒアリング内容
ヒアリングの
ヒアリングの意図
ア Ruby の文法で判りにくい点はあったか?
Ruby を学ぶ上でどのような点に問題がある
「はい」である場合、どのような点が判りにくかった
か、本事業の事前教育、もしくは開発工程で
か?
学んだ事を基に明らかにする。
「はい」である場合、どのように調べ、理解したか?
イ Ruby で開発した際、どのような点につまずいたか?
つまずいた場合、どのように調べ、理解したか?
そのつまずいた点で、情報源は豊富にあったか?ま
本事業の開発工程を実施し、実際の開発で
どのような点についてつまずいたかを明らか
にする。
た適用が出来そうな情報であったか?
ウ
Ruby on Rails を使い始め、つまずいた点はあった
Ruby on Rails を学ぶ上でどのような点に問題
か?
があるか、本事業の事前教育、もしくは開発
どのような点につまずいたか?
工程で学んだ事を基に明らかにする。
また、どのように調べ、理解したか?
エ
Ruby on Rails を利用した開発で、つまずいた点はあ
本事業の開発工程を実施し、実際の開発で
ったか?
どのような点についてつまずいたかを明らか
どのような点につまずいたか?
にする。
また、どのように調べ、理解したか?
そのつまずいた点で、情報源は豊富にあったか?ま
た適用が出来そうな情報であったか?
オ
Ruby を利用した開発を行った結果、良かったと思う
他言語と比べて、Ruby のどのようなところが
ことは何かありますか?
良かったかを明らかにする。
逆に良くなかった点がありますか?
他言語と比べて、Ruby のどのようなところが
カ
悪かったかを明らかにし、教育の面でフォロ
ーする箇所として今後活用する。
今後 Ruby や Ruby on Rails についてどのような点の
キ 技術を身に付けたいですか?
Ruby に興味を持った結果、どのような技術を
身に付けたいかを明らかにし、次の教育内容
に繋げる。
ク
知識を身に付ける上で教育者、情報源などに期待す
Ruby を学ぶ上でどういった教育が必要か、
ることがありますか?
情報が足りないかを明らかにする。
続けて Ruby を利用した開発を今後実践したいです
Ruby の開発を経て、どういった点で Ruby に
ケ か?
興味を持ったかをヒアリングし、Ruby の良さ
を明らかにする。
9
コ
今後の目標を教えてください
Ruby が技術者の向上心にどのように影響し
たか、具体的な目標をヒアリングする。
(2)雇用者 A のヒアリング結果
ア.Ruby の文法で判りにくい点はあったか?
私はこれまでに手続き型の C 言語を学んだことがあったが、今回学ぶ Ruby はオブ
ジェクト指向のプログラミング言語であるので、プログラム的な考え方の違いがある。
そこで、今回 Ruby を学ぶにあたり、言語は違うが、言語の式や繰り返し構文といった、
プログラミング言語の基本的な知識を基にしながらも、できるだけ先入観を持たずに割
り切って学習を進めることで、C 言語との文法の違いを気にせずに違和感を覚えること
もなく Ruby の文法を学習することができたと考える。
また Ruby の文法については「たのしい Ruby 第 3 版」の第 1 部の以下の項目を参考
に学習を進めました。
・プログラムの解説
・文字列
・メソッドの呼び出し
・puts メソッド
・p メソッド
・日本語の表示
・数値の表示と計算
・変数
・コメントを書く
・制御構造
・条件判断
・繰り返し
・メソッドの作成
・別のファイルを取り込む
つまずいた点
・イテレータ
each などで配列の要素を利用して処理を行うやり方が、これまでに私が
学んできた C 言語では、繰り返し文で配列を使う時に要素番号を使って処
理を行う方法が一般的なやり方だと認識していたのですんなり理解できず
つまずいた。
つまずいた点をどのように理解したか
・イテレータ
書籍やインターネット上の情報を参考に、each と配列を使ったサンプル
プログラムを動かして、配列の要素がどのように参照されながら繰り返しの
10
処理が進んでいくのかを、実際の動作を確認しトレースすることで理解に繋
げた
イ.Ruby で開発した際、どのような点につまずいたか?
つまずいた点
・インスタンス変数
10 月の学習段階でインスタンス変数については@が変数の最初に付いており
そのサブクラス内で使用できるものであるという理解で進めており、また、Rails
の構造やクラスに関しても理解が不十分だったため、今回の疑似体験アプリを開
発していく際に、コントローラだけでなくビューにおいてもインスタンス変数を
使用できることにつまずいた。
つまずいた点をどのように理解したか
・インスタンス変数
Rails の構造やクラスについて、書籍や既存雇用者の説明を受けたが、未だに
理解してない部分は多いが、Rails において、コントローラのインスタンスメソ
ッド内で値をセットしたインスタンス変数は、そのコントローラに対応するビュ
ーでそのインスタンス変数をそのまま参照することができるというところまで
で理解を留め開発を進めた。
そのつまずいた点で、情報源は豊富にあったか?また適用出来そうな情報であった
か?
書籍、インターネット共に情報量は豊富で、判らなかったところについて書籍
では、関連する単語を索引で引き、あまり詳しく書かれてないところについては、
インターネットを利用して、Ruby 関係なら「Ruby
+ 判らなかったことに関
連する単語」、Rails なら「Rails + 判らなかったことに関連する単語」のよう
な形で検索することで必要な情報は得ることができた。
ウ.Ruby on Rails を使い始め、つまずいた点はあったか?
つまずいた点
・データベース
これまでデータベースという言葉自体は知っていたが、実際にデータベースを
使ったことがなかったためデータベースの使い方と設定につまずいた。
・HTTP メソッド
テストプログラムを書く際に、HTTP の仕組みについて知識がなく GET や
POST がどのようなことを行うのかわからずつまずいた。
・コントローラ
params がどういう役割を果たしているのかが HTTP について理解していなか
ったためつまずいた。
・ルーティング
11
Rails の機能を利用して作ったアプリケーションはデフォルトのままで動いて
くれるようになっていて、ルーティングの存在と設定のやり方を知らなかったの
で、そのコントローラを拡張して新しいアクションを追加して動作を確認した時
にエラーで動かなくつまずいた。
・JavaScript
JavaScript について理解していなかったためモーダルの表示のさせ方、入力
内容をモーダルで表示させる方法などがわからずつまずいた。
つまずいた点をどのように理解したか
・データベース
雇用者 B からデータベースの使い方、データベースの設定などの基本的なこ
とについて説明を受け理解に繋げた。
・HTTP メソッド
雇用者 B から HTTP についての説明を受け、Rails で使用する GET、POST、
PUT、DELETE メソッドがそれぞれ scaffold で作られた index、create、update、
destroy の基本のアクションに対応するメソッドなのかを理解した。
・コントローラ
雇用者 B から URL パラメータや HTTP リクエスト、レスポンスの説明を受
け、コントローラでは params 変数で各種パラメータが取得できるものとして理
解を進めた。
・ルーティング
scaffold で作ったデフォルトのコントローラを拡張して、デフォルトのパラメ
ータと異なる場合、routes ファイルの書き換えや追記をし、ルーティングの設定
をしなければならないことをインターネットの情報を参考にすることで理解に
繋げた。
・JavaScript
JavaScript とモーダルについてインターネットの情報を参考にしたが、欲し
い情報が日本語サイトのものは乏しく、英語サイトの情報も欲しい情報が直接的
に書いてあるわけでもなかったので理解に繋げるのに苦労した。
エ.Ruby on Rails を利用した開発で、つまずいた点はあったか?
つまずいた点
・ログイン機能
セッションと認証について理解していなかったのでログイン機能を実装する
時につまずいた。
・例外処理
存在しないレコードにアクセスした時に存在しないことを伝える処理の記述
がわからずにつまずいた。
・テストプログラム
12
テスト自体をこれまで行ったことがなく、テストについて理解していなかった
ため、テスト項目にどのようなものが必要なのか、また、そのテスト項目に対し
てのテストプログラムをスムーズに記述することができずつまずいた。
・ステップ入れ替え機能表示
疑似体験アプリのステップ一覧画面作成時に、一覧画面での入れ替えを行えな
いステップの入れ替えボタンを表示させない条件式で、配列の要素番号と配列の
サイズを利用して条件を指定することに気付けずにつまずいた。
・scaffold 機能のカスタマイズ方法
scaffold の機能をカスタマイズする方法や Helper ファイル生成時にテストフ
ァイルが生成されないこと、引数取得の方法がわからずつまずいた。
つまずいた点をどのように理解したか
・ログイン機能
雇用者 B から Rails でのセッションと認証、フィルターの関係についての説明
を受け理解に繋げた。
・例外処理
書籍やインターネットの情報を参考にして、存在しないレコードにアクセスし
た際、rescue ActiveRecord::RecordNotFound を使ってその後にどう対処するか
の処理を記述すればいいことを理解した。
・テストプログラム
テストコードの記述やどのようなテストを行えばいいのかを書籍やインター
ネットの情報、雇用者 B からの説明を受け理解に繋げた。
・ステップ入れ替え機能表示
雇用者 B からの説明を受け、一覧表示を行う際に each_with_index を使って
いたので、最初のステップを表示させる時には上への入れ替えボタンを表示させ
ないようにするめ、配列の要素番号が 0 だったらという条件で、最後のステップ
を表示させる時は上への入れ替えボタンを表示させないようにするため、配列の
要素場号と配列のサイズ-1 だったらという条件を与えればいいことを理解した。
・scaffold 機能のカスタマイズ方法
自動生成ツールを作成する際に Rails の scaffold 機能を利用してアプリケーシ
ョンの雛形を生成するようにしたので、インターネットの情報を参考にしてカス
タマイズの方法を調べたが断片的な情報しか拾えず、なかなかうまく理解に繋げ
ることができなかった。そこで scaffold は generator を利用して生成されている
ことからインターネットの情報と Rails の generator のソースコードやそこで呼
び出されている template ファイルのソースコードを参考にすることで scaffold
機能のカスタマイズ方法と引数を取得する方法について理解に繋げた。
また、その途中でソースコードと同じように Helper ファイルの generator を
作成し scaffold で生成する際に、デフォルトの scaffold では生成されるテスト関
連のファイルが生成されずつまずいたが、インターネットの情報を参考にするこ
13
とで生成されなかったファイルも生成できるようになり問題は解決できたが、理
解するまでには至らなかった。
そのつまずいた点で、情報源は豊富にあったか?また適用出来そうな情報であった
か?
インターネット共に情報量としては豊富で、判らなかったところについて、イ
ンターネットを利用し、
「Rails3 + 判らなかったことに関連する単語」のような
形で検索することで必要な情報は得ることができた。しかし、今回使用した
Rails3 の情報は日本語の情報が乏しく、圧倒的に英語の情報が多く、断片的にし
か拾えなかったので苦労した。
オ.Ruby を利用した開発を行った結果、良かったと思うことは何かありますか?
Ruby を勉強し始めてから僅かな私でも、今回の案件で利用した Ruby on Rails と
scaffold 機能を駆使することで、Rails が自動的に生成してくれた雛形のコードを書き
換えていくだけで開発ができ、それが実際に効率のいいスムーズな開発だったと思うの
で、Ruby を学習しそれを利用した開発を行えてよかったと考える。
カ.逆に良くなかった点がありますか?
Ruby on Rails を使っての開発はほとんどのことを Rails がやってくれるので、深い
ところまで理解していなくても簡単に開発できるが、今回の案件で Rails を利用して開
発を行っていてその開発段階で多々プログラム的なエラーが発生した。それは自分自身
の技術力不足、知識不足であることは間違いないが、Rails の仕組みなどを深いところ
まで理解できていれば回避できたものも多数あったと考える。上記に記述してあるルー
ティングに関しても初めに知り得ていればつまずくこともなかったのではないかと思
うので、Rails に任せきりにしているところは良い点でもあり悪い点であると考える。
キ.今後 Ruby や Ruby on Rails についてどのような点の技術を身に付けたいですか?
現状の私が複雑だと思う Rails のソースコードなど、そのコードを見てそれがどうい
う動作をするのかを理解できる知識と技術を身に付けたいと考える。それぐらいのこと
ができるようになることで、何かの既存のソースコードを参考にプログラムを記述して
いる私が、自身で考えて思い通りの動作をするプログラムを記述できるようになるから
だと考える。
ク.知識を身に付ける上で教育者、情報源などに期待することがありますか?
教育者に関しては、開発中は雇用者 B のレベルが高く付いていけてないことがほと
んどであり、自分のスキルとして身についてものは僅かであると思うので、開発に必要
な実践的な指導があれば幸いであったと考える。
情報源に関しては、Rails3 関連の情報は全体を通して少ないと感じたのでそのあた
りが充実して欲しいと考える。
14
ケ.続けて Ruby を利用した開発を今後実践したいですか?
Ruby とそれを利用した開発の経験がないにも関わらず、今回の案件では Rails の機
能で生成してくれたアプリケーションの雛形のソースコードを書き換えや追記してい
く開発だったので、とても効率よく開発を行うことができたと思う。過去に別のアプリ
ケーションフレームワークを利用した時は、一からソースコードを記述して苦労した覚
えがあり、今後またわざわざそれを使う必要性を感じず、より Ruby や Rails の知識や
技術を向上させ Ruby での開発を行っていきたいと考える。
コ.今後の目標を教えてください
・ 今回の開発を通して Ruby のオブジェクト指向、Rails の MVC など、まだまだ理解
が足りていないことが多々あると感じているのでそれらを少しずつ理解する
・ いろいろなソースコードを見てそれらの動作を理解できるなり、徐々に Rails のソー
スコードなど複雑なソースコードを見てもその動作が理解できるようになる
以上のことをこなせるようになれば、今回のような開発を一人で行うことができるぐら
いのレベルまでスキルアップできるのではないかと考える。
15
(3)雇用者 B のヒアリング結果
ア.Ruby の文法で判りにくい点はあったか?
Ruby の文法で判りにくい点はなかったが、Java や C と if 文などの制御構文の文法
の違いにより、プログラムの記述ミスが多かった。
条件分岐で「elsif」と書くところを「elseif」と記述したり、
「if 条件式 then .. end」
を 「if 条件式 { ... }」と記述したりというミスが多かった。
イ.Ruby で開発した際、どのような点につまずいたか?
Ruby の組み込みクラスとメソッドについての知識が乏しかったため、プログラミン
グの際、Ruby の組み込みクラス・メソッドを都度調査する必要があった。
Ruby のオフィシャルサイトのリファレンスが充実しており、調査に必要以上に時間
はかからなかった。
ウ.Ruby on Rails を使い始め、つまずいた点はあったか?
以下の点につまずいた。
・調査について
バージョン 3 の情報源が乏しく、調査しづらかった。
・インストールについて
Windows に gem をインストールする際、必要な DLL が見つからないという
エラーが頻発し、gem インストールに必要なライブラリを探す作業に時間がかか
った。
・ルーティングについて
暗黙的に定義されるルーティング(index, new など)がコントローラに未定義の場
合ルーティング設定ファイルに上記のルーティングを除外する設定を追加する必
要があることを知らず、ルーティグエラーの原因調査に時間がかかった。
調査は Ruby On Rails のガイドサイト(http://guides.rubyonrails.org/)を
参考にしましたが、情報の粒度が荒く、わかりにくかったです。
エ.Ruby on Rails を利用した開発で、つまずいた点はあったか?
Ruby on Rails バージョン 3 に対応したプラグインを探す作業に時間がかかりまし
た。
RailsPlugins.org(http://railsplugins.org/plugins)に、一部のプラグインの
バージョン 3 への対応状況が記載されているが、このサイトに記載されていないプラ
グインも多かった。
プラグインの配布先の README やインストールガイドなどのドキュメントを読ん
り、プラグインのプロジェクトからフォークし、バージョン 3 に対応したプロジェク
トが存在するかどうかを探すなどして調査した。
16
オ.Ruby を利用した開発を行った結果、良かったと思うことは何かありますか?
・Ruby を利用した開発で良かった点
組込みクラス・メソッドが充実しておりプログラミングしやすかった。
正規表現を扱う場合、Java ではいくつかの正規表現用クラスのインスタンスを生成
後に正規表現のマッチングや置換を行わなければならないのでコード量が多くなり
がちだが、Ruby はリテラルで正規表現を利用できるので、正規表現を利用したマッ
チングや、文字列置換がシンプルに記述できた。
また、string[-1]で文字列の終端の文字を取得できたりなど文字列操作に利便性の高
い記法やメソッドが用意されているため、シンプルなコードを記述することができた。
・Ruby On Rails での開発でよかった点
規約に則ることで設定ファイルや冗長なコードを削減できる点がよかった。例えば、
Java で Hibernate(ORM フレームワーク)を使う際、オブジェクトとテーブルをマッ
ピングする定義ファイルを作成する必要があるが、Ruby On Rails では、クラス名を
テーブル名の単数形にしておくなどの規約に則ることで、フレームワークが自動的に
オブジェクトとテーブルをマッピングできる。Java のフレームワークは様々な設定
ファイルが必要となるものが多く、それらのファイルの仕様の理解やメンテナンスに
時間がかかるので、Ruby On Rails の規約重視の設計は開発効率を上げるうえで、大
変有効であると感じた。
カ.逆に良くなかった点がありますか?
以下の点が良くないと感じました。
・Window での動作が遅い。またインストールやプラグインの利用で様々な問題が
起こりやすいことから、Windows で開発しにくかった。
・Ruby On Rails のドキュメントが充実していない。(英語のドキュメントも同様)
組込みライブラリの説明が不十分で、ソースを見て理解することも多かった。
・Ruby On Rails バージョン 3 の下位互換の無さ
バージョン 3 では以前のバージョンで有用なプラグインが動作しないことが
多かった。
・規約による暗黙ルール
規約により省力化が可能な点は長所ではあるが、逆に短所でもあると感じた。
Ruby On Rails で開発を始めた当初は、規約を理解していなかったため、
アプリケーションの構造がまったく理解できなかった。
Java コードが冗長であったり設定ファイルが多いが、アクションとビュー、
オブジェクトとデータベースなどの関係がわかりやすかった。
キ.今後 Ruby や Ruby on Rails についてどのような点の技術を身に付けたいですか?
Ruby on Rails でのトランザクション管理や、トラフィック対策など大規模システム
17
向けの Web アプリケーション開発に必要な技術を習得したい。
ク.知識を身に付ける上で教育者、情報源などに期待することがありますか?
Ruby On Rails のリファレンスの充実を期待している。
メソッド引数のオプションの説明をもっと詳しく書いてほしい。
ケ.続けて Ruby を利用した開発を今後実践したいですか?
本事業を通し、Ruby、Ruby On Rails に関する技術を習得したが、
まだまだ学ぶことが多いと感じた。
今後も Ruby を利用した開発を実践し、さらに多くの技術を習得していきたい。
コ.今後の目標を教えてください
Ruby Association Certified Ruby Programmer Silver, Gold の資格を取得したい。
18
7.総括
本事業を実施し、「6.Ruby を学習した際のつまずき点」で記載しているとおり、各新規雇
用者が実際に Ruby を利用した開発や、Ruby の技術を勉強し、それぞれのスキルが向上した。
以下に、それぞれの新規雇用者のヒアリング結果を元に、Ruby の発展・普及に向け、課題を
整理する。
ア.Ruby の文法で判りにくい点はあったか?
雇用者 A:
大学での学習では、主に C 言語や Java 言語を習得するが、今回 Ruby 言語を学ぶにあ
たっては、プログラミング手法として基本的な機能(繰り返しや条件式など)について
知識のベースが有り、それ以外では新しい言語を学ぶという点で大きく困難であること
は無かったと考える。また、実際に動作をすぐに確認できる、Ruby の機動性が言語の
理解の手助けになったことがうかがえる。
雇用者 B:
文法の違いによるミスが多いとあるが、これは複数の言語を習得している場合に起こる
課題であり、今後 Ruby の開発を続けることで解決できる課題かと考える。
イ.Ruby で開発した際、どのような点につまずいたか?
雇用者 A:
Ruby のクラスの仕組みについて理解が苦しんだと考える。Ruby の基礎は習得できた
と考えるが、より効率よく開発するための Ruby の様々な機能の応用を今後は学ぶ必要
があると考える。また、クラスは Ruby on Rails で開発を行う上で必要な知識であるた
め、Ruby on Rails を学ぶ上では Ruby のクラスについての教育が必要であると考える。
雇用者 B:
Ruby の組み込みクラスに何があるかを把握していないため、開発の効率が良くないこ
とがうかがえる。Web 上で公開しているリファレンスマニュアルで解決できたとある
が、この課題を克服する場合、組み込みクラスについて出題される、Ruby Association
Certified Ruby Programmer Silver や Gold といった資格試験の勉強などは良い方法で
はないかと考える。
ウ.Ruby on Rails を使い始め、つまずいた点はあったか?
雇用者 A:
Web アプリケーションの基礎について、理解があまり無く、Ruby on Rails の開発につ
まずいたことがうかがえる。現在はフレームワークの登場などにより、作成されること
があまり多くなくなった CGI などを Ruby で作成することにより、Web アプリケーシ
ョンの基礎知識などは習得できると考える。
19
雇用者 B:
Ruby on Rails バージョン 3 系は公開されてまだ日が浅いことも有り、情報源があまり
存在しない。これは今後時間が解決すると考えるが、様々な事例が公に公開されること
が必要であると考える。また、Windows 環境での動作に関しても情報が多く無いため、
こちらについても今後事例や書籍などが増えることが必要ではないかと考える。
エ.Ruby on Rails を利用した開発で、つまずいた点はあったか?
雇用者 A:
セッションについても Web アプリケーションの基礎知識であるが、先のとおり、CGI
などの開発を経験したり、HTTP プロトコルの基礎を勉強することで解決できると考
える。また、Ruby on Rails の標準機能をカスタマイズするには、Ruby の知識、Ruby
on Rails の知識が必要であり、Ruby on Rails のソースコードを参照する必要がある。
こういった情報を探すポインタについては、高度なスキルが要求されるため、まずは
Ruby on Rails の仕組みや Ruby on Rails の開発を十分に経験し、開発のスキルがつい
た次のステップで実践できる作業であると考える。また、Ruby on Rails バージョン 3
系については先も述べたように、まだ情報が少ないため、事例やカスタマイズなどの情
報が必要になると考える。
雇用者 B:
Ruby on Rails バージョン3系のプラグインについては、オープンソースソフトウェア
で公開されるものが多いが、バージョン3系に対応したプラグインとして明示されてい
るものはバージョン2系に比べ少ない。今後バージョン 3 系で開発を始める開発者に
とって、バージョン 3 系で動作するプラグインなどをまとめた情報などが必要である
と考える。また、バージョン2系での開発経験を持つ開発者の場合も、バージョン2系
で利用したプラグインが3系で利用できるかなど、調査する必要があると考える。
オ.Ruby を利用した開発を行った結果、良かったと思うことは何かありますか?
雇用者 A:
初めて Ruby の開発を経験してみても、Ruby on Rails の開発のし易すさが実感できた
ことがうかがえる。
雇用者 B:
Ruby の簡潔な書式が今まで習得した言語より記述しやすいプログラミング言語であ
り、開発し易いことがうかがえる。また、Ruby on Rails のポリシーである、「設定よ
り規約」により、決まりごとを守れば冗長な設定作業などを行わなくても開発できるよ
うになり、開発しやすいことがうかがえる。
20
カ.逆に良くなかった点がありますか?
雇用者 A:
Ruby on Rails で開発していく上で標準的な開発方法ではなく、工夫の必要なカスタマ
イズの必要があった場合につまずいたことがうかがえる。これは Ruby on Rails バージ
ョン3系の Tips 集などが用意されることで解決できるのではないかと考える。また、
Ruby on Rails バージョン 3 系のコーディング規約などを開発前に用意し、開発過程で
利用することでも解決が可能と考える。
雇用者 B:
Windows で Ruby on Rails の開発する情報は多くないことから、様々な障害がおきた
ことがうかがえる。また、
Ruby on Rails のバージョン 3 系の情報は不足している点や、
互換性の無さ、先に述べた「設定より規約」によるソースコードの隠蔽によって、習得
に時間がかかったことがうかがえる。
本実証では開発するアプリケーションのレベルが高いこともあり、初めて Ruby を利用
する開発者にとっても難しいと考える。まずは一般的で情報の多い技術を利用した
Web アプリケーションを開発し、経験を重ねた上で高度なアプリケーションを開発す
る必要があると考える。
キ.今後 Ruby や Ruby on Rails についてどのような点の技術を身に付けたいですか?
雇用者 A:
オープンソースソフトウェアの場合、活発なプロジェクトであれば新しいバージョンの
ソフトウェアが次々と登場する。そのため、新しいバージョンに追従するためには、情
報があまり多くない時期から使用することもあるため、ソースコードを読み、問題を解
決するためのスキルは必要である。ただし、相当のスキルが必要であるため、経験を積
み重ねて技術力を向上させながら実現できると考える。
雇用者 B:
大規模システムでの Ruby の採用は海外、国内でも少しづつ事例が増えてきているため、
今後はこういった大規模なケースでの情報、事例が必要であると考える。
21
ク.知識を身に付ける上で教育者、情報源などに期待することがありますか?
雇用者 A:
本事業では実施機関が短かったこともあり、当初検討していたペアプログラミングも十
分に出来ず、雇用者Aに関しては理解が難しいことが多かったと考える。また、教育者
に関しても常に開発を見ることが難しいため、可能であれば既存雇用者とペアプログラ
ミングなどを実施し、実践的な技術力を身に付けることが出来ると考える。
雇用者 B:
Ruby on Rails のリファレンスが充実していないため、今後はリファレンスの情報が必
要であると考える。
ケ.続けて Ruby を利用した開発を今後実践したいですか?
雇用者 A:
Ruby や Ruby on Rails の開発が行いやすい点について、Ruby 初心者でも実感できた
ことがうかがえる。
雇用者 B:
何度かヒアリング結果に記載があるように、Ruby on Rails のリファレンスを期待して
いる。
コ.今後の目標を教えてください
雇用者 A:
基礎を理解し、さらに知識を増やしたいというモチベーションの高さがうかがえる。ま
た、開発に利用するツールなどのソースコードを確認するなど、高度な技術を身に付け
たいと考えるようになったことから、Ruby の魅力が伝わったことがうかがえる。
雇用者 B:
実際に資格試験の合格を目標とし、Ruby の習得に関してモチベーションの高さがうか
がえる。
22
8.まとめ
(1)初心者のつまずき易い点や理解に時間を要する点
クラスや組み込みクラスの仕組みや特徴の理解につまずいているケースが見られた。すなわ
ち、Ruby のクラスの基本的な定義と、既に Ruby に組み込まれているクラスについての学習
が初心者にとって必要であると判断できる。
これらを正しく理解せずに使用すると効率の良い開発ができなくなる可能性があるため、学
習の初期段階できちんと理解しておくことが大切であることが再認識された。
また Ruby on Rails を学習する上で、Rails のバージョンが新しくなったこともあり Rails
で開発する上で情報量が少ないなどの実態も見えた。これは今後時間の経過とともにリファレ
ンス類の充実が図られることが予想され、過渡期の状態である現時点だけの問題であると考え
る。対策方法として、対策方法として、昨年末頃から発売され始めた Ruby on Rails バージ
ョン3 に関する日本語の書籍の活用や、これから登場する各分野での開発事例、情報の登場、
また、実際に小規模な開発案件での実験的な適用などでノウハウを蓄積する必要があると考え
る。
(2)Ruby 普及のための提言
ア.発注者及び受注者(営業・開発者)に対して Ruby に触れる機会を増やす
Ruby というプログラム言語は、今では JIS 規格にも制定され知名度や信頼性も高いが、実
状としては業務システムの開発を開始する段階では、採用されるための敷居は高いと言える。
この理由としては、まず発注者及びシステムを提案する受注者が Ruby というキーワードを知
っていても、概要を理解するための機会が少ないということが要因の1つであると考える。更
に実際に見て触れるチャンスが少なく、能動的な情報収集が必要であるためである。
このためには、Ruby の宣伝やアピールできる機会やサイトを提供・構築し、さらにこれら
を増やしていくことが効果的である。今回の事業はその一環と言え非常に有意義であると考え
る。
イ.Ruby 教育事業の基盤を整備する
Ruby の普及には Ruby 技術者の育成は不可欠である。今の時代であればメジャーなプログ
ラミング言語を複数身につけておき、ケース(外的及び内的要因)により使い分けてその場で
最適な言語を採用して開発を行うシーンが想定できる。採用される言語の1つが Ruby である
ためには、少年期から Ruby に接する機会を作り Ruby 経験者数を増やす、あるいは開発者を
対象とした Ruby の教育コースを提供するといった施策が必要であると考える。
例えば前者に対しては、教育委員会等関係機関との調整が必要となるが、中学校におけるパ
ソコン授業などの IT 教育の初期の段階で従来の言語に加え Ruby に関する教育課程を追加す
る等が考えられる。後者については、Ruby アソシエーションの人材育成支援プログラムを活
用することが考えられる。
これらにより Ruby の基礎知識習得の場を増やすとともに Ruby 技術者の裾野を広げること
につながる。
23
ウ.Ruby によるシステム開発事業を増やす
本報告書の中でも Rails で開発を行う際に情報量の少なさを上げた。これはあくまで過渡期
ではあるが、このような期間をより短縮化するためには Ruby が枯れた技術にならなければな
らない。すなわち、より多くの Ruby によるシステム開発の実績や運用が発生し、これらのノ
ウハウが相互に活用され蓄積されるシステムが必要である。このためには Ruby によるシステ
ム開発・改修業務の事業化が図られるべきである。
ここで Ruby に限った事象ではないが、新たにシステムを再構築する上で、場合によっては
過去の資産を活用したり、部分的な移行を考える等のリスクヘッジの検討が当然ながら必要と
なる。
また、この際に重要となるのはシステム開発の成果物であるプログラムの著作権である。著
作権法上では、システムを開発した事業者が著作者として著作権を持つのが原則である。そこ
で、システム開発事業者が、開発したプログラムコードを他の事業で活用し、機能をより向上
させることが可能となる。この際、これらの情報を事業者内にとどまらず他社を含めた第三者
に広く提供(公開)することにより、Ruby のシステム開発ノウハウが相互に活用され蓄積さ
れるシステムとすることが重要である。
エ.上記を継続していく
上記のア~ウは一過性の施策であってはならない。これらをサイクリックに継続することで
Ruby の普及が図られると考える。
24
9.用語集
ページ
用語
4
Web アプリケーション
5
フレームワーク
5
Web アプリケーションフレー
ムワーク
解説
ユーザーが Web ブラウザを利用して作業を行うソフトウェア
やシステム
ソフトウェア開発を容易にするため、開発に必要な共通部品
を集めたもの
Web アプリケーションを効率よく開発するためのソフトウェア
Ruby で書かれたソースコードを逐次解釈しながら実行する
5
Ruby インタプリタ
5
Ruby on Rails
6
クラス
6
ライブラリ
6
アジャイル
迅速にかつ状況に適応しながらソフトウェアを開発する手法
7
IP アドレス
ネットワーク上の機器を識別するための番号
7
DNS
7
HTTP
7
データベース
7
リレーショナルデータベース
7
CGI
8
オープンソースソフトウェア
10
オブジェクト
データと操作をひとまとまりにして表現したもの(※1)
10
メソッド
オブジェクトに対する操作のこと
10
イテレータ
11
HTTP メソッド
HTTP の通信を行うときに使う方法の総称
11
インスタンス変数
オブジェクトの中に保持される変数
11
コントローラ
プログラム
Ruby で開発された Web アプリケーションフレームワーク
オブジェクトの設計図となるもの(オブジェクトは下記※1参
照)
汎用性の高い複数のプログラムを、再利用可能な形でひと
まとまりにしたもの
IP アドレスとホスト名(ネットワーク上の機器に付ける名前)
の対応を管理するシステム
Web ブラウザと Web サーバの間でコンテンツを送受信すると
きに使われる通信規約
データを集めて管理し、検索・抽出などの再利用ができるよ
うにしたもの
データとデータの関係を連結させデータの検索や変更を行
うことができるデータベース
Web サーバ上でプログラムを動作させるための仕組み
ソースコードをインターネットなどで無償で公開し、誰でも改
良や再配布が行えるソフトウェア
複数のデータから構成されるデータに対し繰り返し処理を
行うもの
MVC において、ユーザーの入力に応答し処理するもの
(MVC は下記※2参照)
25
11
ルーティング
11
ビュー
12
scaffold
12
JavaScript
12
アクション
12
モーダル
13
引数
13
ソースコード
15
MVC
16
gem
16
DLL
17
Ruby on Rails において、ユーザーの入力に対し適切な処理
を行うようにすること
MVC において、ユーザーにデータを表示するもの(MVC は
下記※2を参照)
Ruby on Rails において、Web アプリケーションのひな型を作
る機能
Web ブラウザで実行するプログラムを記述することができる
プログラミング言語
Ruby on Rails において、実際の処理を実行するプログラム
ユーザーが適切な入力を行うまで元のウィンドウに戻れな
いウィンドウ
プログラミング言語において、実行時にプログラムに処理さ
せる値
人間が記述した、コンピュータに対する一連の指示を記述し
たもの
アプリケーションソフトウェアを「モデル」「ビュー」「コントロー
ラ」の3つの部分に分けて開発する手法(※2)
Ruby のライブラリを配布するときの形式
Windows においてライブラリを保存しておく手法。またはそ
のライブラリ部品。
Hibernate(ORM フレームワー Java において、オブジェクトをリレーショナルデータベースに
ク)
保存するためのライブラリ
リレーショナルデータベースにおいて、データ要素を行と列
17
テーブル
18
オプション
19
リファレンスマニュアル
機能一覧を説明した説明書
21
Tips 集
プログラミングに役立つコツや豆知識を集めたもの
22
ペアプログラミング
からなる表にあらわしたもの
プログラミング言語において、実行時の動作を変更するた
めの値
2 名のプログラマが 1 台のコンピュータを使って共同でソフト
ウェア開発を行う手法
26
Fly UP