コンパイラかく語りき

import { Fun } from 'programming'

Node.js

【Next.js】API CORS 設定

Next.js で作成した API が別ドメインからアクセスされる時、CORS の問題が発生すると思います。 対応策について調べてみたところ、設定ファイルである next.config.js の header 項目が利用できる、との情報を見つけました。 nextjs-ja-translation-docs.ve…

Node.js REPL で ... more items と省略された内容を全て出力表示する

> console.log(new Array(120).fill('foo')) // 120個の要素 'foo' を持つ配列を表示 [ 'foo', 'foo', 'foo', 'foo', 'foo', 'foo', 'foo', 'foo', 'foo', 'foo', 'foo', 'foo', 'foo', 'foo', 'foo', 'foo', 'foo', 'foo', 'foo', 'foo', 'foo', 'foo', 'fo…

Node.js v18 にアップグレードしたら storybook のビルドが通らない問題への対応(error:0308010C:digital envelope routines::unsupported)

プロジェクトの Node.js v18 にアップグレードした。 すると、storybook のビルドが通らなくなってしまった。 $ npm run storybook 「wdm」: wait until bundle finished: node:internal/crypto/hash:71 this[kHandle] = new _Hash(algorithm, xofLen); ^ Erro…

GithubActions で利用する Node.js のバージョンを動的化(.nvmrc ファイルを例に)

GithubActions で Node.js を利用する際に、バージョン情報をベタ書きしていることはあると思う。 それを動的化する方法。 例えば、 nvm を利用していて .nvmrc ファイルが存在する場合、node-version-file: '.nvmrc' を指定すれば OK。 jobs: build: steps:…

【Mongoose】空配列を持ったドキュメントを取得する

Mongoose のドキュメント取得に関して。空配列を持ったドキュメントを取得する方法。 例えば、以下のようなデータから id: 2 のデータのみ取得する。 { id: 1, items: ['foo'] } { id: 2, items: [] } これらのデータを Data スキーマとすると、以下のように…

【Mongoose】ネストされた ref を populate する

概要 Mongoose には ref という機能がありまして、他のコレクションのドキュメントへの参照 ID を持つことができます。 ref は populate を使って解決します。 この記事では、ネストされた ref を解決する方法について書きます。 参考: Populate - mongoosej…

【Node.js】Mongoose の upsert で、 ドキュメント作成時のみ追加するフィールド

Mongoose の upsert 便利ですよね。正しくは、upsert: true オプションですね。ドキュメントが存在しなければ作成、存在すれば更新をしてくれます。 参考: How do I update/upsert a document in Mongoose? - stackoverflow.com さてそんな upsert を行う時…

cloudfoundry/nodejs-buildpack v1.6.19にて、yarnによるpackage installがこける問題と対処

nodejs-buildpack v1.6.19 2018/02/26、cloudfoundyのnodejs-buildpackがv1.6.19へとバージョンアップデートされました。 変更: nodejs-buildpack/manifest.yml - Add yarn 1.3.2, remove yarn 1.2.1 [#155490241] この変更によって、buildpackが依存するYar…

RethinkDBで「DBが存在して無ければ作る」「テーブルが存在して無ければ作る」

※ Nodeで書いてますが、ReQL自体は言語フリーなので他言語の方にも参考にはなると思います。 初期化時にありがちな、DBとテーブルを有無をチェックしながら作成するという処理。 DB作成 // 無ければDBを作成 r.dbList().contains('messages').do((containsDb…

node.jsでRethinkDBを扱うためのORM "Thinky" を試してみた

Thinkyというnode.jsでRethinkDBを扱うためのORMを試してみました。 RethiknDB: https://www.rethinkdb.com/ Thinky: https://thinky.io/ 参考ページ 公式のドキュメントのクイックスタートというページを参考にしてみました。 https://thinky.io/documentat…

RethinkDBでGeoJSON操作

RethinkDBでGeoJSONをゴニョゴニョする方法について。 サンプルコードはJavaScriptで書いてありますが、Ruby, Python, JavaでもOKです。 GeoJSONとは JSONをベースとした、位置情報データフォーマットです。 GEOJSON (英語) GeoJSON フォーマット仕様 ReQL -…

RethinkDBでgeojsonをupdateする際の注意点

RethinkDB(ReQL)でのgeojsonメソッドについて。 insertならば以下のように問題なく動く。 r.table("hoge").insert({ "location": r.geojson({ type: "Point", coordinates: [-71.063611, 42.358056] }) }) updateで同じことをすると、エラーが出る。 r.tab…

Express, MongoDBアプリケーションにRedisを導入する

やること ExpressとMongoDBで作成するアプリケーションにRedisを導入します。 作るもの 図書館を模したアプリケーションを作成します。 データ -> 書籍 データへのリクエスト -> 書籍が作成されたり、取り出されたり データストレージ(MongoDB)-> 書棚 キ…

nodemailerでconnect ECONNREFUSED 127.0.0.1 が出てしまう場合の対応(Gmail対応)

ローカル開発中にnodemailerのエラーに遭遇。 connect ECONNREFUSED 127.0.0.1 調べてみたら、設定が足りていなかった。 SMTP設定 SMTPのconfigを設定する。 gistbe104f76b8a98f462f30be21c99745f1 これでひとまず、自分から自分へのgmail送信はできた。自分…

node-cronはTimeZone指定ができるよ

node.jsアプリケーションでcronを実行する場合、node-cronを使うことが多いです。 github.com cronの実行時間を指定する際、TimeZoneを指定できると気づいたのでメモ。 Asia/Tokyoタイムゾーン Asia/Tokyoタイムゾーンの例は以下の通り。 gistfbbc9d099cbbc8…

nodebrew install でsyntax errorが出たら、nodebrew install-binaryを試す

nodebrew install したら、syntax errorが出てインストールに失敗した。 hasen.hatenablog.com Pythonのバージョンが違うのかなと思って調べてみたら、確かに3系を使っていた。 ところがpyenvで2系に戻してみても、install時にsyntax error。結果は変わらず…

Qiitaの"Node.jsのOAuthを使ってGoogleDriveAPIを叩いてみた"をやってみる

ちょっと仕事で必要になったので、練習。 参考: qiita.com

いまさらnpmのfetchパッケージをつかってみた

まず、これを読みました。 qiita.com fetchなんてものがあるんですね。Podcastや勉強会でも耳にするので、実際に使ってみました。 fetchの種類 fetchにはいくつかの種類があるそうで。 まず、ネイティブのfetch。つまり、ブラウザが実装しているwindow.fetch…

【Node.js】querystringとはなんなのか

Node.jsの話。querystringというデフォルトのモジュールを知ったのでメモ。 公式Doc : Query String Node.js v6.1.0 Manual & Documentation クエリ文字列とは そもそも。query string(クエリ文字列)とは? e-words.jp URLの末尾に付くアレですね。キーバ…

【glob】ignoreで除外ファイルを指定

globで初めてignoreを指定したのでメモ。 まずはコード。 gist2e4b810930e2c89a05b282b1f686734b ※ elmプロジェクトを例にしました。通常は、node_modules/**/*.jsとかにすれば良さそう。 ignoreする場合は、第二引数にオブジェクトを渡せばOK。キーをignore…

Elmのコンパイルにウォッチ機能がないから外部ファイルを作った

残念ながらElmのコンパイルにはwatchオプションがありません。つまり、「ファイルの変更を感知してコンパイルを行う」といったことができません。 そこで、Nodeの標準パッケージを利用して、擬似的なwatch機能を作ってみました。 gist8b7482df27f3e1b80f4823…

【node.js】execでunixコマンドを実行する

Node.jsのお勉強です。 Nodeの標準パッケージのうち、chukd_processというものを使えば、unixコマンドが利用できると知ったのでメモ。 Child Process Node.js v0.11.11 Manual & Documentation コマンド実行関数 ざっと見たところ、コマンドを実行できる関数…

【node.js】fs.watchでファイルを監視

タスクランナーやバンドラのwatch機能ってあるじゃないですか。あれらはもちろん知っていたのですが、nodeの標準パッケージにもwatchがあるんですね。初めて知りました。 というわけでメモ。 fs.watch 使い方:fs.watch(filename[, options][, lister]) 指定…

ちょっとES2015を書いて、手元で実行させたいときにやること

メモ書きです。 npmのパッケージをインストールして、それを手元で作動させてみる。みたいな時があると思います。 タスクランナーを走らせたりバンドルするまでもないけど、さくっとトランスパイルしたい。 そんな時、babelをターミナルで動かすと便利だなと…

【Node.js】fs.lstatでファイルの状態を取得する

Nodeの標準パッケージであるfsに、lstatという関数があります。 これを使えば、任意のファイルの状態を調べることができます。 File System Node.js v5.9.0 Manual & Documentation 以下のように、第一引数にパスを指定して、第二引数にコールバックを指定し…

【Node.js】FileSystem.rmdir vs rimraf

Nodeを書いていて、ディレクトリを削除したいときがあるかもしれません。例:ビルド前にディレクトリクリーン。 そんなときに使えるのがrimrafというパッケージ。 github.com Unixコマンドのrm -rfと同じ挙動が実現できます。 でも、Nodeの標準パッケージにf…

webpack上でglobを使う

webpack上でglobを使う方法について、業務で触れることがあったのでメモ。 インストール なにはともあれインストール。 $ npm init -y $ npm install webpack glob ディレクトリ構造 ディレクトリを以下のように作りました。 src/にJSファイルが格納されてい…

Node.jsフレームワークの新興勢力、nodalで英単語アプリケーションを作る その1

先日、Node学園 19時間目に参加した際にnodalというNode.jsのフレームワークを知りました。 というか、自分、Expressしか知りませんでした。しかも名前だけ。KoaとかHapiとか、色々あるんですね。 Node学園では、nodalは新進気鋭の新興勢力として紹介されて…

【nodebrew】改めてNode.jsのバージョン管理

WebPack周りで、nodeのバージョンが古いばかりにエラーが出てしまいました。 ここでnodebrewをインストールして、Node.jsのバージョン管理をしっかりとやろうと思います。 参考にした記事がこちら。 qiita.com 一度nodeを削除する いま入ってしまっているnod…

WebPack公式チュートリアルを消化する(前半)

WebPackの公式チュートリアルを消化していきます。WebPackはすでに何度か触っていますが、一度基本から学んでみます。 過去記事↓ chuckwebtips.hatenablog.com インストール 何はともあれ、WebPackをインストールします。 今まではpackage.jsonに記述してロ…