- 0.0.1. 大量データの処理をCloud Run x Cloud Tasksで解決した話
- 0.0.2. App Service on Linux 上の Node アプリケーションを VS Code でリモートデバッグする方法
- 0.0.3. hygenでフロントエンド開発を楽にする
- 0.0.4. Node.jsからDiscordに通知を送るメモ(Fetch API)
- 0.0.5. Notonのページの最終変更の内容を取得してみる
- 0.0.6. Notion APIでデータベースが変更されたか監視してみる #notion
- 0.0.7. 【コードリーディング】Node.js Pathモジュールのjoinメソッド成長記録(2010年〜2022年)前編
- 0.0.8. Pipedreamを使ってリストに入れたツイッターアカウントのツイートを監s…記録する
- 0.0.9. Web日記構築備忘録
- 0.0.10. Node.jsを使って、BigQueryからデータを取得するWebAPIを作る
- 0.0.11. mermaidを描画してくれるmarkdownプレビューア
- 0.0.12. connpass更新のPuppeteerアプリをHerokuからAzure WebApssに移行
- 0.0.13. [Node.js]ApplicationInsightsクライアントの実装
- 0.0.14. いつの間にかインストールされてた「-」というnpmパッケージについて
- 0.0.15. NexusスイッチとNMOSを連携させてみた
- 0.0.16. Node.js と Deno と Bun のどれを使えばいいのか
- 0.0.17. NestJS GraphQLリゾルバ用のCacheInterceptorを実装してみた
- 0.0.18. [windows][volta]windowsのnodeバージョン管理ツールとしてvoltaを利用してみた。
- 0.0.19. react4 backendとの通信(hook)
- 0.0.20. nodenvライブラリをインストールしたはずなのに、nodenvコマンドが使えなかったので解決してみた。[パスを通せば解決。]
- 1. 問題
- 2. 結論
- 3. 結論に至るまで
大量データの処理をCloud Run x Cloud Tasksで解決した話
この記事は株式会社ビットキー Advent Calendar 2022 8日目の記事です。
Home Product所属の @uminoooon18 が担当します。# はじめに
この記事では、システム間の大量データ連携処理を Cloud Run, Cloud Tasks などのGCPサービスを利用して構築した際にハマった事と、改善のために工夫した事を紹介します。
Cloud Run, Cloud Tasks 何それおいしいの?という方や、
GCPのサービスで大量処理を取り扱うための知見を深めたい方の助けになれば幸いです。## 目次
[1. Cloud Run, Cloud Tasksとは](#1-cloud-run-cloud-tasks-とは)
[2. 今回のシステム間データ連携に求められる要件](#2-今回のシステム間データ連携に求められる要件)
[3. システム全体像](#3-システム全体像)
[4. ハマったポイント](#4-ハマったポイント)
[5. 解決策](#5-解決策)# 1. Cloud Run, Cloud Tasks とは
## Cloud R
App Service on Linux 上の Node アプリケーションを VS Code でリモートデバッグする方法
# はじめに
App Service on Linux Node Runtime では、[リモートデバッグ機能がプレビュー提供](https://learn.microsoft.com/ja-jp/azure/app-service/configure-language-nodejs?pivots=platform-linux#debug-remotely)されています。
VS Code を使って簡単に App Service 上のアプリケーションにローカル環境のデバッガをアタッチすることができます。# TL;DR
具体的な使い方は[VS Code の公式ドキュメント](https://code.visualstudio.com/docs/azure/remote-debugging) に載っています。
百聞は一見にしかずということで以下の5分ほどの動画を見るのが早いです。
Node.jsからDiscordに通知を送るメモ(Fetch API)
前書いた記事のFetch版です。
https://qiita.com/n0bisuke/items/264ba2b79a0c5ed72678
基本は一緒
“`js
‘use strict’const URL = `DISCORD_WEBHOOK_URL`;
//送信するデータ
const postData = {
username: ‘n0bisuke BOT’,
content: ‘Node.js Fetch APIからポスト’
}const main = async () => {
const response = await fetch(URL, {
method: ‘POST’,
headers: {
‘Accept’: ‘application/json’,
‘Content-Type’: ‘application/json’,
},
body: JSON.stringify(postData)
});
Notonのページの最終変更の内容を取得してみる
専用のAPIがあればいいですけど、ウォッチ系のAPIは無さそうなので実装してみます
## Page IDからブロックIDを取得する
Notionだとページの中身を取得するAPIが無い模様です。
ブロックという概念になっていてブロックに対してAPIを使っていくみたいですね。
こちらの記事の概念図がすごく分かりやすかったです。
https://qiita.com/senju797/items/0e3bfb1c8f0b7b035f46#pagesblocks
[Retrieve block children](https://developers.notion.com/reference/get-block-children)
Database > Page > Blockといった階層構造のイメージで大丈夫だと思います。
めちゃめちゃpage.contentみたいな感じで一発で取得したいですが…苦笑
## 親のBlockIDはPageIDでOK
ということでBlockの中身を取りたいのですが、APIのサンプルをみるとこれが分からなくて最初戸惑いました。
サンプルだ
Notion APIでデータベースが変更されたか監視してみる #notion
データベースからアイテムを取得して、その中身の最終更新時間を取得してみます。
色々とNotion APIも種類がありますが。
– Query a database
– Retrieve a pageの二つを使ってDB -> Pageという順番で取得してみます。
## APIキーやデータベースIDなど
前に書いた記事でAPIのざっくりした使い方がわかります。
https://qiita.com/n0bisuke/items/b0cf0c416aa8e46bdb1b
## Query DBでDBからアイテムを取得
`学籍番号`というプロパティの中で`po-07`を含むデータを抽出してみます。
> ![スクリーンショット 2022-12-07 15.42.21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/35387/ae51b223-c7c9-514d-97e0-26b052f1b9e7.png “スクリーンショット 2022-12-07 15.42.21.png”)
公式サンプルを
【コードリーディング】Node.js Pathモジュールのjoinメソッド成長記録(2010年〜2022年)前編
Node.jsのPathモジュールで定義されている`join`メソッドが10年以上の開発期間を経てどのように変化し、成長してきたかをコミット履歴をたどりながらコードリーディングを行って調べてみました。この前編では、まず現在の`join`メソッドのソースコードを読んで解説します。後編では全28回のコミットを4つの時期に分けて、その成長の記録を追いかけていきます。
## Node.js Pathモジュールのjoinメソッドとは?
Pathモジュールの`join`メソッドは、引数を配列要素として受け取り、それらを文字列として連結してくれるメソッドです。[1]“`js
const path = require(‘node:path’);path.join(‘/foo’, ‘bar’, ‘baz’)
=> ‘/foo/bar/baz’
“`引数に文字列以外の値を入れると`TypeError`を吐き出します。`Node.js`を動作させるOSによって出力するパスを変えられるよう、ソースコード(`node/lib/path.js`)には`Windows`用と`POSIX`用の2つの
Pipedreamを使ってリストに入れたツイッターアカウントのツイートを監s…記録する
# この記事の対象者
* サイバーストーカー
* 初心者のjavascriptのコードを見ても吐き気がしない人# Pipedreamとは
https://pipedream.com/
無料でも利用できる、トリガーとアクションを組み合わせてワークフローを作成し、色々できるサービスです。
Twitter Youtube Discord Slackなど様々なアプリケーションと連携することが出来ます。
類似のサービスにIFTTTなどがありますが、IFTTTよりも柔軟性が高いです。# Pipedreamを使ってリストに入れたツイッターアカウントのツイートを記録する
## Twitterアカウントと連携する
最初からリストに新しいツイートがあるのかを調べるトリガーがあります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2984781/c8629b28-96f2-219e-7c68-f5e42a6d1dd2.png)
簡単ですね。
![image.png](https://qiita-im
Web日記構築備忘録
# 概要
よく妻に「何をやっているのかよくわからない…」と言われるので、以前からTimeTreeに研究の日記をつける様にしていた(よく三日坊主するので怒られる)。
が、結局TimeTreeだと普段の予定と混ざってしまって見にくい。別でまとめて欲しいということで、自宅Webサーバを立ててローカルネットワーク内で見れるWebページを作り、そこにまとめることにした。この記事では、自宅Webページ構築の手筈をまとめる。
# 完成図
こんな感じ。![スクリーンショット 2022-12-07 1.37.11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/235241/3dd8715c-16e5-2c45-93b0-15b7eec447c5.png)
![スクリーンショット 2022-12-07 1.37.31.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/235241/ff4b3ccb-c75c-1cc3-6e41-88e
Node.jsを使って、BigQueryからデータを取得するWebAPIを作る
## はじめに
これは 株式会社 RetailAI X Advent Calendar 2022 の 7 日目の記事です。
昨日は @murayamaxxx さんの記事でした。 [entで実行されたSQLを確認する](https://qiita.com/murayamaxxx/items/58dcff1e928977af559f)本日は『Node.jsを使って、BigQueryからデータを取得するWebAPIを作る』です。
昨今、日本の企業間でクラウド化が進んでおり、一つのシステムを作るときGCPやAWSといったクラウドサービスと連携させた機能を実装する場面が増えてきているのではないかと感じます。
今回はGCPのBigQueryからデータを取得する簡単なWebAPIをNode.jsで作成してみました。
## 前準備
– BigQueryで任意のデータセット、テーブルを作成する
– 適切な権限を付けたサービスアカウントを作成し、jsonキーを任意のディレクトリにダウンロードする
– 開発するディレクトリを準備し、Node.jsの環境を構築する
“`
mkdir test
c
mermaidを描画してくれるmarkdownプレビューア
2022年に起こった地味に便利な変化の1つに、GitHubが、Markdownのコードブロックの[mermaid][mermaid]を図に変換して表示してくれるようになった[こと](https://github.blog/2022-02-14-include-diagrams-markdown-files-mermaid/)が上げられます(主観)。
これが便利なので、emacsでmarkdownを書きながら自動更新されると嬉しいなと思い、ファイルを見張り自動で更新しつつ、mermaid部分を描画してくれるようなツール[fosi][fosi]を作りました。
## インストールと使い方
fosi自体は、node.jsで実装されたCLIで、npmコマンドでインストールできます。
“` shell
npm i -g @hotoku/fosi
“`インストール後、markdownファイルがあるディレクトリに移動してください。
`fosi -i ファイル名`を実行すれば、サーバーがport 3000で立ち上がります。その後、ブラウザで[localhost:3000](http:/
connpass更新のPuppeteerアプリをHerokuからAzure WebApssに移行
こんにちは、n0bisukeです。IoTLTというライトニングトークイベントを毎月実施していますがスプレッドシートに書いてもらった登壇者情報をconnpassのイベントページに自動反映するというスクリプトをHerokuで動かしています。
> ![スクリーンショット 2022-12-05 20.22.39.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/35387/d4fa89b1-4014-674d-c868-fc8606ec0006.png “スクリーンショット 2022-12-05 20.22.39.png”)
> 昔の登壇スライド: https://speakerdeck.com/n0bisuke/iotltwozhi-erurpaji-shu-falsehua-false-bu-shao-jie-number-yururpaHerokuの無料枠が2022年11月28日に終わってしまうという話題が有名でしたが、AzureのWebAppsに移行してみました。
> [PaaS「Heroku」が
[Node.js]ApplicationInsightsクライアントの実装
# はじめに
Azureでは、ログ蓄積サービスとして[ApplicationInsights](https://docs.microsoft.com/ja-jp/azure/azure-monitor/app/app-insights-overview)がある。(AWSのCloudWatch的なヤツ)
自分が今思う最適な実装を書き残しておく。# 環境
開発環境: macOS 12.4
ランタイム: Node16
作成するサービス: Azure Functions# 実装
“`src/utils/applicationInsights.ts
import { TelemetryClient } from ‘applicationinsights’/**
* ApplicationInsightクラス
* ApplicationInsightクライアントをシングルトンで管理する
*/
export class ApplicationInsight {
private static _applicationInsight: ApplicationInsight
いつの間にかインストールされてた「-」というnpmパッケージについて
# はじめに
:::note info
[TLB Enjoy Developers Advent Calendar 2022](https://qiita.com/advent-calendar/2022/tlb-enjoy) の6日目の記事です。
:::いつもはAdventCalendarは見る側だったのですが、今回は初めて記事を書く側として参加できて嬉しいです!
**TLB Enjoy Developers Advent Calendar 2022** はテーマなど制限がないので自由に書こうと思います!今回の記事ではnpmパッケージ「-」についてです!
特に技術的な記事ではなく、調べてみた系の記事ですが読んでもらえると嬉しいです。# 経緯
## 「-」を知るきっかけ
ある日 **package.json** の **dependencies** を見ていると、ふと気になるパッケージがありました。
“`json
“dependencies”: {
“-“: “^0.0.1″,
}
“``”-“: “^0.0.1”,` と
NexusスイッチとNMOSを連携させてみた
—
この記事はシスコの有志による Cisco Systems Japan Advent Calendar 2022 の1つとして投稿しています。昨年の記事や関連する投稿記事は以下リンクよりご覧いただけます。– 2017年版: https://qiita.com/advent-calendar/2017/cisco
– 2018年版: https://qiita.com/advent-calendar/2018/cisco
– 2019年版: https://qiita.com/advent-calendar/2019/cisco
– 2020年版: https://qiita.com/advent-calendar/2020/cisco
– 2020年版(2枚目): https://qiita.com/advent-calendar/2020/cisco2
– 2021年版: https://qiita.com/advent-calendar/2021/cisco
– 2021年版(2枚目): https://qiita.com/advent-calendar/2021/cis
Node.js と Deno と Bun のどれを使えばいいのか
現在注目されているサーバーサイドJavaScriptランタイムといえば、Node.js と Deno と Bun の3つが挙がると思います。この記事ではそれぞれのランタイムを比較し、将来的にどのような使い分けをしていけばいいのか考えます。
# Node.js と Deno と Bun の現在
## npmライブラリにはすべてのランタイムが対応
– Node.js:当然npmライブラリには対応しています。
– Deno:[npmパッケージを配布するCDN](https://zenn.dev/uki00a/books/effective-deno/viewer/how-to-use-npm-packages)や、[npmインポート](https://qiita.com/access3151fq/items/e38f78db2d96a1ddd6cc)を使うことで対応しています。
– Bun:対応しています。:::note warn
「Denoが急に方針転換をしてnpm対応を始めた」というのはよくある間違いです。
[Big Changes Ahead for Deno](https
NestJS GraphQLリゾルバ用のCacheInterceptorを実装してみた
NestJS では(CacheModule を導入した上で)コントローラに `UseInterceptors` デコレータで `CacheInterceptor` を指定することで、コントローラが返すレスポンスをキャッシさせ、サーバの処理負荷を軽減させることができます。
“`ts:app.controller.ts
@Controller()
@UseInterceptors(CacheInterceptor)
export class AppController {
@Get()
findAll(): string[] {
return [];
}
}
“`しかしながら、この`CacheInterceptor`は、[公式ドキュメント](https://docs.nestjs.com/techniques/caching#auto-caching-responses)のWARNINGにも書いてあるように、GraphQLでは使用できません。
https://docs.nestjs.com/techniques/caching#auto-caching-re
[windows][volta]windowsのnodeバージョン管理ツールとしてvoltaを利用してみた。
# 初めに
普段はmac使ってるんですけど、たまたまwindowsでコードを書く機会があってその時にvoltaを利用したので使い方を簡単に残します。
補足・間違いなどがあればコメントいただけると幸いです?
他に便利と思った内容は加筆していきます〜✨## インストール
[こちらのリンク](https://docs.volta.sh/guide/getting-started)にあるWindows Installationの「download and run the Windows install」のリンクからインストーラーをダウンロードして実行してください。
インストール後にコマンドプロンプトを開いて以下のコマンドを入力しましょう。バージョンを表す数字が返ってくればOKです。
“`
volta -v
“`## nodeのインストール
以下のコマンドでnodeをインストールすることができます。
“`
volta install node@(バージョン)
“`
具体的にはこんな感じです!バージョンを指定しない場合は最新版がインストールされます。
“`
volta inst
react4 backendとの通信(hook)
# はじめに
nodeにuser情報を検索するapiとuser情報を登録するapiがある。
そこにreactからrequestをかけてresponseをもらう。
フロント(react)をメインにバック(express)も少し最後に載せる。
## フロント
“`:フロントコード(POST)
import { useState } from “react”;
const UserCreate = () => {
const URL = “http://localhost:8080/post”
const [userData, setUserData] = useState({
username: “”,
email: “”,
password:””
})
const getUserData = (data) => {
const { name, value } = data.target
setUserData({ …userData, [name]:
nodenvライブラリをインストールしたはずなのに、nodenvコマンドが使えなかったので解決してみた。[パスを通せば解決。]
問題
・Node.jsライブラリをインストールしたはずなのに、nodenvコマンドが使えない。
“`
#/Users/ユーザ名/Work2
$ nodenv local 14.0.0
-bash: nodenv: command not found
“`結論
・.bashrcファイルのパス設定を書き換えて,nodeコマンドのパスを通せば解決。
“`
#/Users/ユーザ名/
$echo ‘export PATH=$HOME/.nodebrew/current/bin:$PATH’ >> ~/.bashrc
$source .bashrc
$nodenv local 14.0.0
$node -v
v14.0.0
“`結論に至るまで
予想した原因
今回の問題の原因があるとすれば、以下の2つだと考えました。
・そもそもNode.jsがインストールされていない。
・パスの設定がされていない。
と