- 1. Azure Functions と LINE Notify の組み合わせ(Node.js を利用、ポータルで開発)
- 2. Node.jsのバリデーター「Ajv」で独自formatを作る(カスタムバリデーション)
- 3. nodejsのバージョン管理ツールVoltaを使ってみた
- 4. detaにNodeJSで入門(ほぼ自分用メモ)
- 5. TeamViewer IoTのAPIをNode.jsから触ってみたメモ #iotlt
- 6. chrome-driver のアップデート
- 7. npmでモジュールと同時にTypeScriptの型情報もインストールする
- 8. Firebase Authのカスタムクレームをターミナルから簡易に設定する
- 9. Reactのcreate-react-appの後npm startでエラー
- 10. GoogleAPIライブラリを使わずにGoogleアカウントでログインできるようにする
- 11. 【基礎】discord.js v13 でボットを作る ~コマンド発展~
- 12. React-Native でBlockchain SymbolのSDKを利用する
- 13. 【基礎】discord.js v13 でボットを作る ~コマンド作成~
- 14. 【基本】discord.js v13 でボット作成
- 15. obnizボタンを押すと画面に『格言』を表示
- 16. ApolloServerに脆弱性対策を実装する
- 17. コードインジェクション攻撃
- 18. L298dモータードライバーモジュール
- 19. Reactロードマップ~アプリ構築~
- 20. C#とNode.jsを連携する 最終章
Azure Functions と LINE Notify の組み合わせ(Node.js を利用、ポータルで開発)
この記事は、[Azure Functions](https://azure.microsoft.com/ja-jp/services/functions/) に HTTPリクエストを送ると、LINEアプリに通知が来る([LINE Notify](https://notify-bot.line.me/ja/) を利用)という仕組みを軽く試したものです。
Azure Functions周りの開発や設定は、[Azure のポータル上](https://portal.azure.com/)で行いました。
## 手順の概要
今回の手順は、おおまかには以下のとおりです。– LINE Notify のトークンを取得
– Azure のポータル上で Azure Functions を使えるようにする
– Azure Functions でのコーディング前の準備
– [axios](https://www.npmjs.com/package/axios) をインストール
– 環境変数を設定
– Azure Functions でのコーディング## 実際に進めていく
### LINE
Node.jsのバリデーター「Ajv」で独自formatを作る(カスタムバリデーション)
# 概要
ある時、typescriptで作成する入力フォームのバリデーションをしていて困ったことになった。
入力した値を、どうしても文字列の状態で上限値チェックしなければならなくなった。
具体的には、unixtimeが上限を超えないかどうかをチェックしなければならないのだが、値は文字列の状態で受け取り、また文字列の状態でレスポンスしなければならない。使用していたバリデーション用のライブラリがAjvで、色々と調べたら独自のバリデーションができることを見つけたので、備忘録として残しておく。
# 標準の文字列判定
普通に文字列判定をしたいだけであれば、以下で事足りる。“` typescript
import Ajv from “Ajv”const ajv = new Ajv()
// 検証スキーマを定義
const schema = {
type: ‘object’,
properties: {
timestamp: {
type: ‘string’,
},
},
};const timestamp = “2147483647”
nodejsのバージョン管理ツールVoltaを使ってみた
# Nodejsのバージョン管理ツール
googleトレンドを見ると、最近voltaが来ている感じ、、。
![スクリーンショット 2021-10-25 23.47.15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/712534/d480bf2d-79dd-f536-5b85-825027ee4687.png)**githubのスター数比較**
– [Node.js管理ツールの更新頻度とスター数を比較してみた](https://qiita.com/tora_oba/items/8f8b7d3e5fb62bc96a3f)# Voltaとは
>- Speed ⚡
– Seamless, per-project version switching
– Cross-platform support, including Windows and all Unix shells
– Support for multiple package managers
– Stable tool installa
detaにNodeJSで入門(ほぼ自分用メモ)
# deta (baas)
なんかこれが欲しかったけど今まではなかったもの感が否めない最高なBaas(?)。
無料&クレカなし&簡単。満足。最高。– データベース(NoSQL)
– Faas (lambdaとかFirebase functions みたいなやつ)
– ストレージこれらが**本当にお手軽に**使える。
大切なことなのでもう一度言う。
**本当にお手軽に**使える。
## インストールもろもろ
### CLIインストール
“`
# Windowsの方 (PowerShellで実行してください!)
iwr https://get.deta.dev/cli.ps1 -useb | iex# macの方
curl -fsSL https://get.deta.dev/cli.sh | sh“`
自分はWindowsユーザなのでmacは試せていません。エラーなどあったらごめんなさい。
### パッケージインストール
“`
npm init -y
yarn add deta
“`## 共通部分
いろいろインポートしておく。
“`
TeamViewer IoTのAPIをNode.jsから触ってみたメモ #iotlt
LTネタとして1時間くらい調べたくらいの雑観です。時間かけてないので間違いが多いかもしれません。
[TeamViewer IoT](https://teamviewer-iot.com/)ってサービスがあるんですね、TeamViewerは学生時代にリモートデスクトップで使ったことあった気がする。そのソフトのIoT…?ほうほう。
[IoTLTのグループでコメントをもらった](https://www.facebook.com/groups/IoTLT/posts/1914940855343686/)ので触ってみました。
> ちなみに次回のIoTLTは11/16です!
> https://iotlt.connpass.com/event/228734/また、こんなの作ったよー話はこちらのスライドに載ってます。
> ![](https://i.gyazo.com/e3733fff50250ba675d26c7f25465348.png)
> https://speakerdeck.com/n0bisuke2/teihuaruwang-rewen-ti-number-iotl
chrome-driver のアップデート
# 環境
“`bash
$ node –version
v15.3.0$ npm list chromedriver
app@1.0.0 ***\app
└── chromedriver@2.46.0
“`
* Google Chrome バージョン: 95.0.4638.54(Official Build) (64 ビット)
* [Selenium](https://www.selenium.dev/ja/documentation/)# npm run e2e 実行時にエラーになる
“`bash
$ npm run e2e> app@1.0.0 e2e
> node test/e2e/runner.jsStarting selenium server… started – PID: 80376
[Login] Test Suite
======================Running: Login
{ parser: “babylon” } is deprecated; we now treat it as { parser: “ba
npmでモジュールと同時にTypeScriptの型情報もインストールする
#準備
– `typesync`をインストールする“`bash
$ npm i -D typesync
“`– `package.json`のscriptsに以下を記述する
“`json
“scripts”: {
“postinstall”: “typesync”
},
“`
Firebase Authのカスタムクレームをターミナルから簡易に設定する
サービスの管理者でも、全権限がある人や、アルバイトで一時的に入った人など、細かく権限を設定したいものです。
Firebase Authのカスタムクレームという機能を使えば、細かい権限設定が行えます。https://firebase.google.cn/docs/auth/admin/custom-claims?hl=ja
しかし、その登録はAdmin SDKを介するので、**NodeのRepl環境で行うのは、認証情報の初期化がややこしい**です。
個人的にかなりつまづいたので、共有させていただきます。
# localのfunctionsディレクトリでNodeを起動
まず、ターミナルで`functions/`のディレクトリに移動してNode Replを起動します。
“`bash
cd XXX/functions/
node
“`
# サービスアカウントの秘密鍵を作成1. Firebase Consoleのプロジェクトの設定に移動する
Reactのcreate-react-appの後npm startでエラー
# 結構しょーもないことに時間食ってしまったので・・・
全く仕組みを理解していない自分が悪く、調べ方も悪かったので起動するまでの段で時間を食ってしまってテンションが下がったので恥を書き込んでおく反省投稿です・・・。Windows上でReactの勉強をしようとNode.jsの最新版をインストールし、本を見ながら、
“`
npx create-react-app my-app
“`
とかした後、“`
npm start
“`したらエラーが出て起動できなかったと。
エラーはこんなのです。
“`
:\Users\user\reacttest\my-app>npm start> my-app@0.1.0 start c:\Users\user\reacttest\my-app
> react-scripts startThere might be a problem with the project dependency tree.
It is likely not a bug in Create React App, but something you n
GoogleAPIライブラリを使わずにGoogleアカウントでログインできるようにする
Google Photosの画像をESP32のLCDに表示するのが最終目標ですが、まずは、Googleアカウントでログインできるようにするところを先行して投稿します。
前回の投稿 [Instagramにアップロードした画像をランダムにESP32に表示する]( https://qiita.com/poruruba/items/c25caeb77bbd1074c986) では、日ごろ定期的に上げているInstagramの画像を、ESP32に接続したLCDにフォトフレームとしてランダム表示していました。
今回は、Google Photosのアルバムをフォトフレームにします。
Google Photosにすると、スマホと同期できますし、Google Nest Hubにも表示できるため、都合がよかったためです。思いのほか、手間取ったので、手順を書き留めておきました。皆様の参考になれば幸いです。
2回に分けて説明していきます。* その1:Googleアカウントでログインできるようにします。
* その2:Google Photosからランダムな1枚の画像を取得できるようにします。以下
【基礎】discord.js v13 でボットを作る ~コマンド発展~
## 前書き
[前回](https://qiita.com/hitori_yuu/items/3b6c02fac5c610f0615a) はコマンドを作成しました。
今回はそのコマンドに情報を入れたり、コマンドを個々のファイルに分けたりしたいと思います。##開発環境
[前回](https://qiita.com/hitori_yuu/items/3b6c02fac5c610f0615a) と変わりません* Windows10
* npm 7.6.3
* node 17.0.1 (最小要件:16.6.0)
* discord.js 13.2.0## コーディング
[前回](https://qiita.com/hitori_yuu/items/3b6c02fac5c610f0615a) 作成したファイル(`deploy-commands.js`)の`commands`の部分を下記のものに書き換え + 書き加えます。“`diff_javascript:deploy-commands.js
– const { SlashCommandBuilder } = require(‘
React-Native でBlockchain SymbolのSDKを利用する
https://jp.symbolplatform.com/
iOS,Androidアプリにブロックチェーンの機能を追加したいと思い、ブロックチェーンSymbolを選定し開発を開始しました。SymbolのSDKはJavascript/Typescriptが用意されていますが、そのままではReactNative環境では動かすことが出来ず、以下に対応したことを纏めます
モバイルアプリにブロックチェーンを組み込んでいきましょう
# 環境
– ReactNative@0.64.2
– Expo@43.0.0
– Symbol-SDK@1.0.1
– Windows10(Macの方は適宜読替下さい)https://github.com/symbol/symbol-sdk-typescript-javascript
# Expoでプロジェクトを作成(or React-Native-CLI)
Expoでプロジェクトを作成し、Ejectします。EjectせずにExpoのまま実行しようとしても、linkが実行出来ないので失敗します。“`console
expo init symbol_
【基礎】discord.js v13 でボットを作る ~コマンド作成~
前回の記事 -> [【基本】discord.js v13 でボット作成](https://qiita.com/hitori_yuu/items/02eae8b14dc6a9c91c0d)
[2021年10月23日時点]
## 前書き
[前回](https://qiita.com/hitori_yuu/items/02eae8b14dc6a9c91c0d) はコーディングから起動までを行いました。
今回はさっそくコマンドを作成していきます。
今回参考にさせていただいたサイト -> [Creating commands](https://discordjs.guide/creating-your-bot/creating-commands.html#registering-commands) – Discord.js Guide## 開発環境
[前回](https://qiita.com/hitori_yuu/items/02eae8b14dc6a9c91c0d) と変わりません
* Windows10
* npm 7.6.3
* node 17.0.1 (最小要件:16.6.0)
*
【基本】discord.js v13 でボット作成
初投稿です。あたたかい目で見てくださると嬉しいです。
[2021年10月23日時点]
## 開発環境
* Windows10
* npm 7.6.3
* node 17.0.1 (最小要件:16.6.0)
* discord.js 13.2.0## v13の主な変更内容
* `Node.js` のv16.6.0を前提
* `Discord APIv9` に接続
* `discord.js` 本体と `@discordjs/voice` が分割(個々にインストールしなければならない)
* スラッシュコマンドをサポート
* `ClientOptions` の必須
* `message` が非推奨になり、 `messageCreate` が推奨される
* タイマー関連のメソッドが削除
* Intetnsを指定する際の `ALL`、`PRIVILEGED`、`NON_PRIVILEGED`は削除
* `Channel#startTyping`、`stopTyping` 等は削除
など…
詳しくは下記のサイトへ
[v13の主な変更箇所](https://scrapbox.i
obnizボタンを押すと画面に『格言』を表示
##はじめに
obnizのボタンを押し、格言APIが表示されるIoTを作成しました。APIはこちらを参考に引っ張ってきました。
https://zenn.dev/protoout/books/public-apis-api-get/viewer/01##前提条件
・Node.jsのインストール
・axiosのインストール
・obnizにボタンをつける##本題
完成は下記コード“`javascript
//obnizのボタンを押すとadviceを返します
var Obniz = require(“obniz”);
//APIを叩ける
const axios = require(‘axios’);var obniz = new Obniz(“XXXX-XXXX”); //obnizIDを入力
obniz.onconnect = async function () {
let button = obniz.wired(“Keyestudio_Button”, {signal:0, vcc:1, gnd:2});
while (true) {
ApolloServerに脆弱性対策を実装する
#はじめに
本エントリでは、`GraphQL`APIにおけるサーバサイド実装において、最も利用されている`Apollo Server`への脆弱性対策を2ポイントから実装していきます。
https://www.apollographql.com/docs/apollo-server/
# クエリの複雑さと深さの設定(GraphQL由来の脆弱性対策)
初期状態の `Apollo Server` では、クエリの複雑さと深さに制限に関する設定がされておらず、
* 攻撃者から複雑なクエリを実行される
* 攻撃者から深い階層のクエリを実行されるリスクが残っています。
この状態では、悪意のある攻撃者からサーバのリソースを無駄に消費し、サーバに負荷をかけるクエリを発行されてしまう可能性があります。
この2つの攻撃と対策について、説明していきます。## 複雑なクエリを実行されるリスクと対策
### 攻撃イメージ
`GraphQL` では、以下のようなクエリで簡単に大量のデータを取得可能です。
`first` は SQL でいう `limit` で、取得する件数を指定する引数です
コードインジェクション攻撃
こんにちは。
今日のお題はコードインジェクションについてです。
JapaScriptのコーディングには自信がある方にも、お役にたちそうな記事内容を見つけました。コードインジェクション攻撃で、注射針を思い出すのは私だけかと思っていたところ、こちらのブログ記事にも注射アイコンを発見。万国共通のイメージなんですね。
コーディングの段階からセキュリティを取り入れるという考え方が理にかなっているとはわかるけど、やっぱりちょっと面倒、、、という方も、是非、最後まで読んでみてください。
##JavaScriptとNode.jsでコードインジェクションを防ぐ5つの方法
https://snyk.io/blog/5-ways-to-prevent-code-injection-in-javascript-and-node-js/JavaScriptとNode.jsでコードインジェクションを防ぐ5つの方法
Liran Tal (リラン・タル)
2021年4月5日コードインジェクションを防ぐ安全なコードを書くのは簡単なようで実は、多くの落とし穴があります。たとえば、あなた自身がデベロッ
L298dモータードライバーモジュール
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1873014/30c415f7-bd90-029f-8e24-2fc8f068493a.png)
この記事はJLCPCBと共同で公開されています。JLCPCBはPCBのプロトタイプと製造の分野で10年以上の経験を持つ最も経験豊富なPCBメーカーのひとつであり、品質、納期、費
Reactロードマップ~アプリ構築~
#はじめに
この間、会社の先輩からReactが面白い!って話を聞いたので
自分用にまとめてみました。
#目次
1.環境
2.Node.jsのインストール
3.Reactのインストール
4.Reactのアプリを構築しよう!
5.まとめ
#1.環境
・Windows10
・Node.js
・React
#2.Node.jsのインストール
Reactを使ったアプリを開発する場合、Npde.jsとnpmが必須になります。
[Node.jsダウンロードサイト](https://nodejs.org/ja/)念のため、npmのアップデートをしておきましょう。
“`npm update -g npm
“`
#3.Reactのインストール
npmを使ってReactをインストールしましょう。
“`npm install -g create-react-app
“`
#4.Reactのアプリを構築しよう
Reactのアプリ構築にはnpxコマンドを使います。npmのバージョン5.2.0以降では自動でダウンロードされます。
もしない場合は手動でインストールしましょう。
“`npm install
C#とNode.jsを連携する 最終章
###EdgeJsは使わずにNode.jsの外部プログラム実行を利用する
前回はedgeJsには制約があり、ビルドでエラーが頻発することからコンソールアプリを使用することにしました。
**コンソールアプリを使うなら、nodejsに元々ある外部プログラム実行を使えばいいのではないか?という結論に至りました。**####Node.jsの外部プログラムの実行
https://nodejs.org/api/child_process.html
“`
const { exec } = require(‘child_process’);
const path = require(“path”);let pathStr = path.join(__dirname, ‘../ConsoleApp1/bin/Debug/net5.0/ConsoleApp1’)
let commendStr = pathStr + ” args1 args2″;exec(commendStr, (error, stdout, stderr) => {
if (error) {