- 1. Node.jsから乗り換え?JavaScriptランタイム「Bun」触ってみた
- 2. npm run devの実行時にthrow er; // Unhandled ‘error’ eventのエラーが出る時の対応
- 3. 【コードリーディング】Node.js Pathモジュールのjoinメソッド成長記録(2009年〜2022年)後編
- 4. Node-REDのサブフローからカスタムノードを作成する
- 5. Node.jsのCLIツール作成で個人的に開発体験が良かった手法について
- 6. 12月になったのでクリスマスまであと何日か通知するDiscordBotを作る
- 7. Though the “loose” option was set to “false” in your @babel/preset-env config, it will not be used for @babel/plugin-proposal-private-property-in-object since the “loose” mode option was set to “true” for @babel/plugin-proposal-private-methods.
- 8. UNIX パイプで分子生物学実験
- 9. 大量データの処理をCloud Run x Cloud Tasksで解決した話
- 10. App Service on Linux 上の Node アプリケーションを VS Code でリモートデバッグする方法
- 11. hygenでフロントエンド開発を楽にする
- 12. Node.jsからDiscordに通知を送るメモ(Fetch API)
- 13. Notonのページの最終変更の内容を取得してみる
- 14. Notion APIでデータベースが変更されたか監視してみる #notion
- 15. 【コードリーディング】Node.js Pathモジュールのjoinメソッド成長記録(2009年〜2022年)前編
- 16. Pipedreamを使ってリストに入れたツイッターアカウントのツイートを監s…記録する
- 17. Web日記構築備忘録
- 18. Node.jsを使って、BigQueryからデータを取得するWebAPIを作る
- 19. mermaidを描画してくれるmarkdownプレビューア
- 20. connpass更新のPuppeteerアプリをHerokuからAzure WebAppsに移行
Node.jsから乗り換え?JavaScriptランタイム「Bun」触ってみた
この記事は [ハンズラボ Advent Calendar 2022](https://qiita.com/advent-calendar/2022/handslab) 9日目の記事です。
# Bunとは
JavascriptランタイムにはNode.jsやDenoがある中、最近[Bun](https://bun.sh/)が注目を浴びている…?!ということで気になったので触ってみます。
元々Jarred Sumnerさんがほぼ個人で開発されていたようですが(すごい)、2022年8月に[Oven社](https://oven.sh/)として起業しました。
Bunとはざっくりいうと、高速でJavascript開発に必要なものが全て揃っているオールインワンなJavascriptランタイムです。
## Node.jsにないもの、あります
Node.jsでは必要だったものがBunにははじめから備わっています。
– TypeScript & JSXからJavaScriptへトランスパイル
– tscやBabelがいらない
– JavaScript & CSSのバンドル化
npm run devの実行時にthrow er; // Unhandled ‘error’ eventのエラーが出る時の対応
## 実際のエラー
“`bash
events.js:183
throw er; // Unhandled ‘error’ event
^Error: listen EADDRNOTAVAIL 10.102.158.22:3000
at Object._errnoException (util.js:992:11)
at _exceptionWithHostPort (util.js:1014:20)
at Server.setupListenHandle [as _listen2] (net.js:1338:19)
at listenInCluster (net.js:1396:12)
at GetAddrInfoReqWrap.doListen [as callback] (net.js:1505:7)
at GetAddrInfoReqWrap.onlookup [as oncomplete] (dns.js:97:10)
error Command failed with exit code 1.
i
【コードリーディング】Node.js Pathモジュールのjoinメソッド成長記録(2009年〜2022年)後編
[前編](https://qiita.com/YY-EN40P/items/4c1ef279498d34126802)では、`join`メソッドの最新版のソースコードを読んで内部処理の実装を見ていきました。後編ではいよいよコミット履歴をたどりながら`join`メソッドがどのように成長していったのかを見ていきます。
## joinメソッドの全コミット履歴
| 日付 | メッセージ | 修正内容 | 行数 |
|:————-|:————————————————————|:———————————————|:——:|
| Apr 15, 2009 | everything is changed. i’ve waited much too lon
Node-REDのサブフローからカスタムノードを作成する
この記事では、サブフローからNode-REDのノードの開発方法を紹介します。サブフローは、一般的なプログラミング言語の「関数」と同じ様にフローを再利用できる機能です。このサブフローを使用すると、Node-REDユーザは、フロー開発の知識のみを使用してカスタムノードを作成できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/287766/fdb3417e-b0e6-710b-a4ea-0dfae717d5ce.png)
この手順では、サブフローの作成が最初のステップです。 サブフローをJSONファイルとしてローカルPCにダウンロードした後、JSONファイルをGitHubリポジトリに配置します。 その後、アップロードされたJSONファイルはGitHub Actionsによってカスタムノードを含むtgzファイルに変換されます。 最後に、生成されたtgzファイルをローカルPCにダウンロードし、それをNode-RED環境にインストールして、カスタムノードをテストします。
# 前提条件
–
Node.jsのCLIツール作成で個人的に開発体験が良かった手法について
## この記事について
JavaScriptの学習のために暇な時間にNode.js上で動くCLIツールを作ったりしています。
以前にもパッケージを作ってみたりしていましたが、コードの管理がうまくいかずどんどんコードを書くのが辛くなってしまいました。これまではClassを使ってオブジェクト指向っぽく書こうとしていましたが、自分自身のオブジェクト指向への理解の浅さやパッケージの規模が大きくないことも影響して
– 一つのClassに機能が集中しすぎて分割単位が分かりずらくなってしまう
– そこまでインスタンスを作らないのでClass自体の必要性があまり感じられなかった
– Classに対してのテストの難しさという問題を感じていました。
そんななかで改めてCLIツールの設計手法について自分なりに考えて再度整理をしてみました。
`n=1`でかなり主観的な内容が多く、まだまだ改善点も多いですがこれからCLIツールを作ってみようという人や参考程度に見る方の一つのサンプルとして記載させていただこうと思います。### 目指したこと
以前のパッケージ開発の反省を踏まえ
– 粒度を細か
12月になったのでクリスマスまであと何日か通知するDiscordBotを作る
# はじめに
もう1年も終わりですねー早い、
1年の締めくくりにネタ枠に走ってクリスマスまであと何日かを通知するBotでも作ろうと思います。
クリスマスまで、と書いていますが一部のコードを変えれば正月でもあなたの誕生日でもできますので、改良して使ってみてください完成品はこちらです
https://github.com/KenCir/KurisumasuNotify# 開発環境や使用するパッケージのバージョンなど
– NodeJS 16.16.0
– npm 8.11.0
– discord.js 14.7.1
– dotenv 16.0.3# 環境構築
とりあえずプロジェクトフォルダ作ってフォルダ内で以下のコマンドを実行します
“`
npm init -y
“`次に使うNPMパッケージをインストールします
“`
npm i discord.js dotenv
“`# Botアカウントの設定
画像で囲ってある「MESSAGE CONTENT INTENT」をオンにします、これをしないと動かないです
![スクリーンショット 2022-12-08 19.00.48
Though the “loose” option was set to “false” in your @babel/preset-env config, it will not be used for @babel/plugin-proposal-private-property-in-object since the “loose” mode option was set to “true” for @babel/plugin-proposal-private-methods.
# 起きたこと
下記を実行
“`console
$ npm run storybook
“`なんかでた
“`console
Though the “loose” option was set to “false” in your @babel/preset-env config, it will not be used for @babel/plugin-proposal-private-property-in-object since the “loose” mode option was set to “true” for @babel/plugin-proposal-private-methods.
The “loose” option must be the same for @babel/plugin-proposal-class-properties, @babel/plugin-proposal-private-methods and @babel/plugin-proposal-private-property-in-object (when they are
UNIX パイプで分子生物学実験
この投稿の趣旨は簡単な生物学的現象や分子生物学実験を UNIX コマンド上で再現することです。生物学に馴染みのない方はまず以下のページを見ていただくと良いかもしれません。
https://ja.wikipedia.org/wiki/%E3%82%BB%E3%83%B3%E3%83%88%E3%83%A9%E3%83%AB%E3%83%89%E3%82%B0%E3%83%9E
https://ja.wikipedia.org/wiki/%E5%88%B6%E9%99%90%E9%85%B5%E7%B4%A0
—
## ランダムな塩基配列を生成
生物の遺伝情報は DNA 分子中のアデニン・チミン・グアニン・シトシンの4つの塩基の配列としてコードされています。それぞれが `A`、`T`、`G`、`C` の4文字に割り当てられているものとして、次のコマンドでランダムな塩基配列が生成され標準出力に書き出されます。
“`shell
# DNA
$ cat /dev/urandom | base64 | tr -dc ‘ATGC’
# RNA
$ cat /dev/urandom
大量データの処理を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メソッド成長記録(2009年〜2022年)前編
Node.jsのPathモジュールで定義されている`join`メソッドが10年以上の開発期間を経てどのように変化し、成長してきたかをコミット履歴をたどりながらコードリーディングを行って調べてみました。この前編では、まず現在の`join`メソッドのソースコードを読んで解説します。[後編](https://qiita.com/YY-EN40P/items/99a83b5676cfd222d071)では全34回のコミットを3つの時期に分けて、その成長の記録を追いかけていきます。
## 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によって出力するパスを変
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 WebAppsに移行
こんにちは、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」が