- 1. Cloud Foundry + Node.js で Hello World
- 2. libsassのalpine向けバイナリーの提供状況
- 3. Expressフレームワークのインストールと簡単な使い方
- 4. GAE に JSON 取得の Web サーバーを構築して SendGrid からメールする
- 5. Node.jsで作成したWebアプリをAzureで公開する【2019年11月版】
- 6. nodeを使ってmysqlに接続する
- 7. Node.jsで、ファイルから1行ずつ読み込むためのreadlineモジュール
- 8. DOMについて調べたことの備忘録
- 9. LINE Notifyのnpmライブラリ作った
- 10. [kintone] node.jsで開発環境のフィールド権限を本番環境に反映する
- 11. Node.js + axios で 画像をFormDataでアップロードしようとしてハマった話
- 12. WSLのUbuntu環境でPC内音楽データをWeb操作する(おまけでyoutube音楽とGooglehomeで伝言)
- 13. Axiosの前処理でAPIレスポンスのスネークケースをキャメルケースに変換する
- 14. Authorizationヘッダーを使ったPOSTリクエストのTypeScript / Node.jsサンプル各種
- 15. Technology Radar 2019のピックアップ
- 16. CircleCIのnode imageでnpm installに失敗する
- 17. Node.jsのfsモジュールの使い方
- 18. ファイルをセーブしたら、npmスクリプトを走らせる」というライブラリを1行で作る。
- 19. Node.js で無限ループしつつ、一定周期で処理をしたい
- 20. ZEIT NowでNode.jsのバージョン指定をする
Cloud Foundry + Node.js で Hello World
## 概要
– Cloud Foundry 上にシンプルな Node.js アプリケーションをデプロイして動作させる
– Cloud Foundry 環境は [Pivotal Web Services](https://run.pivotal.io/) を使用する## ソースコード
### ソースコード一覧
“`
.
├── Procfile
├── index.js
├── manifest.yml
└── package.json
“`### Procfile
Procfile にはプログラムの開始コマンドを記述する。
今回は node コマンドで index.js を実行するよう指定している。
コロン左側にはプロセスタイプを指定する。プロセスタイプの web は HTTP 通信を処理することを意味している。“`
web: node index.js
“`参考: [Production Server Configuration \| Cloud Foundry Docs](https://docs.cloudfoundry.org/buildpack
libsassのalpine向けバイナリーの提供状況
node-sassにバンドルされるlibsassはalpine向けにもバイナリーを配布している。が条件あり。
– 利用してるNode.jsのversionによって、alpine向けに配布をしてるバージョンの範囲が変わる
– 開発版サポートが先に提供中止になる流れ
– 次回or 次々回リリースでは v11向けのalpineバイナリー提供がなくなるっぽい## Node v13: 最新版 `v4.13.0` から配布
https://github.com/sass/node-sass/releases/tag/v4.13.0
## Node v12: `v4.12.0`から配布
https://github.com/sass/node-sass/releases/tag/v4.12.0
## Node v11: `v4.10.0`から配布
https://github.com/sass/node-sass/releases/tag/v4.10.0
– おそらく`v4.13.0`が最後の配布versionに
## Node v10: `v4.9.0`から配布
ht
Expressフレームワークのインストールと簡単な使い方
#Expressとは
Expressは、Node.jsのフレームワークで、以下の特徴があります。
・セキュリティ性能が高い。
・無数のHTTPに関連するメソッドとミドルウェアを使用できる。
・セキュリティ性能の高いAPIがすばやく簡単に作成できる。
・Node.jsの機能を分かりづらくすることがない。
[Express公式サイト](http://expressjs.com/)英語翻訳なので分かりづらいと思いますが、Node.jsのアプリが「簡単に、素早く、安全に」作れるという認識で大丈夫だと思います。
#Expressでサーバーを起動する。
公式サイトを見れば、わかるのですが、以下のようにインストールをします。
まずはアプリを保存するディレクトリを作成します。“`JS:console
//myappというディレクトリを作成
$ mkdir myapp
//myappディレクトリに移動
$ cd myapp
“`
続いて、package.jsonファイルを作成を作成します。“`JS:console
//package.jsonファイルを作成
$ npm init
GAE に JSON 取得の Web サーバーを構築して SendGrid からメールする
Google Cloud Platform(以下、GCP)環境で、”Web サーバーへのリクエストからメール送信サービスを利用する”ということをしてみたかったので、色々確認してみました。
元々、AWS ばかり触っていて、AWS では AWS Lambda と Amazon SES 利用すれば同様のことができるというのはわかっていたのですが、今回は **GCP 環境で作業する**という縛りがあったので、「GCP でのメール送信サービスにあたるものは何か?」から「どうやって実装するのか?」を調べました。
調べると、Google App Engine(以下、GAE)と SendGrid を利用する方法が、[Google のドキュメント](https://cloud.google.com/appengine/docs/flexible/nodejs/sending-emails-with-sendgrid?hl=ja#top_of_page) で推されていたので試してみました。
※ 単純にやると、内容が Google ドキュメントとほぼ同じになりそうだったので、ドキュメントでは”フォーム
Node.jsで作成したWebアプリをAzureで公開する【2019年11月版】
# はじめに
Node.jsでWebアプリを作ってみた、ローカルでは動作確認した、方が初めてAzureへ公開するための手順説明です。以前の次の記事の、AzureポータルのUI変更に伴う手順更新版、です。
* Node.jsで作成したWebサービスをAzureで公開する(2016年版12月版)
* https://qiita.com/hoshimado/items/6aed10a2057fa77487b6Visual Studio連携や、Visual Code連携ではなく、GitHubのリポジトリを元に
公開する方法を説明します。
リポジトリ種別は、パブリックでもプライベートでもどちらでも問題ありません。# 前準備
次を前提とします。
* Azureのアカウントは作成済み
* ローカルで動作確認済みのWebアプリ(Node.js)をGitHubのリポジトリに格納済みAzureのアカウントの新規作成については、今でもそんなに変わっていないハズなので、
下記の記事の「Azureアカウントの作成方法」を参照ください。* https://qiita.com/ho
nodeを使ってmysqlに接続する
nodeでmysqlに接続するには
“`
// requireの設定
const mysql = require(‘mysql’);// MySQLとのコネクションの作成
const connection = mysql.createConnection({
host : ‘localhost’,
user : ‘root’,
database: ‘testdatabase’
});// 接続
connection.connect();// userdataの取得
connection.query(‘SELECT * from userdata;’, function (err, rows, fields) {
if (err) { console.log(‘err: ‘ + err); }console.log(‘name: ‘ + rows[0].name);
console.log(‘id: ‘ + rows[0].id);});
// userdataのカラムを取得
connection.query(‘SHOW C
Node.jsで、ファイルから1行ずつ読み込むためのreadlineモジュール
##注意
この記事は初心者視点でザックリとした説明をしています。正確性に欠ける可能性がございますが、ご了承ください。「明らかに違うよ」ということがありましたら、ご指摘くださると幸いです。##Node.jsでファイルに1行ずつ書き込みたい。
Node.jsを使う際、.txtファイルや.csvファイルを一行ずつ読み込みたい場合がありました。
そんな時に使えるのが[readline](https://nodejs.org/api/readline.html)モジュールです。Node.jsで標準に備えられています。##readlineモジュールの使い方
まずは以下のように、ファイルに書きます。“`JS:index.js
‘use strict’;
//モジュールの読み込み
const fs = require(‘fs’);
const readline = require(‘readline’);//readstreamを作成
const rs = fs.createReadStream(‘./input.csv’);
//writestreamを作成
const ws =
DOMについて調べたことの備忘録
# DOMについて
– Document Object Model
– HTML や XML 文書を操作するための、たくさんの機能や規則のこと
– DOMは階層構造をとる
– 各要素はノードという単語を用いて表現される# ノードについて
– ノード
– 子ノード(children)
– 親ノード(parent)
– 兄弟姉妹ノード
– ノードは、webページとプログラミング言語をつなぐ役割を持つ
– ID名からノードを取得、操作する[JavaScript初心者でもすぐわかる!DOMとは何か?]
(https://eng-entrance.com/what-is-dom)[DOMとは何か?【JavaScript初心者向けにわかりやすく説明します!】](https://watablogtravel.com/document-object-model/)
DOMの話に戻ります
## HTML要素の取得:getElementById()
– Documentオブジェクトのメソッドである「getElementById()」が一般的らしい
– 文字列のHTMLタグを認識で
LINE Notifyのnpmライブラリ作った
## はじめに
[LINE Notify API](https://notify-bot.line.me/doc/ja/)のNode.jsライブラリを作りました。
https://www.npmjs.com/package/line-notify-nodejs使い方とサンプルソースを紹介します。
## 使用イメージ
![Lwie2cZnxIv4eVYeEe9e1574930325-1574930375.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/90087/be445a22-ef3c-be3c-4eaa-601b1f4b4858.gif)
## インストール
“`
$ npm install line-notify-nodejs
“`## 使い方
簡単2STEPです。
### STEP1. トークンを発行する
下記ページからトークンを発行します。
– https://notify-bot.line.me/my/
![image.png](https://qiita-
[kintone] node.jsで開発環境のフィールド権限を本番環境に反映する
# 概要
開発環境を本番環境に反映する際、フィールド権限などはアプリテンプレートでは
持ってこれないのでcli叩いてやりたかった。
kintone-cliとか便利なツールあるのでそれ使えたら使ったほうがいいと思います。
今回しか使わない捨てコードなので適当ですが“`main.js
const request = require(“request”);const params = {
url: “開発用のドメイン/k/v1/field/acl.json?app=1”,
method: “GET”,
json: true,
headers: {
“X-Cybozu-Authorization”: “ログイン名とPWをBase64エンコードしたもの”
},
};request(params, (err, res, body) => {
if (err) {
console.log(‘err :’, err);
return;
}const Admine = “本番用ドメインのログイン名とPWをBase64エンコードした
Node.js + axios で 画像をFormDataでアップロードしようとしてハマった話
# やりたかったこと
Node.jsのスクリプトでローカル上の画像ファイルを`mulitpart/form-data`で送信したかった。
フロント側でaxiosを使っていて楽だったのでそれを使おうと思った。# 結論
“`js
const fs = require(‘fs’)
const axios = require(‘axios’)
const FormData = require(‘form-data’)const uploadImage = async ({ auth_token, imageFilePath }) => {
const form = new FormData()
const file = fs.createReadStream(imageFilePath)
form.append(‘image_file’, file)
const config = {
headers: {
‘X-AUTH-Token’: auth_token,
‘X-API-Token’: env.API_TOKEN,
..
WSLのUbuntu環境でPC内音楽データをWeb操作する(おまけでyoutube音楽とGooglehomeで伝言)
#はじめに
●PC内音楽データをWEBで操作し、PCスピーカで再生できるようにする。
(Googlehomeで声で操作するのWeb操作版です。声でキーワードがうまく入力できない場合に使用してます)
【操作例】WEBから「竹内まりや」と入力する
![コメント 2019-11-27 230824.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/222582/f9e43aa4-82c0-22d0-eb1f-747e099fa1af.png)
●おまけ
youtube音楽:下記の記事と同じです。
WSLのUbuntu環境でyoutube音楽をWeb操作する(おまけでradikoとサイマルラジオ)
伝言:Googlehomeで伝言を再生します。google-home-notifierを使用。#環境
●Windows10 HOMEのPCにWSLのubuntuをインストールする。
●ubuntuでapache2,npm,node.js,youtube-dl,mplayerをインストールする
●WSLのubuntu
Axiosの前処理でAPIレスポンスのスネークケースをキャメルケースに変換する
## はじめに
サーバサイドからのAPIレスポンスが`some_id`のようにスネークケースで定義されていると、JS側で毎回キャメルケースに変換することになりますよね。“`ruby
{
some_id: 1,
some_name: “name”,
}
“`今回はそんな変換処理をAxiosの共通処理でまとめてみました。
## レスポンスをキャメルケースに変換する
“`javascript
import { camelCase, snakeCase } from ‘change-case’;const isObject = (target: any): boolean => Object.prototype.toString.call(target).slice(8, -1)
.toLowerCase() === ‘object’;const convertSnakeToCamel = (target: any): void => {
if (Array.isArray(target)) {
target.forEach((t) => c
Authorizationヘッダーを使ったPOSTリクエストのTypeScript / Node.jsサンプル各種
# POSTの例を
Node.js上動くアプリから、POSTリクエストを投げるコードを書くことが最近多いので、パターンをいくつか書き残そうと思いました。モジュールによって変わる使用感やコードの量、デバッグ方法などを比較したかったため、複数の方法を残します。
なお、ここではコードサンプルを残すのみで、特に比較や分析は述べてません。### ここに記録しているコード
下の3つです。すべてTypeScriptに対応しているモジュールです。* Node.js標準のhttp/httpsモジュールを使った例。
* requestモジュールを使った例.
* [got](https://github.com/sindresorhus/got)モジュールを使った例## Nodeの標準に含まれているhttp, httpsモジュールを使った例
“`typescript:Node標準のhttp/httpsモジュール
import jsonDataImported from ‘./data.json’;const ACCESS_TOKEN = `<<アクセストークンと置き換えます>>`;
con
Technology Radar 2019のピックアップ
[Technology Radar](https://www.thoughtworks.com/radar)から気になったものをピックアップし、軽く説明を添えてみました。
社内で共有したところ、反響が良かったのでQiitaにも投稿します。(自分と似た技術スタックの方に刺さるのではないかと考えています)
# ピックアップの観点
**「自社の技術スタックとマッチしてるか」**、**「自分の技術スタックとマッチしているか」**の観点からピックアップしています。筆者は現在web系の企業のSREチームに所属しており、業務や趣味で触れる技術/言語としては下記のとおりです。
– Ruby on Rails
– Node.js / Vue.js / Nuxt.js
– AWS + Terraform
– Go/python/Firebase/GCP一方で下記技術は興味が無い/専門じゃない等の理由でスルーしていますのでご注意ください。
– モバイルアプリ系
– ML系
– JVM系# Technology Radarとは
要は**今年のイケてる技術の紹介**です。
4段階で導入のお
CircleCIのnode imageでnpm installに失敗する
CircleCI2系で、公式ドキュメントを参照してセットアップしたらnpm installがコケた。
circleci/node:6.17.1のイメージを使用してる環境。https://circleci.com/docs/ja/2.0/language-javascript/
“`console
Error: Cannot find module ‘strip-ansi’
“`こういうエラーでnpm installが停止する。
package-lockの中を見るとstrip-ansiは入ってるし……と思ってたがプロジェクトのパッケージが問題ではなくて、原因としては、公式ドキュメントにある `sudo` がだめ。“`yml:.circleci/config.yml
– run:
name: update-npm
command: ‘sudo npm install -g npm@latest’
“`npmがsudoでインストールされるとそのあとのnpmコマンドが通らなくなる(別にinstallに限らずnpmコマンド全部落ちる)。
sudoを外すと
Node.jsのfsモジュールの使い方
#fsモジュールとは
fsモジュールはファイルを扱うためのモジュールで、ファイルから書き出したり、ファイルに書き込んだりするときに役立ちます。
Node.jsがはじめから提供しているモジュールなので、Node.jsのインストールがしてあれば、fsモジュールのインストールの必要はありません。##ファイルの読み込み
“`JS
const fs = require(‘fs’);//fs.readFileSync(ファイルのパス, 文字コード, コールバック関数)
fs.readFileSync(‘./text.txt’, utf-8, (err, data) => {
//dataがファイルの中身、errは読み込み時のエラー
if(data) {
console.log(data);
} else {
console.log(err);
}
});
“`##ファイルへの新規書き込み
“`JS
const fs = require(‘fs’);//fs.writeFileSync(ファイルのパス, 書き込む文字, 文字コード, コールバック
ファイルをセーブしたら、npmスクリプトを走らせる」というライブラリを1行で作る。
## 「ファイルをセーブしたら、npmスクリプトを走らせる」というライブラリがある日突然欲しくなりました。
[onchange](https://github.com/Qard/onchange)というライブラリが見つかりました。npmライブラリです。
使い方は簡単で、onchangeをグローバルにインストールした後、grobパターンで、監視するファイルとnpmスクリプトを記述するだけです。
“`
npm install -g onchange
onchange ‘app/**/*.js’ ‘test/**/*.js’ — npm test
“`しかしです…
**globパターンを記述するのが地味に面倒い!**
ルートフォルダ以下で変更があれば、npmスクリプトを走らせるだけでいいのに…## そこでよりシンプルなライブラリを自作することにしました
作ったのが「save-run」というライブラリ。
名前は、save-runとして、npmに登録してあります。
[githubリポジトリはこちら](https://github.com/t-kabaya/sav
Node.js で無限ループしつつ、一定周期で処理をしたい
メモ。
Node.js で無限ループしつつ、一定周期で処理をしたいという要件があった。
(具体的には SIGTERM シグナルを受けてから1秒毎に標準出力に文字列を出力したい)
上記について Node.js のサイトにずばり書いてあった。[“Infinite Loop” Execution ~ setInterval()](https://nodejs.org/de/docs/guides/timers-in-node/#infinite-loop-execution-setinterval)
“`node.js
function intervalFunc() {
console.log(‘Cant stop me now!’);
}setInterval(intervalFunc, 1500);
“`この場合、1.5秒毎に `intervalFunc()` が実行される。
必要に応じて時間や処理内容を変えれば良い。Node.js v10.17.0 で動作確認済み。
ZEIT NowでNode.jsのバージョン指定をする
## NowへのデプロイでNodeのバージョンに起因するエラーが起きた
“`
Error: @grpc/grpc-js only works on Node ^8.13.0 || >=10.10.0
“`
上記のエラーが起きて困った。## :bomb: 原因
要するに8.13.0 から 10.10.0 の間のバージョンじゃないと動かないよということだと思う。## :star: 解決策
じゃあNodeのバージョンをこっちで指定してあげようということになる。英語の情報しか出てこないが漁っていると、「now.json」で「engine」という項目を指定するみたいな情報が出てくるがこれが罠である。
***ZEIT NowのNode.jsバージョン指定は「now.json」ではなく「package.json」で指定する***
“`package.json
“engines”: {
“node”: “10.x”
}
“`これでOK。
ただし、バージョンは何でもかんでも指定出来る訳ではなく提供されているものだけ。