エンジニアのひよこ_level10

毎日更新してた人。たまに記事書きます。

【npm】npm installではpackage-lock.jsonが書き換わってしまう【747日目】

npm install

最新版との差も確認するらしく。

npm installを打ち込むと、package-lock.jsonの中身が変わったりしますね。

npm ci使えとはいうものの

ってことで、 composer installのように、lockファイルを書き換えたくなければ、
npm ciを使いましょう。

とはいえ実は・・・

バージョンによっては使えない(´・ω・`)

npm ciはずっとあったわけではありません。

v5.7.0から導入されたようです。

では何が起こるか?

古いnodeとnpmじゃ動かない

nodebrewとかでnodeのバージョンを切り替えしてる方は、お気づきでしょう。

古いnodeやnpmを使っていると、npm ci使えないです。
(結論から言うとnpm上げる以外対策思いつかないので、いい方法あったら教えて下さい)

node.jsのバージョン

nodejs.org

Node.js の9系最新版である、9.11.2では、まだnpmは5.6.0のようです。

nodebrewで9.11.2使っていた私はこうやって絶望したわけですね(´・ω・`)いい方法ご存知の方いらっしゃったら教えて下さい(´;ω;`)

【npm】『gyp ERR! node-gyp -v』でnpm installが動かない【746日目】

npm installが動かない

npm installしようとして

gyp ERR! node -v v12.6.0
gyp ERR! node-gyp -v v3.8.0

今まで動いてたのになぜだろうってなった(´・ω・`)

nodeのバージョン

実行時のnodeのバージョンのせいだった。

なのでnodeのバージョンを変えよう。

こっからは、nodeのバージョン切り替えについて。
加えて、nodebrewがある場合のお話です。

nodebrew
(動くか確認)

nodebrew ls
(バージョンがあるか確認)

nodebrew install-binary v8.11.1
(ないならインストール)

nodebrew use v8.11.1
(切り替え)

node -v
npm -v
(バージョン切り替わっているか確認)

これで npm installしたら動きました

もしバージョンが切り替わってなかったら?

パスを通す

~/.bashrc

export PATH=$HOME/.nodebrew/current/bin:$PATH

通したパスが動かないとかなら以下も。
bash起動時に設定を読み込ませる

~/.bash_profile

if [ -f ~/.bashrc ]; then
  . ~/.bashrc
fi

【shell】unbound variableを見かけた時の対応3種【745日目】

変数未定義のエラーが発生した

unbound variable

未定義変数が使われているエラーですね。

なんで起こるか

set -u

みたいなのが書かれていたら、変数未定義の場合にエラーが発生する設定にするというものです。

では対応はどうするか

変数チェック

if [ -v "${VAL}" ]

とかでチェックする

チェックして代入

if [ "${VAL:-false}" ]

値がなければfalseにする

php$val ?? falseやるような感覚

一時的にエラー判定を出さないようにする

set +u

これでエラー判定がでなくなる。

ただ、空文字とかが飛んでくるので、それに合わせた対応を。

もしすでに、

if [ -z "${VAL}" ]

とかを見かけていたら、 -zは文字列の長さが0の時の判定なので、
未定義のときには空文字が来るというのを想定していたけど、setの設定をミスったとかの可能性があります。
一時的にエラー判定を出さないようにするのはありなのかもしれない。

あと、必要であれば忘れずに

set -u

で元に戻してあげてください。

【一週間振り返り】新しい挑戦どんどん進めた一週間【744日目】

1.今週一週間の感想(ざっくり)

めっちゃいろいろしてたよ!

2.良かったこと(新規・特徴的なこと)

  1. アバターいじりした!(Blender・Unity)
  2. ボーンとかコライダーとかいろいろ勉強できた
  3. 動画編集もいっぱいした!(Aviutil・ゆっくりムービーメーカー4)

3.良かったこと(平時・生活的なところ)

  1. VRChatやバーチャルキャストって良いですねやっぱり・・・!
  2. We were hereって友人が紹介してくれたゲームめちゃめちゃ面白そう・・・!
  3. プリンシプルプログラミング少し読む

4.もっとこうしたかったこと

プリンシプルプログラミングを読むスピードもう少し上げたい。

5.新しく気づいたこと

仕事のことを考えない時間増やしたら、どんどんいろんなこと始めてきたφ(・

6.来週したいこと

途中の動画編集早く終わらせたいっ!

7.その他

息抜き面での動きが、みるみる内に良くなっていってますね。良いことだ!

8.体重

98.3kg

緩やかに落ちている???

【Blender2.8】操作メモ_φ(・_・【743日目】

めも

Bキー

複数選択(頂点とか)

Gキー

選択しているものを、移動

もう一回G押すと、頂点移動
x,y,zで、各軸移動になる

Zキー

オブジェクトの見え方が変わるよ

ワイヤーフレーム→線とかだけになる
ルック開発→テクスチャとかついてるキレイなやつ
ソリッド→灰色
レンダー→ルック開発との違いまだわかんない(´・ω・`)

Rキー

回転

2回押すと、回転の仕方が変わるよ

ALT+選択

つながってるものを一括選択

Sキー

太くとか出来るよ。

Scaleを大きくするとかかな。

右上の○と●

クリックすると、モードチェンジ。

GキーとかRキーのときに、円がでてきて、マウスホイールで円の大きさを変えれる

その円の範囲で変形が可能になるよ。

ボーンについて

付けたいのを選択、ボーンを選択

ctrl+pでメニューを出して自動割りあて的なのをやると出来るよ

点の結合

邪魔な頂点や辺が出てきたら。

邪魔なのを選択、右クリックして辺の融解とかで結合出来るよ

辺の複製

辺がもうちょっとほしい。

ctrl+rで増やせるよ

差分作りたい。表情とか

対象選んで、右のシェープキー

+を2回やって、出来たやつの値を変えていくと、なんといい感じに!!!

【SQL】インデックスあるのにクエリが遅いと言われて調査してみた話【742日目】

調査依頼が来ました

『このSQL、table_nameにindexもwhereも用意してるのに遅いからチェックしてー』って言われて、調査をしてみようと思いました。

select data.* from (select * from table_name left join ~~~~) as data where table_name.date ~~

あ、これは遅いですね(´・ω・`)

何が遅い?

EXPLAIN select data.* from (select * from table_name left join ~~~~) as data where table_name.date ~~

のように、EXPLAINを頭に付けてみると、実行どんなふうにするかデータが見れます。

すると、インデックスかけてたつもりのテーブルが、TYPE ALLで取得されているのがわかりました。
取得レコード数も数十万行。

あれー?whereかけたのにー?って思ったときに注目したのがここ。

全取得してからwhere?

from (select * from table_name left join ~~~~)

ああ、一回全取得してから、その後にwhereかけてるんだ。

全取得してるから重いし、indexとかそれ以前の話ですね。

先に絞り込んでみた

一旦要件的には変わらなさそうなので

select data.* from (select * from table_name left join ~~~~ where table_name.date ~~) as data

whereを移しました。

この直し方の何点は、orWhereとかがas dataの後に書かれたら困るとか、いろいろ。

でも、from内で絞り込まれたおかげで、5000件の中からの探査に探査に変わりました。

加えて、その絞り込み時点でindexも活用され、超スピードに。

意外とちょっとした工夫でクエリは早くなるし、遅くもなるんですねφ(・

phpunitで、factoryが動かない時があった話(環境や運で変わった)【741日目】

phpunitでテスト書いてた

いい感じに動いてるので、CircleCIで自動的にテストをチェックしようってことになった。

すると、動かない。動くんだけど、たまに動かない。

調べていくと、factoryがたまにうまく初期値を設定してくれてないっぽい。
毎回じゃなく、たまになので再現できず困った。

<?php

$factory->define(App\Models\User::class, function (Faker\Generator $faker) {
    return [
        'id'                  => $faker->randomNumber(),
    ];
});

こんなときに、idのデータがないと言われるやつ。

何があったか

複数定義してた

<?php

$factory->define(App\Models\User::class, function (Faker\Generator $faker) {
    return [
        'id'                  => $faker->randomNumber(),
    ];
});

<?php

$factory->define(App\Models\User::class, function (Faker\Generator $faker) {
    return [
    ];
});

たまに下が動いて、初期値がないクラスが作成されていた。

多重定義には気をつけようねってお話でした。

phpunitが凄く遅い→xdebugが動いていた【740日目】

自動テストが遅い

vendor/bin/phpunit tests/Unit/App

いつもどおり、自動テストを走らせてました。

いつも一個のテスト辺り1秒くらいかかっている。全部走らせると30分くらいかかる。
これはおかしいなと思った。

結論

xdebugが動いていた

xdebug、今回使っていないので消します。

xdebugの位置

php.iniファイルの該当する記述を消しましょう

php --ini

でパスを検索。見つけたので、書き換え。 vi /usr/local/etc/php/php-cli.ini。環境によってパスが違うので注意。

zend_extension=xdebug.so

この項目が邪魔なのでコメントアウト(左にセミコロン)

;zend_extension=xdebug.so

結果

30倍くらい早くなりました。1分で全部のテスト通った・・・

あまりに遅すぎる場合は、xdebug疑ってみてくださいな。