#author("2024-01-07T03:20:23+00:00","default:hotate","hotate")
#author("2024-01-07T03:22:24+00:00","default:hotate","hotate")
#contents
&tag(Lambda,JavaScript);

* 概要 [#t8a5aaa1]
- [[Node.js を5分で大雑把に理解する - Qiita>https://qiita.com/hshimo/items/1ecb7ed1b567aacbe559]]
 使ったことないけど、軽く理解はしておきたい人
 本格的に勉強する前に、大まかな概要を知りたい人

** 実行 [#i44275fb]
- [[node.jsを使ってjsファイルを実行する方法 | q-Az>https://q-az.net/node-js-pursue/]]
 node test.js

** v14.x [#d7fcb734]
- [[How to migrate from querystring to URLSearchParams in Node.js>https://www.linkedin.com/pulse/how-migrate-from-querystring-urlsearchparams-nodejs-vladim%C3%ADr-gorej?trk=articles_directory]]
 But doesn't give us any clue how to actually migrate. This article fills this void and provides a migration guide.
-- コメント:parse処理の置換えは容易だった。(2022/01/02)
- [[Replacing query-string with Native URLSearchParams - DEV Community>https://dev.to/nerdyman/replacing-query-string-with-native-urlsearchparams-4kdg]] (2021/02/12)
 URLSearchParams returns an iterator to get values. The simplest way to get the parameters as an Object is to use Object.FromEntries on the interface instance:
 const parsedParams = Object.fromEntries(params);
-- コメント:上記の方法でパラメータを取得できた。(2022/01/02)
- [[URLSearchParams という便利な機能が増えてた>http://var.blog.jp/archives/72768336.html]] (2017/10/18)
 keys/values/entries
 ;[...params.entries()]
 // [ ["a", "3"], ["b", "0"], ["a", "1"], ["c", "2"] ]

* [[AWS]] [[Lambda]] [#ufb93ceb]
** Node-lambda [#if2aa43a]
- [[node-lambda>https://www.npmjs.com/package/node-lambda]]
 Command line tool to locally run and deploy your node.js application to Amazon Lambda.
-- 導入
 $ npm install -g node-lambda
-- 実行
 $ node-lambda run


* 導入 [#mccd6da1]
** AmazonLinux [#l7a0e59d]
- [[James Doyle | Install the latest Node.js on Amazon Linux>https://ohdoylerules.com/content/snippets/install-latest-nodejs-on-amazon-linux/]]
 Installing the latest version of Node.js on the Amazon linux AMI can actually be a little painful.
 Here is a script for doing just that.
-- コメント:v7.10をインストール出来た。(2017/11/19)
 $ node -v
 v7.10.1


** NodeBrew [#x3609e89]
- [[NodeBrewインストール編 - Qiita>http://qiita.com/ebisennet/items/15c3c9fdb04e66db6323]]
 そもそもNodeBrewってなに?
 Node.jsのバージョン切り替えを簡単に行えるツール

** npm [#tfeedb7f]
- [[フロントエンド開発の3ステップ(npmことはじめ) - Qiita>http://qiita.com/hashrock/items/15f4a4961183cfbb2658]]
 フロントエンド開発で覚えるべき3つのコマンド
 以下の3つだけ覚えておきましょう。
 npm init
 npm install
 npm run
 これだけ覚えれば、ひとまずフロントエンド開発を進めることができます。
 また、package.json内に、どのライブラリを取ってきたのか記述することができます。
 下記のように、saveオプションをつけて実行します。
 $ npm install パッケージ名 --save
- [[勉強メモ/npmの使い方(node.js=v0.11.16, npm=2.3.0, 2015-03時点) - Qiita>https://qiita.com/msakamoto_sf/items/a1ae46979a42d6948ebd]]
 ローカルインストールしたパッケージを削除
 npm uninstall パッケージ名
- [[いまさら聞けない!npmのこれだけは知っておきたい基礎知識 - WPJ>https://www.webprofessional.jp/beginners-guide-node-package-manager/]]
 本記事では、npmの基礎知識を紹介し、パッケージをローカルモード、グローバルモードでインストールする方法や、削除や更新の方法、特定のバージョンのパッケージをインストールする方法を説明します。package.jsonでプロジェクトの依存オブジェクトを管理する方法も解説します。
- [[npmのpackage.jsonを最新のバージョンに更新する>https://omachizura.com/2016/02/npm-package-new.html]]
 npmは以下のコマンドを実行すれば、package.jsonに記載されているバージョンに更新されます。
 $ npm update

* モジュール管理 [#t09bb664]
- [[グローバルにインストールしたnode moduleがnot foundになる時の対処 - Qiita>https://qiita.com/joe-re/items/12987cdeee506dea3889]]
 下記コマンドでグローバルのnode_modulesディレクトリの場所を調べます。
 npm root -g
- [[npm install -gでグローバルインストールしたのに見つけてくれない - Qiita>https://qiita.com/chkk525@github/items/ea1c2a110bf74efd843c]]
 ホームディレクトリにある~/.bash_profile`にグローバルなパスを追加する
 echo export NODE_PATH=$(npm root -g) >> ~/.bash_profile
 source .bash_profile


** 更新 [#tcf956e5]
- [[Node.jsとnpmをアップデートする方法 – Rriver>http://parashuto.com/rriver/tools/updating-node-js-and-npm]]
 どのGlobalパッケージが古くなっているかを確認するには、以下のコマンドを使います。
 npm outdated -g
- [[npm-outdated | npm Docs>https://docs.npmjs.com/cli/v10/commands/npm-outdated#workspace]]
 This command will check the registry to see if any (or, specific) installed packages are currently outdated.
-- コメント:なぜか結果が表示されず、"--all"オプションを付けると表示された。([[2024]]/01/07)
- [[npmでプロジェクトの依存関係の確認や、依存パッケージのバージョン確認などを行ってみる - CLOVER>https://kazuhira-r.hatenablog.com/entry/2022/11/20/172049]] ([[2022]]/11/20)
 npmプロジェクトの依存関係を確認したり、新しいバージョンの確認、更新を行うnpmコマンドを確認してみました。
- [[npm installしたパッケージの更新確認とアップデート(npm-check-updates) - dackdive's blog>https://dackdive.hateblo.jp/entry/2016/10/10/095800]]
 npm-check-updates を使う
 というわけで色々調べていると、更新確認とアップデートに便利な npm-check-updates というパッケージを見つけた。
-- コメント:ncuコマンドは正常に実行できた。(2024/01/07)


** 脆弱性 [#q9867bdc]
- [[npm package をアップデートしたい時の便利なコマンド #JavaScript - Qiita>https://qiita.com/ta1m1kam/items/2f2ac9d5197916a49132#npm-audit]]
 npm audit
 auditコマンドは、プロジェクトで構成されている依存関係の説明をデフォルトのレジストリに送信し、既知の脆弱性のレポートを要求する。


* 非同期処理 [#k3d7e322]
** callback [#pcceee5b]
- [[Node.js callback関数の書き方 - Qiita>https://qiita.com/shghdyji/items/42ab8b364f97bc1a22c4]]
 コールバック関数はrequestにたいしてのリアクションを関数として定義したもの。特に非同期処理の際にはいつ結果が帰ってくるのかがわからないため帰ってきたことを教えてくれるものになっている。


** async/await [#t0a73566]
- [[JavaScriptは如何にしてAsync/Awaitを獲得したのか Qiita版 - Qiita>https://qiita.com/gaogao_9/items/5417d01b4641357900c7]]
 第一章 ~人類はsetTimeoutを採用しました~
-- [[JavaScriptは如何にしてAsync/Awaitを獲得したのか: がおさんち 技術部屋>http://gao-tec.seesaa.net/article/427643074.html]]
- [[JavaScriptのasync/awaitがPromiseよりもっと良い - Qiita>https://qiita.com/Anders/items/dfcb48d8b27ceaffb443]]
 Node.js V7.6からasync/awaitが正式に使えるようになりました。
- [[async/await 入門(JavaScript) - Qiita>https://qiita.com/soarflat/items/1a9613e023200bbebcb3]]
 async function(asyncで宣言した関数)は何をするのか
- [[async/awaitを使った非同期処理の書き方 - 30歳からのプログラミング>https://numb86-tech.hatenablog.com/entry/2017/10/08/192300]]
 async/awaitによって、非同期処理のループもシンプルに書けるようになる。
 複数の非同期処理を直列で処理したいとき、役に立つ。
- [[async/awaitが手になじむまで色々書いてみるよ〜 - 俺、サービス売って家買うんだ>http://www.ie-kau.net/entry/2017/09/30/async-await%E3%82%92%E6%89%8B%E3%81%AB%E3%81%AA%E3%81%98%E3%81%BE%E3%81%9B%E3%82%8B]]
 promiseの配列をPromise.allの引数に与える
 これが一番シンプルに並列処理の結果を直列に受け取れる気がする。
- [[僕でもわかるasync/await - Qiita>https://qiita.com/yatemmma/items/59848c50dcdcbe827bad]] (2019/9/3)
 forEachなどのコレクション用の関数内で利用するときは注意が必要です。
 以下は構文エラーにはなりませんが、1週目と2週目が同時に実行されてしまいます。

** async [#y2f1bb53]
- [[node.jsのいろいろなモジュール17 – asyncで非同期処理のフロー制御 | Developers.IO>http://dev.classmethod.jp/server-side/asyn/]]
 asyncモジュールとは、複数の非同期処理のフロー制御が可能になります。
 非同期APIを指定した順番で実行したり、処理結果を受け取って次の関数へ渡したりすることもできます。


* モジュール例 [#zd230ec9]
** dotenv [#te5f5c42]
- [[Nodeプロジェクトで環境依存の設定の管理方法 - Qiita>http://qiita.com/ueokande/items/80048f886082fea5b776]]
 dotenvモジュールは、.env ファイルから process.env へ環境変数をロードするモジュールです。dotenvを使うと、プロジェクトのコードから独立した環境依存の設定を、ローカル単位で管理することができます。

** Feedparser [#rcc6236e]
- [[Node.js の Feedparser を使って RSS フィードを JSON 形式で取得しよう | phiary>http://phiary.me/node-js-feedparser-rss-json/]]
 Feedparser とは, RSS や Atom といったフィードを json 形式にパースすることができる Node.js のモジュールです.

** [[Socket.IO]] [#nd50bc10]
- [[Node.jsからSocket.IOを使うための事前知識 - Qiita>https://qiita.com/ij_spitz/items/2c66d501f29bff3830f7]]
 Node.jsからSocket.IOを使う上で知っておくべきWebSocketの背景やSocket.IOの知識についてまとめてみました。
- [[[Node.js] Socket.ioで双方向通信チャットアプリを構築 〜 JSおくのほそ道 #005 - Qiita>https://qiita.com/hosomichi/items/66b309a6c3c20d910218]]
 今回はここまで学んだ技術、コールバック・イベント処理/モジュールの利用/HTTP通信を活用しつつ、WebSocketによる双方向リアルタイム通信アプリケーションを作ってみます。

** axios [#pfc9506f]
- [[axios/axios: Promise based HTTP client for the browser and node.js>https://github.com/axios/axios]]
 Promise based HTTP client for the browser and node.js 
- [[Simple Async/Await Example>https://gist.github.com/wesbos/1866f918824936ffb73d8fd0b02879b4]]
  Node 7.6 has async/await! Here is a quick run down on how async/await works
- [[Node.jsでAysnc/Awaitを使ってHTTPリクエストを行う5つの方法>https://www.twilio.com/blog/5-ways-to-make-http-requests-in-node-js-using-async-await-jp]]
 AxiosはデフォルトでJSONレスポンスも解析します。

** request [#k9954d7d]
- [[node.js requestモジュールの代替 axiosの使い方 | CFAutoG 自動化>https://cfautog.tokyo/2020/05/01/node-js-request-axios/]]
 requestの代替ライブラリのスレッドでいくつか挙げられていますが、コメント見てると多かったaxiosが良さげかもしれません。

** fetch [#g1762788]
- [[Node.jsでfetchを使えるようにする | 酒と涙とRubyとRailsと>https://morizyun.github.io/javascript/node-js-npm-library-node-fetch.html]]
 Node.jsでブラウザと同じようにfetchメソッドを使えるようにする「node-fetch」の紹介です。

* デプロイ [#kfebeba2]
** [[Makefile]] [#bcd5cb00]
- [[AWS LambdaのFunctionを開発するときのMakefile - c-bata web>https://nwpct1.hatenablog.com/entry/lambda-makefile]]
 LambdaだけならAWS CLIで十分簡単に操作出来るのでMakefileを用意してみました。

** [[Bitbucket]] [#x792bd90]
- [[Bitbucketから直接AWS環境にデプロイする方法 | Engineer Log>https://engineer-log.net/index.php/2016/12/07/bitbucket-aws-deploy/]]
 利用するものはAWSのCodeDeployとBitbucketのAWS CodeDeploy for Bitbucketだけです。

** Claudia.js [#vdde0769]
- [[Node.jsでLambdaを開発するならClaudia.jsがオススメ - Qiita>https://qiita.com/gaishimo/items/5ae6b35ebd4ae9434994]]
 Claudia.js自体はフレームワークではなく、シンプルなコマンドラインによるデプロイメントツールですが、API Builderという拡張ライブラリを使うことにより、API GatewayとLambdaを組み合わせたWeb APIを簡易に作成することが可能になります。


* 処理 [#m000d173]
** [[日時]] ([[ISO8601]]) [#r0420cbd]
 function isoDateString(d){
   function pad(n){return n<10 ? '0'+n : n}
   return d.getUTCFullYear()+'-'
     + pad(d.getUTCMonth()+1)+'-'
     + pad(d.getUTCDate())+'T'
     + pad(d.getUTCHours())+':'
     + pad(d.getUTCMinutes())+':'
     + pad(d.getUTCSeconds())+'Z'
  }

** [[ログ]] [#j9c6b7c6]
- [[(初心者向け) Node.js コンソール (console) の使い方>https://qiita.com/tadnakam/items/dda690bb184fdc74851f]]
 console.log(data, arg1, arg2, ...) で data 部分にフォーマットを指定できるので、変数 arg1, arg2, ... を見やすくフォーマット化して stdout へ出力できる。
 %j : JSON
- [[JavaScript でオブジェクトを文字列に変換する | Delft スタック>https://www.delftstack.com/ja/howto/javascript/javascript-object-to-string/#console.log-%25E3%2581%25A8o-%25E3%2582%2592%25E4%25BD%25BF%25E7%2594%25A8%25E3%2581%2599%25E3%2582%258B]]
 console.log('Item: %o', item);

** サービス [#i1a3c284]
- [[initd-foreverでnodeプロセスを自動起動する - Qiita>https://qiita.com/m1takahashi/items/f8fffdcc3c32055be169]]
 プロセス一覧確認
 # forever list
 ログ確認
 # forever log

* 関連 [#ffa9d306]
#related

トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS