Kaz Chocomint's

シドニーで生活しながら考えたこと、勉強していることについてまとめていくブログ

【本】"Webを支える技術"を読んでみた感想

Webを支える技術 -技術評論社- 山本陽平(著) を読みましたので、本の大まかな内容とその感想をまとめました。

f:id:etoh103:20160305121543j:plain

学んだことの振り返りも兼ねて以下、要約しました。

-1部  Web概論

 Webの定義から、簡単な歴史、その後の章に出てくる技術に関するキーワードのわかりやすくまとまっています。webの標準化に関して、アーキテクチャスタイルとは何かの説明があり、SOAPの説明を交えながら、現在一般的となったRESTと呼ばれる設計思想について解説されています。RESTとはULCDDC$SSとも表記でき、続く6種類のスタイルをまとめたものをいう。クライアント/サーバ、ステートレスサーバ、キャッシュ、統一インターフェース、階層化システム、コードオンデマンド

-2部  URI

URIの仕様についての説明から、設計について順を追って説明が続く。URIの文字はASCIIのみであり、日本ではUTF-8にするのが無難。URIとは、URLとURNの総称のこと。設計に際し、URIとHTTPメソッドが名詞と動詞の関係にあることに注目し、シンプルなURI設計を目指すべきである。URIをクライアントで組み立てたり、拡張子からリソースの内容を推測したりできないが、それをURI不透明性と呼び、これも留意しておくべき重要な特徴である。

-3部  HTTP

HTTPについて、誕生から標準化まで歴史を交えて解説が進む。現在最新のHTTP1.1。リクエストとレスポンスで成り立っており、各々のメッセージには規定の型がある。HTTPは、CRUD(Create,Read,Update,Delete)の基本機能に応じたメソッドが定義されている。GET(リソースの取得)、POST(リソースの作成と追加)、PUT(リソースの更新と作成)、DELETE(リソースの削除)、HEAD(リソースのヘッドの取得)、OPTIONS(サポートしているメソッドの取得)
これらに対しては、べき等性(何回実行しても結果が同じ)と安全性(実行によりリソースの状態が変化しない)という性質で各々の特徴を説明できる。
レスポンス時に状態を伝えるステータスコードが定義されており、3桁の数字で表される。(1XX 処理中 2XX 成功 3XX リダイレクト 4XX クライアントエラー 5XX サーバーエラー)
HTTPにはヘッダがあり、日時、MIMEメディアタイプ、コンテントネゴシエーション(クライアントがサーバに伝えて決定する)といった情報を付与する。後者の例としては、Acceptヘッダ(処理できるメディアタイプをサーバに伝える)、Content-Lengthヘッダ(ボディの長さを指定する)などがある。
HTTPの認証方式には、主にBasic認証とDigest認証がある。Basic認証はユーザ名とパスワードによる方式、Digest認証はBasicn認証よりセキュアで、ダイジェストと呼ばれる固有の情報(ユーザー名やパスワード以外にもタイムスタンプ、nonceの送信回数やqop値など)を作成して利用する。クライアントから見た操作の手軽さから、いまはBasic認証が一般的で、セキュリティを高めたい場合は、SSLTLSを使ってHTTPS通信し、通信路上で暗号化する方法が主流である。
クライアント側でリソースを確保し、同一URIへの複数回アクセスによる通信コストを下げる方法としてキャッシュという機能がある。キャッシュ用のヘッダを利用して、制限や抑制が可能である。

-4部  ハイパーメディアフォーマット

タグで文書の構造を表現するマークアップ言語であるHTMLについて、その元となったXMLの構造から始めて、構成要素の各説明が続く。HTMLにより意味を持たせるためにメタデータを埋め込むmicroformatについて解説がある。
XMLのフォーマットのATOMは主にフィードとして利用されるが、WebAPIとしても利用できる。またAtomPub(Atom Publishing Protocol)とは、タイトルや更新日時といった基本的なメタデータをもったリソースであるエントリをCRUDするWebAPIのためのプロトコルで、フレームワークあやライブラリが充実しているため利用価値が高い。
JSONは軽量なデータ記述言語で、プログラミング言語間でデータを受け渡せたり、JSONPと利用してクロスドメイン通信(複数ドメインのサーバと通信する)が可能なのが特徴である。

-5部  Webサービスの設計

どのようにリソースを分割し、相互にリンクをどう繋げるかを決めていくのがリソース設計であり、一つにリソース指向アーキテクチャという方法がある。大まかには、
1提供したいデータを特定、2データをリソースに分ける、3リソースにURIの名前を決定4リソース表現の設計、5リンクとフォームでリソース同士を結びつけ、6イベントの標準的なコースを検討、7エラーについて検討
という流れで開発する。1と2について関係モデルのER図を作成しての導出、オブジェクト指向モデルのクラス図から、情報アーキテクチャからの導出などが方法としてある。情報アーキテクチャはリソース指向アーキテクチャと相性が良い。

-以上


読了後の感想ですが、全体的に非常にわかりやすく書かれており、読み切ることは簡単でした。3部くらいまではいままで聞いたことも多い内容だったのですが、きちんとまとまっているため、網羅した感じで復習ができました。4部以降、ATOMmicroformatなどなじみのないものについては、説明を読んでも利用状況を想像できないので理解しずらかったです。フォーマットや定義などは、実際に手を動かして使ってみてより理解が深まると思いました。
また、最終5部のwebサービスについては実際に設計をしたことがないものの、大まかな主流の考え方や、取り組む方法が実例を交えて解説されているので、何度も読み返すことになりそうだと思いました。総じて、開発の方法まで一通り平易な記述で網羅されており、買ってよかった本でした。なお、5部以降にも50ページほどステータスコード一覧や参考文献が付録として乗っており、その点も有用だなと感じました。

Webについて歴史を交えて、簡単にHTTPなどの技術を知りたい方にはもってこいの本だと思います。webでの評価も高めですが、私もその通りだと感じました。

 

RubyとRailsの勉強のために本を購入してみた

Railsチュートリアルを終えてからは、またドットインストールに戻って、Rubyの復習やSinatraについて勉強したりしていました。なにかしっくりきません。HTTPなどwebを支えている技術の基本的な知識に穴があるかも、RubyRailsに関する基礎に抜けが多いから理解しきれないところがあるのでは?と思うようになりました。Webで得られる情報についてもっと体系的に学びたい、一枚絵と行かなくても大きな地図のようにRubyRailsについて俯瞰できるようになれば、もっと概念や使い方が理解できるようになるだろうと考えました。

そこで、本を紹介するブログを読み、Amazonのレビューも参考に以下の三冊をシドニーへ取り寄せることにしました。
(もしシドニーにいて日本の本の購入を考えている人がいましたら、Amazonはオススメです。3冊を購入し、本代以外は送料手数料込1700円しかかりませんでした)

⭐️パーフェクトRuby on Rails

Amazon.co.jp: パーフェクト Ruby on Rails: すがわら まさのり, 前島 真一, 近藤 宇智朗, 橋立 友宏: 本

Railsに関する本を選ぶ上で考えたのは、体系立てて学べるかどうかです。webには幸い、サンプルコードやチュートリアルなど実戦に向いた良サイトがたくさんあるため、本としては基礎をきちんと学ぼうと考え、この本にしました。

⭐️初めてのRuby オライリージャパン Yugui(著)

Amazon.co.jp: 初めてのRuby: Yugui: 本

Rubyの本については結構悩みました。Rubyには多くの本が存在し、どれも特徴を持って一長一短を評するレビューが多かったからです。私は全く一からRubyを学ぶわけではないという点、なにか細かい基本のところでわからなかったら、それはWebで調べればなんとかなるだろいうということで、プログラミング初心者には少し難しそうな、オライリー出版のこれにしました。たのしいRubyという本とどちらにしようか悩みましたが、それは最新5版が今月末2/26ということで見送りにしました。

Amazon.co.jp: たのしいRuby 第5版: 高橋 征義, 後藤 裕蔵, まつもと ゆきひろ: 本

⭐️Webを支える技術 技術評論社 山本陽平(著)

Amazon.co.jp: Webを支える技術 -HTTP、URI、HTML、そしてREST (WEB+DB PRESS plus): 山本 陽平: 本

Webの基礎を体系的に学べるという評判がよい本です。HTTPのGET,POSTなどをきちんと頭に整理して入れておきたいということで選びました。

 

f:id:etoh103:20160206204347j:plain

 

まだ読み始めたばかりですので、各本についての所感を今後まとめていこうと思っています。本はあればあるほどいいというより、少しの本を隅々まで読むほうが学習効果が高いと考えているので今後大きな目的がない限りはこの3冊のみで頑張っていこうと思っています。

早く、自作のアプリを作れるようになりたい(アイデアは結構溜まってきています)、でも今回は急がば回れ、少し腰を据えて飽きてくるまでは本を読んで、独学なりに基礎を固めていきたいと思います。

 

和製英語に苦しむ

和製英語があるせいです、それで余計に英会話が妨げられてしまいます。これは日本人特有かもしれません。でも悩んでいてもしょうがないので都度ググって覚えていきましょう。それか必死に伝わるまで頑張りましょう(泣

以下、伝えようとしてがんばってもなんとかならなかった和製英語たちだけ列挙します。

 

⭐️カセットコンロ → potable stove

ストーブなんて悩んででてくるものじゃないですよね…

 

⭐️ダンボール → cardboard box

私はブラウンボックスといってその場を凌ぎました

 

⭐️コンセント → socket / outlet

これもとっさに出てきません。近くにあるときのみ指差して対処可能ですが

 

⭐️フライパン → flying pan

ingを言わないだけで通じませんでした

Ruby on Railsチュートリアルをやってみる 第十二章

平日2日間かけて12章も終わらせることができました。ついに全章読破することができしました!

最後までやってみて実感したこと

元々、はじめたときにこの量は最後までできるか不安でした。途中で壁にぶつからないか、放置して飽きてしまわないか、と思いながらのスタートでした。もちろん、冬休みの自由時間を存分に使いながらですが、2015/12/22から2016/1/19まで約一ヶ月かけて今回最後まで読みきり、やりきることができました。実際は60~70%の理解度で、なんとか未解決な問題はゼロにできましたが、もう2~3周以上はかいつまんでやり直す必要があると思っています。

自信を持って言いますが、このチュートリアルは、最後まで間を空けずに一気にやりきるのがいいと思います。途中、よくわからない箇所がきても、そこはメモしておいて飛ばしながらでも間を開けないほうがいいです。実際、10章を始めて途中でわからない箇所が出てから、色々な言い訳をして4日間近くやらないときがありました。するといざ、気合を入れなおして勉強を再開するのがつらくなりました。しかも続けているときより、前後関係がわからなくなり、倍以上苦労し、それだけでなく、せっかくのモチベーションを落とすことになりました。私はそうなりました泣
結果、持ちこたえながら、よくわからないところは飛ばしながら、コーディングはわからなければ半ば写経と思いながらも書き続け、最後までやりきりました。
すると、目の前には一個のアプリが完成しています。それも基本的なセキュリティから、ログインログアウトといった基本機能を備えた立派なもので、世界に公開して運用できているのです。この達成感はモチベーションを大幅に上げます。
しかも、写経だろうが、飛ばしていようが、全て読破した(文章は全部読んでいます)という自信がつき、なんとなく、さまざまな知識が頭に残っているのです。一ヶ月程度ではまっさらにはなりません。
この効果を得るには、苦しくても最後までやりきることでしかえられません。もし、チュートリアルをやっている、もしくはこれからやろうという方がいれば、ぜひ最後までやりとおすことを最優先するのをお勧めします。

 

納得感より達成感、理解度より把握度
個人的には納得感より達成感のほうが、得られる幸福感は大きいと感じています。達成感ばかりを重視すれば、得られるものも少ないまま、成長もせず、というパターンもあります。しかし、このチュートリアルに限っていえば、質、量ともにかなり有用で読みきるだけでかなり勉強になるため、まず達成感を優先しても知識がついてきます。また、チュートリアル全体を通して、細かな理解度を深めるより、全体を把握してもらうことに主眼が置かれているように感じました。まずは開発の流れ、アプリの設計図を把握していくことが、結局理解を助け、より深く学んでいくためのステップになると読んでいて実感しました。

参考:できたアプリのスクリーンショット

f:id:etoh103:20160120061844p:plain



今後の方針

チュートリアルに関しては、より理解を深められるよう、繰り返して各章を復習していこうと思います。
今後やっていこうと思っていることを箇条書きしていきます。

1.できたチュートリアルアプリのコードをいじってみる
触ってみると、他の実際のサービスと比べてできないことが多いなと感じます。また、ちょっと自分好みにいじりたくなります。そうして、コードをいじるには、今までの知識とリファクタリングが必要になるため、これがいい復習になりそうな気がするのです。

2.チュートリアル12章でお勧めされた、以下のサイトを読んでみる

Ruby on Railsを仕事にしていくための第一歩 - 酒と泪とRubyとRailsと


3.簡単なオリジナルアプリを作る
1,2を糧に何かアプリを一つ作ってみる

4.挫折しているAndroidアプリ製作をもう一度頑張る
こちらも完全独学ですが、チュートリアルみたいなよいレッスンに出会えていないため、エラーが起きると挫折します。なんとかできるよう作れるようになりたいです。

5.IoTを始める
あれもこれもは危険ですが、並行して電気工作も始めたいと思っています。

 

 やりたいことが多すぎて時間が足りない…

Ruby on Railsチュートリアルをやってみた 第十一章 

少し間が空きましたが、ようやく11章まで終えることができました。今回はユーザーからすれば、メイン機能である、”つぶやき”を投稿できる機能の実装でした。

裏では、ユーザと関連付けたり、削除したり、とできる機能を追加していくものでした。難しい話もありましたが、基本は前までの章でやったことに近いことが多く、特に解決できない課題も残さずに終わらせることができました。

あとは残すところ、12章のみです。

12章の冒頭部分には、
”この章で扱っている手法は本書全体の中で最も難易度が高いので、理解を助けるため、コードを書く前にはいったん立ち止まってインターフェイスを探検することにします。”
とあり、

なかなか素直に終わらせてくれなさそうな気配がありますが、ここはふんどしを締め直してやりきりたいと思います。

お金をかけずに英会話力UP 03 〜1ヶ月進捗〜

以下の記事、02で年末までの一ヶ月の取り組み進捗を報告すると書いたものの、年明けて一週間以上空けてしまいました。すいません。。
etoh1220.hatenablog.com

実際、シャドーイング?は行っておりました。
?をつけたのは、ほとんどシャドーイングというより、辞書を引きながらのリーディングと翻訳に多くの時間を割くことになり、その後、内容を理解した状態で読みながら聴くのが精一杯という感じでした。とても口パクでついていくというレベルの練習ができませんでした。悲しいです。

また、エピソードとしては、2つ+半分までできた感じでした。今月は、少しペースを上げてエピソード6までの追加3つに手をつけるべきか、じっくりと訳し終わったエピソード3までを繰り返しやるか、悩むところです。
次の進捗は、一月末に報告します。

ちなみに実感としては、テレビのCMやドラマで単語が聞き取れるようになってきたかなという成長は少し感じています。
やはり効果はあると思えてきました。実際の目標はテレビのニュースやドラマくらいであれば、ほとんど理解して楽しめるレベルなので、そこまではまだかかりそうです。一年以内に満足いくレベルまでいけたらなと考えております。

〜次回、03は一月末くらいに更新予定〜