20210108のNode.jsに関する記事は6件です。

discord.jsでURLの安全性チェックコマンドを作る

今回作るもの

1.discord上でURL解析を行うコマンドを実行
2.メッセージからURLを取り出す
3.node-fetchを利用してNortonSafeWebでサイトの安全性をチェック
4.結果をサイトのHTMLから取得
5.1が送信されたチャンネルに結果を送信

必要なもの

・node.js => node.js
・discord.js => npm i discord.js
・node-fetch => npm i node-fetch

コード

const discord = require("discord.js");
const fetch = require("node-fetch");
const client = new discord.Client();
const prefix = "!"

client.on("message", async message => {
if (!message.content.startsWith(prefix)) return; //ボットのプレフィックスからメッセージが始まっているか確認
 const args = message.content.slice(prefix.length).trim().split(/ +/g);
  const command = args.shift().toLowerCase();
if (command === "url") { //コマンド名
    try {
  const url = args[0]; //URLを取得
    if (!url) return message.channel.send("エラー : URLを指定して下さい。")
 fetch(`https://safeweb.norton.com/report/show?url=${encodeURI(url)}&ulang=jpn`).then(res => res.text()).then(norton => { //NortonSafeWebにアクセス
     if (norton.indexOf("安全性") != -1) {
  message.channel.send({embed: {
                title: "結果は安全です。",
                description: `ノートン セーフウェブが ${url} を分析して安全性とセキュリティの問題を調べました。`,
                footer: {
                    text: "Powered by Norton Safeweb"
                },
                color: 0xffd700
                }})
         } else if (norton.indexOf("[注意]") != -1) {
          message.channel.send({embed: {
                title: "結果は注意です。",
                description: `[注意]の評価を受けた Web サイトは少数の脅威または迷惑を伴いますが、赤色の[警告]に相当するほど危険とは見なされません。サイトにアクセスする場合には注意が必要です。`,
                    footer: {
                    text: "Powered by Norton Safeweb"
                },
                color: 0xffd700
                }})
         } else if (norton.indexOf("警告") != -1) {
           message.channel.send({embed: {
                title: "結果は警告です。",
                description: `これは既知の危険な Web ページです。このページを表示**しない**ことを推奨します。`,
                    footer: {
                    text: "Powered by Norton Safeweb"
                },
                color: 0xffd700
                }})
         } else {
              message.channel.send({embed: {
                title: "結果は未評価です。",
                description: `このサイトはまだ評価されていません。`,
                    footer: {
                    text: "Powered by Norton Safeweb"
                },
                color: 0xffd700
                }})
         }
        });
    } catch (err) {
        message.channel.send("エラー : 解析中にエラーが発生しました。")
    }
}
});

使い方

!url <解析したいURL>
で利用することができます!

最後に

初めての投稿なのでおかしいところや、わかりにくいところがあればコメントで教えて頂きたいです!

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Windows 環境で npm を導入する

npm を知らない人が、Windows 環境に npm を新規導入してみます。

導入環境

  • Windows 10 64bit
  • Windows コマンドプロンプト (cmd.exe) をある程度使えることを前提とします

概要

npm (Node Package Manager)

  • npm は、元々は Node.js というサーバサイド処理を行う JavaScript プログラムの中で利用されるモジュールパッケージの管理ソフトウェアです。
  • つまり、Node.js をインストールすれば npm も一緒にインストールされます。
  • npm でインストールできるモジュールパッケージは、オンライン上の npm レジストリサービスに登録されています。
  • npm レジストリサービスは、Node.jsで使用するものに留まらず、様々な言語や分野のパッケージが豊富に公開されており、世界最大のパッケージレジストリとなっています。
  • npm パッケージはソフトウェア開発者にとって有用な物が豊富にあり、システム開発では必須のものとなっています。
  • そのため、フロントエンドやバックエンドを問わず「システム開発者は導入しているのが当たり前」という風潮があるのか npm を導入していることを前提にした記事が多くあり、独学で学んでいる初心者に対しては混乱を招いていると思います。

Node.js

  • Node.js は元々はサーバーサイドで動作する JavaScript プログラムです。
  • その後裾野が広がり、現在ではコマンドラインやデスクトップアプリケーションなどのクライアントサイドプログラムも実行できる JavaScript プログラムの実行環境となっています。

nvm (Node Version Manager)

  • Node.js はバージョン間の互換性がありません。今後他バージョンのインストールが必要になった場合に困りますので、Node.js のバージョンを容易に切り替えられるnvm-windowsを導入し、nvm からNode.js をインストールすることを推奨します。

導入の流れ

  1. nvm (Node Version Manager) のインストール
  2. nvm 上で Node.js をインストール
  3. npm installコマンドの理解
  4. npm の設定ファイル (package.json) を作成

1. nvm (Node Version Manager) のインストール

Node.js のバージョンを容易に切り替えられるnvm-windowsを導入します。
こちらの GitHub (coreybutler/nvm-windows) よりnvm-setup.zipをダウンロードし、インストーラーに従いインストールします。

2. nvm 上で Node.js をインストール

インストール可能な Node.js のバージョンを表示します。

nvm list available

表示された一覧の LTS (Long Term Support) の一番上のバージョンをインストールすると良いでしょう。
(本稿ではバージョン14.15.4を選択)

nvm install 14.15.4

次のコマンドでインストールしたバージョンに切り替えます。

nvm use 14.15.4

以上で、npmコマンドを使用することが出来るようになります。

npm -version
6.14.8

3. npm installコマンドの理解

npm でパッケージをインストールするには、npm installコマンドを使います。
パッケージのインストールは、現在 nvm で切り替えている Node.js 環境自体にインストールするグローバルインストールと、カレントディレクトリにインストールするローカルインストールを選択できます。

コマンド 内容
npm install -g <package>
npm install --global <package>
<package>をグローバルインストールする。

全てのディレクトリからパッケージを実行することができる。
npm install <package> <package>をローカルインストールする。

カレントディレクトリからのみパッケージを実行することができる。
パッケージの依存関係を記載した設定ファイル (package.json) を事前に作成しておくことで、他PCでも同じパッケージ環境を容易に構築することができる。

ポータビリティ性の面からみても、特に事情がない限り基本的にはローカルインストールが推奨されるようです。
package.jsonを元に環境構築をする場合は、引数なしでnpm installを実行します。

コマンド 内容
npm install カレントディレクトリのpackage.jsonに記載されたパッケージをインストールする。

また、パッケージのローカルインストールでは、さらに開発用オプション-Dを付けることができます。

コマンド 使い分け
npm install <package>
npm install -S <package>
npm install --save <package>
開発者オプションなし。プロジェクトのビルドに必須のライブラリをインストールする場合はこちら。
package.jsondependenciesにパッケージ名が記載される。
npm install -D <package>
npm install --save-dev <package>
開発者オプションあり。コーディングや解析検証など開発時のみに必要なオプショナル的なライブラリをインストールする場合はこちら。
package.jsondevDependenciesにパッケージ名が記載される。

4. npm の設定ファイル (package.json) を作成

パッケージの依存関係を記載する設定ファイルを作成します。
プロジェクトのルートフォルダへ移動した上で npm の設定ファイルを作成します。

cd C:\VSCodeProject
npm init

ルートフォルダにpackage.jsonというファイルが出来ていれば成功です。

  [プロジェクトルートフォルダ]
+   ┝ package.json

package.jsonが存在するディレクトリで npm パッケージをローカルインストールするとpackage.jsonにパッケージの依存関係が自動的に記載されていきます。
なお、package.jsonが存在しない状態でパッケージのローカルインストールをした場合、パッケージの依存関係はどこにも記載されません。

5. 完了

以上で npm パッケージをローカルインストールする準備が整い、npm の導入が完了しました。

参考サイト

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

【初心者向け】Windows 環境で npm を導入する

npm を知らない人が、Windows 環境に npm を新規導入してみます。

導入環境

  • Windows 10 64bit
  • Windows コマンドプロンプト (cmd.exe) をある程度使えることを前提とします

概要

npm (Node Package Manager)

  • npm は、元々は Node.js というサーバサイド処理を行う JavaScript プログラムの中で利用されるモジュールパッケージの管理ソフトウェアです。
  • つまり、Node.js をインストールすれば npm も一緒にインストールされます。
  • npm でインストールできるモジュールパッケージは、オンライン上の npm レジストリサービスに登録されています。
  • npm レジストリサービスは、Node.jsで使用するものに留まらず、様々な言語や分野のパッケージが豊富に公開されており、世界最大のパッケージレジストリとなっています。
  • npm パッケージはソフトウェア開発者にとって有用な物が豊富にあり、システム開発では必須のものとなっています。
  • そのため、フロントエンドやバックエンドを問わず「システム開発者は導入しているのが当たり前」という風潮があるのか npm を導入していることを前提にした記事が多くあり、独学で学んでいる初心者に対しては混乱を招いていると思います。

Node.js

  • Node.js は元々はサーバーサイドで動作する JavaScript プログラムです。
  • その後裾野が広がり、現在ではコマンドラインやデスクトップアプリケーションなどのクライアントサイドプログラムも実行できる JavaScript プログラムの実行環境となっています。

nvm (Node Version Manager)

  • Node.js はバージョン間の互換性がありません。今後他バージョンのインストールが必要になった場合に困りますので、Node.js のバージョンを容易に切り替えられるnvm-windowsを導入し、nvm からNode.js をインストールすることを推奨します。

導入の流れ

  1. nvm (Node Version Manager) のインストール
  2. nvm 上で Node.js をインストール
  3. npm installコマンドの理解
  4. npm の設定ファイル (package.json) を作成

1. nvm (Node Version Manager) のインストール

Node.js のバージョンを容易に切り替えられるnvm-windowsを導入します。
こちらの GitHub (coreybutler/nvm-windows) よりnvm-setup.zipをダウンロードし、インストーラーに従いインストールします。

2. nvm 上で Node.js をインストール

インストール可能な Node.js のバージョンを表示します。

nvm list available

表示された一覧の LTS (Long Term Support) の一番上のバージョンをインストールすると良いでしょう。
(本稿ではバージョン14.15.4を選択)

nvm install 14.15.4

次のコマンドでインストールしたバージョンに切り替えます。

nvm use 14.15.4

以上で、npmコマンドを使用することが出来るようになります。

npm -version
6.14.8

3. npm installコマンドの理解

npm でパッケージをインストールするには、npm installコマンドを使います。
パッケージのインストールは、現在 nvm で切り替えている Node.js 環境自体にインストールするグローバルインストールと、カレントディレクトリにインストールするローカルインストールを選択できます。

コマンド 内容
npm install -g <package>
npm install --global <package>
<package>をグローバルインストールする。

全てのディレクトリからパッケージを実行することができる。
npm install <package> <package>をローカルインストールする。

カレントディレクトリからのみパッケージを実行することができる。
パッケージの依存関係を記載した設定ファイル (package.json) を事前に作成しておくことで、他PCでも同じパッケージ環境を容易に構築することができる。

ポータビリティ性の面からみても、特に事情がない限りローカルインストールが推奨されるようです。
package.jsonを元に環境構築をする場合は、引数なしでnpm installを実行します。

コマンド 内容
npm install カレントディレクトリのpackage.jsonに記載されたパッケージをインストールする。

また、パッケージのローカルインストールでは、さらに開発用オプション-Dを付けることができます。

コマンド 使い分け
npm install <package>
npm install -S <package>
npm install --save <package>
開発者オプションなし。プロジェクトのビルドに必須のライブラリをインストールする場合はこちら。
package.jsondependenciesにパッケージ名が記載される。
npm install -D <package>
npm install --save-dev <package>
開発者オプションあり。コーディングや解析検証など開発時のみに必要なオプショナル的なライブラリをインストールする場合はこちら。
package.jsondevDependenciesにパッケージ名が記載される。

4. npm の設定ファイル (package.json) を作成

パッケージの依存関係を記載する設定ファイルを作成します。
プロジェクトのルートフォルダへ移動した上で npm の設定ファイルを作成します。

cd C:\VSCodeProject
npm init

ルートフォルダにpackage.jsonというファイルが出来ていれば成功です。

  [プロジェクトルートフォルダ]
+   ┝ package.json

package.jsonが存在するディレクトリで npm パッケージをローカルインストールするとpackage.jsonにパッケージの依存関係が自動的に記載されていきます。
なお、package.jsonが存在しない状態でパッケージのローカルインストールをした場合、パッケージの依存関係はどこにも記載されません。

5. 完了

以上で npm パッケージをローカルインストールする準備が整い、npm の導入が完了しました。

参考サイト

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Node.jsを勉強する⑥ - コマンドライン引数の受け取り

はじめに

前回はJSONファイルの書き込みと読み込みについてまとめました。
今回は、コマンドライン入力した引数をjsファイル上で受け取って使う方法を記事にします。

教材

Udemy
The Complete Node.js Developer Course (3rd Edition)
https://www.udemy.com/course/the-complete-nodejs-developer-course-2/

引数配列の受け取り

まずは、app.jsという名前のファイルを作成します。コマンドラインから引数を受け取るには"process"を使います。
processだけでも作動しますが、入力した以外の膨大なデータを受け取っているので、"argv"を用いて、引数だけに、表示範囲を狭めます。
argvはargument vector(引数の配列)を意味します。今回はconsoleに出力します。

app.js
console.log(process.argv)

ターミナルでファイルを実行します。今回は"hello"と引数を入力しました。

ターミナル
node app.js hello

実行結果は以下の通りです。

ターミナル
[
  'C:\\Program Files\\nodejs\\node.exe',
  'C:\\Users\\admin\\Desktop\\node development\\test-app\\app.js',
  'hello'
]

1つ目の要素は、使っているパソコンの中で実行可能なNode.jsへのパス
2つ目の要素は、実行したjsファイルまでのパス
3つ目の要素が、入力した引数になります。

1つ目と2つ目は引数の値にかかわらず、同じものが表示されます。

配列の要素番号を指定することで、入力した引数のみを取り出すこともできます。引数の値は、3つ目の要素になるので、要素番号は2になります。

app.js
console.log(process.argv[2])

ファイルを実行すると、引数の"hello"のみが表示されます

ターミナル
node app.js hello

hello
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

【備忘録】puppeteerでurl取得

ご無沙汰してます。おおのんです。

URL取得する方法メモ。
現在ページのURLが期待値と比較したいけど、なぜか取得できない。

url取得できない例
let puppeteer = require("puppeteer");
let browser;
let page;

beforeAll(async () => {
  browser = await puppeteer.launch({
    args: ["--disable-web-security"],
    headless: false,
    slowMo: 30
  });
  page = await browser.newPage();
  jest.setTimeout(20000);
});

afterAll(() => {
  browser.close();
});

describe("TEST", () => {
  test("toMypage", async () => {
    // 画面移動
    await page.goto("http://localhost:8000/mypage");
    // マイページへ遷移成功
    await page.waitForTimeout(5000);
    // location.hrefで完全なURL取得できるから、比較する
    await expect(location.href).toEqual("http://localhost:8000/mypage");
    await page.close();
  });
});
結果
● LOGIN TEST › Login
    expect(received).toEqual(expected) // deep equality
    Expected: "http://localhost:8000/mypage"
    Received: "http://localhost/"

・・・アカン。
Received: "http:/localhost/"になる。

こうすると取得できる。

取得できる例
// ~略~
  // location.href => url.path()にする
    await expect(url.path()).toEqual("http://localhost:8000/mypage");
// ~略~
結果
● LOGIN TEST › Login
    Test Suites: 1 passed, 1 total
    Tests:       1 passed, 1 total

通った~。

【puppeteer/puppeteer】 how to get current url ? #2215
で既出でした。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

メール機能ってどうやるの?amazonSES編

はじめに

前回に引き続き、メール機能について学習したのでアウトプットしていきます
今回はAmazon SESを使っていきます
Amazon SESを使う前提として

  • AWS にサインアップ

    (AWSアカウントをすでに作成済みの方はOKです!)
  • E メールアドレスまたはドメインの確認(ID検証)

    Amazon SES の使用を開始した時点では、E メールを送受信するためには、Amazon SES メールボックスシミュレーターと検証済み E メール ID のみであるためです。
    今回はEメールアドレス検証を行っていきます。(ドメインの場合も同様)
    image.png
    Email Addressesを選択し、Verify a new Email Address からメールアドレスの検証を行ってください。
    image.png

  • アカウントの詳細を入力

が必要になってきます。

メール送信

Amazon SES では、

  • Amazon SES コンソール
  • Simple Mail Transfer Protocol (SMTP)インターフェイス
  • Amazon SES API

など、E メールを送信するためのいくつかの方法を利用できます。

この中でAmazon SES APIを使ってみます

Amazon SES API

Amazon SES APIを用いることで以下のことができます。

  • Amazon SES クエリ API を HTTPS 経由で直接呼び出し(ムズイらしい)
  • AWS Command Line Interfaceの使用
  • AWS Tools for Windows PowerShellの使用
  • AWS SDK の使用

aws初心者の私は一番簡単にできそうなAWS SDKを使っていきます!
AWS SDKは Amazon SESオペレーションだけでなく、基本的な AWS 機能 (リクエスト認証、リクエストの再試行、エラー処理など) も提供します。

AWS SDK 経由でAmazon SES API

Node.js 内の AWS SDK for JavaScriptを使用します!(SDKにはPythonやjava,PHPなど様々な言語に対応したものが用意されています)

image.png

セキュリティのベストプラクティスについては、AWS アカウントのアクセスキーではなくIAM ユーザーのアクセスキーを使用します。
AWS アカウントの認証情報によってすべての AWS リソースへのフルアクセス権を付与するため、この認証情報は安全な場所に保存しておき、AWS の日々の操作には IAM ユーザーの認証情報を使用するらしいです。

では早速、AWS アクセスキーを作成していきましょう!
awsのベストプラクティスでは、AWS アクセスキーの作成手順として以下のように紹介されています。

1: IAM ユーザーを作成し、そのユーザーのアクセス許可を可能な限り狭く定義します。
2: その IAM ユーザーにアクセスキーを作成します。

image.png

AWS アクセスキーは、アクセスキー ID とシークレットアクセスキーで構成されます。

SESの環境を構築

sdkをインストールします

npm install aws-sdk --save

aws-sdkで接続情報の設定

基本的にはIAMロールを使って行うらしいのですが、よくわからないので別の方法で!
クレデンシャル(~/.aws/credentials)もよく使われるらしいですが、今回はenvに設定しました~

dotenv モジュールのインストール

$ npm install dotenv

ルートフォルダーに.envファイルを作り記述します。

.env
aws_access_key_id = アクセスキー
aws_secret_access_key = シークレットアクセスキー

最後にmail.jsをルートフォルダーに作り、最も簡単なE メールテンプレートの作成をします。

image.png

node mail.js

を実行すれば…

image.png

届きましたね。

おまけ

awsを使うにあたり調べた用語を紹介します

ロール

特定のアクセス権限を持ち、アカウントで作成できる IAM アイデンティティです。IAM ロールは、IAM ユーザーといくつかの類似点を持っています。ロールとユーザーは、両方とも、ID が AWS でできることとできないことを決定するアクセス許可ポリシーを持つ AWS ID です。ただし、ユーザーは 1 人の特定の人に一意に関連付けられますが、ロールはそれを必要とする任意の人が引き受けるようになっています。また、ロールには標準の長期認証情報 (パスワードやアクセスキーなど) も関連付けられません。代わりに、ロールを引き受けると、ロールセッション用の一時的なセキュリティ認証情報が提供されます。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む