9月2週目(実績)

土曜日:朝1.5h,昼1.5h,夜2h,夜中0.5h=5.5h

  • Vueの基礎
    • v-bindディレクトリ(短縮系は:
      • 属性をjavascriptの式として設定できる
      • 以下の画面ではpタグのtitle属性変数messageを設定している。マウスポインターを当てると設定されている値が展開されていることがわかる。
      • f:id:yosuke0517:20190907095843j:plain
    • フィルター(データを加工する)
      • HTML側では{{ (引数) | (メソッド1)| (メソッド2)}}の形で渡す。
      • 例){{ sum | numberWithDelimiter }}
    • computedプロパティ
      • データが変らない限りキャッシュを利用するため再実行されない
      • データを元に処理を加えた結果をプロパティとして提供したい場合に使う。
    • v-onディレクティブとmethodsプロパティ
      • v-onでイベントを設定してmethodsに定義したメソッドを呼び出すイメージ
      • methods内ではどこでイベントが発生したかなどを受け取れる
      • v-onの省略記法は@
    • v-ifとv-showの使い分け
      • 頻繁に表示・非表示がある時はv-showそれ以外はv-if
        • v-ifはDOM要素を作成・削除しているがv-showは表示・非表示しているため
    • v-for
    • v-model
    • tamplateオプション
    • vueインスタンスのライフサイクル
      • vueインスタンスの削除の際に必要な後始末
        • ライフサイクルフックを利用することでインスタンスのライフサイクルの特定の時点で処理を挟み込むことができる
        • 例)
        • setInterval()インスタンスの削除時に処理を止めるように書かないと永遠とその処理が実行されてしまう。
        • インターバルidを取得してインスタンス削除時にインターバルidを引数にclearIntervalをする
    • コンポーネント
      • 画面を構成するパーツの単位
      • ヘッダー・サイドバー・メイン>リスト・フッダーなどの単位。
      • 部品化することで疎結合にでき保守性を高める
      • 定義したコンポーネントhtmlタグの形式で書ける
      • データを定義する時は関数の戻り値で。
      • コンポーネントの登録はVuemインスタンスの生成前にやる。
<user-list><user-list>
Vue.component('user-list', {
  data() {
    return {
      users: [
        { id: 1, name: 'ユーザー1' },
        { id: 2, name: 'ユーザー2' },
        { id: 3, name: 'ユーザー3' },
        { id: 4, name: 'ユーザー4' },
        { id: 5, name: 'ユーザー5' }
      ]
    }
  },
  template: `
    <ul>
      <li v-for="user in users" :key="user.id">
        {{ user.name }}
      </li>
    </ul>
  `
})
  • コンポーネントの親子構造について
    • 前提はVueインスタンの中にコンポーネントがあるということ。
    • テンプレートの先頭要素は1つしか書けない。
    • 例)以下ではdiv要素1つが先頭になっているが、divを消すとlist-titleとulが並ぶので2つ先頭ができてエラーとなる。
Vue.component('list-title',{
  template:
  <h2>ユーザリスト</h2>
})

Vue.component('user-list', {
  data() {
    return {
      users: [
        { id: 1, name: 'ユーザー1' },
        { id: 2, name: 'ユーザー2' },
        { id: 3, name: 'ユーザー3' },
        { id: 4, name: 'ユーザー4' },
        { id: 5, name: 'ユーザー5' }
      ]
    }
  },
  template: `
    <div>
      <list-title></list-title> 
      <ul>
        <li v-for="user in users" :key="user.id">
          {{ user.name }}
        </li>
      </ul>
    </div>
  `
})
const UserDetail = {
  props: {
    user: {
      type: Object
    } 
  }
}
  • propsとdataの違い

    • propsの値は変更できない
    • v-bind→ケバブケース(単語をハイフンでつなぐ)
    • props→キャメルケース(つなぐ単語の先頭のみ大文字にする)
  • コンポーネントから親コンポーネントへのデータの渡し方がややこしかったのでポートフォリオ実装時は注意

  • node 8.9以上 省略

  • vue cli

    • npm install -g @vue/cli@3.5.0
  • サーバーの起動・停止

    • 起動
      • npm run server
    • 停止
      • ctrl + c(cmdじゃない)
  • vue create sample-app

  • visual studio 拡張機能

    • Vue.js Extention Packを導入
  • 単一ファイルコンポーネント

    • コンポーネントをファイルごとに分ける
    • 部品化してメンテナンスが容易になる
    • 1つのファイルにテンプレート・javascriptcssを書く
  • Vue Router

    • SPAにおいてRoutingを定義する
  • Vuetify

    • viewを素早く作る
    • vue add vuetify(vue cliが入っている時)
    • ツールバーのアイコンを出すのにハマった。
      • ハマったやつ<v-toolbar-side-icon></v-toolbar-side-icon>
      • 正解<v-app-bar-nav-icon></v-app-bar-nav-icon>
      • バージョンによる非互換かな?
  • Vuex

    • ストアというデータの入れ物を作り、各コンポーネントからストアにアクセスしてデータの出し入れを行う。
    • Vuexの昨日はAction,Mutation,State,Getterで構成される。
    • 基本的にはアプリケーションで1つのストアを持つ。
  • Vue.jsの値の更新

    • templateから$storeでストアにアクセスできる
  • mapActionsでメソッドにアクションを組み込む

    • 今まではApp.vueのmethodsの中でstore.jsで定義したメソットを呼び出すメソッドを定義していた。
    • mapActionscomponentsのmethodsにstoreのactionメソッドを組み込む
    • 分割代入を使用することでアクションをmethodsに組み込む

日曜日:朝1.75h,昼3.5h,夕2.5h=7.75h

  • 引き続きVue.js。今日は一旦Firebaseでデプロイまでいった。※デプロイ記念にキャプ撮るの忘れた。。。
  • f:id:yosuke0517:20190909071434j:plain
  • mBaasの知見も欲しいところだけど今回は一旦ここまでにしてrails + vue.js on docker での開発を進めていく
  • 参考資料
  • qiita.com
  • re-engines.com

月曜日:朝1.25h,夕1.5h=2.75h

  • dbをmysqlにしたのとnodejsを12系にした以外はほぼ以下の通り
  • qiita.com
  • とりあえずHello Vue!までは表示できたので、手順をまとめて今週のタスクはOKだ。。。ガンガン開発進めよう。
  • f:id:yosuke0517:20190909202429j:plain

火曜日:朝1.5h,夕1.5h=3h

  • 昨日の環境構築を整理するためにdockerでテンプレートを作成しgithub
  • github.com
  • 何か新しい技術を習得しようって時はいつもdocker-composeで環境を作ってはアゲている気がする...
  • おかげでdockerは浅く理解はできた。
  • 一応今週決めたタスクは終わったので水木金を使ってRSpecでのテストを実践しながら身に着ける。

水曜日:朝1.5h,夕1.5h=3h

以下、RSpecの準備として軽く機能を作り込んでいく

木曜日:朝1.5h,夕0h=1.5h

  • 一応RSpecについてQiitaに投稿しておいた
  • 夕活は業務のためナシ

金曜日:朝1.5h,夕1h=2.5h

  • 以下を使用してrailsapiとして使用する
  • jsonを返すらしい
  • qiita.com
  • strongparametersでfetchを使っていたので調査
  • morizyun.github.io
  • ターゲットがnilの時にエラーを出したくない。って時に使うらしい。
  • curlコマンドでrailsへPOSTでハマった。
  • application_controller.rbへprotect_from_forgery メソッドを追加したところ正常にPOSTできた。
  • 今回つまずいた原因はRailのCSRF対策を理解していなかったから。
  • Qiitaにまとめてみた。
  • qiita.com
  • curlコマンドもQiitaにまとめる -qiita.com

今週の総括

ブログで必ず報告する内容

  • 2020年8月までに1560hの自己学習を達成するために(目標を時間とするのはどうかとも思うがとりあえず)

    • 目安となる週の学習時間:30h
    • 今週の勉強時間:26h
    • 累積の勉強時間:174h
    • 進捗予定との乖離:+0h
  • 2020年8月までに習得したいこと:

    • クラウドコンテナ基盤についての知見
    • クラウド動画配信基盤についての知見
    • IoTの知見(ネタはある)
    • イケてるフロントを実装したい(vue.jsのUdemyを視聴し始めた2019/08/28)