[Javascript] 元のエラーを渡せる Error Cause

ES2022 で Error に cause がオプションとして追加され、再スローするときに元のエラーを渡すことができます。

以下、MDNのドキュメントより。

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error/cause

サンプル

fetch でエラーになるサンプルを作りました。


function UserException(message, options) {
	this.message = message;
	this.name = 'UserException';
	this.cause = options.cause;
}

async function test() {
	try {
		const response1 = await fetch('http://example.co.jp/')
			.catch(err => {
				throw new UserException('fetch1回目でエラー', { cause: err });
			});
		const text1 = response1.text();

		const response2 = await fetch('http://example.co.jp/', { method: 'POST', body: text1 })
			.catch(err => {
				throw new UserException('fetch2回目でエラー', { cause: err });
			});
		return response2.json().catch(err => {
			throw new UserException('json()でエラー', { cause: err });
		});
	} catch (err) {
		throw new Error('エラーです', { cause: err } );
	}
}

test().catch(err => {
	console.log(err);
	console.log(err.cause);
})

console.log に出力された内容

fetch2回目でエラーになった場合の Devtools の表示

// Error: エラーです at test (sample:24:9)
// UserException {message: 'fetch2回目でエラー', name: 'UserException', cause: TypeError: Failed to fetch at test (sample:16:27)}

response2.json() で失敗した場合

// UserException {message: 'json()でエラー', name: 'UserException', cause: SyntaxError: Unexpected token 'T', "Text" is not valid JSON}
// SyntaxError: Unexpected token 'T', "Text" is not valid JSON

cause に渡すことで再スローされた先で簡単に元のエラーを受け取ることができました。

エラーの再スロー自体は一般的ですが、ES2022 以前には元のエラーを得る手段が標準で用意されていなかったのが不思議なくらいです。

エラー処理には悩まされることがよくあり、その場で処理することが難しい場合やまとめて処理しても問題ない場合などに使えそうです。

●●●

余談ですが、ブラウザによっては、cause とは別に stack が実装されているようですが、こちらは標準化はされなかったようです。stack という文字から Stack trace 的なものが格納されるのでしょうが、サーバーでの処理と違ってクライアント側なのでデバッグ後の消し忘れによる事故が多そうではあります。

[Solr]Admin UIでフィールドタイプの編集をできるようになった

Solr 9.1.0 から Admin UI でフィールドタイプの定義を編集ができるようになりました。
それ以前はフィールド定義の追加はできるもののフィールドタイプには手を付けることができない状態でした。

上のスナップショットは8.11.0のAdmin UIです。

9.1.0のAdmin UI。
“Manipulate Field Type” というボタンが増えています。このボタンを押すとフィールドタイプを追加するためのコマンドのテンプレートがテキストエリアとして表示されます。

プルダウンを”Delete FieldType Template”に変更したところ。
指定のフィールドタイプを削除するためのコマンドを編集できます。

プルダウンを”Replace FieldType Template”に変更したところ。
指定のフィールドタイプの定義を書き換えることができます。

従来から存在していたフィールドに対する操作が追加のみであったことを考えると、フィールドタイプに対する操作が一気に充実したことになります。

Solr 9.1.0 ではこれ以外にもAdmin UIへの機能追加がいくつかあったので、順次ご紹介していければと思います。

2022年に習得した新しい習慣

2022年も残す所あと僅か。
今年も色々あったと思うのですが、あっと言う間に過ぎ去ろうとしています。

厄年である私が新しい習慣を身につけることは中々ないのですが、珍しく新習慣を会得しました。

それは…。

 

トイレ掃除です。

 

2022年5月からですが、ほぼ毎朝トイレ掃除をしています。
ズボラな私が半年以上続けられるとはちょっとした奇跡かなと思ったりしています。

「トイレの神様」って歌が流行った時期もありましたが、改めて調べてみると存在するようで、「烏枢沙摩明王(うすさまみょうおう)様」というらしいです。

 

それはそれはキレイな女神様がいるんやで〜♪

 

と、聞いたことがあったので、どんな神様かなと期待して調べてみると「烏枢沙摩明王様」というらしく、めちゃくちゃ怖い顔をして、全身火炎に包まれた火の神様のようです。

最初のイメージと違うなと思ったのですが、昔のトイレは伝染病などの感染源になりやすい場所だったので、魔の入口のような考えがあったとのこと。

そのため怖い顔して、炎で浄化して、悪いものから守ってくれている存在として伝えられているようです。

 

私がトイレ掃除を初めたきっかけは、厄年だからだったからかもしれません。
今ではやらないと、落ち着かなくなっています。

 

まだまだトイレ掃除、初級者の私ですが、これからも続けてみようと思います。

NFC タグの有る生活

状況に合わせてスマートフォンで一連の操作をまとめて実行したいことがあります。

たとえば就寝前にマナーモードに切り替え、目覚ましをセットしてアラームの音量を設定する、といったことです。逆に起きた後はマナーモードを解除して音量を元に戻す必要があります。
こういった、定期的に必要になる一連の操作を手作業でやるのは、特に毎日となると意外に煩わしいものです。
これを NFC タグを使って自動化することができます。

NFC タグは Amazon で10枚500円くらいのものを買って使っています。
アプリは Android の Trigger を長く使っているのですが、どうも今は公開されていないようです。同じようなことができる Tasker というアプリもあります。

NFC タグは裏がシールになっていて必要な場所に貼り付けて使えますが、なかなか強力なシールなのであえて普通の両面テープを使っています。これを家の中のあちこちに置いています。

いくつか使い途を挙げてみます。

寝室
就寝時: 目覚ましセット、マナーモード切り替え、音量調整
起床時: マナーモード解除、音量調整
Trigger は1個の NFC タグでトグル動作させられるので、就寝<>起床の切り替えを1個でまかなえます。
スマホスタンドに貼ってあるので、立て掛けるだけで就寝モードになります。

玄関
外出時: マナーモード切り替え、Wi-Fiオフ
帰宅時: マナーモード解除、Wi-Fiオン
玄関の電源スイッチの横に NFC タグを貼り付けて、タッチしています。

自宅デスク
音楽自動再生。こちらもタグを貼ったスタンドに立て掛けると音楽をランダム再生するようにしています。

NFC タグをトリガにした自動操作は自分にとって地味ながら重要な機能なので、スマホ選びの際は NFC 搭載は必須の要件になっています。

絵画教室に通ってみた

最近、社会人向けアートスクールの無料体験を受けに行ってみて、その体験がとても楽しかったので入校しようと思いました。かなり個人的な散文になりますが、入校までの経緯や体験してみた思ったことなどを書きました。

受講までの経緯など

大きい括りでデザインという仕事を始めて、もう随分と年月が経ちました。この仕事を選んだ契機は絵を描くことが好きだったからみたいなだったように思います。

とはいえ、グラフィックであれWebであれUIであれデザインというのは課題を解決するための手法なので、プロジェクトの背景を理解したり、誰に対してどんなメッセージを伝えたいのか?を考えたり、プロダクトの利用シーンをパターン化して画面を設計するというような論理的な考え方が重要だったりします。僕個人に関してはイマジネーションを膨らますというよりロジックに当てはめていくような感触。

きっかけは絵を描くことが好きから始まったことなのに、何やら正反対のような行動を刷り込み続けてきた。一応それで飯が食えているので、そのことに対して特に何とも思ってないんですけど「そういやデザイン初めてから絵なんか全く描いてないな」ってふと思うことが今までに何度かありました。

デザインする=頭の使い方として論理的な振る舞いがある程度できるようになってきた、習慣化が出来てきたのはいいんですが、そういう考え方ばかりで固まってしまうような気がして…というところで、趣味の一環でいいので絵を描いてみよう、何の制約もないところで絵を描くとどうなるんだろうと思い立ったという感じです。

美術コースで油絵を選択してみた

絵を描くならイラストだと仕事に使えることもあるかもしれないですし、デジタルツールでの描画ならクリップスタジオとか普段使わないソフトに踏み込むことができる機会になると思うのですが、そこは敢えて全く関係ない美術コースを選択しました。油絵とか日本画って描いた経験がないのでその興味もありつつ、実際に絵の具を使って描いてみたい、絵を描くのにリアルに手を動かしてみたいと思ったからです。Webとも正反対な、どアナログな環境で制約のない頭の使い方に興味もあります。

実際に描いてみて思ったことなど

無料体験は3時間でデッサンか絵の具を使った描画体験が選べました。迷うことなく油絵を選択。時間が短いので内容としては、事前に用意されていたいくつかの写真を選び、そのモチーフごとに薄い鉛筆の下書きがあるのでそこに色を塗っていく塗り絵みたいなものでした。

油絵自体全く知らなかったので、まずは塗り方を教えてもらうことに。

油絵は文字通り絵の具をオイルで溶いて塗っていくのですが、そのオイルには大きく分けて揮発性油と乾性油の2種類があります。揮発性油はテレピンオイルが有名で溶解力が強くサラサラで絵の具の伸びも良く乾燥も早いので下絵に使われます。乾性油は絵の具の固着材として使われ実際に色を落としていく時はこちらを使います。今回使ったのはリンシードオイル。

モチーフで選んだ紫色のバラの写真の中から中間ぐらいの明度で軸になりそうな色を作っていきます。油絵はとにかく色を混ぜ倒します。例えば、葉は緑なのでビリジアンが使えるのかなと思いきや青と黄を混ぜて緑を作ります。そうしないと色が嘘臭くなるそうです。青と赤と群青とか焦茶などを混ぜながら狙った色を作って下塗りをしていく。下塗りではその絵の陰影をとって大まかなカタチを取ります。そして明るいところにリンシードオイルで色を落としていく。下塗りの時は絵の具もサラサラして伸びもいいので水彩みたいな感じでした。

下塗りまではあまり描いてる実感がなかったんですが、リンシードで落とし出してから世界がガラっと変わります。少しずつ色を落とし込んでいくことでどんどん表情が出てくる。これが楽しい。色の落とし方も様々でパレットで色を混ぜることもあれば、絵の中で色を混ぜたり、筆の種類や筆の運び方で表情が全然変わる。点で描いたり、薄めで大きく筆を使ったり、背景に色をつけてモチーフと背景の色を隣接させることでグッと存在感が出たり。色と色が半立体みたいな感じでどんどん重なるし、重ねれば重ねる程に表情が出てくる。明るい部分の色を作ることで下塗りとの陰影や塗り感の差が明確になってより輪郭ができていく。無心で色を追いながらこねくり回してました。

理屈を抜きにして色を追うことだけに集中する、そしてカタチになる。この感覚が新鮮でした。3時間終わってみて休憩も無しに没頭する。疲れているんですがなんだか頭がクリアな感じ。もちろん趣味なので納期も何もないし、初めてのことなので楽しいのは間違いないのですが、インスピレーションだけで色を追う、今の自分にないと感じてたズバリのことを体験できたのが幸いでした。

終わりに

体験したその日の内に入校を申し込みました。完全に自分の主観だけで自分で決めてそれがカタチになる。普通に生活しているとなかなかそういうことってないような気がします。それが何かの役に立つかどうかは分かりませんが、何か今後の自分の彩りだったり、地に足を付けるみたいなところに繋がるような気がします。まだスタートを切ったばかりですが、また何か思うことがあれば更新できればと思います。