Ruby/Web
RailsでWeb開発を始めたエンジニア見習いに対して多くの人がこんなことを言う。 「SQLを理解しろ」「HTTPを学べ」「誰かこいつらにWeb技術の基礎を教えろ」 。なら自分がそういう記事を頑張って書こう。誰かって自分さ。
2017-10-03
責務の分離
このチャプターのコード:
https://github.com/owlworks/ruby_on_basis/tree/13_change_routing_process_and_add_id_column_to_product
さてProductのGET(Read)、PUT(Update)、Deleteを実装する予定だが今日はその下準備だ。まずコードが少しややこしくなってきた。具体的にはmount_procメソッドのブロック内で処理を書きすぎている。そこでリクエストからレスポンスを作るまでの実処理をControllerオブジェクトへ任せよう。
class Co...
2017-10-03
前回はHTTPのURLとメソッドという概念を説明したね。今日はリソースを作ってコードを書いてCRUDしてみよう。
さて、どんなリソースを作ってみようか。このドキュメントではちょっとしたサンプルコードなら大抵は猫クラスが登場する。ただ、オブジェクト指向プログラミングやリソースのサンプルとしては不適切だ。可愛いけれど。
このドキュメントの想定読者は既にrailsで業務コーディングをしていると思うので、ビジネスっぽい例えの方が身近で良いと思う。だから今日は商品(product)クラスを考えてみよう。ちょっとした商品管理ソフトを作るんだ。
Productクラス
Productクラスは属性...
2017-10-03
ようやくWebアプリ編に突入だ! RubyでHttpサーバを簡単に構築出来る標準ライブラリ、Webrickを使ってWebアプリを作ってみよう。さっそくコードから見ていくぞ、論ずるよりも書くが易しだ。
require 'webrick'
# WEBrick::HTTPServerクラスのインスタンスを生成する
server = WEBrick::HTTPServer.new({:Port => 3000})
# HTTPServerオブジェクトにmount_procメソッドでRouteを定義する
server.mount_proc('/teapot') do |req, r...
2017-10-02
ルビィの奇妙な変数
早速だがこんなコードを実行してみよう。どんな結果になるかな?
cat = 'にゃーん'
animal = cat
animal.slice!(1..-1) # Strig#slice!は文字列の指定位置を削除する
puts cat
# => "に"
んん? これはどういうことだろう。変数animalは変数catをコピーして新しく作ったのに、animalの中身が変更されるとcatまで変わってしまった!
説明しよう。よく変数はデータを入れる箱だとか説明される。聞いたことがあるよね。それはわかりやすくした例えた、少し不正確だし概念だけの話だ。
ここで...
2017-10-02
クラスの継承
前回はクラスとインスタンスの話をした。覚えているかな? クラスがメソッドという振る舞いの情報を持ち、インスタンスが状態の情報を持つというのが要点だ。
今回の話題は「継承」について。オブジェクト指向プログラミングでは非常に重要な概念となる。何故なら継承がコードの再利用をしやすくするからだ。
では、継承とは一体なんなのか。よく言われる説明では既存のクラスを元にして構造や振る舞いを共有した別のクラスを作るということだ。
ここでは、ちょっと違う表現もしてみよう。継承とは、あるクラスが持つ振る舞いの情報を別のクラスから参照することだとも言える。
(ややこしくなるから詳しい話は...