JavaScript でのエラー抽象化とエラーチェイン
## なぜエラーの抽象化が必要なのか
例として、あるアプリケーションにローカルファイルへの操作を抽象化した次のような `Storage` クラスがあったとします。
“`javascript
import fs from “fs/promises”;
export class Storage {
async get(key) {
const buf = await fs.readFile(key, {
encoding: “utf-8”,
});
return buf.toString();
}
}
“`
`get()` メソッドにファイルパスを与えると、ファイルの内容を文字列として返します。
この `Storage` クラスを利用するコードの一例として、次のような `getConfig()` 関数があったとします。
“`javascript
async function getConfig(storage) {
try {
const config = await storage.get(“config.json
初めまして、株式会社Another works CTOの塩原です。
弊社では、[複業クラウド](https://cl.aw-anotherworks.com/)というサービスを運営しており、今回はそのサービスのAPI側の設計を公開したいと思います。
# レイヤー
レイヤーは三層構造でdomainレイヤー、applicationレイヤー、othersレイヤーという風にしています。
それぞれ外側への依存を禁止するような構成にしています。
レイヤーの設計はこの記事を参考にしています。ref: https://nrslib.com/adop/#outline__3_3_2
![スクリーンショット 2021-11-13 11.33.51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/114212/4b623b57-b3ba-8a8b-a8a3-401220fa4cab.png)
# 依存関係
![スクリーンショット 2021-11-18 18.35.24.png](https://qiita-image-s
# はじめに
WSL2(Ubuntu 18.04)を自分のWindows 10環境に導入して、Node.jsのアプリの環境構築のために`npm install`をしたら、`fetchMetadata` と表示されてから処理が止まってしまう現象に遭遇しました。
私の場合は、(多分)DNSの名前解決が出来ていないことが原因でした。
# 試すこと
– `registry.npmjs.org`にpingが通るか
→通らない場合、解決方法に進む
“`
ping registry.npmjs.org
“`
# 解決方法
名前解決が出来ていないので、下記の記事を参考にGoogle の DNS サーバー 8.8.8.8 を利用する設定する。
[WSL2 で dns の名前解決ができなくなって ネット接続できなくなった場合の対処方法](https://qiita.com/kkato233/items/1fc71bde5a6d94f1b982)
これでpingが通るようになって、npm installも実行できるようになるはずです。
“`
$ ping registry.npm
・開発の補助として、駄菓子感覚で使えそうなネタを集めてみました。
・Node.jsやnpmの導入方法は割愛させていただきます。
・javascriptに関しては、kotlinやswiftを使える方なら雰囲気で書けると思います。
・きっちりめな言語が良い場合はTypeScriptも利用できます。
# エンジニアっぽくYouTube動画をごにょごにょする
“`
$ npm init
$ npm install –save-dev ytdl
$ vim index.js
“`
“`index.js
const fs = require(‘fs’);
const ytdl = require(‘ytdl-core’);
ytdl(‘https://www.youtube.com/watch?v=xxxxxxxx’)
.pipe(fs.createWriteStream(‘video.mp4’));
“`
“`
$ node index.js
“`
・実行が終わるとvideo.mp4が生成される
・プログレスバーが欲しい場合は以下を参照
https://gist.gith
#遭遇したエラー1つ目
“`
Could not load the default credentials.
“`
これはどうやらgoogle関連のパッケージを利用をしている時に出るようです。私はテキストの読み上げに「@google-cloud/text-to-speech」を使っていたのでそれで出たみたいです。ざっくり言うとgoogle cloud登録しろよってことです。
[こちらのページ](https://ichi.pro/googlecloud-to-node-js-o-shiyoshita-tekisuto-yomiage-sofutowhea-178736867703029)を参考にしてgoogle cloudに登録したりして無事解決。
#遭遇したエラー2つ目
“`
Error:’FFmpeg/avconv not found!’
“`
テキスト読み上げ機能が完成してからbotをherokuにデプロイしたものの読み上げてくれない…
ローカル環境では動いてくれたのに…
どうやらherokuで音声ファイルを再生したりするのに必要なもんがないらしい。
ターミナル上で
Cybozuがkintoneアプリのカスタマイズ開発者向けに提供しているcustomize-uploaderを簡単に使えるようにしたスクリプトを作成しました。
普段、kintoneアプリのカスタマイズ開発をする中で、開発環境のアプリと本番環境アプリの2つを用意して、通常業務に影響が出ないようにカスタマイズ開発を進めています。このような使い方でkintoneアプリを使っている方はほとんどいないと思いますが、普段の業務で必要があったのでスクリプトを作りました。
カスマイズファイルをgitで管理して、開発環境で動作確認をしながら本番環境に反映させることを想定しています。
Githubのソースコードはこちらから
[kintone-customize-uploader](https://github.com/masashihamaguchi/kintone-customize-uploader)
customize-uploaderについての詳しい情報はこちらから
[customize-uploaderでカスタマイズ用のJS/CSSファイルをコマンドラインからアップロードしよう!](htt
こんにちは。
ここ2カ月ほど前から仮想通貨をいじり始めてすっかり仮想通貨のことしか考えられなくなってしまった者です。
ブロックチェーンとかNFTとかスマートコントラクトとか、単語は知っていたけど全く興味がなかったんですが、仮想通貨を触っていると技術的な部分にも興味が出てきました。
正直イーサチェーンのガス代の高さに辟易としているので、別のチェーンのスマートコントラクトを扱える言語があるならそっちをやりたいとは思うんですが、まあ考え方は一緒だろうと思い、とりあえず情報の多いSolidityを選びました。(後で調べたらVelasチェーンとかもSolidityで開発できるっぽい多分)
なので私は**「よし、じゃあまず開発環境を作ろう!」**と思い、Solidityへの入門は一旦置いておいて、まず開発環境を作ることにしました。
### 先に成果物
https://github.com/Kate-AC/sckit
## この記事で扱うバージョン
**Solidity v0.8.10**
**geth v1.10.12**
バージョンによって全然情報が違うのでものすごい苦労しまし
## 出会ったエラー
Docker Compose使わないとできるのに、使うとこんなエラーが出ました。
“`
Error: connect ECONNREFUSED 127.0.0.1:6379
“`
## TL;DR
`docker-compose.yml`と`app.js`はこんな感じにする
“`yml:docker-compose.yml
version: ‘3’
services:
express:
build: .
volumes:
– .:/app
tty: true
ports:
– 3000:3000
environment:
– NODE_ENV=development
– PORT=3000
– SESSION_SECRET=hogehoge
– REDIS_HOST=redis_db
– REDIS_PORT=6379
depends_on:
– redis_db
redis_db:
im
# aptからnodejsとnpmをインストール
“`
$ sudo apt install nodejs npm
“`
# npmからnパッケージをインストール
“`
$ sudo npm install -g n
“`
# nから最新版のNode.jsをインストール
“`
$ sudo n latest
“`
# nから最新のLTS版のNode.jsのインストール
“`
$ sudo n lts
“`
# 任意のバージョンのNode.jsのインストール
“`
$ n ls-remote
# 12.8.1をインストールしたい場合
$ sudo n 12.8.1
“`
# 参考
[Ubuntu18.04で任意のバージョンのNode.jsをインストールする方法](https://www.trifields.jp/how-to-install-node-js-on-ubuntu1804-3544)
# ターミナル再起動するたびにパスが通っていなくて「node: command not found」となる
nodebrewのバージョンは、表示されるのにnodeのバージョンが表示されない
困った。
“`
$nodebrew ls
v16.13.0
current: v16.13.0
$node -v
zsh: command not found: node
“`
↓
だが、source ~/.bash_profileを実行するとnodeのバージョンが表示される。
毎回パス反映を実行するのだるいじゃん。
“`
$source ~/.bash_profile
$node -v
v16.13.0
“`
↓
ターミナルのシェルに種類があるらしい(zsh・bashなど)
下記でbashに切り替える(パスワード入力)ターミナルを再起動
“`
$chsh -s /bin/bash;
“`
↓
ターミナル再起動後にnodeバージョン確認を実行、確認できた。
シェルの違いやパス反映を実行しなくてもよくなった理由については、後で追記予定。
今知りた
電力スマートメータとの通信をする機能が単体で利用できるものを,npmライブラリを開発・公開したので使い方を説明します。
## パッケージ情報
https://www.npmjs.com/package/e-smartmeter-echonet-lite?activeTab=readme
基本的な使い方はこのREADMEに書いてありますが,一応こちらでも記事にしてみます。
## 事前準備
1. **Bルート認証ID設定とBルート認証パスワード設定の準備:**
お住まいの管轄の電力会社に連絡して**Bルート認証ID設定とBルート認証パスワード設定**をもらってください。
小口契約(ドコモ電気とかそういうやつ)ではなく,最終的な電力会社(東京電力とか,そういう日本に11社くらいある大きいところ)です。電力メータの管理者にあたります。
そこそこ時間がかかります。
2. **Wi-SUNドングルの購入:**
スマートメータはWifiとかBluetoothとかではなくて,Wi-SUNという電波規格で通信します。普通のパソコンにはこの機能がないので,USBタイプのドングルを購入しましょう。こ
社内で [NestJS](https://nestjs.com/) を利用したアプリケーションを構築した後
exe ファイルへの変換と Windows サービスへの登録が必要になりました。
あまり情報がなかったので備忘録的に書き残します。
NestJS だけでなく Node.js を利用したアプリケーション全般に適用できる内容かと思います。
# 環境
– Windows10 64bit
– Node.js 14.18.1
# [NestJS](https://nestjs.com/) とは(一応)
– Node.js Web フレームワーク
– TypeScript の完全なサポート
– ORM(TypeORM, Sequelize)のサポート
– GraphQL のサポート
– Express を超える抽象化
– Angular のアーキテクチャから影響を受けている
– Guards を利用した認証
– WebSockets のサポート
など…Express で後々必要になる機能が最初から用意されており、ドキュメントも充実しています。
なにより初学者は TypeScrip
# はじめに
Node.jsでRDBSを試してみたいが、有料のDBサーバは使用したくないと思い、Heroku Postgres の無料枠で軽く試してみた際の備忘録になります。
修正点やアドバイスなどありましたらコメントいただけますと幸いです。
# バージョン
– Node : 14.17.1
# 手順
下記の手順で作成していきます。
1. Heroku Postgres 作成
2. Node.jsで設定を行う
# 1. Heroku Postgres 作成
まずはHerokuでDBを作成していきます。
今回はUI上から作成していきます。(CLIを使用することも可能)
### 1-1. 新規appの作成
下記画面の「New」から「Create new app」を選択して、新規appを作成します。
https://dashboard.heroku.com/apps
![new.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/533014/f33403df-88f6-3693-ee75-582c5ab
#はじめに
こんにちは!
今回は【Vue.js】デフォルトレイアウトのカスタマイズについてアウトプットしていきます!
デフォルトのレイアウトはページの基本的なレイアウト定義するものです。
#カスタマイズ法
`layouts⏩default.vue`を開きます。
“`default.vue