HYUDORO

勉強したことや日記など

2022年のふりかえりと2023年の抱負

昨年は多くの方々にお世話になり、誠にありがとうございました。本年もどうぞよろしくお願いします。 2021年のふりかえりはこちら。 hyudoro.hatenablog.com 仕事について 「マネーフォワード Pay for Business」リリース後の本格的な運用フェーズに入りまし…

cryptoをjestでmockする

crypto.randomUUIDを使う機会があり、どうやってmockできるかを調べたのでメモ。 spyOnでmockReturnValueすると、valueがundefinedになってしまった。別の方法を探していて、Object.definePropertyを使えば良さそうということだったので、valueにfunctionを…

2021年のふりかえりと2022年の抱負

job

本年は多くの方々にお世話になり、誠にありがとうございました。来年もどうぞよろしくお願いします。 2021年は、相変わらず世間的には大変な年ではありましたが、私にとっては大きな転機となった年でした。 4月までは、NEORTでデジタルアートのサービスを開…

フロントエンドエンジニアになってから6ヶ月が経った

job

10月が終わり、フロントエンドエンジニアとして働き始めて満6ヶ月になった。タイミング的にもいろいろとプロジェクトが落ち着いたり、新しい体制になったりしたので、振り返って今後以降に繋げていきたい。 3ヶ月過ぎたあたりで書いた記事はこちら。 hyudoro…

next/headの導入

それなりに大きなNext.jsのプロジェクトにnext/headを導入するにあたってやったことなどのメモ。 共通Headコンポーネント 下記では色々と簡略化してるけど、各ページ共通で使うtitleやmetaタグなどをまとめてprops経由で設定できるようにする。 // Head.tsx …

デザイナーからフロントエンドエンジニアにキャリアチェンジした

job

8月になって試用期間を終えたので、転職のことについて書いてみる。 今年5月からマネーフォワード社に入社し、福岡開発拠点でフロントエンドエンジニアとして働き始めた。それまでは7-8年ほどUIデザイナーをしており、今回が初めてのキャリアチェンジだった…

Jest + React Testing Libraryで同じようなDOMの状態チェックをする

同僚の実装を見て「こうすればできるのでは?」と思ってやってみたメモ。同じような構成のDOMがたくさんあって、それぞれにTest IDなどを振るのがめんどくさい場合に便利。 下記はfooラベルを持つラジオボタンがたくさんあるAppComponentのテストをするケー…

YupのSchemaオブジェクトで動的なバリデーションルールを設定する

例えば、最大値をユーザーごとに変えたいケースなど、APIから取得した値を使ってバリデーションしたいことがある。その際に、Schemaのあるファイルとデータを取得するファイルが同じなら、ただ変数を使えばいいのだけど、ファイルが別の場合の対応で悩んだ。…

はじめてのペアプロ with Live Share

この前仕事中に詰まった時に、「ペアプロしませんか?」とお誘いをもらい、おかげでスピーディに問題が解決&勉強になった。お互いにリモート勤務でもできる方法があったので、次に自分が他の人とやれるようメモっておく。 ツール VS Code Live Share Live S…

Google Data Analytics Certificateを始めてみた

フロントエンドエンジニアではあるけど、データをうまく活用していくことを求められており、興味が沸いたので勉強のためにはじめてみた。 自分はフロントエンドだけ極めたい、というエンジニアではない。フロントエンドに限らず、プロダクトを開発してビジネ…

Homebrewインストールがzshのパーミッション起因で失敗した

zsh

オフィシャルサイトのコマンドでHomebrewをインストールしようとしたときのこと。OSは10.15.7。 % /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" ... ... ... ==> Pouring portable-ruby-2.6.3_2.yosem…

JavaScriptで画像と動画を描画せずにプロパティの値を取得する

ブラウザ描画せずに、画像または動画のサイズなどのデータを取得したいときのTipsです。 まずは画像と動画をロードして返す関数をつくります。引数にファイルのパスを文字列として渡します。 ポイントはPromiseを使ってメディアファイルを取得する時にundefi…

findまたはfilterを使って配列の一番最後に該当する要素だけを取得する

配列の中から.find()や.filter()を使って条件に該当する要素を見つけるが、 findの場合は条件に該当した最初の要素を返し、filterの場合は複数の要素が帰ってくる場合がある。 条件に該当する配列の最後の要素だけ取得したい場合は、下記のように.reverse()…

SVGファイルを外部読み込みして色を変える

css

<svg fill="currentColor"> <use href="/img/foo.svg#id=bar" /> </svg> svg { color: red; } ポイントは下記 svgタグにfill="currentColor"またはfill: currentColorを設定する useタグのhref属性にidをつけ、svgファイル側のsvgタグにid属性を設定する useタグの代わりにimageタグを使っても画像を外部読み込みできるが、その…

特定の配列からインデックスだけの配列をつくる

foo[indicies[increment]]的な実装がしたくて、このfoo配列の要素のインデックスだけを羅列した配列indiciesを作りたかった。 const foo = ["a", "b", "c"]; const indices = foo.map((_, index) => { return index; }); console.log(indices); => [0, 1, 2]…

JavaScriptでフルスクリーンを検知する

各ベンダーごとにイベントリスナーを追加して、fullscreenchangeイベントを検知する必要がある。 (MDN見る限り、フルスクリーンAPIの諸々がSafariに対応してないのでちょっとめんどくさい) developer.mozilla.org document.addEventListener("webkitfullsc…

Netlify CMS+Nuxt.jsで管理画面を使えるようにする

jamstack.jp これを参考に各種設定してみた。 一点、ブランチ名がmasterではなくmainになってるので、その点は注意。

Nuxt.js+Netlify+GitHubでサイトを立ち上げる

Jamstackでポートフォリオサイト作りたかったので、いつも使ってるNuxt.jsをジェネレータとして、Netlifyにサイトをアップしてみた。 手順としては非常に簡単で、GitHubのリポジトリにNuxt.jsのプロジェクトをアップして、それをNetlifyに接続するだけ。 mai…

Vue.jsでTextareaフォーカス時にReturnキーを押したらSubmit処理する

KeyboardEventを型として、keyとcodeの両方で"Enter"を検出する。 下記の例では、0文字のときは送信しなかったり、改行したいときの対策でShiftを押している時は送信しないようにしている。 <textarea v-model="text" @keypress="onInputKeyPress"></textarea> onInputKeyPress(_e) { if (_e.key == "Enter" || _e.code == "En…

mobile-device-detect を導入した

Vueプロジェクトでデバイス検出するためにmobile-device-detectを使ってみた。 普段のサービス開発では、nuxt-device-detectを使っていて、これはそれに似たもの。 www.npmjs.com 導入 $ yarn add mobile-device-detect Vueファイルの中でいちいち呼び出すこ…

Vue Material Design Icon Components を導入した

普通のVueプロジェクトでマテリアルアイコンを使いたかったので、このライブラリを導入してみた。 クラスを指定するのではなく、コンポーネントを読み込む形式。 www.npmjs.com チートシートはこちらを参照。 cdn.materialdesignicons.com

Oculus Quest が届いた

今更?なのかもしれないけど、XR領域についてもっと知りたかったので手頃なOculus Questを購入した。 まず箱の装丁かっこいい、次に導入体験もめちゃかっこいい。 チュートリアルなのにめちゃくちゃ感動してしまって、手汗がひどかった。どうしてもっと早く…

Nuxt環境でFont Awesomeを使った

こちらを参考にやってみた。 qiita.com 使いたいタイプ(Solid, Regular, Brand)を読み込んで使う形式。有料版とはまた別なので注意。 yarnの場合のインストールコマンドは下記の通り。 # 必須 $ yarn add @fortawesome/vue-fontawesome @fortawesome/fonta…

GASで標準SQLが使えなくて困った

GASを使って、BigQueryのクエリを叩いて継続率を計測しようとしてた時に、こんな感じのエラーがでた。 GoogleJsonResponseException: 次のエラーが発生し、bigquery.jobs.query の呼び出しに失敗しました: Encountered " <INTEGER_LITERAL> "1 "" at line 1, column 58. Was e</integer_literal>…

Google スプレッドシートで冒頭/末尾からN文字削除する

BigQueryからダウンロードしたstring型のデータの冒頭に、シングルクオーテーションが含まれていて除去したかった。 冒頭からN文字消す =SUBSTITUTE(対象のセル,LEFT(対象のセル,1),"") 末尾からN文字消す =SUBSTITUTE(対象のセル,RIGHT(対象のセル,1),"") S…

Slackin + Herokuで Slack の招待アプリケーションをデプロイする

Creative Coding Fukuokaを主催してるのだけど、思うように人が集まらないので、meetup入るほどじゃないんだよな〜という人向けにSlackのワークスペースを作ってみた。以下Slackinで誰でも入れるようにするまでのまとめ。 Join Creative Coding Fukuoka on S…

知らない間に予約語を使っていて時間を溶かした

タイトルがすべて。 <div v-for="(case, index) in cases" :key="index"> こんな感じで繰り返し処理を書いていたら、 'v-for' directives require that attribute value. と怒られた。同じように書いてあるところをコピペしただけだし、原因が全くわからなかったので諸々調べたが、予約語使ってると気づくまで2</div>…

Processing3でsize()のパラメータに変数を使う

2015年からの話になるが、備忘録として書いておく。 Processing3系になってからsize()のパラメータに変数を使えなくなっている。例えばdata内にある画像と同じウィンドウサイズにしたいときなど、変数が使えないと困る。もしパラメータに変数を入れようとす…

TidalCyclesを使ったライブコーディングをYoutubeでライブ配信する方法

ライブコーディングの実践の場としてライブ配信して世界中の人に見てもらうのが良いのでは?と思い、いろいろ調べてやってみた。ライブ配信のやり方はそこら中に記事があるのでそっちを参照してください。この記事ではあくまで引っかかるポイントだけ載せて…

TidalCyclesの音色と実行パターンに関するメモ

音のパターンを数字や処理で見るのは直感的でないため、ある程度思い通りのリズムにするには実践しながらクセのようなものを体験し、習得しなければいけない。なので、いろいろ試していった所感をメモっていきたいと思う。 今回検証するのはnに関して、音色…