20200725のvue.jsに関する記事は16件です。

もしもVue.jsにTypescriptを導入したら

もしもVue.jsにTypescriptを導入したら ①調査編


まずは現行環境を整理

  • Laravel 6
  • Vue 2.5
  • vuex 3.0
  • vue-router 3.0
  • element-ui 2.4

とりあえず調べてみる

  • VueにTypescriptを導入するにはVue 2.5以上が必要。→これはOK
  • Typescript 2.4以上が必要。→なるほど
  • そしてTypescriptを使うには3パターンがある
  1. Vue.extendを使う
  2. vue-class-componentを使う
  3. vue-property-decoratorを使う

Vue公式

やって来る Vue 2.5 での TypeScript の変更
https://jp.vuejs.org/2017/09/23/upcoming-typescript-changes-in-vue-2.5/


1. Vue.extend

Vue公式より

Vue コンポーネントオプション内部で TypeScript が型を適切に推測できるようにするには、Vue.component または Vue.extend でコンポーネントを定義する必要があります:



つまり〜

Vue コンポーネントオプション内部(dataとかpropsとかmethod内)でTypescriptが型を推測できるようにするには、Vue.extendまたはVue.component(内部的にVue.extendを呼んでいる)でコンポーネントを定義する必要があります

要はTypescript使うならVue.extendしろと



Vue公式
- コンポーネント
https://v1-jp.vuejs.org/guide/components.html
- TypeScript のサポート
https://jp.vuejs.org/v2/guide/typescript.html


2. vue-class-component

公式ドキュメントより

Vueクラスコンポーネントは、クラススタイルの構文でVueコンポーネントを作成できるライブラリです。

つまりライブラリです


GitHub
https://github.com/vuejs/vue-class-component

公式ドキュメント
https://class-component.vuejs.org/


3. vue-property-decorator

GitHubより

このライブラリは、vue-class-componentに完全に依存しているため、このライブラリを使用する前に、READMEをお読みください。

つまりvue-class-componentの拡張版ライブラリです。


GitHub
https://github.com/kaorun343/vue-property-decorator


で?結局どれ使えばいいの?


さらに調べてみる

  • "vue typescript"で検索するとvue-property-decoratorが一番ヒットするのでさらに調べてみる。
  • どうやらこのライブラリはtypescriptの機能である「デコレータ」を使ってかけるものらしい。

デコレータとは、クラス宣言とメンバーの注釈とメタプログラミング構文の両方を追加する方法を提供する

Typescript公式ドキュメント
- デコレータ
https://www.typescriptlang.org/docs/handbook/decorators.html



まあとりあえずどんな感じに書くの?


import { Vue, Component, Prop } from 'vue-property-decorator'

@Component
export default class YourComponent extends Vue {
  @Prop(Number) readonly propA: number | undefined
  @Prop({ default: 'default value' }) readonly propB!: string
  @Prop([String, Boolean]) readonly propC: string | boolean | undefined
}
import { Vue, Component, Emit } from 'vue-property-decorator'

@Component
export default class YourComponent extends Vue {
  count = 0

  @Emit()
  addToCount(n: number) {
    this.count += n
  }

  @Emit('reset')
  resetCount() {
    this.count = 0
  }

  @Emit()
  returnValue() {
    return 10
  }

  @Emit()
  onInputChange(e) {
    return e.target.value
  }

  @Emit()
  promise() {
    return new Promise((resolve) => {
      setTimeout(() => {
        resolve(20)
      }, 0)
    })
  }
}


もっと簡単に書けないのか・・・

※ちなみに@xxxがクラスデコレータ、メソッドデコレータというやつらしい。@の下のクラスやメソッドを@xxx側で監視、変更、または置換できるらしい

詳しくは公式ドキュメントをチェック
https://www.typescriptlang.org/docs/handbook/decorators.html


じゃあ次にvue-class-componentを使うとするとどうなる?

  1. Vue.extendだけ使う
  2. vue-class-componentを使う
  3. vue-property-decoratorを使う

このvue-class-componentだけ使おうとする時に、気をつけなければいけない点があります。

それはpropsやwatchはそのまま使えないので、一度componentとして定義するか、@Componentのデコレータの引数に渡してあげないといけません。

Props Definition
https://class-component.vuejs.org/guide/props-definition.html


こんな感じにする必要があるらしく

import Vue from 'vue'
import Component from 'vue-class-component'

// Define the props by using Vue's canonical way.
const GreetingProps = Vue.extend({
  props: {
    name: String
  }
})

// Use defined props by extending GreetingProps.
@Component
export default class Greeting extends GreetingProps {
  get message(): string {
    // this.name will be typed
    return 'Hello, ' + this.name
  }
}

ちょっと使いにくいです。。。

それらをデコレータで使いやすく、ひとつのcomponentで定義できるようにしたのがvue-property-decoratorです

なので選択肢としてはVue.extendだけかvue-property-decoratorを使うかの2択になっているようです

ということでVue.extendだけ使う方法でTypescriptを導入してみたいと思います

  1. Vue.extendだけ使う
  2. vue-class-componentを使う
  3. vue-property-decoratorを使う

もしもVue.jsにTypescriptを導入したら ②実践編


とりあえずvue createで作ったVue+TypescriptのサンプルPJと、マイクロソフト様が書いたありがたいドキュメント等を参考にしていきます

TypeScript Vue Starter
https://github.com/microsoft/TypeScript-Vue-Starter
TypeScript のサポート
https://jp.vuejs.org/v2/guide/typescript.html


まずは初期設定

  • npm i -D typescript ts-loaderで必要なモジュールをインストール
  • ./node_modules/.bin/tsc --versionでインストール確認

tsconfig.json追加

詳細は公式ドキュメント参照

{
  "compilerOptions": {
    "target": "es5",
    "module": "es6",
    "strict": true,
    "importHelpers": true,
    "moduleResolution": "node",
    "esModuleInterop": true,
    "allowSyntheticDefaultImports": true,
    "sourceMap": true,
    "lib": [
      "es6",
      "dom",
      "dom.iterable",
      "scripthost"
    ]
  },
  "include": [
    "resources/js/**/*.ts",
    "resources/js/**/*.tsx",
    "resources/js/**/*.vue",
  ],
  "exclude": [
    "node_modules"
  ]
}

Typescript公式ドキュメント

tsconfig.json
https://www.typescriptlang.org/docs/handbook/tsconfig-json.html
Compiler Options
https://www.typescriptlang.org/docs/handbook/compiler-options.html


webpack.mix.jsを修正

- mix.js('resources/js/tr/app.js', 'public/js/app-tr.js')
+ mix.ts('resources/js/tr/app.ts', 'public/js/app-tr.js')


vue-shims.d.tsファイルを追加

.vueファイルがなんであるかをTypescritpに伝えるためにvue-shims.d.tsファイルを追加する必要があるらしいので追加。includeするディレクトリ配下で良いらしい

// resources/js/shims-vue.d.ts

declare module "*.vue" {
    import Vue from "vue";
    export default Vue;
}

app.jsをTypescriptに書き換え ポイント

  • TypeScript未対応のjsをimportしようとすると定義ファイルが見つからないエラーになるので一旦requireなどで対応する。(ベストはd.tsの定義ファイルを作ること)
  • さらにrequireを使うためにはnodeの定義ファイルが必要になるのでnpm i @types/nodeでインストール
  • vueファイルをimportする際は拡張子をつける必要あり

router.jsをTypescriptに書き換え

RouteConfig型で作成する必要があるらしい

▼サンプルPJ

import Vue from 'vue'
import VueRouter, { RouteConfig } from 'vue-router'
import Home from '../views/Home.vue'

Vue.use(VueRouter)

  const routes: Array<RouteConfig> = [
  {
    path: '/',
    name: 'Home',
    component: Home
  },
  {
    path: '/about',
    name: 'About',
    // route level code-splitting
    // this generates a separate chunk (about.[hash].js) for this route
    // which is lazy-loaded when the route is visited.
    component: () => import(/* webpackChunkName: "about" */ '../views/About.vue')
  }
]

const router = new VueRouter({
  mode: 'history',
  base: process.env.BASE_URL,
  routes
})

export default router


つらみポイント

  • 既存ライブラリの型定義ファイル(d.ts)に沿った使い方をしていない場合(型が違う)や、そもそもライブラリの定義ファイルが足りていなかったりする場合などは自前で型定義を拡張しなければならない
  • その場合はdeclare(アンビエント宣言)を拡張します。コレをDeclaration Mergingというらしい

こんな感じに

declare module 'element-ui/types/message' {
    interface ElMessage {
        closeAll(): void
    }
}

既存ライブラリのクラス拡張
https://kakkoyakakko2.hatenablog.com/entry/2018/06/28/003000


色々試行錯誤した結果・・・

動いた!!ログインもできた



まとめ

  • 既存のVueをts化は一応できそう
  • ただ既存ライブラリが絡む部分はかなりハマった(どういう型指定するば良いのか分からない)
  • 今回は付け焼き刃的に対応してみたが、Typescriptの基礎を知らないと辛い
  • 正直Vue3.0で正式対応版きたらそれにのっかるのがベストだと思う

おわり


今回参考にしたページ

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

【現役Vueエンジニア監修】完全オリジナル!ハンバーガーメニューのCSSアニメーション33選(解説付き)

スクリーンショット 2020-07-25 19.02.30.png

コピペだけで作れるハンバーガーメニューのCSSアニメーションを33個ご紹介します。

box-shadow, filter, transform,などをふんだんに使っており、transitionで滑らかな動きが表されています

コードには説明もわかりやすく書いてあるのでかなり参考になります

完全オリジナルでコピペだけで実装できてしまうお手軽なアニメーションとなっています

Webデザイン初心者の方はもちろんですが、バックエンドエンジニアの方にもとても助かる内容になっています

CSSハンバーガーメニュー33選

1. コピペだけでCSSアニメーション!そのまま使えるシンプルなハンバーガーメニュー3選

hoverやクリック(タップ)でデザインに変化が起きるよう作ってあるのでWeb制作やWebアプリケーション等でそのまま使えます。

hamburger-1-1.png

↓参考記事は下の記事です↓

hamburger-1.png

2. コピペでCSSマテリアルデザイン!Web制作で使えるオシャレなハンバーガーメニュー3選

そのまま使えるハンバーガーメニューのマテリアルデザインとなっています

transition-durationを使っていてわかりやすく説明もされているのでかなり重宝します

hamburger-2-1.png

↓参考記事は下の記事です↓

hamburger-2.png

3. 動きが面白すぎる!コピペでオシャレなハンバーガーメニュー3選【CSSマテリアルデザイン】

遊び心のあるハンバーガーメニューになっています。

マテリアルデザインなのでコピペで使えますね

transition-durationを使っていてわかりやすく説明もされているのでかなり重宝します

hamburger-3-1.png

↓参考記事は下の記事です↓

hamburger-3.png

4. hoverするとtransformでモノクロボタンが変形!Web制作で使える奇抜なハンバーガーメニュー3選

hoverやクリック(タップ)でボタンが幽体離脱したりビリビリ震えるようなアニメーションなので、Web制作などで独創的なデザインを求められた時にそのまま使えるマテリアルデザインです。

hamburger-4-1.png

↓参考記事は下の記事です↓

hamburger-4.png

5. サイドメニューの幅をラクラク切り替え!Web制作で使える便利なハンバーガーメニュー3選

transformを使っての奇抜なアニメーションに加えて、メニューボタンをクリックすると表示されるサイドバーの幅の比率を変えたハンバーガーメニューです。

hamburger-5-1.png

↓参考記事は下の記事です↓

hamburger-5.png

6. ハンバーガーメニューの仲間たち!Web制作で使えるおもしろハンバーガーメニュー3選【実装手順】

一般的なハンバーガーメニューアイコンではなく円形の点を使ったり、長さの異なるボーダーを使ったりして少し遊び心のあるデザインとなっています。

hamburger-6-1.png

↓参考記事は下の記事です↓

hamburger-6.png

7. サイト作成で100%役立つ!Web制作用ハンバーガーメニュー3選【コピペOK】

一般的なハンバーガーメニューアイコンではなく円形の点を使ったり、長さの異なるボーダーを使ったりして少し遊び心のあるデザインとなっています。

hamburger-7-1.png

↓参考記事は下の記事です↓

hamburger-7.png

8. サイドバーがクルクル回転!Web制作用ハンバーガーメニュー3選【コピペOK】

ハンバーガーメニューをクリックするとサイドバーが回転しながら表示されるCSSアニメーションとなっています。

カスタマイズもしやすいのでありがたいデザインです

hamburger-8-1.png

↓参考記事は下の記事です↓

hamburger-8.png

9. サイドバーがスーッとスライド!Web制作で重宝するハンバーガーメニュー3選【コピペOK】

スライドにtransform:translateを使用した縦横スライドに加えてrotateの回転もプラスした3種類のマテリアルデザインとなっています。

hamburger-9-1.png

↓参考記事は下の記事です↓

hamburger-9.png

10. サイドバーがブワーッと拡大!Web制作でそのまま使えるCSSハンバーガーメニュー3選

スライドにtransform:scaleを使用した拡大アニメーションに加えてtranslateのスライドとrotateの回転もプラスした3種類のマテリアルデザインとなっています。

hamburger-10-1.png

↓参考記事は下の記事です↓

hamburger-10.png

11. サイドバーが吹っ飛んでくる!サイト制作で即行使えるCSSハンバーガーメニュー3選

スライドにtransform:skewを使用した傾斜の効いたアニメーションに加えてtranslateでスライドをプラスした3種類のマテリアルデザインです。

hamburger-11-1.png

↓参考記事は下の記事です↓

hamburger-11.png

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

【100%見たことない】完全オリジナル!ハンバーガーメニューのCSSアニメーション33選(解説付き)

スクリーンショット 2020-07-25 19.02.30.png

コピペだけで作れるハンバーガーメニューのCSSアニメーションを33個ご紹介します。

box-shadow, filter, transform,などをふんだんに使っており、transitionで滑らかな動きが表されています

コードには説明もわかりやすく書いてあるのでかなり参考になります

完全オリジナルでコピペだけで実装できてしまうお手軽なアニメーションとなっています

Webデザイン初心者の方はもちろんですが、バックエンドエンジニアの方にもとても助かる内容になっています

CSSハンバーガーメニュー33選

1. コピペだけでCSSアニメーション!そのまま使えるシンプルなハンバーガーメニュー3選

hoverやクリック(タップ)でデザインに変化が起きるよう作ってあるのでWeb制作やWebアプリケーション等でそのまま使えます。

hamburger-1-1.png

↓参考記事は下の記事です↓

hamburger-1.png

2. コピペでCSSマテリアルデザイン!Web制作で使えるオシャレなハンバーガーメニュー3選

そのまま使えるハンバーガーメニューのマテリアルデザインとなっています

transition-durationを使っていてわかりやすく説明もされているのでかなり重宝します

hamburger-2-1.png

↓参考記事は下の記事です↓

hamburger-2.png

3. 動きが面白すぎる!コピペでオシャレなハンバーガーメニュー3選【CSSマテリアルデザイン】

遊び心のあるハンバーガーメニューになっています。

マテリアルデザインなのでコピペで使えますね

transition-durationを使っていてわかりやすく説明もされているのでかなり重宝します

hamburger-3-1.png

↓参考記事は下の記事です↓

hamburger-3.png

4. hoverするとtransformでモノクロボタンが変形!Web制作で使える奇抜なハンバーガーメニュー3選

hoverやクリック(タップ)でボタンが幽体離脱したりビリビリ震えるようなアニメーションなので、Web制作などで独創的なデザインを求められた時にそのまま使えるマテリアルデザインです。

hamburger-4-1.png

↓参考記事は下の記事です↓

hamburger-4.png

5. サイドメニューの幅をラクラク切り替え!Web制作で使える便利なハンバーガーメニュー3選

transformを使っての奇抜なアニメーションに加えて、メニューボタンをクリックすると表示されるサイドバーの幅の比率を変えたハンバーガーメニューです。

hamburger-5-1.png

↓参考記事は下の記事です↓

hamburger-5.png

6. ハンバーガーメニューの仲間たち!Web制作で使えるおもしろハンバーガーメニュー3選【実装手順】

一般的なハンバーガーメニューアイコンではなく円形の点を使ったり、長さの異なるボーダーを使ったりして少し遊び心のあるデザインとなっています。

hamburger-6-1.png

↓参考記事は下の記事です↓

hamburger-6.png

7. サイト作成で100%役立つ!Web制作用ハンバーガーメニュー3選【コピペOK】

一般的なハンバーガーメニューアイコンではなく円形の点を使ったり、長さの異なるボーダーを使ったりして少し遊び心のあるデザインとなっています。

hamburger-7-1.png

↓参考記事は下の記事です↓

hamburger-7.png

8. サイドバーがクルクル回転!Web制作用ハンバーガーメニュー3選【コピペOK】

ハンバーガーメニューをクリックするとサイドバーが回転しながら表示されるCSSアニメーションとなっています。

カスタマイズもしやすいのでありがたいデザインです

hamburger-8-1.png

↓参考記事は下の記事です↓

hamburger-8.png

9. サイドバーがスーッとスライド!Web制作で重宝するハンバーガーメニュー3選【コピペOK】

スライドにtransform:translateを使用した縦横スライドに加えてrotateの回転もプラスした3種類のマテリアルデザインとなっています。

hamburger-9-1.png

↓参考記事は下の記事です↓

hamburger-9.png

10. サイドバーがブワーッと拡大!Web制作でそのまま使えるCSSハンバーガーメニュー3選

スライドにtransform:scaleを使用した拡大アニメーションに加えてtranslateのスライドとrotateの回転もプラスした3種類のマテリアルデザインとなっています。

hamburger-10-1.png

↓参考記事は下の記事です↓

hamburger-10.png

11. サイドバーが吹っ飛んでくる!サイト制作で即行使えるCSSハンバーガーメニュー3選

スライドにtransform:skewを使用した傾斜の効いたアニメーションに加えてtranslateでスライドをプラスした3種類のマテリアルデザインです。

hamburger-11-1.png

↓参考記事は下の記事です↓

hamburger-11.png

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

eslint, prettier の基本設定

Prologue

eslint はこれまで誰かが作った設定で開発を行っていたのですが、新しくプロジェクトを作る場合には必須だな、と思い基本的な部分を作成してみました。
最初は自力で一から作っていたのですが、あまりに rules の設定が膨大すぎるため、何度かやり直しを行なっています。
そのため追加する module や library 等で抜けている部分がありましたらご連絡ください。

基本はDocument通りになるため、自身で設定する場合には都度公式を確認することをお勧めします。

環境

  • macOS: v10.15.5
  • node.js: v12.18.2
  • terminal: iTerm
  • エディタ: VS Code
  • パッケージマネージャ: yarn
  • Composition API:

基本的な設定について

今回はチームで開発する場合等に、pullmerge ごとに差分が出ないようにすることを目指します。
そのため以下を統一できるようにします。

  • インデント
  • ダブルクォート / シングルクォート
  • 改行

また、Nuxt.js × TypeScript で作成したプロジェクトに置いたため、それ前提で話を進めています。

  • PrettierESLint の違い

Prettier: コードフォーマッター。コードを解析し、独自のルールでリプリントすることにより一貫したスタイルを提供する。
ESLint: 構文チェックができる。

参考:
- Nuxt > ESLint と Prettier
- Prettier
- Prettier(GitHub)

プロジェクトの作成

yarn create nuxt-app sample で作成した際に Linting toolsPrettier を選択すると、初期の devDependencies は以下のようになります。
既に eslint-config-prettier, eslint-plugin-prettier, prettier がインストールされている状態です。

   "devDependencies": { 
     "@nuxt/typescript-build": "^1.0.3", 
     "@vue/test-utils": "^1.0.3", 
     "babel-core": "7.0.0-bridge.0", 
     "babel-jest": "^26.0.1", 
     "eslint-config-prettier": "^6.11.0", 
     "eslint-plugin-prettier": "^3.1.4", 
     "jest": "^26.0.1", 
     "node-sass": "^4.14.1", 
     "prettier": "^2.0.5", 
     "sass-loader": "^8.0.2", 
     "ts-jest": "^26.1.0", 
     "vue-jest": "^3.0.4" 
   } 

追加で下記もインストールします。

yarn add -D eslint

設定ファイルの作成

  1. yarn eslint --init を実行し、設定ファイルの初期設定と作成を行います。

参考: https://eslint.org/docs/user-guide/getting-started

対話形式でインストール準備が行われます。

✔ How would you like to use ESLint? · style
✔ What type of modules does your project use? · esm
✔ Which framework does your project use? · vue
✔ Does your project use TypeScript? · No / Yes
✔ Where does your code run? · browser
✔ How would you like to define a style for your project? · prompt
✔ What format do you want your config file to be in? · JavaScript
✔ What style of indentation do you use? · 4
✔ What quotes do you use for strings? · single
✔ What line endings do you use? · unix
✔ Do you require semicolons? · No / Yes

作成された .eslintrc.js ファイルの内容が以下となります。

module.exports = {
    'env': {
        'browser': true,
        'es2020': true
    },
    'extends': [
        'eslint:recommended',
        'plugin:vue/essential',
        'plugin:@typescript-eslint/recommended'
    ],
    'parserOptions': {
        'ecmaVersion': 11,
        'parser': '@typescript-eslint/parser',
        'sourceType': 'module'
    },
    'plugins': [
        'vue',
        '@typescript-eslint'
    ],
    'rules': {
        'indent': [
            'error',
            4
        ],
        'linebreak-style': [
            'error',
            'unix'
        ],
        'quotes': [
            'error',
            'single'
        ],
        'semi': [
            'error',
            'always'
        ]
    }
};

2. package.json に script を追加します。

参考:
- Nuxt.js > ESLint と Prettier
- Nuxt TypeScript > Lint

  "scripts": {
    // 略
    "lint": "eslint --ext .ts,.js,.vue --ignore-path .gitignore .",
    "lintfix": "eslint --fix --ext .ts,.js,.vue --ignore-path .gitignore .",
    // 略
  • --fix オプション
    エラーの修正をする。実際のファイルに対して行われ、未修正の問題のみが出力される。 プロセッサが自動修正を許可することを選択しない限りはプロセッサを使用するコードには影響しない。

参考: https://eslint.org/docs/user-guide/command-line-interface#fixing-problems

  • --ignore-path オプション
    .eslintignore として使用するファイルを指定できる。デフォルトではカレントディレクトリで .eslintignore を探す。 別のファイルのパスを指定することで、この動作をオーバーライドできる。

参考: https://eslint.org/docs/user-guide/command-line-interface#ignoring-files

yarn eslint --fix の実行と確認

この時点で一度 yarn lintfix を実行するとエラーが出ました。

error 内容:

error  Use the latest vue-eslint-parser. See also https://eslint.vuejs.org/user-guide/#what-is-the-use-the-latest-vue-eslint-parser-error  vue/no-duplicate-attributes
error  Use the latest vue-eslint-parser. See also https://eslint.vuejs.org/user-guide/#what-is-the-use-the-latest-vue-eslint-parser-error  vue/no-template-key

// 略

✖ 174 problems (169 errors, 5 warnings)

babel-eslint@typescript-eslint/parser を使う場合には vue-eslint-parser が必要で、parser に書いても overwrite されないとのことなので、以下を .eslintrc.js に追加します。

参考: https://eslint.vuejs.org/user-guide/#usage

    "parser": "vue-eslint-parser", // add
    'parserOptions': {
        'ecmaVersion': 11,
        'parser': '@typescript-eslint/parser',
        'sourceType': 'module'
    },

再度 yarn lintfix を実行します。

// 結果
✖ 20 problems (10 errors, 10 warnings)

コマンドオプションの確認とエラーの解消

  • 設定系のファイルを除外

package.json を以下のように修正します。
--ignore-pattern を使用して、 . で始まるファイルと config を含むファイルを除外するということをしてみます。

  "lintfix": "eslint --fix --ext .ts,.js,.vue --ignore-path .gitignore --ignore-pattern '.*' --ignore-pattern '*.config.*' .",

参考: https://eslint.org/docs/user-guide/command-line-interface#ignore-pattern

結果:

✖ 17 problems (6 errors, 11 warnings)

※これは config 内にいくつかエラーがあったため、それを除外したことによりエラーの数が減った、と言う結果になります。

  • global 変数を許可する

設定系のファイルでもフォーマットは管理したいため、先に追加した script は削除して、エラーの解消を進めます。

global 変数許可前

✖ 20 problems (10 errors, 10 warnings)

エラー内容:

error  'module' is not defined  no-undef
error  'process' is not defined  no-undef
// 略

moduleprocess が定義されていないのに使われている、というエラーが出ています。
これは global な変数でエラーではないため、それを .eslintrc.js に追加します。

   'globals': {
        'module': false
        'process': false
    }

global 変数許可後

✖ 16 problems (6 errors, 10 warnings)

prettier の設定

  1. devDependenciesprettier, eslint-config-prettier, eslint-plugin-prettier があるか確認し、なければ install します。

eslint-config-prettiereslint-plugin-prettier の主な機能は以下となります。

  • eslint-config-prettier
    prettier と競合する可能性のあるルールをOffにする
  • eslint-plugin-prettier
    prettiereslint として実行する

参考:
- eslint-config-prettier
- eslint-plugin-prettier

2. 確認後、以下を.eslintrc.js に追加します。

  extends: [
    'eslint:recommended',
    'plugin:vue/essential',
    'plugin:@typescript-eslint/recommended',
    // add
    'plugin:prettier/recommended',
    'prettier',
  ],
   plugins: [
    'vue',
    '@typescript-eslint',
    // add
    'prettier',
  ],
  // 略
  rules: {
     // add
    'prettier/prettier': ['error'],
    // 略
  },
  1. yarn lintfix コマンドを実行すると、エラーが大量に吐かれます。
✖ 290 problems (280 errors, 10 warnings)
  274 errors and 0 warnings potentially fixable with the `--fix` option.

内容を見ると末尾のセミコロンやインデントが引っかかっているようなので、 .eslintrc.jsrules に追記します。
ちなみにこれは、 .prettierrc に記述があった部分を移動しているだけになります。この転記が終わったら .prettierrc は必要なければ削除しても問題なく動作します。

エラー内容 :

 error  Delete `;`                                        prettier/prettier
 error  Replace `················` with `········`        prettier/prettier

追記: [.eslintrc.js]

rules: {
    'prettier/prettier': ['error', { singleQuote: true, semi: true }], // add
    indent: ['error', 2], // change
    'linebreak-style': ['error', 'unix'],
    quotes: ['error', 'single'],
    semi: ['error', 'always'],
  },

結果:

✖ 16 problems (6 errors, 10 warnings)

残りは '**' is defined but never usedDo not use "// @ts-ignore" because it alters compilation errors が多いので一つ一つ確認して対応していきます。

Epilogue

最初自力で .eslintrc.js を作りパラメータを設置し、と作っていましたがトライする前にエラーの連続で混乱したため、もっと楽に...という経緯ではじめました。
時間がある時に構文周りとかも抑えつつ、次は commit 時に lintfix が実行される実装を試してみたいと思います。

何か不備や不明点等ありましたらご連絡ください!

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Sprockets 4 なら ES6書けるよ

概要

Sprockets 4ならES6もつかえるよ。開発環境構築楽ちんだし、さくっとjavascript書きたい & SPAをやらないなら、Sprocketsおすすめ。

利点

docker-composeの構成がすごいシンプルになるので開発環境構築でつまずくことないのが最大の利点。
(web-dev-server、ちょこちょこはまるので苦手)

docker-compose.yml
version: '3'
services:
  web:
    build: .
    command: bash -c "rm -f tmp/pids/server.pid && bundle exec rails s -p 3000 -b '0.0.0.0'"
    volumes:
      - .:/myapp
      - bundle_path:/usr/local/bundle:cached
    ports:
      - "3001:3000"
    environment:
      - BUNDLE_PATH=/usr/local/bundle
volumes:
  bundle_path:
    driver: local

すぐに試したい方

docker-compose build
docker-compose run --rm web bin/setup
docker-compose run --rm web yarn install
docker-compose up -d

Open http://localhost:3001/

背景

普段DockerでRailsアプリを開発しています。web-dev-serverをたてて、、、みたいなよくある構成を組むのですが、あれ、複雑すぎません?

SPAをつくるなら、気合い入れて頑張る価値もある。でも、jQueryでいいようなWebアプリだと、webpackerはtoo much。1からアプリを作る時は、必ずwebpackerにはまる。

個人的には、webpackerがRails初心者のJavascript嫌いを増やしているのではと思います。

かといって、アロー関数やクラスを使えない世界に戻るのはいやなので、ES6で書きたいしな・・と思っていたところ、Sprocketsのdocumentに ES6 Supportという文字列を発見。これは!と思い、ES6が使えるかどうかを試したらさくっとできました。簡単。

せっかくなので、ES6の導入記事を書きます。あと需要ありそうなので、Vueの導入もやったのそちらも参考になれば。

環境

  • Rails 6 (with Sprockets 4)(Sprockets 4はdefault設定で入ります!)

コード

https://github.com/junara/sprockets_es6

commit差分です。こちらがよりわかりやすいかと思います。
https://github.com/junara/sprockets_es6/commit/d17139a3ff662d308847c4710490ca051b912c0f

手順

以下の手順です。既に入っている箇所も思います(特に assets pathに 'node_modules' を追加する とか)。

適宜スキップしてください。

  • babel-transpiler gemを入れる
  • assets pathに 'node_modules' を追加する
  • manifest に ES6を追加
  • Vueをインストール
  • Vue動作確認

babel-transpiler gemを入れる

https://github.com/rails/sprockets#es6-support こちらを参考に行います。
以下を追加して、 bundle installする。

  • Gemfile
gem 'babel-transpiler'

assets pathに 'node_modules' を追加する

config/application.rb
module SprocketsEs6
  class Application < Rails::Application

    config.assets.paths << Rails.root.join('node_modules') # これを追加

manifest に ES6を追加

以下の2行を追加する。javascriptsフォルダ配下にjavascriptを書いている場合。
javascriptを違うフォルダで書いている場合は、それぞれ追加してください

app/assets/config/manifest.js
//= link_directory ../javascripts .js
//= link_directory ../javascripts .es6

Vueをインストール

以下のコマンド (docker なら docker-compose exec web yarn add vue )を打つ。

yarn add vue

package.jsonにvueが追加されます。

package.json
{
  "dependencies": {
    "vue": "^2.6.11"
  }
}

Vue動作確認

Vue公式 プロパティを使用した子コンポーネントへのデータの受け渡しそのままです。

app/views/home/home.html.erb
<div id="components-demo">
  <blog-post v-for="post in posts" v-bind:key="post.id" v-bind:title="post.title"></blog-post>
</div>
<%= javascript_include_tag 'home' %>
app/assets/javascripts/home.es6
//= require vue/dist/vue
Vue.component('blog-post', {
  props: ['title'],
  template: '<h3>{{ title }}</h3>'
})

new Vue({
  el: '#components-demo',
  data: {
    posts: [
      { id: 1, title: 'My journey with Vue' },
      { id: 2, title: 'Blogging with Vue' },
      { id: 3, title: 'Why Vue is so fun' }
    ]
  }
})

ポイントは
//= require vue/dist/vue でvueを読み込むところと
<%= javascript_include_tag 'home' %> でes6 javascriptファイルを読み込むところです。

以上です。

(たぶん)できないこと

ためしてみて、動かなかった。

  • import, export
    • import User from './user.es6' みたいなのができない。
    • //= require ./user で読み込んでください
  • .vue ファイルが使えない
    • がりがり書くにはちょっとつらい
    • なお、Babel を設定すれば使えばできるのかも。(そこまで書くなら webpakckerでいいやとも思うので追求しなかった)
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

【現役フロントエンジニア厳選】Vueで使えるCSSアニメーションまとめ110選!

スクリーンショット 2020-07-25 15.40.27.png

コピペだけで作れるマテリアルデザインを個ご紹介します。

box-shadow, filter, transform,などをふんだんに使っており、transitionで滑らかな動きが表されています

コードには説明もわかりやすく書いてあるのでかなり参考になります

Webデザイン初心者の方はもちろんですが、バックエンドエンジニアの方にもとても助かる内容になっています

1. シンプルなスライダーマテリアルデザイン3選

そのまま使えるスライダーアニメーションのマテリアルデザインとなっています

transition-durationを使っていてわかりやすく説明もされているのでかなり重宝します

qiita-material-image1.png

↓参考記事は下の記事です↓

qiita-material-design1.png

2. filterとopacityを使いこなすスライダーマテリアルデザイン3選

filterとopacityを使ったそのまま使えるスライダーアニメーションのマテリアルデザインとなっています

transition-durationを使っていてわかりやすく説明もされているのでかなり重宝します

qiita-material-image2.png

↓参考記事は下の記事です↓

qiita-material-design2.png

3. transformを使用したスライダーアニメーション3選

translateやrotate、box-shadowも適宜使用することで様々な場面(Web制作やWebアプリケーションなど)で利用できるデザインになっています

qiita-slider-3d.png

↓参考記事は下の記事です↓

qiita-17.png

4. transform:scaleを使用したスライダーアニメーション3選

scaleでスライダー画像やナビゲーションボタンの拡大縮小を行いそれに対してアニメーションを使用しており幅広く使えるものになっています

qiita-slider-good.png

↓参考記事は下の記事です↓

qiita-18.png

5. clip path polygonを応用して2枚の画像を半々で表示するアニメーション3選

clip path polygonを応用して2枚の画像を半々(三角形)で表示するCSSアニメーション

それぞれに違った実務で使えるエフェクトがついています

qiita-clip-path-polygon.png

↓参考記事は下の記事です↓

qiita-19.png

6. hoverするとドロップダウン表示するナビゲーションメニュー3つ

hover(マウスオーバー)するとドロップダウン表示するナビゲーションメニューが3つ紹介されています

それぞれに違ったアニメーションがついていて面白いです

hover-animation-navigation-dropdown3.png

↓参考記事は下の記事です↓

qiita-20.png

7. 絶対失敗しないナビゲーションメニューサンプル3選

ナビゲーションメニューにいろいろなエフェクトがついていて使い勝手がいいです

カスタマイズもしやすいのでありがたいデザインです

matereal-design-navigation3.png

↓参考記事は下の記事です↓

qiita-21.png

8. 絶対失敗しないヘッダーデザインにコピペで使えるナビゲーションメニュー4選

ヘッダーデザインにコピペで使えるナビゲーションメニュー4選が紹介されていて、そのまま使えるマテリアルデザインなのでかなり重宝します

header-design-navigation-animation1.png

↓参考記事は下の記事です↓

qiita-22.png

9. 【まとめ】CSSだけで動きのあるナビゲーションバーデザイン3選

CSSだけで動きのあるナビゲーションバーデザイン3選が紹介されています

かなりシンプルなデザインですがシンプルだからこそ使える場所が多いと思います

navigation-bar-animation2.png

↓参考記事は下の記事です↓

qiita-23.png

10. filterエフェクトを使いこなすhoverアニメーション3選

filterエフェクトを使いそのまま使えるhoverアニメーションのマテリアルデザインとなっています

qiita-material-image3.png

↓参考記事は下の記事です↓

qiita-material-design3.png

11. overflow: hiddenを使いこなす美しいCSSアニメーション3選

overflow: hiddenを使いそのまま使えるhoverアニメーションのマテリアルデザインとなっています

美しい画像アニメーションとなっています

qiita-material-image4.png

↓参考記事は下の記事です↓

qiita-material-design4.png

12. position:absoluteとfilterを使いこなし鏡みたいに反射するアニメーション3選

position:absoluteとfilterを使いそのまま使えるhoverアニメーションのマテリアルデザインとなっています

鏡みたいに反射する見ているだけで面白いアニメーションです

qiita-material-image5.png

↓参考記事は下の記事です↓

qiita-material-design5.png

13. filter: hue-rotateとtransitionを使いこなし色が暴れ出すアニメーション3選

filter: hue-rotateとtransitionを使いそのまま使えるhoverアニメーションのマテリアルデザインとなっています

色が暴れ出すかなり美しいデザインになっています

qiita-material-image6.png

↓参考記事は下の記事です↓

qiita-material-design6.png

14. filter:blurとtransitionを使いこなしぼかし画像が動き出すアニメーション3選

filter:blurとtransitionを使いそのまま使えるhoverアニメーションのマテリアルデザインとなっています

qiita-material-image7.png

↓参考記事は下の記事です↓

qiita-material-design7.png

15. transitionとfilterを使いこなし美しく変化するCSS画像エフェクト5選

transitionとfilterを使いそのまま使えるhoverアニメーションのマテリアルデザインとなっています

美しく変化するのを見るだけでも面白いです

qiita-material-image8.png

↓参考記事は下の記事です↓

qiita-material-design8.png

16. margin-leftとscaleを使いこなすスライドアニメーション16選

margin-leftとscaleを使いそのまま使えるhoverアニメーションのマテリアルデザインとなっています

transform:scaleを使っていてわかりやすく説明もされているのでかなり重宝します

qiita-material-image9.png

↓参考記事は下の記事です↓

qiita-material-design9.png

17. hoverとfilter:brightnessを使いこなし明るさ調節するCSS画像エフェクト3選

hoverとfilter:brightnessを使いそのまま使えるhoverアニメーションのマテリアルデザインとなっています

filterを使いこなすためにはまずひとつひとつ丁寧にい理解していきましょう

qiita-material-image10.png

↓参考記事は下の記事です↓

qiita-material-design10.png

18. transformを使いこなすボタンアニメーション16選

transformを使ってボタンを変形し、WebサイトやWebアプリケーションで使えるボタンエフェクトとなっています

transformを全種類使っていてわかりやすく説明もされているのでかなり重宝します

css-effect-hover-button-transform-skew.png

↓参考記事は下の記事です↓

スクリーンショット 2020-07-02 16.02.15.png

19. transitionを使いこなすボタンアニメーション9選

transitionを使ってボタンにアニメーションを効かせおり、WebサイトやWebアプリケーションで使えるボタンエフェクトとなっています

box-shadowやborder-radiusをエフェクトで使用して見た目のデザインもいい感じです

hover-button-animation-color.png

↓参考記事は下の記事です↓

button-effects1.png

20. transformを使いこなすマテリアルデザイン5選

transformを使ってボタンにアニメーションを効かせおり、WebサイトやWebアプリケーションでそのまま使えるマテリアルデザインとなっています

マテリアルデザインなのでそのまますぐにでもコピペして使用できます

css-effects-hover-button-materialdesign-3d.png

↓参考記事は下の記事です↓

スクリーンショット 2020-07-03 20.48.02.png

21. filterが網羅できるCSSボタンアニメーション15選

filterを使ってボタンにエフェクトを効かせおり、特にデザインの見た目をカッコよくしたい場合に非常に使えます

filterエフェクトを全種類使っているので永久保存版としても重宝できそうなまとめ記事になっています

勉強にもフロント開発でも役立つと思います

hover-button-animation-filter.png

↓参考記事は下の記事です↓

button-effects2.png

22. scaleでオシャレなCSSボタンアニメーション3選

transform:scaleを使ってボタンにエフェクトを効かせおり、オシャレでかっこいいボタンになっています

ボタンの背景が滑らかにスライドしたり、フワッと出てきたりするのでみているだけで面白いです

css-animation-button-diagonal.png

↓参考記事は下の記事です↓

button-effects3.png

23. ボタンでつくる回転アニメーション9選

transitionを使ってボタンが自然に回転します

ボタンが回転するって純粋に興味ありませんか?

回転扉みたいに動くんです

hover-animation-button-explain3.png

↓参考記事は下の記事です↓

button-effects4.png

24. filterとtransformで超動くCSSスライダーアニメーション3選【Web制作者必見】

filterプロパティの応用、transform:rotateの回転エフェクトとopacityで変化前後のスタイルを調整し

transitionで滑らかにスライドするアニメーションになります。

click-animation-sliders-3pickup-transform2-300x139.png

↓参考記事は下の記事です↓

スクリーンショット 2020-07-25 15.30.03.png

25. 【transform×回転『rotate』】CSS画像アニメーション3選

transitionを使って画像が自然に回転します

縦回転・横回転・3D回転で楽しめます

transform-rotate-image-animation1.png

↓参考記事は下の記事です↓

スクリーンショット 2020-07-25 15.33.10.png

26. transformとtransitionで実現!他にはない完全オリジナルのCSSアニメーション3選

transform:rotateで回転角度とscaleで伸縮率を調整し、

簡単な解説も付いているので手軽にカスタマイズできるようになっています。

hover-animation-image-onbackground-transform1-300x125.png

↓参考記事は下の記事です↓

スクリーンショット 2020-07-25 15.35.27.png

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

【現役フロントエンジニア厳選】Vueで使えるCSSアニメーション総まとめ110選!

スクリーンショット 2020-07-25 15.40.27.png

コピペだけで作れるマテリアルデザインを個ご紹介します。

box-shadow, filter, transform,などをふんだんに使っており、transitionで滑らかな動きが表されています

コードには説明もわかりやすく書いてあるのでかなり参考になります

Webデザイン初心者の方はもちろんですが、バックエンドエンジニアの方にもとても助かる内容になっています

1. シンプルなスライダーマテリアルデザイン3選

そのまま使えるスライダーアニメーションのマテリアルデザインとなっています

transition-durationを使っていてわかりやすく説明もされているのでかなり重宝します

qiita-material-image1.png

↓参考記事は下の記事です↓

qiita-material-design1.png

2. filterとopacityを使いこなすスライダーマテリアルデザイン3選

filterとopacityを使ったそのまま使えるスライダーアニメーションのマテリアルデザインとなっています

transition-durationを使っていてわかりやすく説明もされているのでかなり重宝します

qiita-material-image2.png

↓参考記事は下の記事です↓

qiita-material-design2.png

3. transformを使用したスライダーアニメーション3選

translateやrotate、box-shadowも適宜使用することで様々な場面(Web制作やWebアプリケーションなど)で利用できるデザインになっています

qiita-slider-3d.png

↓参考記事は下の記事です↓

qiita-17.png

4. transform:scaleを使用したスライダーアニメーション3選

scaleでスライダー画像やナビゲーションボタンの拡大縮小を行いそれに対してアニメーションを使用しており幅広く使えるものになっています

qiita-slider-good.png

↓参考記事は下の記事です↓

qiita-18.png

5. clip path polygonを応用して2枚の画像を半々で表示するアニメーション3選

clip path polygonを応用して2枚の画像を半々(三角形)で表示するCSSアニメーション

それぞれに違った実務で使えるエフェクトがついています

qiita-clip-path-polygon.png

↓参考記事は下の記事です↓

qiita-19.png

6. hoverするとドロップダウン表示するナビゲーションメニュー3つ

hover(マウスオーバー)するとドロップダウン表示するナビゲーションメニューが3つ紹介されています

それぞれに違ったアニメーションがついていて面白いです

hover-animation-navigation-dropdown3.png

↓参考記事は下の記事です↓

qiita-20.png

7. 絶対失敗しないナビゲーションメニューサンプル3選

ナビゲーションメニューにいろいろなエフェクトがついていて使い勝手がいいです

カスタマイズもしやすいのでありがたいデザインです

matereal-design-navigation3.png

↓参考記事は下の記事です↓

qiita-21.png

8. 絶対失敗しないヘッダーデザインにコピペで使えるナビゲーションメニュー4選

ヘッダーデザインにコピペで使えるナビゲーションメニュー4選が紹介されていて、そのまま使えるマテリアルデザインなのでかなり重宝します

header-design-navigation-animation1.png

↓参考記事は下の記事です↓

qiita-22.png

9. 【まとめ】CSSだけで動きのあるナビゲーションバーデザイン3選

CSSだけで動きのあるナビゲーションバーデザイン3選が紹介されています

かなりシンプルなデザインですがシンプルだからこそ使える場所が多いと思います

navigation-bar-animation2.png

↓参考記事は下の記事です↓

qiita-23.png

10. filterエフェクトを使いこなすhoverアニメーション3選

filterエフェクトを使いそのまま使えるhoverアニメーションのマテリアルデザインとなっています

qiita-material-image3.png

↓参考記事は下の記事です↓

qiita-material-design3.png

11. overflow: hiddenを使いこなす美しいCSSアニメーション3選

overflow: hiddenを使いそのまま使えるhoverアニメーションのマテリアルデザインとなっています

美しい画像アニメーションとなっています

qiita-material-image4.png

↓参考記事は下の記事です↓

qiita-material-design4.png

12. position:absoluteとfilterを使いこなし鏡みたいに反射するアニメーション3選

position:absoluteとfilterを使いそのまま使えるhoverアニメーションのマテリアルデザインとなっています

鏡みたいに反射する見ているだけで面白いアニメーションです

qiita-material-image5.png

↓参考記事は下の記事です↓

qiita-material-design5.png

13. filter: hue-rotateとtransitionを使いこなし色が暴れ出すアニメーション3選

filter: hue-rotateとtransitionを使いそのまま使えるhoverアニメーションのマテリアルデザインとなっています

色が暴れ出すかなり美しいデザインになっています

qiita-material-image6.png

↓参考記事は下の記事です↓

qiita-material-design6.png

14. filter:blurとtransitionを使いこなしぼかし画像が動き出すアニメーション3選

filter:blurとtransitionを使いそのまま使えるhoverアニメーションのマテリアルデザインとなっています

qiita-material-image7.png

↓参考記事は下の記事です↓

qiita-material-design7.png

15. transitionとfilterを使いこなし美しく変化するCSS画像エフェクト5選

transitionとfilterを使いそのまま使えるhoverアニメーションのマテリアルデザインとなっています

美しく変化するのを見るだけでも面白いです

qiita-material-image8.png

↓参考記事は下の記事です↓

qiita-material-design8.png

16. margin-leftとscaleを使いこなすスライドアニメーション16選

margin-leftとscaleを使いそのまま使えるhoverアニメーションのマテリアルデザインとなっています

transform:scaleを使っていてわかりやすく説明もされているのでかなり重宝します

qiita-material-image9.png

↓参考記事は下の記事です↓

qiita-material-design9.png

17. hoverとfilter:brightnessを使いこなし明るさ調節するCSS画像エフェクト3選

hoverとfilter:brightnessを使いそのまま使えるhoverアニメーションのマテリアルデザインとなっています

filterを使いこなすためにはまずひとつひとつ丁寧にい理解していきましょう

qiita-material-image10.png

↓参考記事は下の記事です↓

qiita-material-design10.png

18. transformを使いこなすボタンアニメーション16選

transformを使ってボタンを変形し、WebサイトやWebアプリケーションで使えるボタンエフェクトとなっています

transformを全種類使っていてわかりやすく説明もされているのでかなり重宝します

css-effect-hover-button-transform-skew.png

↓参考記事は下の記事です↓

スクリーンショット 2020-07-02 16.02.15.png

19. transitionを使いこなすボタンアニメーション9選

transitionを使ってボタンにアニメーションを効かせおり、WebサイトやWebアプリケーションで使えるボタンエフェクトとなっています

box-shadowやborder-radiusをエフェクトで使用して見た目のデザインもいい感じです

hover-button-animation-color.png

↓参考記事は下の記事です↓

button-effects1.png

20. transformを使いこなすマテリアルデザイン5選

transformを使ってボタンにアニメーションを効かせおり、WebサイトやWebアプリケーションでそのまま使えるマテリアルデザインとなっています

マテリアルデザインなのでそのまますぐにでもコピペして使用できます

css-effects-hover-button-materialdesign-3d.png

↓参考記事は下の記事です↓

スクリーンショット 2020-07-03 20.48.02.png

21. filterが網羅できるCSSボタンアニメーション15選

filterを使ってボタンにエフェクトを効かせおり、特にデザインの見た目をカッコよくしたい場合に非常に使えます

filterエフェクトを全種類使っているので永久保存版としても重宝できそうなまとめ記事になっています

勉強にもフロント開発でも役立つと思います

hover-button-animation-filter.png

↓参考記事は下の記事です↓

button-effects2.png

22. scaleでオシャレなCSSボタンアニメーション3選

transform:scaleを使ってボタンにエフェクトを効かせおり、オシャレでかっこいいボタンになっています

ボタンの背景が滑らかにスライドしたり、フワッと出てきたりするのでみているだけで面白いです

css-animation-button-diagonal.png

↓参考記事は下の記事です↓

button-effects3.png

23. ボタンでつくる回転アニメーション9選

transitionを使ってボタンが自然に回転します

ボタンが回転するって純粋に興味ありませんか?

回転扉みたいに動くんです

hover-animation-button-explain3.png

↓参考記事は下の記事です↓

button-effects4.png

24. filterとtransformで超動くCSSスライダーアニメーション3選【Web制作者必見】

filterプロパティの応用、transform:rotateの回転エフェクトとopacityで変化前後のスタイルを調整し

transitionで滑らかにスライドするアニメーションになります。

click-animation-sliders-3pickup-transform2-300x139.png

↓参考記事は下の記事です↓

スクリーンショット 2020-07-25 15.30.03.png

25. 【transform×回転『rotate』】CSS画像アニメーション3選

transitionを使って画像が自然に回転します

縦回転・横回転・3D回転で楽しめます

transform-rotate-image-animation1.png

↓参考記事は下の記事です↓

スクリーンショット 2020-07-25 15.33.10.png

26. transformとtransitionで実現!他にはない完全オリジナルのCSSアニメーション3選

transform:rotateで回転角度とscaleで伸縮率を調整し、

簡単な解説も付いているので手軽にカスタマイズできるようになっています。

hover-animation-image-onbackground-transform1-300x125.png

↓参考記事は下の記事です↓

スクリーンショット 2020-07-25 15.35.27.png

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

【現役フロントエンジニア完全オリジナル】Vueで使えるCSSアニメーションまとめ110選!(コピペOK)

スクリーンショット 2020-07-25 15.40.27.png

コピペだけで作れるマテリアルデザインを個ご紹介します。

box-shadow, filter, transform,などをふんだんに使っており、transitionで滑らかな動きが表されています

コードには説明もわかりやすく書いてあるのでかなり参考になります

Webデザイン初心者の方はもちろんですが、バックエンドエンジニアの方にもとても助かる内容になっています

1. シンプルなスライダーマテリアルデザイン3選

そのまま使えるスライダーアニメーションのマテリアルデザインとなっています

transition-durationを使っていてわかりやすく説明もされているのでかなり重宝します

qiita-material-image1.png

↓参考記事は下の記事です↓

qiita-material-design1.png

2. filterとopacityを使いこなすスライダーマテリアルデザイン3選

filterとopacityを使ったそのまま使えるスライダーアニメーションのマテリアルデザインとなっています

transition-durationを使っていてわかりやすく説明もされているのでかなり重宝します

qiita-material-image2.png

↓参考記事は下の記事です↓

qiita-material-design2.png

3. transformを使用したスライダーアニメーション3選

translateやrotate、box-shadowも適宜使用することで様々な場面(Web制作やWebアプリケーションなど)で利用できるデザインになっています

qiita-slider-3d.png

↓参考記事は下の記事です↓

qiita-17.png

4. transform:scaleを使用したスライダーアニメーション3選

scaleでスライダー画像やナビゲーションボタンの拡大縮小を行いそれに対してアニメーションを使用しており幅広く使えるものになっています

qiita-slider-good.png

↓参考記事は下の記事です↓

qiita-18.png

5. clip path polygonを応用して2枚の画像を半々で表示するアニメーション3選

clip path polygonを応用して2枚の画像を半々(三角形)で表示するCSSアニメーション

それぞれに違った実務で使えるエフェクトがついています

qiita-clip-path-polygon.png

↓参考記事は下の記事です↓

qiita-19.png

6. hoverするとドロップダウン表示するナビゲーションメニュー3つ

hover(マウスオーバー)するとドロップダウン表示するナビゲーションメニューが3つ紹介されています

それぞれに違ったアニメーションがついていて面白いです

hover-animation-navigation-dropdown3.png

↓参考記事は下の記事です↓

qiita-20.png

7. 絶対失敗しないナビゲーションメニューサンプル3選

ナビゲーションメニューにいろいろなエフェクトがついていて使い勝手がいいです

カスタマイズもしやすいのでありがたいデザインです

matereal-design-navigation3.png

↓参考記事は下の記事です↓

qiita-21.png

8. 絶対失敗しないヘッダーデザインにコピペで使えるナビゲーションメニュー4選

ヘッダーデザインにコピペで使えるナビゲーションメニュー4選が紹介されていて、そのまま使えるマテリアルデザインなのでかなり重宝します

header-design-navigation-animation1.png

↓参考記事は下の記事です↓

qiita-22.png

9. 【まとめ】CSSだけで動きのあるナビゲーションバーデザイン3選

CSSだけで動きのあるナビゲーションバーデザイン3選が紹介されています

かなりシンプルなデザインですがシンプルだからこそ使える場所が多いと思います

navigation-bar-animation2.png

↓参考記事は下の記事です↓

qiita-23.png

10. filterエフェクトを使いこなすhoverアニメーション3選

filterエフェクトを使いそのまま使えるhoverアニメーションのマテリアルデザインとなっています

qiita-material-image3.png

↓参考記事は下の記事です↓

qiita-material-design3.png

11. overflow: hiddenを使いこなす美しいCSSアニメーション3選

overflow: hiddenを使いそのまま使えるhoverアニメーションのマテリアルデザインとなっています

美しい画像アニメーションとなっています

qiita-material-image4.png

↓参考記事は下の記事です↓

qiita-material-design4.png

12. position:absoluteとfilterを使いこなし鏡みたいに反射するアニメーション3選

position:absoluteとfilterを使いそのまま使えるhoverアニメーションのマテリアルデザインとなっています

鏡みたいに反射する見ているだけで面白いアニメーションです

qiita-material-image5.png

↓参考記事は下の記事です↓

qiita-material-design5.png

13. filter: hue-rotateとtransitionを使いこなし色が暴れ出すアニメーション3選

filter: hue-rotateとtransitionを使いそのまま使えるhoverアニメーションのマテリアルデザインとなっています

色が暴れ出すかなり美しいデザインになっています

qiita-material-image6.png

↓参考記事は下の記事です↓

qiita-material-design6.png

14. filter:blurとtransitionを使いこなしぼかし画像が動き出すアニメーション3選

filter:blurとtransitionを使いそのまま使えるhoverアニメーションのマテリアルデザインとなっています

qiita-material-image7.png

↓参考記事は下の記事です↓

qiita-material-design7.png

15. transitionとfilterを使いこなし美しく変化するCSS画像エフェクト5選

transitionとfilterを使いそのまま使えるhoverアニメーションのマテリアルデザインとなっています

美しく変化するのを見るだけでも面白いです

qiita-material-image8.png

↓参考記事は下の記事です↓

qiita-material-design8.png

16. margin-leftとscaleを使いこなすスライドアニメーション16選

margin-leftとscaleを使いそのまま使えるhoverアニメーションのマテリアルデザインとなっています

transform:scaleを使っていてわかりやすく説明もされているのでかなり重宝します

qiita-material-image9.png

↓参考記事は下の記事です↓

qiita-material-design9.png

17. hoverとfilter:brightnessを使いこなし明るさ調節するCSS画像エフェクト3選

hoverとfilter:brightnessを使いそのまま使えるhoverアニメーションのマテリアルデザインとなっています

filterを使いこなすためにはまずひとつひとつ丁寧にい理解していきましょう

qiita-material-image10.png

↓参考記事は下の記事です↓

qiita-material-design10.png

18. transformを使いこなすボタンアニメーション16選

transformを使ってボタンを変形し、WebサイトやWebアプリケーションで使えるボタンエフェクトとなっています

transformを全種類使っていてわかりやすく説明もされているのでかなり重宝します

css-effect-hover-button-transform-skew.png

↓参考記事は下の記事です↓

スクリーンショット 2020-07-02 16.02.15.png

19. transitionを使いこなすボタンアニメーション9選

transitionを使ってボタンにアニメーションを効かせおり、WebサイトやWebアプリケーションで使えるボタンエフェクトとなっています

box-shadowやborder-radiusをエフェクトで使用して見た目のデザインもいい感じです

hover-button-animation-color.png

↓参考記事は下の記事です↓

button-effects1.png

20. transformを使いこなすマテリアルデザイン5選

transformを使ってボタンにアニメーションを効かせおり、WebサイトやWebアプリケーションでそのまま使えるマテリアルデザインとなっています

マテリアルデザインなのでそのまますぐにでもコピペして使用できます

css-effects-hover-button-materialdesign-3d.png

↓参考記事は下の記事です↓

スクリーンショット 2020-07-03 20.48.02.png

21. filterが網羅できるCSSボタンアニメーション15選

filterを使ってボタンにエフェクトを効かせおり、特にデザインの見た目をカッコよくしたい場合に非常に使えます

filterエフェクトを全種類使っているので永久保存版としても重宝できそうなまとめ記事になっています

勉強にもフロント開発でも役立つと思います

hover-button-animation-filter.png

↓参考記事は下の記事です↓

button-effects2.png

22. scaleでオシャレなCSSボタンアニメーション3選

transform:scaleを使ってボタンにエフェクトを効かせおり、オシャレでかっこいいボタンになっています

ボタンの背景が滑らかにスライドしたり、フワッと出てきたりするのでみているだけで面白いです

css-animation-button-diagonal.png

↓参考記事は下の記事です↓

button-effects3.png

23. ボタンでつくる回転アニメーション9選

transitionを使ってボタンが自然に回転します

ボタンが回転するって純粋に興味ありませんか?

回転扉みたいに動くんです

hover-animation-button-explain3.png

↓参考記事は下の記事です↓

button-effects4.png

24. filterとtransformで超動くCSSスライダーアニメーション3選【Web制作者必見】

filterプロパティの応用、transform:rotateの回転エフェクトとopacityで変化前後のスタイルを調整し

transitionで滑らかにスライドするアニメーションになります。

click-animation-sliders-3pickup-transform2-300x139.png

↓参考記事は下の記事です↓

スクリーンショット 2020-07-25 15.30.03.png

25. 【transform×回転『rotate』】CSS画像アニメーション3選

transitionを使って画像が自然に回転します

縦回転・横回転・3D回転で楽しめます

transform-rotate-image-animation1.png

↓参考記事は下の記事です↓

スクリーンショット 2020-07-25 15.33.10.png

26. transformとtransitionで実現!他にはない完全オリジナルのCSSアニメーション3選

transform:rotateで回転角度とscaleで伸縮率を調整し、

簡単な解説も付いているので手軽にカスタマイズできるようになっています。

hover-animation-image-onbackground-transform1-300x125.png

↓参考記事は下の記事です↓

スクリーンショット 2020-07-25 15.35.27.png

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

【Vue.js】propsのプロパティ名にキャメルケースを使う場合の注意点

propsのプロパティ名

Vue.jsにおいて、propsのプロパティ名にキャメルケースを使う場合に1つだけ注意点があります。それは、HTMLとJavaScriptでは文字の処理方法が異なるということです。

HTMLでは、属性名の大文字と小文字を区別せず、すべての大文字を小文字として認識します。つまり、HTMLのテンプレート内では、キャメルケースのプロパティ名はケバブケースで書く必要があります。具体的には下記のとおりです。

JavaScript
Vue.component('comp-child', {
  template: '<p>{{ compText }}</p>',
  props: {
    compText: String
  },
})
HTML
<comp-child comp-text="HTMLではケバブケースで書きましょう"></comp-child>

JavaScriptではキャメルケースを使用したcompTextというプロパティ名を、HTMLではケバブケースを使用したcomp-textとすることで正常に動作します。

まとめ

Vue.jsのpropsのプロパティ名においてキャメルケースを使うことはよくあるかと思いますが、HTMLとJavaScriptでの文字の処理方法の違いを押さえ、HTMLではケバブケースを使う必要があることを覚えておきましょう。

Twitterアカウント

Twitterも更新していますので、よかったらフォローお願いします!
Twitterアカウントはこちら

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Vue3(beta)+ TypeScript + vue-router + Vuex 環境構築メモ

Vue CLI をインストール

yarn global add @vue/cli

プロジェクトを作成

Typescript, Router, Vuexを入れておきます。

vue create try-vue-next

? Please pick a preset: Manually select features
? Check the features needed for your project: Babel, TS, Router, Vuex, Linter
? Use class-style component syntax? No
? Use Babel alongside TypeScript (required for modern mode, auto-detected polyfills, transpiling
JSX)? No
? Use history mode for router? (Requires proper server setup for index fallback in production) No

? Pick a linter / formatter config: Prettier
? Pick additional lint features: Lint on save
? Where do you prefer placing config for Babel, ESLint, etc.? In dedicated config files

Vue 3 CLI プラグインを追加

cd try-vue-next
vue add vue-next

package.json の更新

最新バージョンの Vue beta を使用するようにします。

  ...
  "dependencies": {
    "vue": "^3.0.0-beta.24" 
  },
  "devDependencies": {
    ...
    "@vue/compiler-sfc": "^3.0.0-beta.24",
    ...

エラーの修正

このままだと動かないのでいくつか修正します。
参考までに変更前のコードはコメントアウトしました。

  • shims-tsx.d.ts

    削除します

  • shims-vue.d.ts

shims-vue.d.ts
declare module "*.vue" {declare module "*.vue" {
  // import Vue from "vue";
  // export default Vue;
  import { defineComponent } from 'vue'
  export default defineComponent
}

  • component/HelloWorld.vue
HelloWorld.vue
...
<script lang="ts">
// import Vue from "vue";
import { defineComponent } from 'vue'

// export default Vue.extend({
export default defineComponent({
  name: "HelloWorld",
  props: {
    msg: String
  }
});
</script>
...
  • router/index.ts
index.ts
// import { RouteConfig, createRouter, createWebHashHistory } from "vue-router";
import { RouteRecordRaw, createRouter, createWebHashHistory } from "vue-router";
import Home from "../views/Home.vue";

// const routes: Array<RouteConfig> = [
const routes: Array<RouteRecordRaw> = [
  {
    path: "/",
    name: "Home",
    component: Home
  },
...
  • store/index.ts
index.ts
// import Vuex from "vuex";
import { createStore } from "vuex";

// export default Vuex.createStore({
export default createStore({
  state: {},
  mutations: {},
  actions: {},
  modules: {}
});

動作確認

yarn serve

いつものページが表示されました。

コメント 2020-07-25 122107.png

参考

Vue 3.0.0-betaのお試し環境をVue CLIで作ってみた

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Vue.Js マウスオーバー(mouseover)で画像をゆっくり表示

VueJs初学者のちょっとした倉庫です。簡単だけどシンプルだけど使えそうな表現を目指しています。

マウスオーバーで画像がゆっくり表示される

←気が向いたらLGTMボタンぽちっとお願いします。

カーソルが要素に重なると拡大され、要素の値を取得します。

VueJsmouseover.gif

ソース

shuffle.html
<!doctype html>
<html lang="ja">
<head>

    <meta charset="UTF-8">
    <meta name="viewport"
          content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>PickUp</title>

    <style scoped>
        .fade-enter-active, fade-leave-active {
            transition: opacity 3s;
        }
        .fade-enter, .fade-leave-to {
            opacity: 0
        }

        div {
            display: inline-block;
        }

        body {
            font-family: "Montserrat", "游ゴシック", YuGothic, "ヒラギノ角ゴ ProN W3", "Hiragino Kaku Gothic ProN", "メイリオ", Meiryo, sans-serif;
        }

        ul {
            margin-left: 00px;
            list-style: none;
        }

        div#mainlist {
            color: #8EF1FF;
            font-size: 25px;
        }

        div#mainlist ul li:hover {
            list-style-type: ">   ";
            color: #7B3CFF;
            font-size: 75px;
        }


        .SubTitle {
            margin-left: 600px;
            position: relative;
            display: inline-block;
            font-weight: bold;
            padding: 0.25em 0;
            text-decoration: none;
            color: #67c5ff;
        }

        .SubTitle:before {
            position: absolute;
            content: '';
            width: 100%;
            height: 4px;
            top: 100%;
            left: 0;
            border-radius: 3px;
            background: #67c5ff;
            transition: .2s;
        }

        .SubTitle:hover:before {
            top: -webkit-calc(100% - 3px);
            top: calc(100% - 3px);
        }

    </style>
</head>
<body>
<div id="app">
    <div>
        <h1>
            <div id="mainlist">
                <ul>
                    <div>
                        <span class="SubTitle">あなたの好きな犬種は??</span>
                        <li v-for="dog in dogs" :key="dog.name" @mouseover="activeDog=dog.id">
                            {{dog.name}}
                        </li>
                    </div>
                    <div>
                        <transition name="fade">
                            <img v-show="this.activeDog==1" src="tiwawa.png"></img>
                        </transition>
                    </div>
                </ul>
            </div>
        </h1>
    </div>
    <p v-show="activeDog">selected:{{activeDog}}</p>
</div>

<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<script src="https://cdn.jsdelivr.net/npm/lodash@4.17.19/lodash.min.js"></script>

<script>
    var app = new Vue({
        el: "#app",
        data: {
            dogs: [
                {id: 1, name: 'チワワ'},
                {id: 2, name: 'トイプードル'},
                {id: 3, name: 'ポメラニアン'},
                {id: 4, name: '柴犬'},
                {id: 5, name: 'ダックスフンド'},
                {id: 6, name: 'パグ'},
                {id: 7, name: 'ブルドック'},
                {id: 8, name: 'コーギー'},
                {id: 9, name: 'パピヨン'},
                {id: 10, name: 'マルチーズ'},
                {id: 11, name: 'シェパード'},
                {id: 12, name: 'ラブラドール'},
                {id: 13, name: 'ビーグル'},
                {id: 14, name: 'ゴールデンレトリバー'},
                {id: 15, name: '秋田犬'},
            ],
            activeDog: 0,
        },
        methods: {}
    });
</script>
</body>
</html>

最後に

以上です。気が向いたらLGTMぽちっとお願いします。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Vue(Nuxt.js)でTopへ戻るボタンを実装する方法【ライブラリ使用無し】

Vue(Nuxt.js)でTopへ戻るボタンを実装する方法になります。
ライブラリ等は使用しないので、導入もしやすいかと思います。

クリックイベントを設定する

ReturnTopButton
<template>
  <div>
    <button @click="returnTop">
      Topへ戻る
    </button>
  </div>
</template>

まずは、コンポーネントを作り、クリックイベントを設定します。

methodsでTopへ戻る処理を実行

ReturnTopButton
<template>
  <div>
    <button @click="returnTop">
      Topへ戻る
    </button>
  </div>
</template>

<script lang="ts">
import Vue from 'vue'

export default Vue.extend({
  methods: {
    returnTop() {
      window.scrollTo({
        top: 0,
        behavior: 'smooth'
      })
    }
  }
})
</script>

window.scrollToメソッドを使用して、Topへ戻す処理をしています。
behavior: smoothとオプションを指定することで、スムーズスクロールさせることができます。
behavior: auto だと一瞬で移動します。

スクロールしたらTopへ戻るボタンが表示するようにする

初期表示では、Topへ戻るボタンを表示させずに、ある程度スクロールしたら表示させる方法です。

ReturnTopButton
<template>
  <div>
    <button v-show="buttonActive @click="returnTop">
      Topへ戻る
    </button>
  </div>
</template>

<script lang="ts">
import Vue from 'vue'

export default Vue.extend({
  data() {
    return {
      buttonActive: false,
      scroll: 0
    }
  },
  mounted() {
    window.addEventListener('scroll', this.scrollWindow)
  },
  methods: {
    returnTop() {
      window.scrollTo({
        top: 0,
        behavior: 'smooth'
      })
    },
    scrollWindow() {
      const top = 100 // ボタンを表示させたい位置
      this.scroll = window.scrollY
      if (top <= this.scroll) {
        this.buttonActive = true
      } else {
        this.buttonActive = false
      }
    }
  }
})
</script>

v-showを使い、スクロールの条件を満たしたらTopへ戻るボタンが表示されるように処理を追加しています。

ボタン表示にアニメーションをつける

Topへ戻るボタン出現時にアニメーションをつけることも可能です。
その場合は、transitionを使います。

ReturnTopButton
<template>
  <div>
    <transition name="button">
      <button v-show="buttonActive" @click="returnTop">
        Topへ戻る
      </button>
    </transition>
  </div>
</template>

<style lang="scss" scoped>
.button-enter-active,
.button-leave-active {
  transition: opacity 0.5s;
}
.button-enter,
.button-leave-to {
  opacity: 0;
}
</style>

transitionを使うことで、アニメーションを簡単につけることができます。
上記の例だとopacityを設定することで、フワッと表示させることができます。

ezgif.com-video-to-gif.gif

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Vue.jsで時計アプリを作ろう(前編:開発環境の構築)

vue.jpeg

これから2回に分けて、Vue.jsのチュートリアルを兼ねて時計アプリを作成します。

開発環境の構築

本記事では、vue-cliを使って開発環境を構築していきます。

Node.jsをインストールしていない方はインストールしておいてください。

ターミナルを開いて、

$ npm install -g vue-cli

と入力し実行するとvue-cliがインストールできます。

次に任意の場所にアプリ用のディレクトリを作成し、ターミナルで移動します。

アプリ用ディレクトリ内で、以下のコマンドを実行します。

$ vue init webpack

すると、対話形式で設定を決めることができます。

? Generate project in current directory?

現在のディレクトリにプロジェクトを作成するか聞かれるので、yと入力しEnterを押します。

? Project name
? Project description
? Author

プロジェクトの名前/概要/作者名はお好きに決めてください。

? Vue build

コンパイラの有無を選択できますので、「Runtime-only: about 6KB lighter min+gzip, but templates (or any Vue-specific HTML) are ONLY allowed in .vue files - r ender functions are required elsewhere」を選択します。

? Install vue-router?
? Use ESLint to lint your code?
? Set up unit tests
? Setup e2e tests with Nightwatch?

上から順に、「vue-routerを利用するか」「ESLintを利用するか」「ユニットテストを行うか」「E2Eテストを行うか」を選択できるので、いずれもnと入力しEnterを押します。

? Should we run `npm install` for you after the project has been created? (recommended)

Node.jsのモジュールをインストールするかを聞かれますので、「Yes, use NPM」を選択します。(Yarnを使用している方は「Yes, use Yarn」を選択しても大丈夫です)

設定を終えるとプロジェクトの作成が始まりますので、しばらく待ちます。

プロジェクトの作成が終わったら、

$ npm run dev

を実行します。

ローカルサーバが起動するので、http://localhost:8080 にアクセスします。

img1.png

上の画面と同じように表示されればプロジェクトの作成は完了です。

本格的なアプリ開発は後編で行っていきます。

Vue.jsで時計アプリを作ろう(後編:アプリの作成)

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

vue-cli v4.5.0 を使って Vue 3 のプロジェクトを作成する

はじめに

昨日(7/24)に、vue-cli v4.5.0 がリリースされました。
これにより、vue-cli から一発で Vue 3 のプロジェクトが作れるようになりました。
(今までは、Vue 2 のプロジェクトを作成した後に、Vue 3 に upgrade する必要がありました)

さっそく、プロジェクトの作成から起動まで行ってみましょう。

使い方

1. 最新の @vue/cli をグローバルにインストールする
yarn global add @vue/cli@next
# OR
npm install -g @vue/cli@next

既にプロジェクトが存在する場合は対象のプロジェクトを upgrade します。

vue upgrade --next
2. create 時に Vue 3 を選択する
vue create <project-name>
# Vue 3 のpresetを使用する場合
? Please pick a preset: (Use arrow keys)
  Default ([Vue 2] babel, eslint)
❯ Default (Vue 3 Preview) ([Vue 3] babel, eslint)
  Manually select features

# マニュアルで選択する場合
? Please pick a preset: Manually select features
? Check the features needed for your project: Choose Vue version, Babel, TS, PWA, Router, Vuex, CSS Pre-processors, Linter, Unit, E2E
? Choose a version of Vue.js that you want to start the project with
  2.x
❯ 3.x (Preview)

もちろん、 vue ui から選択することもできます。

  • image.png

インストール後、 package.jsonを見ると vue 3.0 や vuex4.0 がインストールされているのが分かります。
(なんと、 -beta が外れています!!)

  "dependencies": {
    "core-js": "^3.6.5",
    "register-service-worker": "^1.7.1",
    "vue": "^3.0.0-0",
    "vue-router": "^4.0.0-0",
    "vuex": "^4.0.0-0"
  },
3. 起動する

おなじみの画面が起動します。

cd <project-name>
yarn serve

image.png

最後に

起動時にエラーが出るなど、不安定ではありますが CLI から Vue 3 のプロジェクトをかんたんに作れるようになりました。
8 月上旬の Vue 3 正式リリースへの期待も高まりますね。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

【Vue.js】ElementUIでテーブルを作るときにデータを加工したくなった

はじめに

VueのUIライブラリ「ElementUI」でテーブルを作成するときに、
データを加工しようとしたら少しハマったので今回記事にさせて頂きました。

開発環境

  • MacOS
  • vue 2.6.11
  • vuecli 4.4.6
  • element-ui 2.13.2
  • vue-moment 4.1.0
  • moment-timezone 0.5.31

テーブルを作る

とりあえずこんな感じのテーブルを作ります。
コンポーネントについては、公式ドキュメントが参考になります。
スクリーンショット 2020-07-25 0.00.53.png

<template>
    <div class="result-area">
        <el-table
            :data="tableData">
            <el-table-column
                prop="id"
                label="ID"
                width="100">
            </el-table-column>
            <el-table-column
                prop="name"
                label="ニックネーム"
                width="200">
            </el-table-column>
            <el-table-column
                prop="created_at"
                label="作成日"
                width="200">
            </el-table-column>
        </el-table>
    </div>
</template>
<script>
import CommonHelper from '../helper/CommonHelper';

export default {
    mixins: [CommonHelper],
    data() {
        return {
            tableData: [{
                id: 1,
                name: '山田太郎',
                created_at: '2020-07-01 10:00:00'
            }, {
                id: 2,
                name: '鈴木一郎',
                created_at: '2020-07-02 11:00:00'
            }, {
                id: 3,
                name: '菅田将暉',
                created_at: '2020-07-03 12:00:00'
            }]
        };
    }
}
</script>

データを加工して表示

このテーブルの作成日を日本語に直して表示したい。
スクリーンショット 2020-07-25 0.20.23.png

<template>
    <div class="result-area">
        <el-table
            :data="tableData">
            <el-table-column
                prop="id"
                label="ID"
                width="100">
            </el-table-column>
            <el-table-column
                prop="name"
                label="ニックネーム"
                width="200">
            </el-table-column>
            <el-table-column
                prop="created_at"
                label="作成日"
                width="200">
                <template slot-scope="scope">
                    {{date_format(scope.row.created_at)}}
                </template>
            </el-table-column>
        </el-table>
    </div>
</template>

scopeを定義してあげて、date_formatという関数を使用して変換しています。
scope.row.created_at」の「row」を忘れていて、少しハマってしまいました。
一応関数も書いておきます。

export default {
    methods: {
        date_format(date) {
            let format_date = this.$moment(date);
            format_date.locale('ja');
            return format_date.format('LL');
        }
    }
}

おまけ

この書き方を利用して、こんな感じのもできます。
スクリーンショット 2020-07-25 0.36.34.png

<template>
    <div class="result-area">
        <el-table
            :data="tableData">
            <el-table-column
                prop="id"
                label="ID"
                width="100">
            </el-table-column>
            <el-table-column
                prop="name"
                label="ニックネーム"
                width="200">
            </el-table-column>
            <el-table-column
                prop="id">
                <template slot-scope="scope">
                    <el-button
                        size="mini"
                        @click="pushDetail(scope.row.id)">
                        <i class="el-icon-edit-outline"></i>
                    </el-button>
                </template>
            </el-table-column>
        </el-table>
    </div>
</template>
<script>
import CommonHelper from '../helper/CommonHelper';

export default {
    mixins: [CommonHelper],
    data() {
        return {
            tableData: [{
                id: 1,
                name: '山田太郎',
                created_at: '2020-07-01 10:00:00'
            }, {
                id: 2,
                name: '鈴木一郎',
                created_at: '2020-07-02 11:00:00'
            }, {
                id: 3,
                name: '菅田将暉',
                created_at: '2020-07-03 12:00:00'
            }]
        };
    },
    methods: {
        pushDetail(id) {
            console.log(id);
        }
    }
}
</script>

アイコンを押すと、methodsにidを渡すことができます。

おわりに

ElementUIはコンポーネントも豊富で使いやすいのですが、
日本語の記事が少なめなので、もっと記事が増やしていきたいと思います。

よろしければ、フォローお願いします。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Laravel+Vue.js(+vue-chartjs)でUnknown custom elementのエラー

現在、独学でLaravel、Vue.jsを使ってWEBサービス開発の練習をしています。
プログラミングの勉強は1年ほどになりますが、LaravelとVue.jsは2ヶ月ほど触っただけの超素人です。

最初に結論

laravelでVue Componentを書いたらresources/js/app.jsに登録する。
でないと、コンソールに
Unknown custom element: <chart> - did you register the component correctly? For recursive components, make sure to provide the "name" option.
(コンポーネントが正しく登録されてないよ)とエラーが出る。

状況

スクリーンショット 2020-07-25 0.09.08.png

上のような温泉レビュー掲示板を作成中。
vue-chartjsでレーダーチャートを作成。
このレーダーチャート部分をコンポーネント化したく、resources/js/components/Chart.vueを作成。

Chart.vue
<script>
import { Radar } from 'vue-chartjs'

export default {
  extends: Radar,
  data () {
      return {
          data: {
              labels: ["総合", "温泉", "街並み", "グルメ", "アクセス"],
              datasets: [{
                  data: [5, 4, 3, 2, 1],
                  backgroundColor: 'rgba(255, 234, 42, 0.8)',
                  borderColor: 'rgba(255, 234, 42, 0.8)',
                  borderWidth: 1,
                  pointRadius:0
              }]
          },
          options: {
              title: {
                  display: true
              },
              legend: {
                  display: false
              },
              scale:{
                ticks:{
                      suggestedMin: 0,
                      suggestedMax: 5,
                      stepSize: 1,
                      callback: function(value, index, values){
                          return  value
                      }
                  }
              }
          }
      }
  },
  mounted () {
    this.renderChart(this.data, this.options)
  }
}
</script>

<style>
</style>

次に、温泉個別ページ(show.blade.php)からコンポーネントを呼び出す。

show.blade.php
<div id="app" class="chart">
  <chart></chart>
</div>

しかし、画面にチャートが表示されない。
スクリーンショット 2020-07-25 0.08.54.png

コンソールにエラーが出ている。
Unknown custom element: <chart> - did you register the component correctly? For recursive components, make sure to provide the "name" option.

よう分からんコンポーネントがありますよ。正しく登録しました?とのこと。
調べてみると、vueファイルはresources/js/app.jsに登録して初めて、コンポーネントとして使えるようだ。(仕組みは分かっていないので勉強していきます。)
とにかく、resources/js/app.jsを確認してみる。

app.js
/**
 * The following block of code may be used to automatically register your
 * Vue components. It will recursively scan this directory for the Vue
 * components and automatically register them with their "basename".
 *
 * Eg. ./components/ExampleComponent.vue -> <example-component></example-component>
 */

// const files = require.context('./', true, /\.vue$/i);
// files.keys().map(key => Vue.component(key.split('/').pop().split('.')[0], files(key).default));

Vue.component('example-component', require('./components/ExampleComponent.vue').default);

次のコードを書いたらあなたのVue componentが自動的に登録されます。とのこと。
It will recursively~は何のこっちゃ、さっぱりわかりません。
とりあえず、既にExampleComponent.vueが既に登録されていたので、それに倣ってChart.vueも登録します。

app.js
/**
 * The following block of code may be used to automatically register your
 * Vue components. It will recursively scan this directory for the Vue
 * components and automatically register them with their "basename".
 *
 * Eg. ./components/ExampleComponent.vue -> <example-component></example-component>
 */

// const files = require.context('./', true, /\.vue$/i);
// files.keys().map(key => Vue.component(key.split('/').pop().split('.')[0], files(key).default));

Vue.component('example-component', require('./components/ExampleComponent.vue').default);
Vue.component('chart', require('./components/Chart.vue').default);

もう一度画面を確認すると、レーダーチャートが表示されました!

最後に

こういった基本的なことすら、まだまだ知らないことばかりです。頑張らねば。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む