- 1. Lambdaで使ってるNode.jsを18.xにアップデートした話 a.k.a 技術的負債の解消
- 2. ClaudeやChatGPTにリポジトリを丸ごと読み込ませるコマンドを作りました!
- 3. PM2でNuxt3をデプロイする
- 4. Dropbox APIを使ってファイル共有
- 5. WSL2内にNode.jsが動作するDocker環境を用意した
- 6. TypeScripファイルをjsに変換してブラウザへ返すexpressミドルウェア
- 7. EACCES: permission deniedの解決方法
- 8. Express.jsとPostgreSQLを使った基本的なサーバー構築
- 9. Mongooseの基本を簡潔に
- 10. Blueskyで指定のリストに登録されているユーザーの投稿画像を一括ダウンロードする
- 11. フロントエンド開発ツールのインストールと設定 (Mac)
- 12. [Node.js] JSON ⇔ XML の作成方法
- 13. viteで作る、React環境構築 with fnm
- 14. nodejsでTwitter APIを使って画像付きでツイートするメモ
- 15. TypeScriptで同期的にDBアクセスをするための技術
- 16. ServBayを使用してnpmを有効化する方法
- 17. 【Typescript / nodejs】fsがエラーになる
- 18. Kotlin MultipatformとFirestoreでNode.jsアプリ
- 19. Docker環境で”The engine “node” is incompatible with this module. Expected version ~”のエラーを解消する
- 20. AIZU ONLINE JUDGEの提出前コードをVSCodeでテストする
Lambdaで使ってるNode.jsを18.xにアップデートした話 a.k.a 技術的負債の解消
# Node.js 14.xから18.xへのバージョンアップと周辺技術の更新
ソフトウェアの進化は早く、定期的なアップデートは避けて通れません。
https://qiita.com/autotaker1984/items/a3091772dbb0fb91473d
このたび、サービスで利用しているLambdaのランタイムにおいて、Node.jsをバージョン14.xから18.xへとアップデートしました。
このことに伴い、多くの周辺ライブラリやツールもアップデートまたは置き換えを行いました。
本記事では、その過程で直面した障壁とそれを乗り越えた経験を重点的に紹介します。## アップデートの背景
大きな理由としてNode.jsの14.xバージョンがサポート終了を迎え、AWSのLambdaでも14.xがDeprecatedとなったことから、アップデートを決断しました。
Node.jsの16.xも検討しましたが、すでに対応した当時であってもサポート終了が2024年6月12日と間近に迫っていため、18.xにアップデートしました。
https://docs.aws.amazon.co
ClaudeやChatGPTにリポジトリを丸ごと読み込ませるコマンドを作りました!
Claude を使ったコーディング体験が素晴らしかったので、より簡単に Claude と一緒にコーディングするための Node.js コマンドを作りました。
リポジトリの直下で以下を叩くと `repopack-output.txt` というファイルが出来上がります。
“`bash
$ npx repopack
“`そのまま Claude に次のようなプロンプトと一緒に送ると、
“`txt
このファイルはリポジトリのファイルを1つにしたものです。コードのリファクタをしたいのでまずコードを確認してください。
“`全体の内容を理解した上で、リファクタリングなどを進めることができます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/54810/2dabbd5d-53cd-4485-5d83-43acf3958120.png)具体的な内容を提案すると、それに従って良い感じのコードを生成してくれます。Claude だと Artifacts 機能で複数のファイルが出力できるため、
PM2でNuxt3をデプロイする
## ローカルの設定
pm2をグローバルにインストールします。https://pm2.keymetrics.io/docs/usage/quick-start/
“`
yarn global add pm2
“`ecosystem.config.jsという設定ファイルを作る。
これは、本番サーバーの設定情報を書くので、
基本、.gitignoreするべきかと思ったが、
そうすると、後のコマンドでecosystem.config.jsファイルがないって
怒られるので、環境変数化したい“`:ecosystem.config.js
module.exports = {
apps : [
{
name: ‘my-nuxt-app’,
exec_mode: ‘cluster’,
instances: ‘max’, // またはアプリケーションを実行したいインスタンスの数
script: ‘./src/.output/server/index.mjs’,
args: ‘start’
}
],
Dropbox APIを使ってファイル共有
Dropbox APIを使って、Dropboxにファイルをアップロードし、他の人とファイルを共有します。Dropboxを一時的な格納庫として利用します。
Dropbox APIで以下のことを実現します。* ファイルをアップロードして、自身の複数の端末から共有できます。
* アップロードしたファイルを共有して、複数の人がダウンロードできます。
* 他の人からファイルのアップロードを受領します。もろもろのソースコードはGithubに上げてあります。
https://github.com/poruruba/ClippingService
構成要素
* プライベートサーバ : ブラウザで動作するクライアントとDropboxを仲介するためのサーバです。クライアント向けのWebページの提供とWebAPIの処理を担っています。また、DropboxからのWebhook呼び出しも受け取ります。
* Dropboxサーバ : 共有するファイルを管理してもらうサーバです。
* 管理クライアント(ブラウザ): 共有するファイルを管理するためのクライアントです。PWAです。
* 一般クライアント(ブ
WSL2内にNode.jsが動作するDocker環境を用意した
# これはなに?
WSL内に、Nodeが動作するDocker環境を作成してみました
# 環境
– Windows11
– WSL2
– Ubuntu 20.04
– Docker Desktop
– VS Code
– Remote WSL# 準備
必要なファイルを作成します
![folder.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/266407/8f566143-760a-aad9-ef75-120846987efe.png)
## package.json
ファイルがないので、以下のコマンドで作成しました
“`console
$ yarn init
“`作成されたファイルを少し修正して以下のようにしました
“`json
{
“name”: “test”,
“version”: “1.0.0”,
“description”: “”,
“main”: “main.js”,
“scripts”: {
TypeScripファイルをjsに変換してブラウザへ返すexpressミドルウェア
## はじめに
htmlでは、通常通りにjsを読み込んでいますが、
“`html
“`
実はサーバー側はTypeScriptのファイルしかおいていないので、Webサーバー(Express)が動的にjsにトランスパイルして返す、というミドルウェアを作りました![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/276579/efc9c0ac-a160-58a6-d625-5ef658a9a25f.png)
利用方法:静的ファイルを返すexpress.static()の直前に読み込むと
* js/tsファイルのリクエストを受け取り、tsファイルを読み込む
* ファイルをトランスパイルしてブラウザに返す
“`js
app.us
EACCES: permission deniedの解決方法
# 背景と問題
Reactの新しいプロジェクトを作り、`npm start`で実行したら以下のエラーメッセージが表示された。“`bash:bash
[eslint] EACCES: permission denied, mkdir ‘/Users/username/Documents/dev/react-teset-app/node_modules/.cache’
“`# 原因
上記のエラーメッセージは**ディレクトリの作成権限**がないため発生している。
(nodeの再インストールも試してみたがエラーはそのままだった。)# 解決
ターミナルで以下のコマンドを実行することで解決できた。
下記のコマンドはプロジェクトディレクトリに適切な権限を設定している。:::note warn
ディレクトリのパスは各自で適切に変更して実行してください。
:::“`bash:bash
sudo chown -R $USER:$GROUP /Users/username/Documents/dev/react-teset-app
“`### コマンドの解説
– `su
Express.jsとPostgreSQLを使った基本的なサーバー構築
# Express.jsとPostgreSQLを使った基本的なサーバー構築
この記事では、Node.jsのフレームワークであるExpress.jsを使用して基本的なサーバーを構築し、PostgreSQLデータベースと連携する方法を紹介します。静的ファイルの提供、データの取得、データの送信方法について解説します。必要なnpmパッケージ
“`terminal
npm install express pg
“`
使用するnpmパッケージ
express: Node.js用のウェブフレームワークで、サーバーの構築に使用します。
pg: Node.js用のPostgreSQLクライアントで、データベース接続に使用します。PostgreSQLデータベースに接続するための設定を行います。
“`javascript
const { Pool } = require(“pg”);const pool = new Pool({
user: “your_db_user”,
host: “localhost”,
database: “your_db_name”,
passw
Mongooseの基本を簡潔に
# Mongooseを使ってみよう:MongoDBとのデータ操作を簡単に!
Mongooseは、Node.js環境でMongoDBを扱うためのオブジェクトデータモデリング(ODM)ライブラリです。Mongooseを使用することで、スキーマを定義してデータをバリデート、クエリ、保存、削除することが簡単にできます。本記事では、Mongooseの基本的な使い方を紹介します。
【公式ドキュメント】
https://mongoosejs.com/docs/api/mongoose.html
## インストール
まず、Mongooseをプロジェクトにインストールする必要があります。以下のコマンドを使用してインストールします。“`bash
npm install mongoose
“`
基本的な使い方
### 1. MongoDBへの接続
Mongooseを使用する前に、MongoDBデータベースに接続する必要があります。以下は、Mongooseを使用してMongoDBに接続する基本的なコードです。“`javascript
const mongoose = require(‘m
Blueskyで指定のリストに登録されているユーザーの投稿画像を一括ダウンロードする
(怪しい用途ではありますが、)Blueskyで指定のリストに登録されているユーザーの投稿画像を一括ダウンロードし、ローカルPCに保存するnode.jsスクリプトを書いてみました。
## ざっくり使い方
1. Blueskyのアプリパスワードを発行しておく
– [こちらの記事](https://docs.tokimeki.blue/ja/apppassword)が参考になります
1. node.js (v20.15.0)を導入する
– nvm(winではvolta)とか使いましょう
1. 適当にディレクトリを切って、その中に以下の3ファイルを作成する
– `package.json`
– `tsconfig.json`
– `src/index.ts`
1. 上記3ファイルに、当ページ後述のソースコードをまんまコピペする
1. ターミナルを起動し、上記で切ったディレクトリに移動する
– winでの動確未検証です
1. `% npm install`を実行する
1. `src/index.ts`内の定数を書き換える
– あなたのアカ
フロントエンド開発ツールのインストールと設定 (Mac)
## はじめに
このチュートリアルでは、WindowsとMacの両方のプラットフォームでフロントエンド開発ツールをインストールし、設定する手順をステップバイステップでご紹介します。一般的に使用される開発ツールの適切なインストールと設定方法を探求し、フロントエンド開発の第一歩を簡単に踏み出せるようにします。初心者から経験豊富な開発者まで、このチュートリアルは開発ツールのインストールプロセス中のさまざまな問題を解決し、コードを書くことに集中できるようにサポートします。さあ、始めましょう!## 1. VSCode (無料で使いやすいコードエディタ)
ダウンロードリンク: [https://code.visualstudio.com/Download](https://code.visualstudio.com/Download)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3782463/2c24bdad-5c72-79c2-f9fc-4a4114964299.png)公式サイトでは
[Node.js] JSON ⇔ XML の作成方法
# はじめに
javascript を使用して XML ファイル群を作成する必要があり、知見が溜まってきたのでこちらにまとめておきます。
# 方法
– [**xml2js**](https://www.npmjs.com/package/xml2js) というライブラリを使用しました。
XML ⇔ JSON の変換が可能で、扱いやすかったです。### JSON から XML への変換例
#### JSON オブジェクト
“`javascript
const jsonObj = {
library: {
$: { name: ‘My Library’, location: ‘City’ },
books: {
book: [
{ id: 1, title: ‘Book 1’, author: ‘Author A’ },
{ id: 2, title: ‘Book 2’, author: ‘Author B’ }
]
}
}
};
“`#### 変換処理
“`javascrip
viteで作る、React環境構築 with fnm
# Node.js環境構築とReact
## 前提
OSはWindow11を想定しています。
おそらく、Windows10でも同様の手順で構築可能かと思います。
記事を読んで、できた方はご一報くださると幸いです。諸事情でNode.jsの古いバージョンをインストールしており、最新のバージョンを使えない場合でも問題ありません。
FNMという、Rust製のNode.jsのバージョン管理ツールを使います。
シンプルな操作感で、複数のNode.jsのバージョンを共存させることができます。
Windowsの場合、Powershellの使用が必須です。この記事で解説している手順には、一部管理者権限が必要な場合があります。
### 使う技術
1. Node.js
2. FNM
3. vite
4. React
5. (TypeScript)## 概要
1. 会社の新プロジェクトでReactとTypeScriptを使いたいけど、環境構築はどうすればいいかわからない…
2. 会社で使っているパソコンのNode.jsのバージョンが古くて動かない…このような背景、前提があり
nodejsでTwitter APIを使って画像付きでツイートするメモ
## はじめに
nodejsで画像付きのツイートを調べてみる。
色々サイトを参考にするが、意外と動かない。
Twitter APIの1.1と2.0が混在していて何がなんだか。aiに聞いてもぐふわふわしちゃう。要するに画像のアップロードは1.1じゃないとできない。
だけど、ツイート1.1ではできず、2.0じゃないとできない。1.1でアップロード。アップロードが完了するとmedia idを発行してくれる。
そのmedia idをつけて2.0でアップロードという方法らしいです。“` twitterManager.ts
import {TwitterApi, TwitterApiReadWrite} from ‘twitter-api-v2’;
export class TwitterManager {
constructor() {
}
public tweet = async (message:string, filePath:string):Promise=>
{
const client:TwitterApi
TypeScriptで同期的にDBアクセスをするための技術
私は[Accel Record](https://www.npmjs.com/package/accel-record)というTypeScript用ORMライブラリを開発しています。
Accel Recordは、他のTypeScript/JavaScript用ORMライブラリとは異なり、非同期APIではなく同期APIを採用することにしました。しかしDBアクセスを同期的に実行するためには、技術的な調査を重ねる必要がありました。
この記事では、同期的なDBアクセスを実現するためにAccel Recordがどのような技術を採用したかを紹介します。
## サポート対象のデータベース
Accel Recordは以下のデータベースをサポートしています。
– SQLite
– MySQL
– PostgreSQL開発初期段階では、SQLiteとMySQLのサポートを優先的に行いました。
ですので、この記事ではSQLiteとMySQLに焦点を当てて紹介します。## SQLite
SQLiteは、Node.jsで利用する場合[better-sqlite3](https://www.
ServBayを使用してnpmを有効化する方法
`npm`(Node Package Manager)はNode.jsのパッケージ管理ツールであり、デフォルトのパッケージマネージャです。JavaScriptパッケージのインストール、共有、管理に使用され、世界最大のオープンソースライブラリの一つです。npmを使用することで、開発者はプロジェクトの依存関係を簡単に管理し、開発効率を向上させることができます。
[ServBayをダウンロード](https://www.servbay.com)## npmの有効化
ServBayを通じてインストールされたNode.jsにはデフォルトでnpmが有効化されています。npmが有効でない、または更新が必要な場合は、以下の手順に従ってください。
npmインストールの確認
ターミナルを開き、以下のコマンドを入力してnpmのバージョン番号を確認します
“`bash
npm -v
“`
例として、以下のような出力が得られます
“`bash
9.1.0
“`
## npmの更新
npmを更新する必要がある場合は、以下のコマンドで更新できます
“`bash
npm install -g npm
`
【Typescript / nodejs】fsがエラーになる
# はじめに
未だに同じ問題で突っかかる自分への戒めの意味も込めてこの記事をしたためる。# 再現
よし、nodejsでtypescriptのコードを書くぞー!
ファイルを操作するから `fs` を使おう!
はじめから使えるから`npm install`はいらないはず!あとは`tsc`して……
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1773132/65726e08-ac24-2706-cdc3-66b4ea2c5a29.png)
………:thinking:
# 原因
`fs`をはじめから使えるが、nodeが型を知らないのが原因だった。# 解決
node用に型を`npm install` してやればいい。“`console
npm install –save-dev @types/node
“`これでOK:ok_hand:
Kotlin MultipatformとFirestoreでNode.jsアプリ
# 概要/日記
Kotlin Multiplatform (for Javascript)とFirestore で Node.js アプリを作る。
サンプルアプリはDB上の要求リストがあれば即座に応じてOSコマンドを実行しその結果を格納する。これの続き:
https://qiita.com/shokkaa/items/15eb53db7914513189a4
# 前提
– Ubuntu 22.04 on Windwos 11 wsl2
– Firebaseプロジェクト・Firestoreが有効であること
– 認証無し。実験用# Node.js用プロジェクト構成
“`KtNodeSvr/build.gradle.ktsplugins {
kotlin(“multiplatform”) version “2.0.0”
kotlin(“plugin.serialization”) version “2.0.0”
}repositories {
mavenCentral()
}kotlin {
js {
nodejs {
Docker環境で”The engine “node” is incompatible with this module. Expected version ~”のエラーを解消する
初心者です。Docker+Rails6+Nuxt.jsで認証機能付きのポートフォリオサイトを作ろうとしていたある日のことです。
Nuxt.jsアプリを動かすためのDockerimageが突然ビルドできなくなり、以下のようなエラーがコンソールに出力されていました。
初心者なのでエラー文と仲良くする習慣づけのために備忘録残しておきます。
(それにしても急に出たのはなんでだろう、タイミングよくサポートするバージョンが変わったんだろうか)## エラー文
動いてた時代のDockerFileのままdocker buildしてみたらこんなエラーが出ました。
“`zsh
126.4 error cssnano@7.0.3: The engine “node” is incompatible with this module. Expected version “^18.12.0 || ^20.9.0 || >=22.0”. Got “16.13.1”
126.5 error Found incompatible module.
126.5 info Visit https://yarnpkg.c
AIZU ONLINE JUDGEの提出前コードをVSCodeでテストする
アルゴリズムの勉強のため、AIZU ONLINE JUDGEを始めて使おうとしたら、提出前コードをVSCodeでテストするのに標準入力の受け取り方が分からなかったので、メモ。
## 環境
Mac
zsh### プログラム
ファイル名(実行例): main.js
“`javascript
function Main(input) {
const data = input.split(“\n”);《略》
console.log(hoge);
}Main(require(“fs”).readFileSync(“/dev/stdin”, “utf8”));
“`※標準入力のコードは https://yukicoder.me/wiki/stdio を参考にしました。
### 実行と標準入力の受け取り
“`zsh
node main.js <