- 投稿日:2020-07-25T22:58:13+09:00
もしも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パターンがある
Vue.extend
を使うvue-class-component
を使う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を使うとするとどうなる?
Vue.extend
だけ使うvue-class-component
を使う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を導入してみたいと思います
Vue.extend
だけ使うvue-class-component
を使う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で正式対応版きたらそれにのっかるのがベストだと思う
おわり
今回参考にしたページ
[Vue+TypeScript] Vue.extend で Vue らしさを保ちつつ TypeScript で書くときの型宣言についてまとめた
https://qiita.com/is_ryo/items/6fc799ba4214db61d8abとにかく楽してVue.jsでTypeScriptを使いたい
https://www.slideshare.net/sakura_pr/vuejstype-script-81228009Revised Revised 型の国のTypeScript
http://typescript.ninja/typescript-in-definitelyland/typescript-basic.html仕事ですぐに使えるTypeScript
https://future-architect.github.io/typescript-guide/index.html
- 投稿日:2020-07-25T19:17:46+09:00
【現役Vueエンジニア監修】完全オリジナル!ハンバーガーメニューのCSSアニメーション33選(解説付き)
コピペだけで作れるハンバーガーメニューのCSSアニメーションを33個ご紹介します。
box-shadow, filter, transform,などをふんだんに使っており、transitionで滑らかな動きが表されています
コードには説明もわかりやすく書いてあるのでかなり参考になります
完全オリジナルでコピペだけで実装できてしまうお手軽なアニメーションとなっています
Webデザイン初心者の方はもちろんですが、バックエンドエンジニアの方にもとても助かる内容になっています
CSSハンバーガーメニュー33選
1. コピペだけでCSSアニメーション!そのまま使えるシンプルなハンバーガーメニュー3選
hoverやクリック(タップ)でデザインに変化が起きるよう作ってあるのでWeb制作やWebアプリケーション等でそのまま使えます。
↓参考記事は下の記事です↓
2. コピペでCSSマテリアルデザイン!Web制作で使えるオシャレなハンバーガーメニュー3選
そのまま使えるハンバーガーメニューのマテリアルデザインとなっています
transition-durationを使っていてわかりやすく説明もされているのでかなり重宝します
↓参考記事は下の記事です↓
3. 動きが面白すぎる!コピペでオシャレなハンバーガーメニュー3選【CSSマテリアルデザイン】
遊び心のあるハンバーガーメニューになっています。
マテリアルデザインなのでコピペで使えますね
transition-durationを使っていてわかりやすく説明もされているのでかなり重宝します
↓参考記事は下の記事です↓
4. hoverするとtransformでモノクロボタンが変形!Web制作で使える奇抜なハンバーガーメニュー3選
hoverやクリック(タップ)でボタンが幽体離脱したりビリビリ震えるようなアニメーションなので、Web制作などで独創的なデザインを求められた時にそのまま使えるマテリアルデザインです。
↓参考記事は下の記事です↓
5. サイドメニューの幅をラクラク切り替え!Web制作で使える便利なハンバーガーメニュー3選
transformを使っての奇抜なアニメーションに加えて、メニューボタンをクリックすると表示されるサイドバーの幅の比率を変えたハンバーガーメニューです。
↓参考記事は下の記事です↓
6. ハンバーガーメニューの仲間たち!Web制作で使えるおもしろハンバーガーメニュー3選【実装手順】
一般的なハンバーガーメニューアイコンではなく円形の点を使ったり、長さの異なるボーダーを使ったりして少し遊び心のあるデザインとなっています。
↓参考記事は下の記事です↓
7. サイト作成で100%役立つ!Web制作用ハンバーガーメニュー3選【コピペOK】
一般的なハンバーガーメニューアイコンではなく円形の点を使ったり、長さの異なるボーダーを使ったりして少し遊び心のあるデザインとなっています。
↓参考記事は下の記事です↓
8. サイドバーがクルクル回転!Web制作用ハンバーガーメニュー3選【コピペOK】
ハンバーガーメニューをクリックするとサイドバーが回転しながら表示されるCSSアニメーションとなっています。
カスタマイズもしやすいのでありがたいデザインです
↓参考記事は下の記事です↓
9. サイドバーがスーッとスライド!Web制作で重宝するハンバーガーメニュー3選【コピペOK】
スライドにtransform:translateを使用した縦横スライドに加えてrotateの回転もプラスした3種類のマテリアルデザインとなっています。
↓参考記事は下の記事です↓
10. サイドバーがブワーッと拡大!Web制作でそのまま使えるCSSハンバーガーメニュー3選
スライドにtransform:scaleを使用した拡大アニメーションに加えてtranslateのスライドとrotateの回転もプラスした3種類のマテリアルデザインとなっています。
↓参考記事は下の記事です↓
11. サイドバーが吹っ飛んでくる!サイト制作で即行使えるCSSハンバーガーメニュー3選
スライドにtransform:skewを使用した傾斜の効いたアニメーションに加えてtranslateでスライドをプラスした3種類のマテリアルデザインです。
↓参考記事は下の記事です↓
- 投稿日:2020-07-25T19:17:46+09:00
【100%見たことない】完全オリジナル!ハンバーガーメニューのCSSアニメーション33選(解説付き)
コピペだけで作れるハンバーガーメニューのCSSアニメーションを33個ご紹介します。
box-shadow, filter, transform,などをふんだんに使っており、transitionで滑らかな動きが表されています
コードには説明もわかりやすく書いてあるのでかなり参考になります
完全オリジナルでコピペだけで実装できてしまうお手軽なアニメーションとなっています
Webデザイン初心者の方はもちろんですが、バックエンドエンジニアの方にもとても助かる内容になっています
CSSハンバーガーメニュー33選
1. コピペだけでCSSアニメーション!そのまま使えるシンプルなハンバーガーメニュー3選
hoverやクリック(タップ)でデザインに変化が起きるよう作ってあるのでWeb制作やWebアプリケーション等でそのまま使えます。
↓参考記事は下の記事です↓
2. コピペでCSSマテリアルデザイン!Web制作で使えるオシャレなハンバーガーメニュー3選
そのまま使えるハンバーガーメニューのマテリアルデザインとなっています
transition-durationを使っていてわかりやすく説明もされているのでかなり重宝します
↓参考記事は下の記事です↓
3. 動きが面白すぎる!コピペでオシャレなハンバーガーメニュー3選【CSSマテリアルデザイン】
遊び心のあるハンバーガーメニューになっています。
マテリアルデザインなのでコピペで使えますね
transition-durationを使っていてわかりやすく説明もされているのでかなり重宝します
↓参考記事は下の記事です↓
4. hoverするとtransformでモノクロボタンが変形!Web制作で使える奇抜なハンバーガーメニュー3選
hoverやクリック(タップ)でボタンが幽体離脱したりビリビリ震えるようなアニメーションなので、Web制作などで独創的なデザインを求められた時にそのまま使えるマテリアルデザインです。
↓参考記事は下の記事です↓
5. サイドメニューの幅をラクラク切り替え!Web制作で使える便利なハンバーガーメニュー3選
transformを使っての奇抜なアニメーションに加えて、メニューボタンをクリックすると表示されるサイドバーの幅の比率を変えたハンバーガーメニューです。
↓参考記事は下の記事です↓
6. ハンバーガーメニューの仲間たち!Web制作で使えるおもしろハンバーガーメニュー3選【実装手順】
一般的なハンバーガーメニューアイコンではなく円形の点を使ったり、長さの異なるボーダーを使ったりして少し遊び心のあるデザインとなっています。
↓参考記事は下の記事です↓
7. サイト作成で100%役立つ!Web制作用ハンバーガーメニュー3選【コピペOK】
一般的なハンバーガーメニューアイコンではなく円形の点を使ったり、長さの異なるボーダーを使ったりして少し遊び心のあるデザインとなっています。
↓参考記事は下の記事です↓
8. サイドバーがクルクル回転!Web制作用ハンバーガーメニュー3選【コピペOK】
ハンバーガーメニューをクリックするとサイドバーが回転しながら表示されるCSSアニメーションとなっています。
カスタマイズもしやすいのでありがたいデザインです
↓参考記事は下の記事です↓
9. サイドバーがスーッとスライド!Web制作で重宝するハンバーガーメニュー3選【コピペOK】
スライドにtransform:translateを使用した縦横スライドに加えてrotateの回転もプラスした3種類のマテリアルデザインとなっています。
↓参考記事は下の記事です↓
10. サイドバーがブワーッと拡大!Web制作でそのまま使えるCSSハンバーガーメニュー3選
スライドにtransform:scaleを使用した拡大アニメーションに加えてtranslateのスライドとrotateの回転もプラスした3種類のマテリアルデザインとなっています。
↓参考記事は下の記事です↓
11. サイドバーが吹っ飛んでくる!サイト制作で即行使えるCSSハンバーガーメニュー3選
スライドにtransform:skewを使用した傾斜の効いたアニメーションに加えてtranslateでスライドをプラスした3種類のマテリアルデザインです。
↓参考記事は下の記事です↓
- 投稿日:2020-07-25T18:42:31+09:00
eslint, prettier の基本設定
Prologue
eslint
はこれまで誰かが作った設定で開発を行っていたのですが、新しくプロジェクトを作る場合には必須だな、と思い基本的な部分を作成してみました。
最初は自力で一から作っていたのですが、あまりにrules
の設定が膨大すぎるため、何度かやり直しを行なっています。
そのため追加する module や library 等で抜けている部分がありましたらご連絡ください。基本はDocument通りになるため、自身で設定する場合には都度公式を確認することをお勧めします。
環境
- macOS: v10.15.5
- node.js: v12.18.2
- terminal: iTerm
- エディタ: VS Code
- パッケージマネージャ:
yarn
- Composition API:
基本的な設定について
今回はチームで開発する場合等に、
pull
やmerge
ごとに差分が出ないようにすることを目指します。
そのため以下を統一できるようにします。
- インデント
- ダブルクォート / シングルクォート
- 改行
また、Nuxt.js × TypeScript で作成したプロジェクトに置いたため、それ前提で話を進めています。
Prettier
とESLint
の違いPrettier: コードフォーマッター。コードを解析し、独自のルールでリプリントすることにより一貫したスタイルを提供する。
ESLint: 構文チェックができる。参考:
- Nuxt > ESLint と Prettier
- Prettier
- Prettier(GitHub)プロジェクトの作成
yarn create nuxt-app sample
で作成した際にLinting tools
でPrettier
を選択すると、初期の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設定ファイルの作成
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 // 略
module
やprocess
が定義されていないのに使われている、というエラーが出ています。
これは global な変数でエラーではないため、それを.eslintrc.js
に追加します。'globals': { 'module': false 'process': false }global 変数許可後
✖ 16 problems (6 errors, 10 warnings)prettier の設定
devDependencies
にprettier
,eslint-config-prettier
,eslint-plugin-prettier
があるか確認し、なければ install します。
eslint-config-prettier
とeslint-plugin-prettier
の主な機能は以下となります。
eslint-config-prettier
prettier
と競合する可能性のあるルールをOffにするeslint-plugin-prettier
prettier
をeslint
として実行する参考:
- eslint-config-prettier
- eslint-plugin-prettier2. 確認後、以下を
.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'], // 略 },
overwrite する関係で、
extends
にprettier
関連を追記する場合には、eslint
の各記述の後(一番最後) に記載しないとならない、とのことなので、最後に追記します。
参考: https://github.com/prettier/eslint-plugin-prettier#recommended-configurationplugins, rules にもそれぞれ追記します。
参考: https://github.com/prettier/eslint-plugin-prettier#installation
yarn lintfix
コマンドを実行すると、エラーが大量に吐かれます。✖ 290 problems (280 errors, 10 warnings) 274 errors and 0 warnings potentially fixable with the `--fix` option.内容を見ると末尾のセミコロンやインデントが引っかかっているようなので、
.eslintrc.js
のrules
に追記します。
ちなみにこれは、.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 used
やDo not use "// @ts-ignore" because it alters compilation errors
が多いので一つ一つ確認して対応していきます。Epilogue
最初自力で
.eslintrc.js
を作りパラメータを設置し、と作っていましたがトライする前にエラーの連続で混乱したため、もっと楽に...という経緯ではじめました。
時間がある時に構文周りとかも抑えつつ、次はcommit
時にlintfix
が実行される実装を試してみたいと思います。何か不備や不明点等ありましたらご連絡ください!
- 投稿日:2020-07-25T16:53:18+09:00
Sprockets 4 なら ES6書けるよ
概要
Sprockets 4ならES6もつかえるよ。開発環境構築楽ちんだし、さくっとjavascript書きたい & SPAをやらないなら、Sprocketsおすすめ。
利点
docker-composeの構成がすごいシンプルになるので開発環境構築でつまずくことないのが最大の利点。
(web-dev-server、ちょこちょこはまるので苦手)docker-compose.ymlversion: '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
- こんなかんじの画面が表示されます ( Vue公式 プロパティを使用した子コンポーネントへのデータの受け渡し とおなじ )
背景
普段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.rbmodule 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 .es6Vueをインストール
以下のコマンド (docker なら
docker-compose exec web yarn add vue
)を打つ。yarn add vuepackage.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でいいやとも思うので追求しなかった)
- 投稿日:2020-07-25T15:40:48+09:00
【現役フロントエンジニア厳選】Vueで使えるCSSアニメーションまとめ110選!
コピペだけで作れるマテリアルデザインを個ご紹介します。
box-shadow, filter, transform,などをふんだんに使っており、transitionで滑らかな動きが表されています
コードには説明もわかりやすく書いてあるのでかなり参考になります
Webデザイン初心者の方はもちろんですが、バックエンドエンジニアの方にもとても助かる内容になっています
1. シンプルなスライダーマテリアルデザイン3選
そのまま使えるスライダーアニメーションのマテリアルデザインとなっています
transition-durationを使っていてわかりやすく説明もされているのでかなり重宝します
↓参考記事は下の記事です↓
2. filterとopacityを使いこなすスライダーマテリアルデザイン3選
filterとopacityを使ったそのまま使えるスライダーアニメーションのマテリアルデザインとなっています
transition-durationを使っていてわかりやすく説明もされているのでかなり重宝します
↓参考記事は下の記事です↓
3. transformを使用したスライダーアニメーション3選
translateやrotate、box-shadowも適宜使用することで様々な場面(Web制作やWebアプリケーションなど)で利用できるデザインになっています
↓参考記事は下の記事です↓
4. transform:scaleを使用したスライダーアニメーション3選
scaleでスライダー画像やナビゲーションボタンの拡大縮小を行いそれに対してアニメーションを使用しており幅広く使えるものになっています
↓参考記事は下の記事です↓
5. clip path polygonを応用して2枚の画像を半々で表示するアニメーション3選
clip path polygonを応用して2枚の画像を半々(三角形)で表示するCSSアニメーション
それぞれに違った実務で使えるエフェクトがついています
↓参考記事は下の記事です↓
6. hoverするとドロップダウン表示するナビゲーションメニュー3つ
hover(マウスオーバー)するとドロップダウン表示するナビゲーションメニューが3つ紹介されています
それぞれに違ったアニメーションがついていて面白いです
↓参考記事は下の記事です↓
7. 絶対失敗しないナビゲーションメニューサンプル3選
ナビゲーションメニューにいろいろなエフェクトがついていて使い勝手がいいです
カスタマイズもしやすいのでありがたいデザインです
↓参考記事は下の記事です↓
8. 絶対失敗しないヘッダーデザインにコピペで使えるナビゲーションメニュー4選
ヘッダーデザインにコピペで使えるナビゲーションメニュー4選が紹介されていて、そのまま使えるマテリアルデザインなのでかなり重宝します
↓参考記事は下の記事です↓
9. 【まとめ】CSSだけで動きのあるナビゲーションバーデザイン3選
CSSだけで動きのあるナビゲーションバーデザイン3選が紹介されています
かなりシンプルなデザインですがシンプルだからこそ使える場所が多いと思います
↓参考記事は下の記事です↓
10. filterエフェクトを使いこなすhoverアニメーション3選
filterエフェクトを使いそのまま使えるhoverアニメーションのマテリアルデザインとなっています
↓参考記事は下の記事です↓
11. overflow: hiddenを使いこなす美しいCSSアニメーション3選
overflow: hiddenを使いそのまま使えるhoverアニメーションのマテリアルデザインとなっています
美しい画像アニメーションとなっています
↓参考記事は下の記事です↓
12. position:absoluteとfilterを使いこなし鏡みたいに反射するアニメーション3選
position:absoluteとfilterを使いそのまま使えるhoverアニメーションのマテリアルデザインとなっています
鏡みたいに反射する見ているだけで面白いアニメーションです
↓参考記事は下の記事です↓
13. filter: hue-rotateとtransitionを使いこなし色が暴れ出すアニメーション3選
filter: hue-rotateとtransitionを使いそのまま使えるhoverアニメーションのマテリアルデザインとなっています
色が暴れ出すかなり美しいデザインになっています
↓参考記事は下の記事です↓
14. filter:blurとtransitionを使いこなしぼかし画像が動き出すアニメーション3選
filter:blurとtransitionを使いそのまま使えるhoverアニメーションのマテリアルデザインとなっています
↓参考記事は下の記事です↓
15. transitionとfilterを使いこなし美しく変化するCSS画像エフェクト5選
transitionとfilterを使いそのまま使えるhoverアニメーションのマテリアルデザインとなっています
美しく変化するのを見るだけでも面白いです
↓参考記事は下の記事です↓
16. margin-leftとscaleを使いこなすスライドアニメーション16選
margin-leftとscaleを使いそのまま使えるhoverアニメーションのマテリアルデザインとなっています
transform:scaleを使っていてわかりやすく説明もされているのでかなり重宝します
↓参考記事は下の記事です↓
17. hoverとfilter:brightnessを使いこなし明るさ調節するCSS画像エフェクト3選
hoverとfilter:brightnessを使いそのまま使えるhoverアニメーションのマテリアルデザインとなっています
filterを使いこなすためにはまずひとつひとつ丁寧にい理解していきましょう
↓参考記事は下の記事です↓
18. transformを使いこなすボタンアニメーション16選
transformを使ってボタンを変形し、WebサイトやWebアプリケーションで使えるボタンエフェクトとなっています
transformを全種類使っていてわかりやすく説明もされているのでかなり重宝します
↓参考記事は下の記事です↓
19. transitionを使いこなすボタンアニメーション9選
transitionを使ってボタンにアニメーションを効かせおり、WebサイトやWebアプリケーションで使えるボタンエフェクトとなっています
box-shadowやborder-radiusをエフェクトで使用して見た目のデザインもいい感じです
↓参考記事は下の記事です↓
20. transformを使いこなすマテリアルデザイン5選
transformを使ってボタンにアニメーションを効かせおり、WebサイトやWebアプリケーションでそのまま使えるマテリアルデザインとなっています
マテリアルデザインなのでそのまますぐにでもコピペして使用できます
↓参考記事は下の記事です↓
21. filterが網羅できるCSSボタンアニメーション15選
filterを使ってボタンにエフェクトを効かせおり、特にデザインの見た目をカッコよくしたい場合に非常に使えます
filterエフェクトを全種類使っているので永久保存版としても重宝できそうなまとめ記事になっています
勉強にもフロント開発でも役立つと思います
↓参考記事は下の記事です↓
22. scaleでオシャレなCSSボタンアニメーション3選
transform:scaleを使ってボタンにエフェクトを効かせおり、オシャレでかっこいいボタンになっています
ボタンの背景が滑らかにスライドしたり、フワッと出てきたりするのでみているだけで面白いです
↓参考記事は下の記事です↓
23. ボタンでつくる回転アニメーション9選
transitionを使ってボタンが自然に回転します
ボタンが回転するって純粋に興味ありませんか?
回転扉みたいに動くんです
↓参考記事は下の記事です↓
24. filterとtransformで超動くCSSスライダーアニメーション3選【Web制作者必見】
filterプロパティの応用、transform:rotateの回転エフェクトとopacityで変化前後のスタイルを調整し
transitionで滑らかにスライドするアニメーションになります。
↓参考記事は下の記事です↓
25. 【transform×回転『rotate』】CSS画像アニメーション3選
transitionを使って画像が自然に回転します
縦回転・横回転・3D回転で楽しめます
↓参考記事は下の記事です↓
26. transformとtransitionで実現!他にはない完全オリジナルのCSSアニメーション3選
transform:rotateで回転角度とscaleで伸縮率を調整し、
簡単な解説も付いているので手軽にカスタマイズできるようになっています。
↓参考記事は下の記事です↓
- 投稿日:2020-07-25T15:40:48+09:00
【現役フロントエンジニア厳選】Vueで使えるCSSアニメーション総まとめ110選!
コピペだけで作れるマテリアルデザインを個ご紹介します。
box-shadow, filter, transform,などをふんだんに使っており、transitionで滑らかな動きが表されています
コードには説明もわかりやすく書いてあるのでかなり参考になります
Webデザイン初心者の方はもちろんですが、バックエンドエンジニアの方にもとても助かる内容になっています
1. シンプルなスライダーマテリアルデザイン3選
そのまま使えるスライダーアニメーションのマテリアルデザインとなっています
transition-durationを使っていてわかりやすく説明もされているのでかなり重宝します
↓参考記事は下の記事です↓
2. filterとopacityを使いこなすスライダーマテリアルデザイン3選
filterとopacityを使ったそのまま使えるスライダーアニメーションのマテリアルデザインとなっています
transition-durationを使っていてわかりやすく説明もされているのでかなり重宝します
↓参考記事は下の記事です↓
3. transformを使用したスライダーアニメーション3選
translateやrotate、box-shadowも適宜使用することで様々な場面(Web制作やWebアプリケーションなど)で利用できるデザインになっています
↓参考記事は下の記事です↓
4. transform:scaleを使用したスライダーアニメーション3選
scaleでスライダー画像やナビゲーションボタンの拡大縮小を行いそれに対してアニメーションを使用しており幅広く使えるものになっています
↓参考記事は下の記事です↓
5. clip path polygonを応用して2枚の画像を半々で表示するアニメーション3選
clip path polygonを応用して2枚の画像を半々(三角形)で表示するCSSアニメーション
それぞれに違った実務で使えるエフェクトがついています
↓参考記事は下の記事です↓
6. hoverするとドロップダウン表示するナビゲーションメニュー3つ
hover(マウスオーバー)するとドロップダウン表示するナビゲーションメニューが3つ紹介されています
それぞれに違ったアニメーションがついていて面白いです
↓参考記事は下の記事です↓
7. 絶対失敗しないナビゲーションメニューサンプル3選
ナビゲーションメニューにいろいろなエフェクトがついていて使い勝手がいいです
カスタマイズもしやすいのでありがたいデザインです
↓参考記事は下の記事です↓
8. 絶対失敗しないヘッダーデザインにコピペで使えるナビゲーションメニュー4選
ヘッダーデザインにコピペで使えるナビゲーションメニュー4選が紹介されていて、そのまま使えるマテリアルデザインなのでかなり重宝します
↓参考記事は下の記事です↓
9. 【まとめ】CSSだけで動きのあるナビゲーションバーデザイン3選
CSSだけで動きのあるナビゲーションバーデザイン3選が紹介されています
かなりシンプルなデザインですがシンプルだからこそ使える場所が多いと思います
↓参考記事は下の記事です↓
10. filterエフェクトを使いこなすhoverアニメーション3選
filterエフェクトを使いそのまま使えるhoverアニメーションのマテリアルデザインとなっています
↓参考記事は下の記事です↓
11. overflow: hiddenを使いこなす美しいCSSアニメーション3選
overflow: hiddenを使いそのまま使えるhoverアニメーションのマテリアルデザインとなっています
美しい画像アニメーションとなっています
↓参考記事は下の記事です↓
12. position:absoluteとfilterを使いこなし鏡みたいに反射するアニメーション3選
position:absoluteとfilterを使いそのまま使えるhoverアニメーションのマテリアルデザインとなっています
鏡みたいに反射する見ているだけで面白いアニメーションです
↓参考記事は下の記事です↓
13. filter: hue-rotateとtransitionを使いこなし色が暴れ出すアニメーション3選
filter: hue-rotateとtransitionを使いそのまま使えるhoverアニメーションのマテリアルデザインとなっています
色が暴れ出すかなり美しいデザインになっています
↓参考記事は下の記事です↓
14. filter:blurとtransitionを使いこなしぼかし画像が動き出すアニメーション3選
filter:blurとtransitionを使いそのまま使えるhoverアニメーションのマテリアルデザインとなっています
↓参考記事は下の記事です↓
15. transitionとfilterを使いこなし美しく変化するCSS画像エフェクト5選
transitionとfilterを使いそのまま使えるhoverアニメーションのマテリアルデザインとなっています
美しく変化するのを見るだけでも面白いです
↓参考記事は下の記事です↓
16. margin-leftとscaleを使いこなすスライドアニメーション16選
margin-leftとscaleを使いそのまま使えるhoverアニメーションのマテリアルデザインとなっています
transform:scaleを使っていてわかりやすく説明もされているのでかなり重宝します
↓参考記事は下の記事です↓
17. hoverとfilter:brightnessを使いこなし明るさ調節するCSS画像エフェクト3選
hoverとfilter:brightnessを使いそのまま使えるhoverアニメーションのマテリアルデザインとなっています
filterを使いこなすためにはまずひとつひとつ丁寧にい理解していきましょう
↓参考記事は下の記事です↓
18. transformを使いこなすボタンアニメーション16選
transformを使ってボタンを変形し、WebサイトやWebアプリケーションで使えるボタンエフェクトとなっています
transformを全種類使っていてわかりやすく説明もされているのでかなり重宝します
↓参考記事は下の記事です↓
19. transitionを使いこなすボタンアニメーション9選
transitionを使ってボタンにアニメーションを効かせおり、WebサイトやWebアプリケーションで使えるボタンエフェクトとなっています
box-shadowやborder-radiusをエフェクトで使用して見た目のデザインもいい感じです
↓参考記事は下の記事です↓
20. transformを使いこなすマテリアルデザイン5選
transformを使ってボタンにアニメーションを効かせおり、WebサイトやWebアプリケーションでそのまま使えるマテリアルデザインとなっています
マテリアルデザインなのでそのまますぐにでもコピペして使用できます
↓参考記事は下の記事です↓
21. filterが網羅できるCSSボタンアニメーション15選
filterを使ってボタンにエフェクトを効かせおり、特にデザインの見た目をカッコよくしたい場合に非常に使えます
filterエフェクトを全種類使っているので永久保存版としても重宝できそうなまとめ記事になっています
勉強にもフロント開発でも役立つと思います
↓参考記事は下の記事です↓
22. scaleでオシャレなCSSボタンアニメーション3選
transform:scaleを使ってボタンにエフェクトを効かせおり、オシャレでかっこいいボタンになっています
ボタンの背景が滑らかにスライドしたり、フワッと出てきたりするのでみているだけで面白いです
↓参考記事は下の記事です↓
23. ボタンでつくる回転アニメーション9選
transitionを使ってボタンが自然に回転します
ボタンが回転するって純粋に興味ありませんか?
回転扉みたいに動くんです
↓参考記事は下の記事です↓
24. filterとtransformで超動くCSSスライダーアニメーション3選【Web制作者必見】
filterプロパティの応用、transform:rotateの回転エフェクトとopacityで変化前後のスタイルを調整し
transitionで滑らかにスライドするアニメーションになります。
↓参考記事は下の記事です↓
25. 【transform×回転『rotate』】CSS画像アニメーション3選
transitionを使って画像が自然に回転します
縦回転・横回転・3D回転で楽しめます
↓参考記事は下の記事です↓
26. transformとtransitionで実現!他にはない完全オリジナルのCSSアニメーション3選
transform:rotateで回転角度とscaleで伸縮率を調整し、
簡単な解説も付いているので手軽にカスタマイズできるようになっています。
↓参考記事は下の記事です↓
- 投稿日:2020-07-25T15:40:48+09:00
【現役フロントエンジニア完全オリジナル】Vueで使えるCSSアニメーションまとめ110選!(コピペOK)
コピペだけで作れるマテリアルデザインを個ご紹介します。
box-shadow, filter, transform,などをふんだんに使っており、transitionで滑らかな動きが表されています
コードには説明もわかりやすく書いてあるのでかなり参考になります
Webデザイン初心者の方はもちろんですが、バックエンドエンジニアの方にもとても助かる内容になっています
1. シンプルなスライダーマテリアルデザイン3選
そのまま使えるスライダーアニメーションのマテリアルデザインとなっています
transition-durationを使っていてわかりやすく説明もされているのでかなり重宝します
↓参考記事は下の記事です↓
2. filterとopacityを使いこなすスライダーマテリアルデザイン3選
filterとopacityを使ったそのまま使えるスライダーアニメーションのマテリアルデザインとなっています
transition-durationを使っていてわかりやすく説明もされているのでかなり重宝します
↓参考記事は下の記事です↓
3. transformを使用したスライダーアニメーション3選
translateやrotate、box-shadowも適宜使用することで様々な場面(Web制作やWebアプリケーションなど)で利用できるデザインになっています
↓参考記事は下の記事です↓
4. transform:scaleを使用したスライダーアニメーション3選
scaleでスライダー画像やナビゲーションボタンの拡大縮小を行いそれに対してアニメーションを使用しており幅広く使えるものになっています
↓参考記事は下の記事です↓
5. clip path polygonを応用して2枚の画像を半々で表示するアニメーション3選
clip path polygonを応用して2枚の画像を半々(三角形)で表示するCSSアニメーション
それぞれに違った実務で使えるエフェクトがついています
↓参考記事は下の記事です↓
6. hoverするとドロップダウン表示するナビゲーションメニュー3つ
hover(マウスオーバー)するとドロップダウン表示するナビゲーションメニューが3つ紹介されています
それぞれに違ったアニメーションがついていて面白いです
↓参考記事は下の記事です↓
7. 絶対失敗しないナビゲーションメニューサンプル3選
ナビゲーションメニューにいろいろなエフェクトがついていて使い勝手がいいです
カスタマイズもしやすいのでありがたいデザインです
↓参考記事は下の記事です↓
8. 絶対失敗しないヘッダーデザインにコピペで使えるナビゲーションメニュー4選
ヘッダーデザインにコピペで使えるナビゲーションメニュー4選が紹介されていて、そのまま使えるマテリアルデザインなのでかなり重宝します
↓参考記事は下の記事です↓
9. 【まとめ】CSSだけで動きのあるナビゲーションバーデザイン3選
CSSだけで動きのあるナビゲーションバーデザイン3選が紹介されています
かなりシンプルなデザインですがシンプルだからこそ使える場所が多いと思います
↓参考記事は下の記事です↓
10. filterエフェクトを使いこなすhoverアニメーション3選
filterエフェクトを使いそのまま使えるhoverアニメーションのマテリアルデザインとなっています
↓参考記事は下の記事です↓
11. overflow: hiddenを使いこなす美しいCSSアニメーション3選
overflow: hiddenを使いそのまま使えるhoverアニメーションのマテリアルデザインとなっています
美しい画像アニメーションとなっています
↓参考記事は下の記事です↓
12. position:absoluteとfilterを使いこなし鏡みたいに反射するアニメーション3選
position:absoluteとfilterを使いそのまま使えるhoverアニメーションのマテリアルデザインとなっています
鏡みたいに反射する見ているだけで面白いアニメーションです
↓参考記事は下の記事です↓
13. filter: hue-rotateとtransitionを使いこなし色が暴れ出すアニメーション3選
filter: hue-rotateとtransitionを使いそのまま使えるhoverアニメーションのマテリアルデザインとなっています
色が暴れ出すかなり美しいデザインになっています
↓参考記事は下の記事です↓
14. filter:blurとtransitionを使いこなしぼかし画像が動き出すアニメーション3選
filter:blurとtransitionを使いそのまま使えるhoverアニメーションのマテリアルデザインとなっています
↓参考記事は下の記事です↓
15. transitionとfilterを使いこなし美しく変化するCSS画像エフェクト5選
transitionとfilterを使いそのまま使えるhoverアニメーションのマテリアルデザインとなっています
美しく変化するのを見るだけでも面白いです
↓参考記事は下の記事です↓
16. margin-leftとscaleを使いこなすスライドアニメーション16選
margin-leftとscaleを使いそのまま使えるhoverアニメーションのマテリアルデザインとなっています
transform:scaleを使っていてわかりやすく説明もされているのでかなり重宝します
↓参考記事は下の記事です↓
17. hoverとfilter:brightnessを使いこなし明るさ調節するCSS画像エフェクト3選
hoverとfilter:brightnessを使いそのまま使えるhoverアニメーションのマテリアルデザインとなっています
filterを使いこなすためにはまずひとつひとつ丁寧にい理解していきましょう
↓参考記事は下の記事です↓
18. transformを使いこなすボタンアニメーション16選
transformを使ってボタンを変形し、WebサイトやWebアプリケーションで使えるボタンエフェクトとなっています
transformを全種類使っていてわかりやすく説明もされているのでかなり重宝します
↓参考記事は下の記事です↓
19. transitionを使いこなすボタンアニメーション9選
transitionを使ってボタンにアニメーションを効かせおり、WebサイトやWebアプリケーションで使えるボタンエフェクトとなっています
box-shadowやborder-radiusをエフェクトで使用して見た目のデザインもいい感じです
↓参考記事は下の記事です↓
20. transformを使いこなすマテリアルデザイン5選
transformを使ってボタンにアニメーションを効かせおり、WebサイトやWebアプリケーションでそのまま使えるマテリアルデザインとなっています
マテリアルデザインなのでそのまますぐにでもコピペして使用できます
↓参考記事は下の記事です↓
21. filterが網羅できるCSSボタンアニメーション15選
filterを使ってボタンにエフェクトを効かせおり、特にデザインの見た目をカッコよくしたい場合に非常に使えます
filterエフェクトを全種類使っているので永久保存版としても重宝できそうなまとめ記事になっています
勉強にもフロント開発でも役立つと思います
↓参考記事は下の記事です↓
22. scaleでオシャレなCSSボタンアニメーション3選
transform:scaleを使ってボタンにエフェクトを効かせおり、オシャレでかっこいいボタンになっています
ボタンの背景が滑らかにスライドしたり、フワッと出てきたりするのでみているだけで面白いです
↓参考記事は下の記事です↓
23. ボタンでつくる回転アニメーション9選
transitionを使ってボタンが自然に回転します
ボタンが回転するって純粋に興味ありませんか?
回転扉みたいに動くんです
↓参考記事は下の記事です↓
24. filterとtransformで超動くCSSスライダーアニメーション3選【Web制作者必見】
filterプロパティの応用、transform:rotateの回転エフェクトとopacityで変化前後のスタイルを調整し
transitionで滑らかにスライドするアニメーションになります。
↓参考記事は下の記事です↓
25. 【transform×回転『rotate』】CSS画像アニメーション3選
transitionを使って画像が自然に回転します
縦回転・横回転・3D回転で楽しめます
↓参考記事は下の記事です↓
26. transformとtransitionで実現!他にはない完全オリジナルのCSSアニメーション3選
transform:rotateで回転角度とscaleで伸縮率を調整し、
簡単な解説も付いているので手軽にカスタマイズできるようになっています。
↓参考記事は下の記事です↓
- 投稿日:2020-07-25T15:34:10+09:00
【Vue.js】propsのプロパティ名にキャメルケースを使う場合の注意点
propsのプロパティ名
Vue.jsにおいて、propsのプロパティ名にキャメルケースを使う場合に1つだけ注意点があります。それは、HTMLとJavaScriptでは文字の処理方法が異なるということです。
HTMLでは、属性名の大文字と小文字を区別せず、すべての大文字を小文字として認識します。つまり、HTMLのテンプレート内では、キャメルケースのプロパティ名はケバブケースで書く必要があります。具体的には下記のとおりです。
JavaScriptVue.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アカウントはこちら
- 投稿日:2020-07-25T14:34:58+09:00
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 filesVue 3 CLI プラグインを追加
cd try-vue-next vue add vue-nextpackage.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.tsdeclare 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-25T11:21:50+09:00
Vue.Js マウスオーバー(mouseover)で画像をゆっくり表示
VueJs初学者のちょっとした倉庫です。
簡単だけどシンプルだけど使えそうな表現を目指しています。マウスオーバーで画像がゆっくり表示される
←気が向いたらLGTMボタンぽちっとお願いします。
カーソルが要素に重なると拡大され、要素の値を取得します。
ソース
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ぽちっとお願いします。
- 投稿日:2020-07-25T09:57:31+09:00
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
を設定することで、フワッと表示させることができます。
- 投稿日:2020-07-25T08:24:46+09:00
Vue.jsで時計アプリを作ろう(前編:開発環境の構築)
これから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 にアクセスします。
上の画面と同じように表示されればプロジェクトの作成は完了です。
本格的なアプリ開発は後編で行っていきます。
- 投稿日:2020-07-25T02:48:08+09:00
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
から選択することもできます。インストール後、
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
最後に
起動時にエラーが出るなど、不安定ではありますが CLI から Vue 3 のプロジェクトをかんたんに作れるようになりました。
8 月上旬の Vue 3 正式リリースへの期待も高まりますね。
- 投稿日:2020-07-25T00:48:50+09:00
【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
テーブルを作る
とりあえずこんな感じのテーブルを作ります。
コンポーネントについては、公式ドキュメントが参考になります。
<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>データを加工して表示
<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'); } } }おまけ
<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はコンポーネントも豊富で使いやすいのですが、
日本語の記事が少なめなので、もっと記事が増やしていきたいと思います。よろしければ、フォローお願いします。
- 投稿日:2020-07-25T00:14:42+09:00
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.
(コンポーネントが正しく登録されてないよ)とエラーが出る。状況
上のような温泉レビュー掲示板を作成中。
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>コンソールにエラーが出ている。
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);もう一度画面を確認すると、レーダーチャートが表示されました!
最後に
こういった基本的なことすら、まだまだ知らないことばかりです。頑張らねば。