備忘録 ✖️ Ruby on Rails

プログラミング(主にRuby on Rails)を勉強中です。知らないがことがあまりにも多いので、メモ感覚で学びを残したいです。誤り等ございましたらご指摘よろしくお願い至します。

Rails orderメソッドを使い順序を複数指定したい場合

f:id:omatomo:20170830172634p:plain

Rails viewで自分がいるページを確認したい時のメソッド

# root_path かどうか
current_page?(root_path)

# /users/:id が current_user かどうか
current_page?(current_user)

# 任意のコントローラ/アクションかどうか
current_page?(controller: 'foo', action: 'bar')

ざっくりしたWebを支える技術      第1部 Web概論 第3章 REST webアーキテクチャー

webのアーキテクチャースタイルはREST

アーキテクチャースタイルとは複数のアーキテクチャー(下図参照)に共通する性質、様式、作法あるいは流儀など指す。webサービス全体の調和を乱さぬようRESTの約束事を守ることが重要。

 

抽象化レベル  ↓↓↓                       |  webでの例 ↓↓↓

-------------------------------------------------------------------------------------

(親)  アーキテクチャースタイル  | REST

-------------------------------------------------------------------------------------

(子)  アーキテクチャ                    |    ブラウ,サーバ,プロキシ,HTTP,URIなど

--------------------------------------------------------------------------------------

(孫)  実装                                      |    Firefox, googleChrome, safariなど

--------------------------------------------------------------------------------------

 

RESTにおける重要な概念、リソースとは?

一言で言うとweb上に存在する名前を持ったありとあらゆる情報。

Railsチュートリアル第5章, Yahoo! JAPANの路線検索, あなたのブログトップページ

人間の場合、同姓同名の名前の知り合いが存在しても区別はできるがプログラムの場合字体が全く同じだと区別できない。

では、どんな状況でもプログラムが区別可能な<名前>とは何か?

それはURIである。URIはそれぞれ一意でなくてはいけない。

Railsチュートリアル第5章のURI ↓↓

https://railstutorial.jp/chapters/filling_in_the_layout?version=5.0#cha-filling_in_the_layout

 

具体的なRESTのアーキテクチャースタイルとは?

RESTは以下6つのアーキテクチャースタイルを組み合わせた複合アーキテクチャースタイルである。

1 クライアント/サーバーユーザーインターフェースと処理を分離する。

サーバーはデータストレージとしての機能だけを提供すればいい。

 

2 ステートレスサーバー :サーバー側でアプリケーション状態を持たない。

ただしサーバー側で状態を管理したい場合、cookieを使ったセッション管理がある。(ステートフル)

 

3 キャッシュ      :クライアントとサーバーの通信回数を減らす。

一度取得したリソースをクライアント側で使い回す方式。

 

4 統一インタフェース     :インターフェースを固定する。

HTTPで統一することでクライアントとサーバーの実装の独立性が向上する。

 

5 階層化システム             :システムを階層に分離する。

クライアントからするとサーバーもプロキシも同じインターフェースで接続できるので接続先を気にする必要はない。(インターフェースをHTTPで統一しているから。)

 

6 コードオンデマンド     :プログラムをクライアント側で実行する。

JavascriptFlashなどをクライアントプログラムに新しい機能として追加できる。

 

まとめ

webはRESTと言うアーキテクチャースタイルがあったからこそここまで大きくなった。

WebサービスやWebAPIがRESTfulになると、Webは全体としてよりよくなっていく。

 

 

ざっくりしたWebを支える技術      第1部 Web概論 第2章 Webの歴史

web以前のインターネット

米国内の大学や研究機関の間を当時としては高速な回線で接続し、全米をつなくネットワークといて徐々に成長して来た。扱われていた文字は全てアルファベットであり、メールを送るにしても今日のリアルタイムでの通信ではなく、到達するまでに遅延があった。

 

web以前のハイパーメディア

さまさまな研究者が色々な構想を打ち立てるなか、1987年にBill AtkinsonがAppleで開発したHyperCardが初の実用的なハイパーメディアとしてあげられる。ネットワークを通じてデータのやり取りはなかったものの、HyperTalkというスクリグと言語でプログラムを実行しカードと呼ばれる文書を単位にページを遷移できた。

 

web以前の分散システム

端末をホストコンピュータに接続してホストコンピュータで集中して処理をしていた。1970年以降コンピューターのダウンサイジングが進み、一つ一つのコンピューターの小型化高性能化が進むに連れて複数のコンピュータを組み合わせて処理を分散さる分散システムが生まれた。RPCという分散システムを実現するための技術がある。これはリモートのサーバーで実行しているプログラムをクライアント側から呼び出すという技術。

 

webの誕生

1990年11月12日, Tim Berners-Leeがハイパーメディアを用いたインターネットベースの分散情報管理システムとしてwebの提案書を書いた。

 

webの標準化

サーバー、クライアント間での相互運用性が求められていたが、webの急速的な普及で各社の実装がバラバラであったため、Berners-Leeが中心となりW3C(world wide web consortium)がwebの標準化を行う団体として設立された。HTML, XML, HTTP, URI, CSSなどの標準化作業が行われた。

 

 

ざっくりしたWebを支える技術      第1部 Web概論 第1章 Webとは何か?

様々なwebの用途例

webサイト・・AmazonやYahooなど

ユーザーインターフェースとしてのweb・・UIの分野。HTMLなど見た目の部分

プログラム用APIとしてのweb・・プログラム用のインターフェース

 

webを支える最も基本的な3つ技術

HTTP(Hypertext Trnsfer Protocol)・・get, postなどWebブラウザとWebサーバ間で情報をやり取りするためのプロトコルのこと。(プロトコル =データのやりとりをするときの、ある程度決まった手順

URI ・・URLなどにより世界のあらゆる情報を指し示せる。(http://0000.jpなど)

HTML・・情報を表現するための文書フォーマット。

 

webを支えるその他の基本的な技術

Hypertext&Hypermedia

Hypertextとは、文書内の要素に、他の文書への参照を埋め込み、複数の文書を相互に結びつけたもの。Hypermediaとは, Hypertextのような文書に留まらず、画像や図表、音声、動画など様々な情報間で相互に関連付けや参照などが行えるようにしたもの

 

分散システム

1つのコンピューターが全てを処理する<集中システム>とは違い、複数のコンピュータを組み合わせて処理を分散させる形式。

webは世界中に配置されたサーバーに世界中のブラウザがアクセスする分散システム。

f:id:omatomo:20170717212950p:plain