GAミント至上主義

Web Monomaniacal Developer.

Vuetify + Jestで[Vue warn]: Unknown custom elementが出てしまう時

Vue CLIでVuetify、TypeScript、テストランナーにJestを使ったら下記のようなエラーがたくさん出た。

/app # yarn test:unit
yarn run v1.21.1
$ vue-cli-service test:unit
 PASS  tests/unit/example.spec.ts (6.266s)
  MainNavigation.vue
    ✓ mount navigation (55ms)

  console.error node_modules/vue/dist/vue.runtime.common.dev.js:621
    [Vue warn]: Unknown custom element: <v-navigation-drawer> - did you register the component correctly? For recursive components, make sure to provide the "name" option.
    
    found in
    
    ---> <Anonymous>
           <Root>

  console.error node_modules/vue/dist/vue.runtime.common.dev.js:621
    [Vue warn]: Unknown custom element: <v-list-item> - did you register the component correctly? For recursive components, make sure to provide the "name" option.
    
    found in

Warnなのでテスト自体はPASSするけど気持ち悪いので直したい。
もちろん、yarn serveした場合は上記のエラーもなく、ページを正常に表示できている。


そういえば、下記のような記述を見たのでこれかと思った。

vue-jest は現在、カスタムブロックのサポートやスタイルのロードなど、vue-loader のすべての機能をサポートしていません。さらに、コード分割などの Webpack 固有の機能はサポートされていません。サポートされていない機能を使用するには、 Jest の代わりに Mocha をテストランナーとして使用します。

vue-test-utils.vuejs.org

Mochaを使えというけど、Jestの方が流行ってるっぽいから使いたい。

setup.jsの作成

検索したらVuetifyの公式ドキュメントが見つかった。

Unit testing — Vuetify.js

これ通り、Vue CLIでできたtests/unit/配下にsetup.jsを設置した

// tests/unit/setup.js

import Vue from 'vue'
import Vuetify from 'vuetify'

Vue.use(Vuetify)

もちろんこのままでは読み込まれない。

Jestの設定

上記のファイルをどうやってJestで読み込ませるか調べるとsetupFilesというまんまなオプションが見つかった。

Configuring Jest · Jest

これをVue CLIでインストール時にできたjest.config.jsに追加する。

// jest.config.js
module.exports = {
  preset: '@vue/cli-plugin-unit-jest/presets/typescript-and-babel',
  setupFiles: ['./tests/unit/setup.js']
}

無事成功した。

# yarn test:unit
yarn run v1.21.1
$ vue-cli-service test:unit
 PASS  tests/unit/example.spec.ts (5.879s)
  MainNavigation.vue
    ✓ mount navigation (45ms)

Test Suites: 1 passed, 1 total
Tests:       1 passed, 1 total
Snapshots:   0 total
Time:        12.386s
Ran all test suites.
Done in 45.24s.

setupFilesのパスは相対パスじゃないとだめ?

パスは'tests/unit/setup.js'にしてしまうとモジュールを探してしまうようで、エラーになるので相対パスにした。

$ vue-cli-service test:unit
● Validation Error:

  Module tests/unit/setup.js in the setupFiles option was not found.
         <rootDir> is: /app

  Configuration Documentation:
  https://jestjs.io/docs/configuration.html


実践TypeScript ~	BFFとNext.js&Nuxt.jsの型定義~

実践TypeScript ~ BFFとNext.js&Nuxt.jsの型定義~

プログラミングTypeScript ―スケールするJavaScriptアプリケーション開発

プログラミングTypeScript ―スケールするJavaScriptアプリケーション開発

Docker Desktop For Macでディスクいっぱい系のエラー

Vagrantでやっていた開発環境構築をDocker化するにあたり、MySQLのダンプデータのインポート中やビルドコマンド実行時にディスクいっぱい系のエラーにぶつかりました。

www.docker.com

Docker Desktop for Macを使っています。

MySQLのときはインポート中に、

ERROR 1114 (HY000) at line 31537: The table 'table_name' is full

で止まる。

コンテナに入ってbashでコマンド叩いたりしてると

no space left on device

が出てmkdirすらできない状況になりました。

Mac自体のディスクには空きがあるのになんで!?と思ったら、Dockerが直接Macのディスクを使うわけではなく、Diskイメージというものを使っているそうでこれの理解が必要でした。

確認したら割当が64GBになっており、63GB以上使ってました。

DBのダンプが80GB あったんですが、通常のVolumeを使うとおそらくこのDiskイメージに書き込まれ容量不足になってました。ホストのディレクトリをマウントすると成功するのはそういう理屈かな。

ローカル環境の docker を断捨離するためにやること - Qiita

Docker for Mac仮想マシン(HyperKit)で動いているしょせん偽物ということは意識しておいた方がよさそう。


Docker/Kubernetes 実践コンテナ開発入門

Docker/Kubernetes 実践コンテナ開発入門

Docker実践ガイド 第2版 impress top gearシリーズ

Docker実践ガイド 第2版 impress top gearシリーズ

DMM.comを退職してシニアジョブに転職しました

2020/1/14から株式会社シニアジョブに入社しました。ちょっと時間がたったけど転職エントリ。

DMM.comをやめた理由

同人事業部にいました。盲腸での入院を除くと賞味9ヶ月。
給料、福利厚生、人間関係とか職場環境には問題なく、キャリアプラン的な問題です。いや六本木一丁目への通勤はちょっと嫌だった・・・。
システム全体的にいい設計したいなぁとか、フルクラウドで仕事したいなぁとか、自分より優秀な人いっぱいいるからいなくていいじゃんとか。
DMMのビジネスの仕方とか強みとかを中から知ることができたり、優秀な人のコードレビュー、別業界から来た人の話とか聞けて楽しかったです。
詳しくはなんかいろいろ契約書書いたし面倒なので書かない。

シニアジョブに決めた理由

一言でいうと面白そう。

自社システムが超重要

名前の通り50歳以上の高齢者専門の人材会社なんですが、独自のWEBシステムによる速さ、効率を強みにしています。人材会社は差別化難しい。
正社員の開発者は自分を入れて2人しかいません。そんな状況でいろいろいじくれるとなると面白そう。

社長や社員がみんな若い

私はもう30半ばで若くないんですが、私の精神年齢的な問題か若い人と仕事するの楽しいし、これまで経営者が若くないことによる(というか変化についていけないことによる)問題を感じてたので、若い人の経営って面白そうと思ってました。
社長は1991年生まれで学生時代に起業、営業もほとんどが20代です。
corp.senior-job.co.jp

知り合いの知り合いだったので話が早かった

社長がビズオーシャン時代いっしょだった営業の方の中学の同級生という縁がありました。その営業の方は違う部署でいっしょには仕事はしてないけど面白い方でした。

入って1週間でやったこと

初日はMacBook Proの初期化からはじめました。会社はWindowsLinuxの開発サーバーだったり、家はChromeBookGCP上なので、Macで開発するの初めて。
次は開発環境がVagrantだったんですが、今更覚えたくないし、社内でもDockerがいいよねってことでやりました。2日目にはだいたい動いたけど、細かい設定変更や、DBが肥大化しているなどの問題で1週間かかった・・・。
あとはそのDocker化した環境で簡単なHTML追加してデプロイしたり。

1週間働いてみて

基本、毎朝やることを確認する開発チームと社長の朝会ぐらいしかないので、ほぼ一日中開発に集中できてます。集中しすぎて肩と背中がこりまくる。
事情があればリモート可ですが、まだリモートはやってません。リモート用の開発環境も整備して使っていきたいです。

周辺環境

オフィスはコレアンタウンで有名なJR新大久保駅と地下鉄の東新宿駅の間にあります。ほとんどIT系のオフィスがない場所ですが、年金事務所とかよく使う役所が近くにあっていろいろ便利だそうです。
帰る時間は遊びに来たカップルとか、女子高生などの流れに逆流する必要があるのでちょっと歩きづらい。
オフィス周辺は、1分もかからずセブンイレブン、カクヤス、ハナマサ、キャンドゥに行けるので買い物には困りません。ちょっと歩けばマツキヨとかもある。

ランチ

体を動かす目的も含めてお昼は外で食べる派なので重要です。
お店の大半が韓国系、東南アジア系なので、毎日だとすぐ飽きてしまうし、観光地価格的でそんな安くはないので、みんなそれ以外を探して食べている感じ。
牛丼チェーン、ラーメンの福しんなどは近くにあるので安く済ませたいときも困りません。600円以下と、1000円程度を交互に食べて食費バランス取っていきたい。

これからやること

前述した通りシステムがコアとなってる会社なので、ビジネス、プログラム、サーバー含めて全体最適化やっていきます。今やらないと大変なことになりそう。
いわゆるレガシーコード、負債がある状況なので大元から良い設計で作り直して、開発スピードを上げていきたい。
SEOも課題が多いのでできるとこはやっていきたい(はてなのAI川さんに来てほしい)
ユーザー(社内の営業・営業事務の方々)がすぐそこにいるのでフィードバックには非常に恵まれた環境なので改善には困らなさそう。

具体的には開発環境Docker化したけど、本番までコンテナ化しないと本当のメリットは出せないのでそれを進めていきたい。
あと管理画面の各種詳細ページが1ファイル4000行超えのjQueryで書かれており実質メンテナンス不可能なため、これをVue.js。こいつのせいで画面の簡単な修正すらできない。ついでにいろいろ整理したい。

最後に

お知り合いの方へ:飲みに行きましょう(酒飲めないのでお茶とコーラ飲む)。誘ってください。