Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Cookpad Summer Internship 2019 Day 1 Ruby TypeS...

Cookpad Summer Internship 2019 Day 1 Ruby TypeScript

AKAMATSU Yuki

August 19, 2019
Tweet

More Decks by AKAMATSU Yuki

Other Decks in Programming

Transcript

  1. rbenv • Rubyのバージョンを切り替えるツール ◦ cpadインストール時に自動で入っています • 今回はRuby 2.6.3 を使用するので rbenv経由でインストール

    ◦ rbenv install 2.6.3 ◦ rbenv global 2.6.3 rbenv影響下全体で有効 ◦ rbenv local 2.6.3 実行したディレクトリ以下で有効(globalより優先される) ▪ .ruby-versionというファイルが生成される
  2. HTTPリクエストとレスポンス • クライアントからサーバーに「何を」「どうして欲しい」か指示するのがHTTPリクエ スト ◦ 何を = パスで表現 ◦ どうして欲しい

    = メソッドで表現 ▪ GET=取得 POST=作成 PATCH=書き換え DELETE=削除 • それの返事がHTTPレスポンス ◦ どういう結果になったか = ステータスコード ▪ 200系=成功 300系=移動とか 400系=クライアント起因の失敗 500系= サーバー起因の失敗 ◦ 内容 = ボディ
  3. テンプレートエンジン • 今回はERBを使用する ◦ Embedded RuBy の略 ◦ テキストファイルにRubyを埋め込むことができる •

    他にもHamlやSlimなどがある ◦ こちらの方が記述量が少ない、HTMLの閉じタグ忘れを防げるなどの理由 により一般的 • サーバーサイドアプリケーションを作る場合、Viewを動的に生成したいことがほ とんどなので何かしらのテンプレートエンジンを使うことが多い
  4. ORM • RDBとオブジェクト指向におけるインピーダンス・ミスマッチを解消する ◦ インピーダンス・ミスマッチ = データモデルの違いによるギャップ • ActiveRecordパターン ◦

    RailsのActiveRecordは名前の通りActiveRecordパターンが元になってい る ◦ RDBのテーブルと1つのモデルを関連づける考え方 ◦ 例: Userクラスとusersテーブル • 注意: 1つのテーブルと1つのモデルを関連づけるのがORMではない ◦ 複数のテーブルを1つのモデルに関連づけるものもある • オブジェクトを通してSQLの実行やオブジェクトへのマッピング、DBのコネクショ ン管理なども行ったりもする
  5. 発展課題 • 個別のTodoを表示するページの実装 ◦ /todos/:id のルーティングをどうするか • Todoを保存するページの実装 ◦ フォームページの実装やPOST先のエンポイント

    • app.rbのリファクタリング ◦ 例えばControllerやModelのクラスを外に切り出す • フレームワークとしてもっと汎用的に作る
  6. 演習: TypeScriptに慣れる • 演習資料 Section2を写経してみよう • 他にも以下のことを試してみよう ◦ 型と違う値を入れようとしたらどうなるか ◦

    複数の型の要素を1つの配列にいれたらどういう型に推論されるか ◦ dist以下の生成されたJSとsrcのTSを比較してみよう
  7. Fetch API • XMLHTtpRequestの代わりとなる非同期通信のためのAPI ◦ IE対応が必要の場合はPolyfillが必要 • Node.jsも対応していないのでNode.js環境ではnode-fetchモジュールが必要 ◦ 今回はnode-fetchモジュールが必要

    • fetchはPromiseのインスタンスを返すので、そのままthen/catchなどが使え る ◦ httpの場合、Promiseインスタンスを自分で作る必要があった