jackmiwamiwa devblog

フロントエンドをメインに行ったことをまとめていくサイトになります。

codepenスニペットメモ

codepenで自分がいいと思ったものを貼り付ける

主に参考にしているサイト

photoshopvip.net

photoshopvip.net

cssのみですりガラス

See the Pen CSS - Frosted Glass by Kyle Wetton (@kylewetton) on CodePen.

ページトップボタンでどのくらいスクロールしたかわかる

See the Pen Back to top with progress indicator by Ivan Grozdic (@ig_design) on CodePen.

マウスカーソルでどのくらいスクロールしたかわかる

See the Pen Cursor with progress indicator by Ivan Grozdic (@ig_design) on CodePen.

variableフォントを使った演出

See the Pen Variable font animation by Michelle Barker (@michellebarker) on CodePen.

インタラクティブな表現

See the Pen Perlin Noise by Victor Vergara (@vcomics) on CodePen.

Appleのサイトのようなスクロールアクション

See the Pen  Apple Watch Scroll Border | @keyframers 1.20.0 by @keyframers (@keyframers) on CodePen.

stylelint,prettierを使ってscssのコード品質を保つ

scssのみでjsについての変更・設定はなし

stylelint, prettierのインストール

$ yarn add stylelint stylelint-config-standard stylelint-scss prettier prettier-stylelint stylelint-config-prettier

参考

prettierの設定・stylelintの設定

.prettier

{
  "printWidth":120,
  "tabWidth":2,
  "useTabs":false,
  "singleQuote":true,
  "proseWrap":"preserve"
}

参考

.stylelintrc.json

{
    "plugins":[
        "stylelint-scss",
 ],
    "rules":{
        "indentation":2,
        "declaration-block-no-shorthand-property-overrides":true,
        "declaration-colon-newline-after":null,
        "at-rule-no-unknown":[true,{
            "ignoreAtRules":["function","if","for","each","include","mixin","content"]
        }],
 },
    "extends":[
        "stylelint-config-standard",
        "stylelint-config-prettier"
    ]
}

参考

package.json(npm script)

app/frontend/stylesheets/ よりも下にscssファイルを入れている場合。

{
    "scripts":{
        "lint:stylesheet":"stylelint --fix app/frontend/stylesheets/**/*.scss",
        "format:stylesheet":"prettier-stylelint --quiet --write app/frontend/stylesheets/**/*.scss"
    },
}

ルールについての一部

要素の並び替えを行う

stylelint-order - npm をインストールする

$ yarn add stylelint-order

参考

.stylelintrc.json に設定を記載する

記載後の状態

{
    "plugins":[
        "stylelint-scss",
        "stylelint-order"
    ],
    "rules":{
        "indentation":2,
        "declaration-block-no-shorthand-property-overrides":true,
        "declaration-colon-newline-after":null,
        "at-rule-no-unknown":[true,{
            "ignoreAtRules":["function","if","for","each","include","mixin","content"]
        }],
        "order/order":[
            "less-mixins",
            "dollar-variables",
            "custom-properties",
            "declarations",
            "rules"
        ]
    },
    "extends":[
        "stylelint-config-standard",
        "stylelint-config-prettier"
    ]
}

参考

commit時に自動的に反映されるようにする

パッケージをインストール

husky - npmlint-staged - npm のインストールを行う

$ yarn add husky lint-staged

参考

package.jsonに記載

{
    "scripts":{
        "precommit":"lint-staged",
 },
    "lint-staged":{
        "*.scss":[
            "yarn format:stylesheet && yarn lint:stylesheet",
            "git add"
        ]
    },
}

参考

xdのプラグインメモ

要素のcssを取得したい

プラグイン「Copy CSS」を使う。

ここからインストール

Copy CSS と入力するとでてくる

cssを取得する

書き出されるコード(一例)

width: 360px;
height: 70px;
border-radius: 4px;
background: linear-gradient(#48b047 0%, #45d943 99.56%, #45d943 100%);
border: 1px solid #399b38;

参考 : https://yukinishimura.net/adobe-xd-coding/

html形式で出力したい

プラグイン「Web Export」を使う。

選択画面 スクリーンショット 2019-06-07 14.44.11.png (99.4 kB)

選択するとこんな感じの画面が出てくる スクリーンショット 2019-06-07 14.44.52.png (64.4 kB)

もろもろ設定すると書き出しが行われる

注意

適当に選択すると余計なものも出てくる。

多角形の図形を作る

http://romantist.jp/blog/xd-pulgin-polygon/

三角形などの多角面の図形を簡単に作ってくれるプラグイン。 図形を選んで cmd + c

<svg xmlns="http://www.w3.org/2000/svg" width="32.209" height="58.962" viewBox="0 0 32.209 58.962">
  <path id="パス_128" data-name="パス 128" d="M2.209-22.481-30,7V-51.962Z" transform="translate(30 51.962)"/>
</svg>

のような感じでsvgの書き出しを行ってくれる。

対象のもの

スクリーンショット 2019-09-03 17.01.24.png (5.9 kB)

サイトで使われている色などを取得する

「Mimic」のプラグインを使えば現在のサイトで使われている色などを取得することができる。

https://www.google.com/ と入力すると

スクリーンショット 2019-09-03 17.06.22.png (61.2 kB)

のような感じで出力を行ってくれる。

photoshop バッチ処理・レイヤーからテキストのコピースクリプトのメモ

バッチ処理

一括でpngやjpgを変更できるように

やり方

1. 「ウィンドウ → アクション」を選択

スクリーンショット 2019-09-03 14.23.44.png (87.1 kB)

アクションパネルが出る

スクリーンショット 2019-09-03 14.23.50.png (14.3 kB)

アクションの使い方については省略。

2. 画像を開いて、画像を保存する

開くファイルは適当。

画像の保存について 「書き出し → web用に保存」を選択(画像の例はjpgの場合)

スクリーンショット 2019-09-03 14.29.48.png (14.6 kB)

3. 「自動処理 → ドロップレット」を選択

スクリーンショット 2019-09-03 14.39.59.png (216.3 kB)

デスクトップに書き出したものが出ればいいと思ったので、デスクトップで設定。

スクリーンショット 2019-09-03 14.37.53.png (113.2 kB)

設定が完了するとデスクトップに以下のようなアイコンが表示される

スクリーンショット 2019-09-03 14.41.17.png (30.8 kB)

変換の様子

(変換に10秒くらいかかる・・・?)

参考

レイヤーからテキストをコピーできるスクリプト

https://www.soramane.com/sorairo/design/20181031-active-text-copy/

/Applications/Adobe Photoshop CC 2019/Presets/ScriptsactiveTextCopy.jsx を作成(activeTextCopy.jsx の部分の名前はなんでも良い)

sudo権限でないと多分編集できない。

var activelay = app.activeDocument.activeLayer;
function copyTextToClipboard(text){
    const keyTextData = app.charIDToTypeID('TxtD');
    const keyTextToClipboardStr = app.stringIDToTypeID( "textToClipboard" );
    var textStrDesc = new ActionDescriptor();
    textStrDesc.putString( keyTextData, text );
    executeAction( keyTextToClipboardStr, textStrDesc, DialogModes.NO );
}

if( activelay.kind == LayerKind.TEXT ) {
    var selectContents = activelay.textItem.contents;
    copyTextToClipboard(selectContents);
} else {
    alert('選択したレイヤーはテキストレイヤーではないようです');
}

以下から使うことができる

スクリーンショット 2019-09-03 15.20.28.png (292.8 kB)

メモ(キーボードショートカットの設定方法)

「編集 → キーボードショートカット」へ行く

スクリーンショット 2019-09-03 15.21.17.png (205.3 kB)

以下のようなウィンドウが出てきたら該当箇所を探してショートカットを登録する。(上のメニューと同じ並びなので、探す場合、それを参考)

スクリーンショット 2019-09-03 15.22.42.png (103.9 kB)

vueらしい書き方でstorybookを使う

vueのプロジェクトでstorybokを入れようとしたときにvueらしい書き方で行いたいと思ったのでその時のメモ

環境

webpackerは今回関係ないですが、念のため

実行まで

今回参照するvueファイル

<template lang="pug">
  div
    p 
      | {{ message }}
</template>

<script lang="ts">
import { Component, Vue } from 'vue-property-decorator'

@Component
export default class HelloVue extends Vue {
  message : string = 'Hello Vue!'
}
</script>

<style lang="scss" scoped>
p {
  font-size: 2em;
  text-align: center;
  color: #0ff;
  span {
    font-size: 3rem;
  }
}
</style>

手順

1. .storybook/config.js の編集

今回は /app/frontend/components の中を参照する。

f:id:jackswim3411:20190728225353p:plain

変更前

const req = require.context('../stories', true, /\.stories\.js$/);

変更後

const req = require.context('../app/frontend/components/', true, /\.stories\.(vue|js)$/);

2. index.stories.vueを作成

これでディレクトリ中の storis.vue が読み込まれるようになったので、以下のファイルで作成する。
※現状このまま入れるだけでは動かないです。次のステップで動くようになります。

<template lang="pug">
  test
</template>

<script lang="ts">
import { Component, Vue } from "vue-property-decorator"
import { storiesOf } from '@storybook/vue'

import Test from './index.vue'

@Component({
  components: {
    Test
  },
})
export default class testStory extends Vue{}

storiesOf('Welcome', module)
  .add('to Storybook', () => testStory)
</script>

3. storybookのほうで pugtypescript の読み込みを行われるようにする

現状storybookのほうで pugtypescript が読み込まれないと思うので、 ./storybook/webpack.config.js を作成する

  • webpack.config.js
const path = require('path')
const rootPath = path.resolve(__dirname, '../')

module.exports = ({ config }) => {
  config.resolve.alias['vue'] = 'vue/dist/vue.esm.js'
  config.module.rules.push(
    {
      test: /\.ts$/,
      use: [
        {
          loader: 'ts-loader',
          options: {
            appendTsSuffixTo: [/\.vue$/],
            transpileOnly: true
          }
        },
      ]
    },
    {
      test: /\.scss$/,
      loaders: ['style-loader', 'css-loader', 'sass-loader']
    },
    {
      test: /\.pug$/,
      loaders: 'pug-plain-loader',
    }
  )
  return config
}

これで既存のvueらしい書き方でstorybookも書くことができると思います。

Rails + vueの環境にstorybookを導入する

Railsそんな関係ない気がするけどバージョンもろもろ上げたらエラーでたので、storybook入れたときのwebpakerの編集した箇所も記載。

とりあえずstorybook入れる

$ yarn add @storybook/cli
$ npx getstorybook
$ yarn run storybook

ここまでやったら

  • .storybook
  • stories

の2つのディレクトリが作成され、いろいろ追加される。

エラーの対応

vue-loader-14.2.2 から vue-loader-15.7.0に変更

@rails/webpacker-3.5 から @rails/webpacker-4.0.7 に変更(多分関係ないかも。)

参考 : https://ja.stackoverflow.com/questions/47775/storybook-for-vue%E3%81%A7-failed-to-mount-component-template-or-render-function-not-de

{
  "presets": [
    ["env", {
      "modules": false,
      "targets": {
        "browsers": "> 1%",
        "uglify": true
      },
      "useBuiltIns": true
    }]
  ],

  "plugins": [
    "syntax-dynamic-import",
    "transform-object-rest-spread",
    ["transform-class-properties", { "spec": true }]
  ]
}

から

{
  "presets": [
    ["@babel/preset-env", {
      "modules": false,
      "targets": {
        "browsers": "> 1%",
        "uglify": true
      },
      "useBuiltIns": true
    }]
  ],

  "plugins": [
    "@babel/plugin-syntax-dynamic-import",
    "@babel/plugin-proposal-object-rest-spread",
    ["@babel/plugin-proposal-class-properties", { "spec": true }]
  ]
}

に変更

インストールしたもの

$ yarn add @babel/preset-env @babel/plugin-syntax-dynamic-import @babel/plugin-proposal-object-rest-spread @babel/plugin-proposal-class-properties

既存のvueも反応するように

vue-loader-14.2.2 から vue-loader-15.7.0に変更することによって少しエラーがでたので、

参考 : https://github.com/rails/webpacker/issues/2162

既存のVueファイル

<template lang="pug">
  div
    p 
      | {{ message }}
</template>

<script lang="ts">
import { Component, Vue } from 'vue-property-decorator'

@Component
export default class HelloVue extends Vue {
  message : string = 'Hello Vue!'
}
</script>

<style lang="scss" scoped>
p {
  font-size: 2em;
  text-align: center;
  color: #0ff;
}
</style>
const { environment } = require('@rails/webpacker')
const typescript =  require('./loaders/typescript')
const vue =  require('./loaders/vue')
const pug = require('./loaders/pug')

environment.loaders.append('typescript', typescript)
environment.loaders.append('vue', vue)
environment.loaders.prepend('pug', pug)
module.exports = environment

から

const { environment } = require('@rails/webpacker')
const typescript =  require('./loaders/typescript')
const { VueLoaderPlugin } = require('vue-loader')
const vue =  require('./loaders/vue')
const pug = require('./loaders/pug')
const cssLoader = environment.loaders.get('css')

environment.loaders.append('typescript', typescript)
environment.plugins.prepend('VueLoaderPlugin', new VueLoaderPlugin())
environment.loaders.prepend('vue', vue)
environment.loaders.prepend('pug', pug)
cssLoader.use=[
  {'loader':'vue-style-loader'}, 
  {'loader': 'css-loader'},
  {'loader': 'sass-loader'}
];
module.exports = environment

に変更。

これで

$ ./bin/webpack-dev-server
$ yarn storybook

を起動させてもエラーが出なくなる!

Nuxt.js 初期設定 v2

Nuxt.js のv2でも色々と設定を行ったので、その時に行ったこととしてメモ。(随時追記予定)

今回変更を行ったgithubのコード

ここ違うよなどありましたらPRいただけると嬉しいです。 更新速度は遅いですが、随時いろいろと更新できるようにしていきたいと思っています。

github.com

nuxtの初期設定

公式のNuxt.js -インストール-を参照

$ npx create-nuxt-app sample-nuxt
  1. プロジェクトの名前を決める(今回の場合 「sample-nuxt」)

f:id:jackswim3411:20190627020058p:plain

  1. パッケージの選択

「プロジェクトの説明文」、「作った人の名前」については省略。

yarnnpmのどりらかを選択(今回はyarn

f:id:jackswim3411:20190627020303p:plain

  1. cssフレームワークの選択

以下のものをデフォルトで選択することができる。 今回はNoneを選択。

f:id:jackswim3411:20190627020503p:plain

  1. サーバーサイドのフレームワークを選択

以下のものをデフォルトで選択することができる。 今回はNoneを選択。

f:id:jackswim3411:20190627020704p:plain

  1. axios, pwaを使用するか

今回の場合はどちらもチェック

f:id:jackswim3411:20190627020821p:plain

  1. lint, pretterを使用するか

今回の場合はどちらもチェック

f:id:jackswim3411:20190627020903p:plain

  1. テストのフレームワークを追加するか

今回は「Jest」を選択

f:id:jackswim3411:20190627021007p:plain

  1. SSRかSPAのどちらで使用するか

今回はSSRを選択

f:id:jackswim3411:20190627021042p:plain

以上のものを選択するとインストールされるので、少し待つ。

インストールが完了すると以下の画面のようなものが表示されるので、

f:id:jackswim3411:20190627021206p:plain

今回の場合、cd sample-nuxt , yarn dev のコマンドを打って http://localhost:3000/へアクセスすると

f:id:jackswim3411:20190627021518p:plain

の画面が表示されたらインストール完了。