そういう、モデルなんです。

ビジネスモデル、3Dモデル、設計図、模型などの現状と動向を考察、関連書籍の紹介

アレクサスキル Alexa Skill 向けローカル開発環境

アレクサ開発者コンソール Alexa Developer Console 上で直接、Lambda 関数(node.js 実装)を編集するというスタイルで開発していたが、障害の発生時に切り分けが難しいので、一部をローカル開発環境構築することとした。

ちょうど

Amazon Alexaプログラミング入門 (impress top gear)

Amazon Alexaプログラミング入門 (impress top gear)

 

に手順の記載があったので、参考にしてローカル開発環境構築。

node.js のプロジェクトを1つ作成

Node.js command prompt より、対話形式でプロジェクト作成。

npm init

This utility will walk you through creating a package.json file.
It only covers the most common items, and tries to guess sensible defaults.

( 20行くらい中略)
Is this OK? (yes)

package.json というファイルが1つだけできた。

dir

ドライブ E のボリューム ラベルは データ です
ボリューム シリアル番号は 1A04-81C2 です

e:\Users\tombi\Projects\diceroller のディレクト

2019/04/14 07:26 <DIR> .
2019/04/14 07:26 <DIR> ..
2019/04/14 07:26 219 package.json
1 個のファイル 219 バイト
2 個のディレクトリ 3,969,808,773,120 バイトの空き領域

出来たファイルは package.json だけ。これだけかい。

全く問題なし

node.js のテストプログラムで動作確認

index.js に console.log ('Hello World'); だけ書いて、

node index.js

Hello World

全く問題なし

node.js 環境にAlexa Skills Kit SDK を追加 

上記の書籍よりも新しい SDK があるかもしれないので、念のため 何を開発できるか知る | Alexa Skills Kit | アレクサ のサイトでチェック。

コードサンプルとNode.js SDK

のリンク先へたどっていくと、GitHub に着いた。

github.com

 がそれらしい。でも、何をどうやって npm で取得すればいいのか分からん。

README.ja.md

という、いかにも日本人向けの README を見つけたので開くと Package と NPM の対応関係が表になっており、上記書籍と同じく ask-sdk で問題ないらしいと分かった。

Eドライブに作っていたプロジェクトに追加しようとしたら、

npm install --save ask-sdk

npm ERR! code UNKNOWN、npm ERR! errno -4094、npm ERR! syscall fsync

のようなエラーが出て、ドはまりした。 

fsync?OSレベルのエラー?

本題と関係ないが、その後の顛末は:

tombi-aburage.hatenablog.jp

Dドライブにプロジェクトを複写して再試行したら何故かうまくいった。

npm install ask-sdk

npm notice created a lockfile as package-lock.json. You should commit this file.
npm WARN diceroller@1.0.0 No description
npm WARN diceroller@1.0.0 No repository field.

+ ask-sdk@2.5.1
added 19 packages from 69 contributors and audited 22 packages in 3.509s
found 0 vulnerabilities

 

Lambdaをローカルで実行するツール lambda-local を導入

とりあえず Alexa Skill Kit SDK までは進んだので、

Amazon Alexaプログラミング入門 (impress top gear)

Amazon Alexaプログラミング入門 (impress top gear)

 

 を参照しつつ、次の作業へ。

npm install -g lambda-local

C:\Users\tombi\AppData\Roaming\npm\lambda-local -> C:\Users\tombi\AppData\Roaming\npm\node_modules\lambda-local\bin\lambda-local
+ lambda-local@1.5.2
added 31 packages from 83 contributors in 4.522

全く問題なし

いよいよ index.js を本物(Alexa スキルの主処理)に差し替える

ここから先は、単なる自作のアプリケーション開発なので、もう上記の書籍は当てにできない世界となる。

数日前に、アレクサ開発者コンソール Alexa Developer Console 上で作成した自分のプログラム(複数個のサイコロを振らせるというスキル)

サイコロ係

サイコロ係

 

f:id:tombi-aburage:20190418112157p:plain

ソースコードの中身を、node.js のローカル環境構築のさいにテストプログラム代わりにしていた index.js に上書きコピーした。

本当はファイルをダウンロードしたかったのだが、Alexa Developer Console のファイルをダウンロードする方法が分からなかったので、仕方なくコピー&ペースト…

方法はダサいが、ともかくも index.js はローカル開発環境に移行された。
サーバ環境(アレクサ開発者コンソール )で実際に動作確認が取れているコードなので、これをローカル開発環境でも動かせるようにするのが今からの作業ということ。

テストデータは Alexa Developer Console のスキルI/Oを元に作成

ローカル開発環境でテストをするためには、その入力となるデータの準備が必要なのだが、手作業で作るのは面倒なので、実際に動作しているサーバ側のスキルサービスの出力をパクることにした。

スキルI/Oをオンにして、テストを実行。表示されたJSON入力の内容をコピーして、ローカル開発環境の test サブフォルダ配下に LaunchRequest.JSON という名前で保存した。

f:id:tombi-aburage:20190414181304p:plain

lambda-local で index.js を実行する

lambda-local -l index.js -h handler -e test\LaunchRequest.json 

D:\Users\tombi\Projects\diceroller>
info: START RequestId: 7711489c-0c23-b7ef-89dc-d3fc5d2ae50a
info: End - Message
info: ------
(中略、ここに応答内容が表示される)

info: ------
info: Lambda successfully executed in 69ms.

スキルの起動要求 LaunchRequest に成功したようだ。

全く問題なし

起動要求のテストができただけでは、大して嬉しくもない。

同じように、一番テストを行いたい主処理のインテントについても、同じ手口で Alexa Developer Console に JSON 入力ファイルを作成させ、ローカル開発環境の test サブフォルダ配下に RollDiceIntent.json という名前で保存した。

lambda-local -l index.js -h handler -e test\RollDiceIntent.JSON 

info: START RequestId: f7c5ae17-873e-f05a-2b02-4c6ebafdaa40
D:\Users\tombi\Projects\diceroller\test\RollDiceIntent.JSON:2
"version": "1.0",
^

SyntaxError: Unexpected token :

(中略、ここに激しいスタックトレースのダンプ)

error: End - Error
error: ------
error: {
"errorMessage": "Unexpected token :",
"errorType": "SyntaxError",
"stackTrace": [
"rsion\": \"1.0\",",
"",
"",
"taxError: Unexpected token :",
"new Script (vm.js:80:7)",
"createScript (vm.js:274:10)",
"Object.runInThisContext (vm.js:326:10)",
"Module._compile (internal/modules/cjs/loader.js:664:28)",
"Object.Module._extensions..js (internal/modules/cjs/loader.js:712:10)",
"Module.load (internal/modules/cjs/loader.js:600:32)",
"tryModuleLoad (internal/modules/cjs/loader.js:539:12)",
"Function.Module._load (internal/modules/cjs/loader.js:531:3)",
"Module.require (internal/modules/cjs/loader.js:637:17)",
"require (internal/modules/cjs/helpers.js:22:18)"
]
}
error: ------
error: Lambda failed in 63ms.

あれ?何故失敗するんだ?

結論としては、JSON入力ファイル名の拡張子を誤って大文字(.JSON)で指定していたことが原因だった。Windows の分際で大文字・小文字を区別するとは生意気な!

こんなに激しく責めなくてもいいだろ!
しかもスタックトレース、全然ヒントになってないし!

拡張子を小文字で指定し直して実行すると、うまくいった。

lambda-local -l index.js -h handler -e test\RollDiceIntent.json 

info: START RequestId: ccef6fd6-7858-5c52-eb0a-ad5f668df2d5
info: End - Message
info: ------
info: {
(中略、ここに応答内容の前半が表示される)
"ssml": "<speak>6面体を3個振ります。1,<break time=\"0.5s\"/>5,<break time=\"0.5s\"/>1が出ました 。合計は7です。</speak>"
(中略、ここに応答内容が後半が表示される)

info: ------
info: Lambda successfully executed in 51ms.

おお!全く問題なし

引き続き Visual Studio Codeデバッグするための設定

Amazon Alexaプログラミング入門 (impress top gear)

Amazon Alexaプログラミング入門 (impress top gear)

 

 を参照しつつ、やろうとしたが、Launch.json が何のためのものなのか知らないし、作り方も知らなかった(打ち込むのも面倒なので嫌)のでネットで調査した。

www.atmarkit.co.jp

なるほど、VS Codeデバッグ画面からひな形を作成できるのか・・・

ここまでのところ npm のプロジェクトまでは作ってあったが、Visual Studio Code (VS Code) のプロジェクト(ワークスペース)は作っていなかったので、まずこれを作った。

作ったといっても npm のフォルダを丸ごと、VS Code ワークスペースに追加しただけのことだが。

その後、デバッグ画面で歯車アイコンをポチったらファイルが作成された。

起動するプログラム program と引数 args を、先ほど Node.js command prompt で実行した lambda-local のコマンドと全く同じ意味になるように変更した。

まずはデバッガを起動せず、たんに実行してみる。

実は VS Code は初めて使うので、ブレークポイントの指定の仕方どころか、プログラムの実行のさせ方すらも知らない。

とりあえず

  • デバッグせずに開始 [ Debug ] - [ Start Without Debugging ]

を実行したら、デバッグコンソール DEBUG CONSOLE で

C:\Program Files\nodejs\node.exe C:\Users\tombi\AppData\Roaming\npm\node_modules\lambda-local\bin\lambda-local -l index.js -h handler -e test/RollDiceIntent.json

が実行されて、出力結果も期待どおりに出力された。

f:id:tombi-aburage:20190414202232p:plain

通常の実行は、問題なし

デバッグ開始 Start Debugging して実行してみる。

今回もブレークポイントは指定せずに、

を実行したら、デバッグコンソール DEBUG CONSOLE に

Waiting for the debugger to disconnet...

と表示され、それ以上、進まなくなった。

f:id:tombi-aburage:20190414203219p:plain

ブレークポイントはないのだから、通常の実行と同じように、そのまま進行して呼び出し終了するものと思ったのだが・・・

調べてみたら以下の記事に同じような表示例があって、この記事の筆者は全然気にしていないようだったので、とりあえず置いておくことにした。

blog.hiroppy.me

ブレークポイントを指定し、デバッグ開始 Start Debugging して実行してみる。

VS Code のインタフェースをつつきまわしていたら、

というメニューを見つけたので、これを適当な行に設定してから実行をしてみた。

f:id:tombi-aburage:20190414204417p:plain

おお!止まっている!

デバッグコンソールを見てみると、先ほどとは表示が違っている。

Debugger attached.

どうやら、先ほどの

Waiting for the debugger to disconnet...

というメッセージは「実行が全て終了したので、デバッグのセッションも終わらせておきましたよ。俺って親切でしょう?」という意味だったらしい。

・・・紛らわしいぞ。

ブレークポイントで配列内の値が見えることを確認した後、実行を再開させると、さきほどと同じように、

Waiting for the debugger to disconnet...

となった。

デバッグ実行も、問題なし

これでデバッガも使えるようになった。素晴らしい!

但しデバッグ開始 Start Debugging による実行では、デバッグコンソールには lamda 関数の処理結果の JSON出力は出力されない点は、ちょっと違和感がある。

標準出力をリダイレクトするとかしないとダメなのかもしれない。

動くようになったので、リファクタリング着手

多言語対応をするつもりは無いのだが、スキルサービスからの応答発話のリテラルをソース本体から追い出したいので、How to Localize Your Alexa Skills : Alexa Blogs を参考にしながら、国際化対応のパッケージをローカル開発環境に追加した。

国際化対応のパッケージを追加

npm i -save i18next i18next-sprintf-postprocessor 

npm WARN diceroller@1.0.0 No description
npm WARN diceroller@1.0.0 No repository field.

+ i18next@15.0.9
+ i18next-sprintf-postprocessor@0.2.2
added 5 packages from 40 contributors and audited 27 packages in 2.07s
found 0 vulnerabilities 

全く問題なし

引き続き How to Localize Your Alexa Skills : Alexa Blogs を参考にしながら、ソースコードを全面的に変更。index.js にベタ書きしていた日本語応答発話のリテラルを、新たに作成した言語リソースファイル  ja.js の方に移すことにした。

自作のスキルサービスは

f:id:tombi-aburage:20190418112157p:plain

というシーケンスになっているのだが、スキルインタフェース(図略)からのバウンダリとなっている handler を収容している index.js に日本語の発話がどんどん増えてきて、見通しが悪くなってきていた。 ・・・全部追い出すぞ。

// ja.js
module.exports = {
translation : {
'SKILL_NAME' : 'サイコロ係' // <- can either be a string...
,'ASK_COMMAND' : '何面体を何個、振りましょうか?'
,'HELP_USAGE' : 'あなたの代わりにサイコロを振ります。 <break time="1s"/>\
「何面体を」<break time="1s"/>「何個」<break time="1s"/>「振って」<break time="1s"/>のように指示してください。'
,'TOO_MANY_DICE' : '8面体以上の場合、同時に振れるのは8個までなんです。すみません。'
,'CANNOT_HEAR_YOU' : 'すみません、よく聞き取れませんでした。'
,'REPEAT_COMMAND' : [
'%s面体を%s個振ります。','%s面体のサイコロを%s個振ります。','%s面体ダイスを%s個振ります。'
]
,'EXCITED' : [ // <- or an array of strings.
'','それっ!','うりゃ!','むん!','よっと!'
]
,'SURPRISED' : [
'おっと!','あれっ?','おやっ?','ほほう!'
]
,'SAY_AGAIN_RESULT' : '先ほどの結果を、もう一度お伝えします。'
,'BYE' : 'さようなら。'
}
}

\ (*´Д`) / いい感じの定数名を考えるのが、けっこうストレスだった。そのうち命名規則でも考えることにしよう。

リテラルを追い出す以外にも、幾つかの発話候補の中から無作為にどれか1つを選んで応答させることが簡単になったので、やる価値はあるかと。

もう、文言修正ごときで主処理 index.js には手を入れないで済む…

これでスキルサービスからの応答の文言修正については、主処理 index.js を変更する必要がなくなり、言語リソースファイル ja.js を変更するだけで良くなった。

しかし主処理から呼び出している自作のユーティリティ関数 DiceRoller.js の内部での応答文言組み立てについては、この関数に handlerInput への参照を引き渡してしまうとサブルーチンとしてのモジュールの独立性が保てないので後回しにした。

このユーティリティ関数専用の言語リソースファイルを別に用意して、i18next を直接使う方法がよさそうだが、リテラルがほとんどないので手間のほうが上回るので、今はやらない。

サーバ環境側でのテストのさいにハマる

ローカル開発環境でのエラーは出なくなったので、アレクサ開発者コンソール Alexa Developer Console の方へ反映することにした。

  • index.js をコピペ
  • i18n サブフォルダを作成し、その配下に ja.js ファイルを作成し、コピペ
  • 自作のユーティリティ関数 DiceRoller.js もコピペ
    ファイルアップロードでの入れ替え方を未だに理解していないため、未だにコピペなんです orz

コンソールでテストしてみたら、起動リクエスト LaunchRequest すらも動かないという致命的なエラー。[ テスト] - [ デバイスのログ] で全部のエラーメッセージを見ると

SKILL_ENDPOINT_ERROR

とかいうエラーが起動リクエスト発行のさいに出ていた。

門前払いかよ!

Cloud Watch の詳細ログを見ると

Unable to import module 'index'

とのこと。そもそも index.js をモジュール(ソース)として読み込むことすらもできていない。いろいろ調べると、依存するモジュールを読み込めていないときに出ることが多いとのことだった。

つまり、つい先ほど追加したライブラリである i18next i18next-sprintf-postprocessor  が最も怪しい。

結論としては:

  • 国際化対応のパッケージを追加したさいにプロジェクトの package.json も変わっていたのに、アレクサ開発者コンソールの方へ反映するのを忘れていた

というポカミスだった。

ローカル開発環境の最新の package.json

{
"name": "diceroller",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "tombi.aburage",
"license": "ISC",
"dependencies": {
"ask-sdk": "^2.5.1",
"i18next": "^15.0.9",
"i18next-sprintf-postprocessor": "^0.2.2"
},
"devDependencies": {
"@types/node": "^11.13.4"
}
}

のようになっており、 i18nextなんちゃらの2つが追記されていたようだ。
ファイルの中身を丸ごとコピペ w したら動くようになった。

コンソールで動作確認後、実機 Echo でも無事動作確認がとれた。

しかし、そろそろ手でコピペではなく、自動反映するようにでもしないとダメかねぇ。

Vue.js devtools インストール

Vue.js & Nuxt.js超入門

Vue.js & Nuxt.js超入門

 

を参考に、Google Chromeプラグインをダウンロード。 
 Vue.js デベロッパーツールが追加された。

しかし夜遅かったので、続きはやらずに寝た。

Vue.js のアイコンが見当たらない

翌日、設定の続きをやろうとしたら、デベロッパーツールは発見できたが、Vue.js のアイコンがツールバーに見当たらなかった。

f:id:tombi-aburage:20190413082326p:plain

どうやらインストールの時には、普段使っていない Googleアカウントを使っていたらしく、Vue.js のアイコンはそちらに追加されたと思われる。

アカウントを切り替えて、再びインストール作業

全く同じ作業を繰り返して、切り替えたアカウントの方にデベロッパーツールのプラグインを追加した。

すると Vue.js のアイコンが表示され、[拡張機能を管理] ができるようになった。 

f:id:tombi-aburage:20190413084742p:plain

 ファイルの URL へのアクセスを許可する

右クリックで設定を行った。

Vue が関係ない画面では、アイコンを押しても何も起きない

左クリックすると、

Vue.js not detected

と表示されて何も起きないが、多分 Vue.js が表示している画面ではないからだろう。

Vue で作られた画面では、

左クリックすると、

Vue.js is detected on this page. Open DevTools and look for the Vue panel.

と表示される。Chrome デベロッパーツールを開くと、Vue タブ(Vue panel)が追加されており、利用できるようになっている。

f:id:tombi-aburage:20190513090516p:plain

developer tools に Vue タブが表示された

 

Node.js command prompt の初期フォルダ変更(失敗)

Node.js command prompt を起動したときに、Node.js をインストールしたCドライブのディレクトリ(フォルダ)が既定になっているのが嫌なので変更

そもそも、どこに設定されているのか調べる

npm config list というコマンドを使えばいいらしい。

npm config list

; cli configs
metrics-registry = "https://registry.npmjs.org/"
scope = ""
user-agent = "npm/6.4.1 node/v10.15.3 win32 x64"

; builtin config undefined
prefix = "C:\\Users\\tombi\\AppData\\Roaming\\npm"

; node bin location = C:\Program Files\nodejs\node.exe
; cwd = C:\Users\tombi
; HOME = C:\Users\tombi
; "npm config ls -l" to show all defaults.

データ用のドライブに設定し直す

npm config set というコマンドを使えばいいらしい。

npm config set HOME E:\User\tombi

変わっていることを確認する。

C:\Users\tombi>npm config list
; cli configs
metrics-registry = "https://registry.npmjs.org/"
scope = ""
user-agent = "npm/6.4.1 node/v10.15.3 win32 x64"

; userconfig C:\Users\tombi\.npmrc
HOME = "E:\\User\\tombi"

; builtin config undefined
prefix = "C:\\Users\\tombi\\AppData\\Roaming\\npm"

; node bin location = C:\Program Files\nodejs\node.exe
; cwd = C:\Users\tombi
; HOME = C:\Users\tombi
; "npm config ls -l" to show all defaults.

userconfig の場所はCドライブのままだよ、という記述が追加されたが HOME の変更はされたようだ。

全く問題なし

どうやら HOME を設定してもダメだったらしい

Node.js コマンドプロンプト Node.js command prompt を再起動したが、相変わらずCドライブのままだった。

Your environment has been set up for using Node.js 10.15.3 (x64) and npm.

C:\Users\tombi>

Cドライブのままだわ…

一旦戻しておく

C:\Users\tombi>npm config set HOME c:\User\tombi

とりあえず、コマンドプロンプトでカレントディレクトリを変更して使うことにする。

Vue.js 環境構築

Vue CLI サービス vue/cli-service-global をインストール(失敗)

npm install -g @vue/cli-service-global

npm ERR! Unexpected end of JSON input while parsing near '...:2614807,"npm-signatu'

npm ERR! A complete log of this run can be found in:
npm ERR! C:\Users\tombi\AppData\Roaming\npm-cache\_logs\2019-04-12T21_54_57_395Z-debug.log

さっそくエラー。Unexpected end of JSON input って何だろう。

ログを見たが、同じエラーメッセージで参考にならなかった

ぐぐってみたら、キャッシュをクリアすれば解決したとの先例あり。

【解決】npm install -g @vue/cli で、Unexpected end of JSON input while parsing nearが発生した - よしたく blog

よくあることらしい。

Node.js のキャッシュをクリア

npm cache clean --force

npm WARN using --force I sure hope you know what you are doing.

やった後に警告されてもねぇ。

Vue CLI サービスのインストールを再実行(解決)

npm install -g @vue/cli-service-global

npm WARN deprecated circular-json@0.3.3: CircularJSON is in maintenance only, flatted is its successor.
npm WARN optional SKIPPING OPTIONAL DEPENDENCY: fsevents@1.2.7 (node_modules\@vue\cli-service-global\node_modules\fsevents):
npm WARN notsup SKIPPING OPTIONAL DEPENDENCY: Unsupported platform for fsevents@1.2.7: wanted {"os":"darwin","arch":"any"} (current: {"os":"win32","arch":"x64"})

+ @vue/cli-service-global@3.5.5
updated 7 packages in 64.917s

とはいえ、いくつか警告が出ているので、一応ここに記録しておく。

サンプルプログラムの起動テスト(成功)

Vue.js & Nuxt.js超入門

Vue.js & Nuxt.js超入門

 

を見ながらサンプルプログラム app.vue を Visual Studio Code (VSCode) にて打ち込み、vue serve コマンドにてサーバを起動した。

f:id:tombi-aburage:20190413074355p:plain

これで Vue CLI サービスの稼働確認は完了とする。

問題なし

Vue.js devtools で分析できるかも確認しておく(成功)

表示された Vue.js のページを Chromeデベロッパーツールから解析できるアドインのようなものがあるらしい。

tombi-aburage.hatenablog.jp

サンプルプログラムのソースが大したことないので、大したものは見えないが、動作としては問題なし。

問題なし

サンプルソースを改良し、リアルタイムに更新されることを確認

先ほどのサンプルソース app.vue だと、固定テキストを出しているだけなので面白味がない。データ data の値を出力するように改良した。 

<template>
<div id="app">
<h1>Hello!</h1>
<p>{{ text }}</p>
</div>
</template>

<script>
export default {
name: 'HelloWorld',
data(){
return {
text: 'Hello World!'
}
}
}
</script>

<style scoped>
p {color: red;}
</style>

先ほどと同様 vue serve で起動し、Chrome で開いた後で、VS Code で data の text の文字列を更新して保存するとリアルタイムに表示が変わった。

豊富な部品集

github.com

にある部品の Live Demo のページなどを表示させて、Vue の data の値をいじったりすると、連動して変化するのでとても実感が湧いた。

しかし、これだけ部品資産があるのを見ると、新しく作る必要はない気がしてくるな。
見た目で探せるサイトになっているといいのだが、各部品の GitHub へのリンク集になっているだけなので、欲しいものを探すのは楽ではないし品質は不明だ。

  • awesome-vue は評判(品質)が不明だが、部品の数と種類は多い。
  • Vue Curated は目安としていいね(星)数が分かるが、部品はかなり少ない。

という感じのようだ。

他にも、いろいろとライブラリがあるらしい

もう一冊、買ってきた。こちらの方が実際のアプリ開発に近い内容で詳しい。

基礎から学ぶ Vue.js

基礎から学ぶ Vue.js

 
  • Ajax 用ライブラリ axios 

は当然として、

  • ユーティリティライブラリ Lodash

も入れといたほうがよいらしい。

ところで、どうやってテスト駆動開発するのだろう。

コンポーネント(.vue ファイル)の単体テスト方法が良く分からないので、ぐぐった。

lmiller1990.github.io

に「テスト駆動開発環境を準備」というそのまんまの説明があった。

まずは Vue プロジェクトを作成しないといけないらしい。

VueSample というフォルダを作り、そこで VS Codeワークスペース作成、npm init まではやってあったが、vue create はやっていなかった。

1つ上の Projects ディレクトリに戻り、 今あるフォルダと同名の VueSample という名前で Vue プロジェクトを生成することにした。

PS E:\Users\tombi\Projects>vue create VueSample

プロジェクト名に大文字は禁止ですと怒られた。細かいなぁ…全部小文字に直す。
あわせて、既存のフォルダ名も全部小文字に直す。その上で再試行する。

PS E:\Users\tombi\Projects>vue create vuesample

標準の registry の応答が遅いから別の registry に接続するか?といった趣旨のことを訊かれたので、任せたところ、何やらファイルを取りに行き始めたが resolveWithNewModule のメタデータ取得 fetchMetadataで完全に止まってしまった。

Vue CLI v3.5.5
✨ Creating project in E:\Users\tombi\Projects\VueSample\vuesample.
⚙ Installing CLI plugins. This might take a while...
[ ..............] \ fetchMetadata: sill resolveWithNewModule chokidar@2.1.5 checking installable status

Ctrl + C で中断させ、もう一度やってみたところ、なぜか今度は通過できたので良しとする。

毎度おなじみ errno -4048 エラー

しかし、もう少し進んだところで結局エラーとなった。

npm ERR! path E:\Users\tombi\Projects\VueSample\vuesample\node_modules\.staging\postcss-81ed59bb\docs\architecture.md
npm ERR! code EPERM
npm ERR! errno -4048
npm ERR! syscall unlink
npm ERR! Error: EPERM: operation not permitted, unlink

(以下略)

このエラー -4048 は、実際には権限の問題ではなく、単なるファイルアクセスのタイミングが悪いだけらしいと分かってきたので、VS Code を再起動し、再試行するだけにした。

VS Code を再起動し、再試行(2回目)(少し進んだ)

PS E:\Users\tombi\Projects\vuesample> cd ..
PS E:\Users\tombi\Projects>vue create vuesample

Overwrite ではなくて Merge の方を選ぶ。

✨ Creating project in E:\Users\tombi\Projects\vuesample.
⚙ Installing CLI plugins. This might take a while...

npm ERR! path E:\Users\tombi\Projects\vuesample\node_modules\.staging\pako-4e2939c1\dist\pako_inflate.js
npm ERR! code EPERM
npm ERR! errno -4048
npm ERR! syscall unlink

(以下略)

少し進んだが、違うファイルで同じエラーとなった。再び再試行。

VS Code を再起動し、再試行(3回目)(少し進んだ)

PS E:\Users\tombi\Projects\vuesample> cd ..
PS E:\Users\tombi\Projects>vue create vuesample

Overwrite ではなくて Merge の方を選ぶ。

Vue CLI v3.5.5
✨ Creating project in E:\Users\tombi\Projects\vuesample.
⚙ Installing CLI plugins. This might take a while...

[ ......] \ extract:cssnano-util-get-arguments: sill extract cssnano-util-get-arguments@^4.0.0 extracted to E:\Users\tombi\Projects\vuesample\node_modules\.staging\cssnano-util-get-argum

少し進んだが、別のところ sill extract cssnano なんちゃらの解凍 extract で完全に止まってしまった。Ctrl + C で中断させ、VS Code を再起動し、再試行。

PS E:\Users\tombi\Projects\vuesample> cd ..
PS E:\Users\tombi\Projects>vue create vuesample

Overwrite ではなくて Merge の方を選ぶ。

先ほどの停止箇所は突破し、Installing additional dependencies... のところまで進んだ。

Vue CLI v3.5.5
✨ Creating project in E:\Users\tombi\Projects\vuesample.
⚙ Installing CLI plugins. This might take a while...
> yorkie@2.0.0 install E:\Users\tombi\Projects\vuesample\node_modules\yorkie
> node bin/install.js

setting up Git hooks
done

added 1154 packages from 912 contributors, removed 7 packages and audited 23618 packages in 77.921s
found 0 vulnerabilities

🚀 Invoking generators...
📦 Installing additional dependencies...

[ ......] \ extract:rxjs: sill extract rxjs@^6.4.0 extracted to E:\Users\tombi\Projects\vuesample\node_modules\.staging\rxjs-16032bf1 (42329ms)

しかし別のところ sill extract rxjs なんちゃらの解凍 extract で完全に止まってしまった。Ctrl + C で中断させ、VS Code を再起動し、再試行。

VS Code を再起動し、再試行(4回目)(最後まで進んだ)

PS E:\Users\tombi\Projects> cd ..
PS E:\Users\tombi>vue create vuesample

今度は Overwrite するかは訊かれなかった。

 

(前略)

🎉 Successfully created project vuesample.
👉 Get started with the following commands:

$ cd vuesample
$ npm run serve

どうやら成功したようだ。

※しかし後に、親フォルダを間違って実行していたことが判明する。

Vue.js サンプルアプリ画面が表示された

src サブフォルダ配下に、App.vue というファイルが出来た。

PS E:\Users\tombi> cd vuesample
PS E:\Users\tombi\vuesample> npm run serve

> vuesample@0.1.0 serve E:\Users\tombi\vuesample
> vue-cli-service serve

INFO Starting development server...
98% after emitting CopyPlugin

DONE Compiled successfully in 2044ms 00:21:05
App running at:
- Local: http://localhost:8080/
- Network: http://192.168.179.8:8080/

Note that the development build is not optimized.
To create a production build, run npm run build.

f:id:tombi-aburage:20190514002233p:plain

Chrome で表示した http://localhost:8080

ところが、今回の App.vue は変更してもリアルタイムに Chrome 画面には反映されなかった。ホットリロードを有効にする設定が別にあるのだろうか?

本来の目的だったテスト駆動開発環境の構築は続行できず。

lmiller1990.github.io

の「テスト駆動開発環境を準備」をやるつもりが、どうやら最初に vue create したさいの選択肢をすでに誤っていたらしい。

Manually select features 

 ではなく

default (babel, eslint) 

の方を選んでしまったために、テスト環境が設定できなかった。

さらに4回目の再試行で、親フォルダを間違っていた orz

VSCode で App.vue、HelloWorld.vue をどのように改造しても、一切何も反映されない。ホットリロード以前の問題のようだった。

不審に思ってエクスプローラーでフォルダやファイルを調べたら、Projects フォルダの配下ではなくて、同列・外側に vuesample フォルダが発見された orz 

振り返ると、4回目のコマンドを実行したときのフォルダが間違っている。

PS E:\Users\tombi\Projects> cd ..
PS E:\Users\tombi>vue create vuesample

 ではなく、

PS E:\Users\tombi\Projects\vuesample> cd ..
PS E:\Users\tombi\Projects>vue create vuesample

でなければならなかった。ポカミス。

あわせて「テスト駆動開発環境を準備」も正しく進めることにする。

最初に Manually select features を選び、Unit Testing を正しく選択

Vue CLI v3.5.5
┌───────────────────────────┐
│ Update available: 3.7.0 │
└───────────────────────────┘
? Please pick a preset: Manually select features
? Check the features needed for your project:
(中略)
>(*) Unit Testing
( ) E2E Testing

最終的に、以下の設定でプロジェクトを再生成

Vue CLI v3.5.5
┌───────────────────────────┐
│ Update available: 3.7.0 │
└───────────────────────────┘
? Please pick a preset: Manually select features
? Check the features needed for your project: Babel, Linter, Unit
? Pick a linter / formatter config: Airbnb
? Pick additional lint features: (Press <space> to select, <a> to toggle all, <i> to invert selection)Lint on save
? Pick a unit testing solution: Jest
? Where do you prefer placing config for Babel, PostCSS, ESLint, etc.? In package.json
? Save this as a preset for future projects? (y/N) n

VS Code を再起動し、再試行(5回目)(成功)

また止まってしまったので、Ctrl + C で中断後、やり直し。

(前略)

🎉 Successfully created project vuesample.
👉 Get started with the following commands:

$ cd vuesample
$ npm run serve

再試行を5回目繰り返すことにより、ようやく Vue の導入に成功したようだ。

Vue.js サンプルアプリ画面が表示され、App.vue を変更するとリアルタイムに Chrome 画面には反映されるようになった。

しかし、ほとんど盲目的に再試行を5回繰り返すという対処方法は、ちょっと理解しがたい。

yarn なんて導入していないので、指示どおりにテスト実行はできない

lmiller1990.github.io

の「テスト駆動開発環境を準備」では

インストールが終わったら、cd でプロジェクトのディレクトリに移動し、yarn test:unit を実行します。

と書かれているが、

  • そもそも yarn は入っていない。
  • Jest も入っていない

yarn は npm で代替できそうだが、Jest の方は導入しないと話にならぬと思われた。

Jest を導入したら、64個の脆弱性が発見された

npm install --save-dev jest

npm WARN deprecated left-pad@1.3.0: use String.prototype.padStart()
npm WARN deprecated kleur@2.0.2: Please upgrade to kleur@3 or migrate to 'ansi-colors' if you prefer the old syntax. Visit <https://github.com/lukeed/kleur/releases/tag/v3.0.0\> for migration path(s).
npm WARN optional SKIPPING OPTIONAL DEPENDENCY: fsevents@1.2.9 (node_modules\fsevents):
npm WARN notsup SKIPPING OPTIONAL DEPENDENCY: Unsupported platform for fsevents@1.2.9: wanted {"os":"darwin","arch":"any"} (current: {"os":"win32","arch":"x64"})

+ jest@24.8.0
added 166 packages from 103 contributors, removed 62 packages, updated 88 packages, moved 29 packages and audited 904207 packages in 43.754s
found 64 low severity vulnerabilities
run `npm audit fix` to fix them, or `npm audit` for details

インストールはされたようだが、64個の脆弱性が発見されたとのこと。
使ったことがないコマンド npm audit fix を使うように指示された。

npm audit fix しても治らない

npm audit fix

 npm WARN optional SKIPPING OPTIONAL DEPENDENCY: fsevents@1.2.9 (node_modules\fsevents):
npm WARN notsup SKIPPING OPTIONAL DEPENDENCY: Unsupported platform for fsevents@1.2.9: wanted {"os":"darwin","arch":"any"} (current: {"os":"win32","arch":"x64"})

up to date in 10.485s
fixed 0 of 64 vulnerabilities in 904207 scanned packages
63 vulnerabilities required manual review and could not be updated
1 package update for 1 vuln involved breaking changes
(use `npm audit fix --force` to install breaking changes; or refer to `npm audit` for steps to fix these manually)

64個の脆弱性が分析されたらしく、更新できない63個と、無理やり更新できないこともない1個に類別された。不可解な英語 vuln の意味が分からない。

npm audit でチェックしてみたが、参照先を見ても何をすればいいのかは、よく分からなかった。ソフトウェア的に危ない部分があるよ、と警鐘を鳴らしている感じの文章だったので、開発者向けなのかもしれない。

Jest の安定バージョンを再インストールしてみる

jestjs.io

で調べると安定バージョンは 24.6 であり、一方 node list で先ほど導入されたものを調べると 24.8 だったので、バージョン指定してやり直すことにした。

npm uninstall jest
npm install --save-dev jest@24.6

 しかしアンインストールしても64個の脆弱性は消えず、バージョン指定して再インストールしても64個の脆弱性は消えない。打つ手がないので、これらは無視することにした。

Jest の単体テストサンプルを実行(成功)

Jest をインストールしたところ、

  • tests (s あり)フォルダ、unit サブフォルダが追加されていた
  • package.json に test:unit という scripts が追加されていた 
npm run test:unit

> vuesample@0.1.0 test:unit E:\Users\tombi\Projects\vuesample
> vue-cli-service test:unit

PASS tests/unit/example.spec.js
HelloWorld.vue
√ renders props.msg when passed (28ms)

Test Suites: 1 passed, 1 total
Tests: 1 passed, 1 total
Snapshots: 0 total
Time: 2.948s
Ran all test suites.

どうやら Jest のサンプルの起動には、成功したようだ。

 

Wimax2利用時に、電波が届かない部屋を無くしたいならPLC通信がオススメ

コロナになって真価を発揮

自宅内での通信環境改善の手段としてはマイナーであり、あまり知られていないと思われる電力線(PLC)通信。面白半分で購入したが、それほど使わなかったのでお蔵入りにしていたが、コロナ下では一転、愛用品となった。

課題 

Wimax2を自宅で利用しているが、自宅内で無線(Wifi)の電波が届かない、または弱い部屋があって困っている。

前提

ホームネットワーク(自宅内LAN)からインターネット(公衆WAN)への接続は、無線接続(Wimaxルーター経由)となっている。

例えば

のような Wimax 通信プロバイダと契約していて、例えば

Speed Wi-Fi NEXT W05 UQ WiMAX版 GREEN

Speed Wi-Fi NEXT W05 UQ WiMAX版 GREEN

 

のような Wimaxルーターを使っており、

このルーターに対して、パソコンやスマートフォンスマホ)を 

f:id:tombi-aburage:20190409004536p:plain

※ f:id:tombi-aburage:20190409004515p:plain は、Wimaxルーターのネットワーク名(SSID

のように無線(Wifi) で接続することでインターネットを利用している。

課題の背景

  • Wimaxルーターは電波状態が最も良い(アンテナ4本)窓際に置くことが多い。
  • この場合、置き場所から離れた部屋ではWimaxルーターに対して無線(Wifi)で接続ができない、または速度が遅くなる。 
  • 特に冬場・夏場は扉や襖を閉めるので、無線(Wifi)の電波が届きにくい。 

対策 

  •   電力線通信(PLC)で有線LANを構築する
    家庭内の全ての部屋に張り巡らされている電気の配線を、ホームネットワーク(自宅内LAN)の回線として活用する通信方式。コンセントはどの部屋にでも必ずあるので接続に不自由はなく、
    扉など遮蔽物の影響を受けない。 

のようなPLCアダプターと、Wimaxルータークレードル(別売)を利用する。

UQコミュニケーションズ Speed Wi-Fi NEXT W05専用クレードル HWD36PUU

UQコミュニケーションズ Speed Wi-Fi NEXT W05専用クレードル HWD36PUU

 

 ※クレードルは利用している Wimax ルーターの機種を調べ、対応しているものを購入すること(互換性がないので)

評価結果

実際に購入した。南側のリビング(親機、小さい方 TL-PA4010)と、北側の洋室(子機、大きい方 TL-WPA4220)間をPLC接続にしてみたら、問題なく繋がった。

  1. クレードルWimaxルーターを載せる
  2. クレードルとPLCアダプターの親機をLANケーブルで接続する
  3. PLCアダプターの親機をコンセントに挿す
  4. PLCアダプターの子機をコンセントに挿し、親機とペアリングする
  5. PLCアダプターの子機に無線(Wifi)または有線LANで接続する

アダプタのLED表示について

どうなっていれば正しい状態なのか、マニュアルでは分かりにくかったため、親機と子機のペアリングには少し手間取った。(ペアリングのボタンを長押ししすぎて、ペアリングがリセットされたりして少々ハマった。)

正常に稼働している時のLED表示は、以下のとおり:

  • 親機のLEDは3つとも緑に点灯
    PLCアダプターはコンセントに直接差し込むものなので、電源LED(〇に縦棒のスイッチアイコン)が点灯しないという事態はさすがにおきないだろう。
    電力線通信(家アイコン)のLEDが点灯していないときは、おそらくは子機とのペアリングに失敗しており、電力線通信が起動していない。同じコンセントまたはテーブルタップに親機と子機を隣り合わせで並べて、再度ペアリングからやり直すこと。
    有線LAN(長方形を3つ線で繋げたアイコン)のLEDが点灯していないときは、親機からルーターへのネットワーク接続が確立していない。LANケーブルの差し込み具合や、ルーターの電源を確認すること。
  • 子機のLEDは、電源LED、電力線通信の2つは緑に点灯している。残りの2つのLED(有線LAN、無線 Wifi)は、アダプタと利用者端末との間でネットワーク接続が確立していれば緑に点灯する。(有線LANを使っていないならば、有線LANのLEDは緑に点灯しなくて差し支えない)

ペアリングに成功した後、PLCアダプタを親機・子機ともに一旦コンセントから外して、また両方とも挿し直した場合のLED表示は、以下のとおり:

  • 親機・子機ともに、通電しているコンセントに挿して数秒以内に、電源LED、電力線通信LEDの2つが緑色に点灯する。
    f:id:tombi-aburage:20190411073903j:image
  • 上記2つのLEDより5~6秒くらい遅れて、子機の無線 WifiのLEDが緑色に点灯する。
  • 子機だけをコンセントから外すと、10秒くらい遅れて、親機の電力線通信LEDも消灯する。さらにしばらく放置すると、電源LEDも消灯する。
  • 親機からルーターへの有線LAN接続を切断すると、親機・子機のLEDは不可解な挙動をする。電力線通信LED、電源LEDすらも消灯することがある。
    おそらくは省電力モードに入っているのだろう。
  • 有線LANのLEDは、ネットワーク接続に成功していれば緑色に点灯する。
    たんにLANケーブルだけ挿していても、ネットワーク接続が確立していなければ、点灯することはない。

レグザリンク・シェアには失敗

電力線通信には成功したものの、南側リビングの Regza C310X と、北側寝室(洋室)の Regza 32R1BDP をレグザリンク・シェアで接続することには失敗した。

https://www.toshiba.co.jp/regza/lineup/c310x/images/top_main_img01.jpg

https://www.toshiba.co.jp/regza/link/image/share/image_interst_g2.jpg 

https://www.toshiba.co.jp/regza/lineup/r1bdp/images/concept_img_main.jpg

出典:何れも、東芝映像ソリューション

東芝のレグザリンクのサイトで R1 がレグザリンク・シェアに対応と書いてあったので、Regza R1BDP も Regza R1 と同様の扱いだと思ったのだが、BDP はブルーレイディスクが付いている代わりにレグザリンク・シェア(DLNA 対応)はしていなかったというオチだった。

両方のマニュアルをダウンロードして、じっくり見比べてみると、R1BDP の準備編マニュアルのほうには、レグザリンク・シェアに関する説明が確かになかった orz

まあ10年位前のレグザ(時価5千円以下)なので、もし繋がったら奇跡レベルだが。

ということで、せっかく購入したPLCアダプタは、別の用途が必要になるまでお蔵入りとなった。数年前と違って、安かったからいいけど…

その他の対策案 

スマートスピーカーを再検討した結果...買いま…す!

  • 画面付きなのは魅力的だが、バッテリー駆動にできない点が残念な Echo Spot
  • バッテリー駆動だが高価すぎる Harman Kardon ALLURE Portable アルーア ポータブル スマートスピーカー 

については、以前の検討で購入しないことに決めた。

tombi-aburage.hatenablog.jp

 しかし、いろいろ調べていくと、

  • Echo 第2世代に電力を供給できるバッテリーベースというものがある

ということを知ったので、セットで購入することとした。

Echo 第2世代については、ちょうど現在は新生活キャンペーン中で、

  • スマートプラグ2個付きセット

もあるようなので、それにした。

ついでに、

  • Wimax2 ルーターの電波がほとんど届かない部屋をLAN接続するために、PLCアダプターを購入
  • 音声の代わりにボタンを押すことで何かさせようと思って、AWS IoT エンタープライズボタン 

も買うことにした。

Smatree NE40 バッテリーベース Echo (エコー) 第2世代/Echo Plus(第1世代)対応

新品価格
¥5,655から
(2019/4/7 15:54時点)

Echo 第2世代 - スマートスピーカー with Alexa、チャコール

新品価格
¥11,980から
(2019/4/7 15:53時点)

TP-Link WiFi 中継機 PLCアダプター TL-WPA4220 KIT 11n 300Mbps 無線LAN 有線LAN コンセント 2台 キット 総務省指定

新品価格
¥5,380から
(2019/4/7 15:52時点)

利用準備

数日で Amazon から届いたので、さっそくセットアップした。

バッテリーベースは、基本的に嵌めるだけだった。
Echo New 向けのスペーサーを取り外し、嵌め込むだけ。

袴を履かせたようになり、Amazon のロゴが隠れ、Smartree ロゴにスリ替わった w

f:id:tombi-aburage:20190412060047j:plain

Alexa アプリは、Google Play から Android スマートフォンにダウンロード。
しかし、しょっちゅうアプリが停止状態となり、まるで使い物にならなかった。

そういう場合は Web サイトのほうでセットアップしなさいと書いてあったので、そのようにした。

ホームネットワークへの Wifi 接続をするのに数分かかったが、特に支障なく完了した。 

レグザスキル

Regza C310X はレグザスキルに対応しているとのことだったので、スキルストアからダウンロード。

レグザがわで、スマートスピーカー連携を有効にする設定を行って、そのさいに表示された8桁の数字を入力すると接続された。電源をオンにするための設定も、レグザがわで行った。

アレクサ、テレビをつけて(消して)

 でオン、オフできる。音量も調整できる。

何よりも、リモコンがどこに行ったか探さなくてよくなるのがうれしい。

スマートプラグ

Echo とセット割引になっていたので、2個購入してみた。

セットアップの手順は簡単だったが、これまたスマホの Kasa アプリの動作が重たくて、時間はかかった。

それほど難しい仕組みではないはずだが、ペアリングの待ち時間が数分かかり、けっこう長かった。アレクサスキルの設定は、とても簡単だった。

枕元のLED読書灯のオン・オフに使ってみたが、残念ながら使えなかった。

電気機器のスイッチが物理的なスイッチではない場合には、スマートプラグで根元の電源をオフにした段階で主電源も切れた状態となってしまうために、再びオンすることができないためだと思われる。

電源スイッチが物理スイッチで、それをオンにしたまま、いきなりコンセントから引き抜いたり、差したりすることで動作状態を変更できるものならば、スマートプラグで制御できるだろう。

しかし、そういう電気機器はあんまり多くはないようだ。

電源コード引き抜き相当の手段による電源断を繰り返すと、壊れそうだし。

コンセントに差すことで直ちに機能し、抜くことで止まるものといえば…例えば、LED常夜灯があった。

しかし、もともと大して明るくもない常夜灯をわざわざ消すかというと、そこまでの強いニーズはない。機能的にも矛盾するし。

そもそも電源オン・オフ以上の制御ができないと、大した意味もないので、やはり、Alexa スマートホームに対応している電気機器そのものを買ったほうがよさそうだ。

追記:スマートプラグの用途を発見

そういう電気機器はあんまり多くはないようだ。

扇風機やエアー・サーキュレーターのオンオフに使える。

店頭に展示品としておいてある扇風機等のスイッチをオンにした後、電源コードを引き抜いき、また挿してみて回転が再開するかを確認する。再開する場合、その扇風機等はスマートプラグ対応w

2,000円くらいで展示品を買ってきて、スマートプラグでオンオフするようにした。子守りで乳児を寝付かせるさいに、両手が塞がるが、少しでも動かすと起きるので音声で操作できるのは助かる。

スマートプラグ君、今日から君の名前は扇風機プラグだ。

ATEM Mini のオンオフに使える。

在宅勤務における複数のPC/画面の切り替え用として調達した人気のビデオスイッチャーの ATEM Mini のオンオフに使える。

おそらくは不注意による配信中断(放送事故)を防ぐために、このスイッチャーには電源ボタンがそもそも存在しない。アダプタの抜き差しでオンオフする仕様となっている。

しかしATEM Mini をデスクトップに置いて常時オンにした状態では、ボタンに埋め込まれたLEDの表示がかなり眩しいし、切り替える瞬間までは起動している必要もないので待機電力も勿体ない。

モバイルタップや充電用タコ足コンセントのオンオフに使える。

モバイルタップの先には、基本的にバッテリーが内蔵されたモバイル機器のアダプタやUSB充電ケーブルが接続されている。しかし日中は、タップから取り外して使っていることが多く、夜間に充電する場合が多い。

KASA Smart で設定すれば、例えば夜間に充電する時間帯だけ、通電させることができる。

モバイルタップ以外にも、充電して使う電気機器のアダプタだけを集中して挿したタコ足コンセントを作っており、満充電のときは根元から抜いたりしていたのだが、それらをまとめてオンオフするのにもよい。例えば

の先に、ダイソーの掃除機、Nintendo Switch、ルンバの充電器、エネループの充電器、などを挿しているが、どれも数時間の充電で満充電となるため、日没をもってオフ、日の出をもってオンにするスケジュール設定をしてみた。

追記:Google Nest Mini も購入した。 

tombi-aburage.hatenablog.jp

 

 

エグゼクティブチェア デクシアを買い替え

椅子が傷んできたので、数年ぶりに買い替えた。

  • 合成皮革の劣化が激しくなって剥がれはじめた。
  • ガスシリンダーもガスが抜けてしまった?のか、高さの調整ができなくなった

ニトリの店頭で幾つか試して、座り心地が良かったのを適当に買って帰った。

ニトリのファス

  • 背もたれは高めで、角度は多少なら調整できる
  • アームレストは稼働しない
  • 組み立ても特に難しくはない 

f:id:tombi-aburage:20190331084932j:plain

腰当て?を備えたワークチェアもあり座り心地は良かったが、マッサージャを置くので無駄になると思い選定から外した。

tombi-aburage.hatenablog.jp

エグゼクティブチェア デクシア

買い替える前は、不二貿易が輸入しているデクシアなる椅子を使っていた。
アームレストを上げ下げできるがファスよりも数千円高い。

どこで買ったのかは記憶がない。

不二貿易 エグゼクティブ チェア デクシア アームレスト跳ね上げ式 ブラック 83739

不二貿易 エグゼクティブ チェア デクシア アームレスト跳ね上げ式 ブラック 83739

 
  • 毎日、けっこう長時間使って数年間は持ちこたえたので悪くはないと思う
  • 右のアームレストは、すぐに根元から外れてしまった
    組立説明書には「定期的に締め直せ」と書いてあるので、そういうものらしい。
    パソコン使うときには椅子のアームレストはあまり使わないので、気にせずそのまま使っていた。
  • 合成皮革の劣化が激しくなって剥がれはじめた。
    こうなると、さすがに見苦しい。
    f:id:tombi-aburage:20190331082723j:plain f:id:tombi-aburage:20190331082758j:plain
  • ガスシリンダーもガスが抜けてしまった?のか、高さの調整ができなくなった
    高さを上げても、しばらくすると不意に下がってしまう。
    これはたまらん。
  • キャスターの劣化は特になかった
    さらに前代の IKEA の椅子は、何年もしないうちにキャスターのタイヤ部分が加水分解して剥がれ床を傷つけてしまったという最悪の商品だったが、こちらは問題なかった。
    念のため、キャスターは取り外して在庫にしておいた。

デクシアの方が奥行きが深くて良かった。

ファスは座面の奥行きがやや足りず、マッサージャを使うと自分がずり落ちそうになる。

もうちょっと奥行きが必要だな。