rails s - EY

クラウドxスマフォ時代
のRuby on Rails入門
2014-07-22
今日のお話 (1/2)
自己紹介
Ruby言語の紹介
Ruby on Railsの紹介
Ruby on Rails で簡単なWebアプ
リを作る
Webアプリをクラウドにデプロイ
2
今日のお話 (2/2)
アプリをスマフォ用ブラウザーに対
応する
Webアプリをスマフォアプリと連
携する
RailsとTDD (時間があれば)
3
自己紹介
吉田 裕美
吉田 裕美 (Yoshida Yuumi)
有限会社 EY-Office
http://www.ey-office.com/
Blog : http://d.hatena.ne.jp/yuum3/
Twitter: @yuumi3
5
過去
大学の工学部卒業
組込系の会社に就職
CADのベンチャー企業に転職
CADコア部分の開発
図面管理システム等でSE・マネージメントを
経験
シリコンバレーを訪問したり、米国人と仕事を
経験
6
EY-Office
2000年に独立
開発
Web (Ruby on Rails)
iPhone
教育
お客様の問題を解決するIT教育
Ruby on Rails
iPhone
7
EY-Office 開発 (Web)
• アジアリーグアイスホッケー
•http://www.alhocky.jp
•チーム・選手の成績集計
• Perl 独自フレームワーク
•ネットショップ
•http://www.boro.co.jp
•Rails4.1 / jQuery
•RSpec / Cucumber
8
•アロハパーク
•サービス終了
•SNS
•Java / Seasar2
•萌えトーク (声優とSkype
でお話)
•サービス終了
•声優との会話予約予約
•Rails3.0 / jQuery
•RSpec
EY-Office 開発 (iPhone)
Tweetなう (無料) 絵本アプリ (iPhone/iPad)
教え子が作ったアプリ
9
EY-Office教育
Ruby on Rails
コース名
Ruby on Rails入
日数
1日
門コース
Ruby on Rails標
準コース
3日
Ruby on Rails徹
底コース
5日
内容
効果
費用
• Ruby言語入門
• Ruby/Ruby on Railsの概要が理解できる
2万円/人
• Ruby on Rails入門
• Ruby on Rails実習
• 経験豊な開発者であれば、書籍等を参考に
Ruby on Railsの開発が始められる
(5名以上で受
講ください)
• Ruby言語入門 、Ruby実践プログラミング
• Ruby言語実習
• Ruby on Rails入門、Ruby on Rails 実践開発
• Ruby on Rails実習
• Ruby/Ruby on Railsが理解できる
6万円/人
• Ruby言語入門 、Ruby実践プログラミング
• Ruby言語実習
• Ruby on Rails入門、Ruby on Rails 実践開発
• Ruby on Rails実習
• 実用アプリの開発演習
• Ruby/Ruby on Railsが理解できる
10
• Ruby on Rails開発プロジェクトにプログラ
マーとして参加できる
• Ruby on Railsを使ったプロジェクトの設
計・開発が始められる
10万円/人
EY-Officeの教育
11
執筆
12
RubyKaigi2008でスピーチ
成功するRuby教育のプラクティス」
13
RubyWorld Conference 2013
『Ruby開発者を増やすための教育につい
て−8年間のRuby教育で得た知見』
14
Webメディアへの執筆
15
Ruby言語の紹介
Ruby言語
日本人開発者 まつもとゆきひろ 氏に
よって開発されたプログラム言語。
世界中で使われている。
1995年よりオープンソースとして公
開。
Lisp, Smalltalk, Perlなど過去の言語
の良い部分をバランス良く取り入れて
いる。
17
写真はwikipediaより
主要な言語の歴史と関連
18
Ruby言語のキーワード
プログラミングを楽しくする言語
ちょっと大げさに表現すると、Rubyの究極
の目的は、有限の人生においてプログラミ
ングの楽しい部分にできるだけ集中できる
ように助けることです。
まつもとゆきひろ著 「オブジェクト指向スクリプト言語 Ruby 」 より
19
Ruby処理系
MRI(CRuby) : まつもと氏がつくった元祖
JRuby :Javaで作られ JVM上で動作する
Rubinius :Ruby+LLVMで作られた処理系
IronRuby: .NET環境で動作する
MacRuby :Mac OS X に特化した処理系
mRuby : 組み込み用Ruby (サブセット)
RubyMotion : iOS開発用Rubyコンパイラー
20
Rubyのバージョン
1.8.X :昔々
1.9.X :過去
笹田浩一氏の作ったVMをコアに
採用し高速化
多言語(M17N)化
RubySpec(Ruby標準仕様)
2.1.X : 現在
21
Ruby on Rails開発環境の選択
Rails Hosting 2012 (http://rails-hosting.com)より
Ruby、Ruby on Rails共にUnix文化に根ざし
ており、一部のライブラリーはWindowsでは
動かない
Windowsでも基本の学習程度には使える
22
Rubyのインストール
Mac, Linux
./configure, make, make install
rbenv : 複数バージョンの切り換え
Windows
http://rubyinstaller.org
VMを使いLinuxをインストール
23
Ruby(Rails)インストール情報
http://redmine.ey-office.net/
projects/rails/wiki (時々更新)
http://qiita.com (古い記事は注意)
http://stackoverflow.com トラブ
ル対策にはお勧め
24
Ruby言語超入門
動的プログラミング言語
コンパイル等は無く、直ぐに実行で
きる
irb : プログラムを書かなくても
Rubyを試せるコマンド
% irb!
> 2 + 3!
=> 5
26
動的型付け
データに型があるが、変数には型がない
変数の宣言は不要
a = 1!
pus a!
a = “ABC”!
puts a!
a = [1,2,3]!
puts a
27
データ
他の言語と同じく
整数、実数、文字列 …
配列、ハッシュ …
シンボル
:name
名前自身を表すデータ
ハッシュのキーとして良く使われる
28
式
他の言語とほぼ同じ
a = 2 + (3 * 4)!
s = “abc” + “def”!
b = a > 20!
x += 3!
n++ ++、-- は無い
29
制御文
文法は違うが考え方は同じ
簡潔な文法
if a > 0!
b = 1!
else!
b = 0!
a = -a!
end
s = 0!
while n > 0!
s = s + n!
n = n - 1!
end
30
関数(メソッド)
簡潔な文法
def fact(n)!
if n == 0!
1!
else!
fact(n - 1) * n!
end!
end
31
n = fact(5)!
m = fact 4
オブジェクト指向
文法は異なるが、基本はJava等とほぼ同じ
class TwoNumber!
def initialize(a, b)!
@a = a; @b = b!
end!
def add!
@a + @b!
end!
end
tw = TwoNumber.new(3, 4)!
a = tw.add()
32
オブジェクト指向
ただし、Javaと違うところもある
全てがオブジェクト
オープンクラス
mixin (module)
33
全てがオブジェクト
整数もオブジェクト
i = 123!
s = i.to_s()!
s = String.valueOf(i);
34
オープンクラス
既存のクラスにメソッドを追加・変
更できる
class String!
def double!
self * 2!
end!
end
35
mixin
実装を共有出来る
class String!
include Double!
end!
class Number!
include Double!
end
module Double!
def double!
self * 2!
end!
end
3.double
“ab”.double
# => 6!
# => “abab”
36
オブジェクト指向
自由度が高い
メタプログラミング (DSL)
モンキーパッチ
オープンクラスはやや危険なので
refinementsで対応
37
関数型言語からの影響
イテレータ
ブロック
全ての式、文が値を持つ
遅延評価
38
イテレーター (Enumerable)
a = [1,2,3,4]!
b = []!
for n in a!
if n > 2!
b << n !
end!
end
a = [1,2,3,4]!
b = a.select {|n| n > 2}
39
ブロック
def times(n)!
for i in 1..n!
yield(n)!
end!
end
> times(3) {|n| puts n }!
1!
2!
3
40
ドキュメント
暗記する必要はあり
ませんが、一度全て
目を通しておくと良
いと思います。
41
ライブラリー
組み込みライブラリー
添付ライブラリー
Ruby Gems
42
Ruby on Railsの紹介
Ruby on Rails とは
オランダの David Heinemeier
Hansson (DHH)氏によって作られた
フレームワーク。
彼が共同経営する会社 Basecamp
(37signals) のサービス開発用に作った
ものをオープンソースとして2004年に
公開。
Javaの10倍の生産性というセンセイショ
ナルなキーワードで話題になる。
44
写真はwikipediaより
Ruby on Railsの背景
Extreme Programming Explained
-- Embrace Change
Programming Ruby:
The Pragmatic
Programmer's Guide
Patterns of Enterprise Application Architecture
達人プログラマー (システム開発の職人から名匠への道)
「JJUG Cross Community Conference 2008 Fallの『JavaからRubyへ』・アンド・ナウ 」
より、 一部加筆
45
どうしてRubyは世界で使われる
ようになったのか?
英語の
news group
や web
Dave Thomas
46
EY-Office
Ruby on Railsのキーワード
DRY
(Don't repeat yourself)
情報の重複は変更の困難さを増大し透明
性を減少させ、不一致を生じる可能性に
つながるため、重複するべきでない。
47
Ruby on Railsのキーワード
CoC
(Convention over Configuration)
設定よりも規約
ルールに則る事で、煩雑な設定を書かな
くてもよい。
Railsという名前には「DHHの敷いたレー
ルに乗って行けば高速にアプリが構築出
来る」という意味が込められている。
48
Ruby on Railsの実像
49
本当にJavaの10倍の生産性?
作成するアプリケーションの種類や
規模にもよりますが、2∼5倍くら
いと言われています。
また、Java(第一世代フレームワーク) と
Ruby on Rails (第二世代フレームワーク)
では開発のスタイルも違います。
50
Java(第一世代フレームワーク)の
開発スタイル
アーキテクチャーの決定
高い技術スキル
実務経験
設計センス
仕様書
アーキテクト
壁
プログラマー
プログラマー
プログラマー
プログラマー
プログラマー
プログラマー
プログラマー
プログラマー
プログラマー
プログラマー
プログラマー
プログラマー
プログラマー
プログラマー
プログラマー
プログラマー
プログラマー
51
細分化された仕様
の実装
低い技術スキル
単純作業的
Ruby on Railsを使った標準
的な開発スタイル
プログラマー
仕様書
プログラマー
プログラマー
プログラマー
52
大きくないチーム
中級以上の技術スキル
全員でアーキテクチャー
を決定
全員で実装
少人数なら初級者の参加
もOK
初心者でも使いこなせるの?
ほぼ NO
Ruby も Ruby on Railsも使いこなす
には中級者以上のスキルが必要です。
Railsはオブジェクト指向やメタプログ
ラミングが多用されており、良いシス
テムを作るのは初心者では難しい。
53
JavaからRubyへ
「JavaからRubyへ」という
本が翻訳された。
新しい技術の生み出されるプ
ラットフォームがJavaから
Rubyへと移りつつある。
「JavaからRubyへ」
オライリー・ジャパン
Ajax
マッシュアップ
REST
BDD
54
Javaは廃れて全てRubyになっ
てしまうのか?
Java
Ruby
もちろん NO
Ruby
Java
かたい、安定が求められる
柔軟、素早い変化が求められる
55
Ruby on Railsのバージョンアップ
1∼2年に一度のメジャーバージョン
アップ
その間、数回のマイナーアップデート
良くなるのであれば、多少の互換性は
無視
56
Ruby on Rails入門
今回つくるアプリ
画像SNSのよう
なもの
58
コマンド
コマンド(とエディター)を使い開発
--help を指定すればヘルプが表示される
主なコマンド
rails : コード雛形作成、実行
rake : 開発時の雑用(?)
bundle : gemライブラリーの管理
59
開発の流れ
1.
rails new でプロジェクトを作成
2.
rails g でコードの雛形を作成
3.
rake db:migrate でテーブルを作成
4.
rails s でサーバーを起動
5.
コードの変更・追加
6.
2へ戻る
60
railsコマンド
rails new プロジェクト!
新規プロジェクトの作成
rails g テーブル カラム:型 …!
テーブルとそれを扱うコードの作成
rails s!
サーバーの起動
rails c!
開発コンソール
61
アプリのディレクトリー構造
app: プログラム、詳細は次ページ
bin: 開発ツール
lib: ライブラリー
config: 設定
db: データベース関係
public: スタティックなHTMLなど
spec, test: テストコード
vendor: いろいろ(歴史的な理由)
log: ログファイル
tmp: 一時的なファイルなど
Gemfile: gemライブラリーの管理
62
appのディレクトリー構造
assets: CSS, JavaScript, 画像,
controllers: コントローラ
helpers: ヘルパー、表示の補助
models: モデル
mails: メールコントローラ
views: 表示テンプレート
layouts: 表示の枠組み
コントローラ単位のテンプレート
63
MVC
Model : 業務ロジック、計算など、処理の本質
View : 表示
Control : 処理の流の制御
64
マイグレーション
migration
Railsではテーブルの作成・変更もコードと
して管理している
rakeコマンドでマイグレーションの取消や
再実行が出来る
class CreatePosts < ActiveRecord::Migration!
def change!
create_table :posts do |t|!
t.string :name!
t.string :photo!
t.text :caption!
!
t.timestamps!
end!
end!
end
65
RESTfulなコントロラー
URLはリソースを現す
操作はメソッド(GET, POST, PATCH, DELETE)を使う
rake routes コマンドで表示
操作
メソッド
一覧
GET
http://server/todos
取得
GET
http://server/todos/1
更新
登録
削除
URL
PATCH http://server/todos/1
POST
http://server/todos
DELETE http://server/todos/1
66
処理
index()
show()
update()
create()
destroy()
ドキュメント
英語ですが慣れて下
さい
examplesのコード
を最初に読むと良い
と思います
67
Railsアプリのデバック
エラーメッセージをしっかり読む
ログファイルを読む
ログファイルにデバック用情報を書
き出す logger.debug(a)
rails consoleで試す。
68
Railsの便利な機能
入力データのチェック validation
関連するテーブルの参照
ヘルパー
callback
before action
69
テーブルの関連
Railsのモデルは関連を扱う事が出来ます
ここでは users : posts = 1:多 の関係を記述
class User < ActiveRecord::Base!
has_many :posts!
end
class Post < ActiveRecord::Base!
belongs_to :user!
end
70
国際語化 i18n
internationalization = i18n
Railsは最初から国際語化されている
エラーメッセージ等は最初は英語しか
入っていない
多国語を扱うサイトも作りやすい
71
Gemライブラリー
Gemライブラリー
一般的な機能はすでにGemとして公開さ
れている事が多い
Gemを探すには ruby-toolbox が役立つ
たいてい GitHubに置いてある
ちゃんとメンテされているか、良いコー
ドかをチェックした方が良い
73
Gemライブラリーの利用
1.
Gemfile にライブラリーを指定
2.
bundle でインストール
3.
(rails g で設定など)
4.
サーバーの再起動
5.
コードの追加・変更
74
よく使うGem
Gem
機能
Kaminari
一覧のページング
CarrierWave
画像などのアップロード
Paperclip
画像などのアップロード
OminiAuth
Twitter,Facebookなどのを使うログイン認証
Devise
自前DBを使うログイン認証、多機能
RailsAdmin
RDBデータの管理画面
75
UI
Twitter Bootstap
デザイン力の無い開発者
でも今風なWebが作れ
る CSS (JS)
Twitterのデザイナーが
作成した
Railsで直ぐに使えるGem
がある
77
Cloud
クラウド is 何?
79
クラウドの 分類
SaaS
Software as a Service
PaaS
Platform as a Service
IaaS(HaaS)
Infrastructure as a Service
図はWikipediaより
80
クラウドの分類
アプリケーション
CRM, ERP, Mail, Office
プラットフォーム
OS, RDB, Middleware
インフラ
CPU, Disk, Network
図はWikipediaより
81
クラウドの分類
SaaS
PaaS
IaaS(HaaS)
図はWikipediaより
82
Herokuとは
元々 Ruby on Rails に特化した
PaaS だった
簡単にアプリを配置できる
簡単にスケールできる
無料トライアル
AWSを使っている
Salesforceの子会社
Ruby開発者を雇っている
(Matz、笹田、中田)
83
Herokuデプロイ手順
1. herokuツールのダウンロード・インストール
2. Gemfileの修正
3. bundle install!
4. heroku create!
5. git commit!
6. git push heroku master!
7. heroku run rake db:migrate
84
AWS等へのデプロイ手順
1.
AWSにサーバーを作成
2.
サーバーにRuby, RDB…のインストール。
ここが大変! 最近はChef等で自動化する
3.
capistranoのインスール
4.
capistranoの設定ファイル作成・変更
git commit!
6. git push origin master!
7. cap deploy!
8. 上手く行かなければ 2, 4へ戻る
5.
85
IasS vs PasS
HerkuのようなPasSを使えばイン
フラ系エンジニアを雇わなくても安
心してサービスを立ち上げられる。
ただし、PasSはIasSよりコストが
かかる
86
Mobile First
Mobile First
http://www.slideshare.net/
bge20/2013-05-bea より
スマフォやタブレットの数はPCを
超えた大きな市場なった
88
スマフォへの対応方法
Webアプリにスマフォ用の CSS
(+ JavaScript) を追加
ネイティブアプリを作りAPI(JSON)
で通信する
89
今回つくるアプリ
Safari (web)
ネイティブアプリ
90
Twitter Bootstap
レスポンシブ Web デザイン
91
Ruby on Railsとスマフォ
JSON/
XML
サーバー
Ruby on Rails
JSON/
XML
Railsはバージョン2.0(2007年)当時から
WebAPI、リッチクライアント向けのJSON/
XMLでのデータやり取りが出来ていた
92
JSONの出力
レスポンスはHTML以外にJSON等を出力で
きる
show.html.erb
<p>!
<strong>Name:</strong>!
<%= @post.user.name %>!
</p>!
<p>!
<strong>Caption:</strong>!
<%= @post.caption %>!
</p>
show.json.jbuilder
json.extract! @post, :id, :name, :caption
93
Rails ⇄ iOSライブラリー
ObjectiveResource 死亡
他にもいろいろ …
94
画像は http://meta.ohloh.net/2012/10/going-tdd/ より
TDD
TDD: テスト駆動開発
TDDの開発スタイル
従来の開発スタイル
設計
設計
テストコードの作成
コードの作成
デバック
基本的には
一方向の流れ
コードの作成
テスティング
テストコードの実行
NO
NO
OK?
必要ならテストコー
ドの作成
OK?
YES
YES
96
ここを繰り返すこ
とで開発を進める
TDDのメリット
短期目標がありモチベーションが上
がる、進捗が分かり易い
リファクタリングしやすくなる
フレームワーク等のバージョンアッ
プが容易になる
トータルでは開発時間を短く出来る
97
TDDのデメリット
最初はテストを書くのが難しい
プログラミング初心者にはテストが
書けない
テストを書く事が目的になりがち
98
テストの書き方
テストコードは
1.
テストデータなどテストの準備
2.
テスト対象の実行
3.
結果を確認
まずは、正常系を1つ書く
先人の書いたテストコードを学ぶ
99
リファクタリング
コードの改善
メンテナンス性の高いコードにする
基本的には仕様は変えない
テストがあると容易に出来る
画像は http://meta.ohloh.net/2012/10/going-tdd/ より
100
RSpec
Ruby (Rails)でよく使われるツール
コンパクトで判り易いテストが書ける
rspec-railsを使うと model, helper,
controller, view, mailer, routes,
featuresのテストが書ける
101
rspec-rails使い方のお勧め
model にロジックのテストを書く
features でアプリ全体の簡単なテスト
を書く
102
つづき…
Ruby言語 入門書
Perl, Python等に慣れ親しんでいる人以外は絶対に
Ruby の入門書を読んで下さい。
実際に本屋さんで眺めて決めて下さい。
本を読むだけでなく、説明に出てくるコードを試し
たり、演習問題のコードを書いて下さい。
ISBN 4797371277
ISBN 4797372273
104
ISBN 4873113679
EY-Office
Ruby on Rails入門書
まずは一冊 Ruby on Rails の本を読むのが早道です
自分にとって読みやすそうな本を選ぶのが重要です
紙の書籍は最新版に対応してないですが価値はあります
http://tatsu-zine.com/
books/railstutorial
ISBN 4274068668
105
http://pragprog.com/book/
rails4/agile-web-developmentwith-rails-4
EY-Office
ネット上の情報
1年以上前の情報は古いので注意!
信頼出来る情報
https://www.ruby-lang.org/ja
http://rubyonrails.org
http://guides.rubyonrails.org
有用
http://stackoverflow.com
http://qiita.com
106
←お勧め
ネット上の情報
日本語のブログ等には役に立たない
ものが ままあります
検索上位にある情報でも良くないも
のもあります (具体例は口頭で)
107
今日の結論
英語重要
新しい技術は英語でやって来る
英会話は後回し、読めればOK
慣れる事が重要
108
おつかれさまでした
http://www.ey-office.com/