今すぐここではじめ るruby on rails - qcontokyo.com · るruby on rails 吉田裕美 ....

74
今すぐここではじめ るRuby on Rails 吉田裕美

Upload: others

Post on 07-Sep-2019

2 views

Category:

Documents


0 download

TRANSCRIPT

今すぐここではじめるRuby on Rails

吉田裕美

今日のお話の対象者Ruby on Railsという言葉は知っているが、実際に使った事はない

Ruby on RailsをダウンロードしScaffoldを使ってみたが、その後どうしたら良いか解らない

開発者の方も、マネージャーの方も

2

今日のお話自己紹介と私の立ち位置

Ruby と Ruby on Railsの紹介 (なぜ私は、Ruby,Ruby on Railsを使っているのか)

デモ

Ruby on Railsの始め方

3

自己紹介と私の立ち位置

λ卒業研究偶然にも、Lispの処理系を作りました。関数言語言語処理系コンピュターサイエンスいま思い返すとLispを学んだ事は、私の技術者人生に大きな影響を与えました。

5

就職しました工場で使われる装置等を作る会社に入社、機械を制御するソフトを開発。

よく確認せずプログラムを動かしバグでメカを壊し、先輩におこられる。

6

就職しました工場で使われる装置等を作る会社に入社、機械を制御するソフトを開発。

よく確認せずプログラムを動かしバグでメカを壊し、先輩におこられる。

6

バグがあるとメカは壊れる!

転職しましたベンチャーのCADベンダーへ転職、画期的な製品の開発に参加 。

画期的なアイデアの実現化

ハードワーク

そして、成功

7

怖いもの知らずの開発者2次元CADのベースソフトの開発

難しいソフトの設計

もの凄く考える

コンピュターサイエンスの知識

8

敗北のマネージャー図面管理システムで、SE/リーダーを経験

お客様の望むソフトが出来ない バックログは溜まるばかり 十二指腸潰瘍になりかける ヒューマンスキルの低さでボロボロ

9

会社人間はやめました2000年より独立しEY-Officeを設立。Java /Perl / Ruby 等でWebシステムを多数構築

10

•アジアリークアイスホケー•http://www.alhocky.jp•チーム・選手の成績集計

•アロハパーク (アロハストリート)•http://park.aloha-street.com/•SNS

教育事業を始める問題解決型の教育EY-Officeの教育は知識の取得を目的とした学校的な教育ではなく、 実務で必要とされる技術を、 お客様のニーズや開発メンバーのスキルに応じ柔軟な教育プランを組み立てご提案させて頂く 「問題解決型の教育」です。

11

お客様の要望、悩み、問題をインタビュー

教育プランのご提案、お見積もり

教育の実施

参加コミニュティー日本Rubyの会 / Rails勉強会@東京Seasar Project (Java)Shibuya.pm (Perl)Shibuya.lisp (Lisp)Gauche (Scheme)日本XPユーザー会

12

WebメディアにGaucheの記事を書いてます。

13

ThinkIT@IT

Ruby と Ruby on Railsの紹介 (なぜ私は、Ruby,Ruby on Railsを使っているのか)

Ruby言語日本人開発者 まつもとゆきひろ 氏によって開発されたプログラム言語。世界中で使われている。1995年よりオープンソースとして公開。Lisp, Smalltalk, Perlなど過去の言語の良い部分をバランス良く取り入れている。

15

写真はwikipediaより

主要な言語の歴史と関連

16

1960 1970 1980 1990 2000

FORTRAN

COBOL

C

Lisp

ALOGOL

C++

Perl

Ruby

Java

Python

PHP

Simula

Smalltalk

ML

Scheme

Haskell

C#

直系

影響を受けている

Pascal

Ruby言語のキーワード

低レベルの事は言語に任せてプログラミングの本質的な部分に集中できるオブジェクト指向により既存のプログラムを再利用できる変更がすぐ反映されて手軽に快適にプログラミングできるスクリプト言語としてよく使われる機能は最初から組み込みになっていて準備や宣言なしにいきなり使える。

17

プログラミングを楽しくする言語

まつもとゆきひろ著 「オブジェクト指向スクリプト言語 Ruby 」より

Ruby言語のキーワード

18

プログラミングを楽しくする言語

まつもとゆきひろ著 「オブジェクト指向スクリプト言語 Ruby 」 より

ちょっと大げさに表現すると、Rubyの究極の目的は、有限の人生においてプログラミングの楽しい部分にできるだけ集中できるように助けることです。

Ruby on Rails とはオランダの David Heinemeier Hansson (DHH)氏によって作られたフレームワーク。彼が共同経営する会社 37signals の サービス開発用に作ったものをオープンソースとして2004年に公開。Javaの10倍の生産性というセンセイショナルなキーワードで話題になる。

19

写真はwikipediaより

20

「JJUG Cross Community Conference 2008 Fallの『JavaからRubyへ』・アンド・ナウ 」より、 一部加筆

Patterns of Enterprise Application Architecture

Extreme Programming Explained -- Embrace Change

達人プログラマー (システム開発の職人から名匠への道)

Ruby on Railsの背景

Ruby on Railsのキーワード

情報の重複は変更の困難さを増大し透明性を減少させ、不一致を生じる可能性につながるため、重複するべきでない。

21

DRY (Don't repeat yourself)

Ruby on Railsのキーワード

設定よりも規約ルールに則る事で、煩雑な設定を書かなくてもよい。Railsという名前には「DHHの敷いたレールに乗って行けば高速にアプリが構築出来る」という意味が込められている。

22

CoC (Convention over Configuration)

Ruby on Railsの実像

23

本当にJavaの10倍の生産性?作成するアプリケーションの種類や規模にもよりますが、2~5倍くらいと言われています。

また、Java(第一世代フレームワーク) と Ruby on Rails (第二世代フレームワーク) では開発のスタイルも違います。

24

Java(第一世代フレームワーク)の開発スタイル

アーキテクチャーの決定高い技術スキル実務経験設計センス

25

細分化された仕様の実装低い技術スキル単純作業的

アーキテクト

プログラマープログラマープログラマープログラマープログラマープログラマープログラマープログラマー

プログラマープログラマープログラマープログラマープログラマープログラマープログラマープログラマー

プログラマープログラマープログラマープログラマー

仕様書

Ruby on Railsを使った標準的な開発スタイル

26

プログラマープログラマー

プログラマー

プログラマー

仕様書

大きくないチーム中級以上の技術スキル 全員でアーキテクチャーを決定全員で実装少人数なら初級者の参加もOK

使われているの?Yes

27

ユーザー企業 システム名 規模サービス業 サービス状況管理システム 4人X3ヶ月

サービス業 メールコンテンツ管理システム 6ヶ月

地球の歩き方T&E 旅行者向けコミニュティサイト 264画面を6ヶ月

製造業 社内向け情報共有システム 5人X3ヶ月

伊藤忠エレクトロニクス 海外為替証拠金取引利用者向けコミニュティサイト

6人X4ヶ月

日経コンピュター2008年2月1日号より

島根県庁、福岡県庁、三鷹市・・・

問題はないの?

Microsoft ASP から Ruby on Railsへの移行トラブルは?

28

食べログ.com (日本最大級の口コミグルメサイト) の例

問題はないの?

Microsoft ASP から Ruby on Railsへの移行トラブルは?

28

食べログ.com (日本最大級の口コミグルメサイト) の例

あったSQLserver からMySQLへの移行で性能が出なかった。原因はMySQLのチューニング知識不足

初心者でも開発者できるの?

ほぼ NORuby も Ruby on Railsも使いこなすには中級者以上のスキルが必要です。Railsはオブジェクト指向やメタプログラミングが多用されており、良いシステムを作るのは初心者では難しい。

29

JavaからRubyへ昨年「JavaからRubyへ」が 翻訳された。新しい技術の生み出されるプラットフォームがJavaからRubyへと移りつつある。AjaxマッシュアップRESTBDD

30

「JavaからRubyへ」オライリー・ジャパン

Javaは廃れて全てRubyになってしまうのか?

31

JavaRuby

かたい、安定が求められる柔軟、素早い変化が求められる

Javaは廃れて全てRubyになってしまうのか?

31

JavaRuby

かたい、安定が求められる柔軟、素早い変化が求められる

JavaRuby

もちろん NO

既存の仕事への応用

既存の仕事への応用Ruby on Railsでプロトタイプを作成。

33

ユーザーからの活発なフィードバックが得られ、要件定義・仕様が明確になる 納入後の仕様違によるトラブルが減る。

既存の仕事への応用DBを共有する事で、既存のシステムの一部にRuby on Railsアプリを構築する。メンテナンスツール、データ解析ツールなどでは既に使われている。

34

既存のシステム

新しいWebアプリ

Ruby on RailsDatabase

JRubyJavaVMの上で動く RubySunが全面的にバックアップJava ↔ Ruby 相互に呼び出しが出来る。

35

既存のJavaで作られたシステム JRuby

新しいWebアプリ

JavaVM

Ruby on Rails

既存の仕事への応用

私が思う、Ruby on Rails の良いところ

簡潔な記述Rubyプログラムは記述が簡潔

高位関数(ブロック)が手軽に使える

DSLによるメタプログラミング

動的、eval

37

オブジェクト指向言語であるオブジェクト思考は、対象のアプリケーションやコードのモジュール化に役立つ。

Java等で発展してきたオブジェクト指向設計・実装が利用できる。

38

Webプログラマーの常識に合致する平凡なコントロラー

平凡なテンプレート

MVCモデル

O/Rマッピング

39

規約が決まっている名前付け、ディレクトリー構造などをあまり考えなくてもRailsのルールに合わせて行けば良い。

他人の書いたコードも理解しやすい。

40

UnitTest等が充実しているUnitTest等が内蔵されている

テスト支援機能も内蔵されている

RSpecなど進んだツールも用意されている

41

おもしろ新しい技術が次々と取り込む

RESTAjaxRSpec (BDD)Named Scopeフレームワーク自体の改善

42

デモ

テーブルの関連

44

一対多の関係

class Comment < ActiveRecord::Base belongs_to :blogend

class Blog < ActiveRecord::Base has_many :commentend

app/models/comment.rb

app/models/blog.rb

Ruby on Railsの始め方

EY-Office

開発スタイルターミナル + エディタ軽い原理を知るのには良い 極めれば生産性は高くなるIDE (NetBeans, 3rdRail, Eclipse...)Eclipse等の利用者には良いかも重いプログラミング向けGUIエディター(TextMate, Komodo Editor)上2つの中間

46

EY-Office

IDESun Microsystems社の NetBeans IDE 6.5

47

EY-Office

有償開発ツールCodeGear(Borland) 社の 3rdRail

48

EY-Office

開発プラットフォームWindowsポピュラーだが、コマンドでの開発に向かない、またコマンドが遅いUnix (Linuxなど)コマンドでの開発には最適MacUnix と同等の開発ができるWindows + coLinux / VMWareWindowsPCでUnix開発環境が使える

49

EY-Office

開発環境の構築i) Ruby のインストール (Railsを使うのなら 1.8.6か1.8.7)

ii) パッケージ管理ソフト gem のインストールiii)ビルドツール rake のインストールiv)Ruby on Railsのインストールv) RDBドライバーのインストール

50

EY-Office

Windows開発環境の構築例i) ii) Ruby, gem のインストール (One-Click Ruby Installer for Windowsを使用) http://rubyforge.org/frs/download.php/47082/ruby186-27_rc2.exe をダウンロードしインストーラーを実行

iii) gem install rakeiv) gem install railsv) gem install sqlite3-rubyvi) 必要ならsqlite(RDB)のインストール

51

EY-Office

Ruby on Rails入門書まずは一冊 Ruby on Rails の本を読むのが早道です。

自分にとって読みやすそうな本を選ぶのが重要です。

以下の本は私のお薦ですが、実際に本屋さんで眺めて決めて下さい。

52

「RailsによるアジャイルWebアプリケーション開発」 第2版Dave Thomas, David Heinemeier Hansson著、前田修吾訳オーム社、ISBN978-4-274-06696-2、 定価 4410円

EY-Office

Ruby 入門書Perl, Python等に慣れ親しんでいる人以外は絶対に Ruby の入門書を読んで下さい。

Railsと同じで 実際に本屋さんで眺めて決めて下さい。

本を読むだけでなく、説明に出てくるコードを試したり、演習問題のコードを書いて下さい。

53

EY-Office

Rubyドキュメント日本語!やや読みにくいところもありますが何度も読み仲良くなりましょう。新しいドキュメントも鋭意作成中

54

http://www.ruby-lang.org/ja/man/

EY-Office

Railsドキュメント英語ですが、examplesが豊富にあるので、まずはexamplesをみればプログラマーなら理解できます。

55

http://api.rubyonrails.org

EY-Office

レシピ本入門書とマニュアルの間を埋める本実際に開発する際には便利比較的最近のバージョン用に書かれている

56

ISBN: 4797336625 ISBN: 4839928266

EY-Office

デバック手法エラーメッセージをしっかり読む。

ログファイルを読む。

ログファイルにデバック用情報を書き出す。

irb, script/consoleで試す。

デバッカ

57

EY-Office58

NoMethodError in Todos#showShowing todos/show.html.erb where line #18 raised:

undefined method `gsu' for "":String

Extracted source (around line #18):

15:

16: <p>

17: <b>Memo:</b><br/>

18: <%=new_line(h(@todo.memo)) %>

19: </p>

20:

21: <%= link_to 'Edit', edit_todo_path(@todo) %> |

RAILS_ROOT: /Users/yy/RailsWorks/todo

Application Trace | Framework Trace | Full Trace

app/helpers/todos_helper.rb:4:in `new_line'app/views/todos/show.html.erb:18:in `_run_erb_47app47views47todos47show46html46erb'app/controllers/todos_controller.rb:18:in `show'

エラーメッセージの見方← エラーメッセージ

← エラーの起きた場所 ★ ★ ★← エラーの詳細 ★ ★ ★

← Viewでエラーが検出された場合は、 エラー近辺のテンプレートのソースが表示される

← スタックトレース エラーカ所に至るまでの 呼出経過 ★ ★

← スタックトレースの表示範囲を変えられる

EY-Office59

Request

Parameters:

{"id"=>"3"}

Show session dump

Response

Headers:

{"cookie"=>[], "Content-Type"=>"text/html", "Cache-Control"=>"no-cache"}

エラーメッセージの見方

--- flash: !map:ActionController::Flash::FlashHash {}

:csrf_id: 7273dc2e7aa6d271667bbc82e8b65997

← ブラウザーからのパラメター ★

← ブラウザーに送ったHTMLのヘッダー情報

← クリックすると、その時の セッション内容が表示される ー→ ★

EY-Office

ログファイルの見かた

60

Processing ArticleController#list (for 192.168.1.40 at 2007-10-07 17:18:03) [GET] Session ID: 5803516dedd63237597d4fc4c507fff9 Parameters: {"action"=>"list", "controller"=>"article", "page"=>"2"}User Load (0.000303) SELECT * FROM users WHERE (users.`cookie_id` = 't1u84mma0ytq7u23') LIMIT 1Cookie set: cookie_id=t1u84mma0ytq7u23; path=/; expires=Sat, 05 Jan 2008 08:18:03 GMTSQL (0.000891) SELECT count(*) AS count_all FROM articles LEFT OUTER JOIN translations ON translations.article_id = articles.id WHERE (true) Rendering within layouts/articleRendering article/listCompleted in 0.01970 (50 reqs/sec) | Rendering: 0.00664 (33%) | DB: 0.00599 (30%) | 200 OK

← 入力パラメター

↑ 実行されたSQL

← 使われたView

log/development.log の内容

ログに表示制御コード(^[[4;36;1m のようなもの)が入っている場合は、config/environment.rb ファイルの最後に以下の文を追加してサーバーを再起動して下さい。ActiveRecord::Base.colorize_logging = false

EY-Office

ログの出し方

61

logger.debug("id = #{id}")配列やオブジェクトは inspect メソッドを使うと分かり易い形で書かれる。

a = [1,2,3]puts "#{a}" # => 123puts "#{a.inspect}" # => [1,2,3]

EY-Office

ユニットテストRailsではテスト用のコードのひな形も自動生成されます。unit: モデルのテストコードfunction: コントロラーのテストコードintegration: コントロラーをまたがるテストコードfixtures: テスト用データmocks: テスト用のダミークラス

62

EY-Office

ユニットテストテストを書く事は、開発者にいくつものメリットをもたらします。リファクタリングが出来る。開発時間を短縮できる。安心感・自信・勇気。ユニットテストは開発者の為のテストです。最初から完璧を目指さず、出来るところからやりましょう。

63

EY-Office

Webアプリの脆弱性Railsは脆弱性を突く攻撃に対処する方法を提供しています。主な脆弱性を突く攻撃と対処。Cross Site Scripting ー ERBの h() メソッドSQL injection ー プレイスホルダーCross Site Request Forgery ー protect_from_forgery

しかし、正しく使わないと脆弱性が残るので注意しましょう。

64

EY-Office

実行環境 apache + Passenger(mod_rails)インストールや運用が簡単1つのサーバーで複数のアプリを運用できる

65

Apache 2.2.X

Internetmod_passenger

HTML,画像...

RDB

Railsアプリ

EY-Office

実行環境 (高負荷向き)apache(mod_proxy_balancer) + MongrelMogrel サーバーを追加する事でスケール可能

66

Apache 2.2.X

Internet mod_proxy

_balancer

HTML,画像...

RDB

Mongrel

Railsアプリ

Mongrel

Railsアプリ

Mongrel

Railsアプリ

2008年6月時点で 7000万PV/日の「食べログ.com」は4台のMongrel用サーバーで運用しているそうです

EY-Office

プラグインRailsの機能を拡張する、プラグインが多数公開されているので、上手く使うと生産性が飛躍的に向上します。Restful Authentication :ログイン認証一式jpmobile:携帯サイト構築ActiveScaffold:Ajaxを使った高機能 CRUDプラグイン一覧サイト: http://agilewebdevelopment.com/plugins

67

EY-Office

Redmine/Gitプログラムのバージョン管理リリース版、開発版の管理開発項目、バグ情報の管理Wiki開発情報のポータルサイト

68

プログラムや情報の管理にはツールを使うべきです。Redmine は Ruby on Railsで作られています。

EY-Office

さらに先に進むにはソースコードを読むRails 自身のコード

Railsで作られたアプリケーション

何か作ってみる

コミニュティー・勉強会への参加

Blog を書く

69

EY-Office

お題:夢、メッセージ

本物のプログラマだけが、高い生産性のツールや言語を使いソフトウェアが開発されている。

風評ではなく、自分で評価してツールや言語を決めて下さい。

70

EY-Office

ありがとうございます。

71

質問等などありましたら [email protected]

クリエイティブ・コモンズ 表示 2.1 ライセンス