- 1. 初めてのシステム案件で詰まったお話(Heroku + puppeteer)
- 2. 東京アラートBOTを作ってみた
- 3. なぜAPサーバーをWebサーバーとして利用しないのか
- 4. 世界初!異色のコラボ!「ラブライブ!」と「ワイルド・スピード」の聖地を教えてくれるLINEbot!
- 5. Cloud Functions for FirebaseでNode.js 12を利用する方法
- 6. Node.jsでGoogle Driveにファイルをアップロードする (Google Drive API v3)
- 7. Node.jsでGoogle Drive上のファイルをダウンロードする (Google Drive API v3)
- 8. 【AWS・Lambda】Lambdaから別リージョンのサービスを使用するための設定
- 9. mongoDBのドキュメント削除方法
- 10. Node.jsでExpress.jsを使ってpng画像を動的に表示するサンプル
- 11. DynamoDB Localトラブルシューティング(Node.js + TypeScript)
- 12. Asciidoctor.jsでプレビューしながら編集する
- 13. Express+Passportで簡単にOpenID ConnectのRPを作成してみた
- 14. esbuildがwebpackより187倍早いらしいので環境構築しよう
- 15. npm install –save firebase で発生したエラーの回避法
- 16. JSON.stringifyで`TypeError: Converting circular structure to JSON`というエラーが出た時の対処法
- 17. ejsでインクルードをするときに、パスをルート相対URLで指定したい
- 18. [JavaScript]ESLintの設定をグローバルルールで保存する
- 19. [Node.js] Handlebars Tips
- 20. Node.jsでOSの環境変数を読み込む
初めてのシステム案件で詰まったお話(Heroku + puppeteer)
# はじめに
こんにちは!ばーんです
今回は自分が初めて納品したシステム開発のお仕事で得たものを整理していきます。
今回書いていく内容は
– システム開発全般
– puppeteer(スクレイピング)に関すること
– Heroku(PaaS)に関することについて書いていきます。これからシステム開発していきたい!
と考えている方は、見ていただけると気づきがあるのかなと思います。## 結論
ざっくり大切だなと感じたことが3点。
**①デバッグ / コードレビューはお金を支払ってでも現役エンジニアにお願いする**
(デバッグは詰まりに詰まったか、単純に自分がしているところを見てもらう)
見ている観点がそもそも違うのでとても勉強になります。**②基礎を学ぶことが遠回りのように見えて近道**
結局上辺だけの解決方法では解決しないことが殆どでした。
今回で言えば公式ドキュメントなどの一次情報を見る。linuxについて理解を深めるなど。**③簡単なことはGASで解決できる**
システム開発これから携わりたい!という方はまずGAS触ればいいと思います。
クライアントの要望の
東京アラートBOTを作ってみた
##東京アラートBOT
LINE BOTを利用し、新型コロナウィルスの新規陽性者数、死亡者数、検査数、東京アラートが出ているかどうかを返してくれるものを作成しました。
###東京アラートを発令する基準
作る過程で東京アラートが発令される基準を調べました。– 新規陽性者数
– 新規陽性者における接触不明率
– 週単位の陽性者増加比
– 重症患者数
– 入院患者数
– PCR検査の陽性者数
– 受診相談窓口における相談件数上記の7項目の状況によって検討されるようです。
重傷者が増えていないので、当面は発令されそうにありませんね。#完成品
東京アラートBOTを製作しました!最新の情報を取得してくれます。#JavaScript なぜAPサーバーをWebサーバーとして利用しないのか
# はじめに
よく聞く話として、「Web3層構造に分けよう」というものがある。Webサーバー、APサーバー、データベースだったと思う。そこで、こんな疑問が生じた。「APサーバーでもHTTPリクエストの処理ができるなら、なんでWebサーバーが必要になるんだ?」と。調べた。
# 目次
1. Webサーバーとは?
2. APサーバーとは?
3. WebサーバーとAPサーバーを分けるもう1つの理由# Webサーバーとは?
まずWebサーバーとして、ApacheとNginxの2つが挙げられることが多い。この2つについて理解する。次の記事を読んでみて欲しい。
1. [ApacheとNginxについて比較](https://qiita.com/kamihork/items/49e2a363da7d840a4149)
2. [Nginxのアーキテクチャを理解する](https://qiita.com/kamihork/items/296ee689a8d48c2bebcd)1つ目の記事では、Apacheがマルチプロセスのプロセス駆動アーキテクチャであること、Nginxがシングルス
世界初!異色のコラボ!「ラブライブ!」と「ワイルド・スピード」の聖地を教えてくれるLINEbot!
「ラブライブ!」大好き!「ワイルド・スピード」も大好き!
そんな欲張りさん向けにLINEbotを作りました。よかったら最後までご覧ください♪#作品の背景
聖地巡礼が好きな私。ロサンゼルスにワイスピの聖地巡礼に行きたいと考えているものの、コロナで旅行も行けず・・・。「ワイルド・スピード」シリーズは、スピンオフも含めて、これまでに9作品上映されているのですが、
3作目となる「ワイルド・スピードX3 TOKYO DRIFT」は、なんと東京が舞台!東京なら巡礼できる!と思い、__ワイスピ聖地巡礼bot東京版を作ることにしました!!__
ところがどっこい!!
意気揚々と調べたものの、CGで作られていたり、すでに取り壊されていたりと、聖地情報が希薄・・・。泣これではbotとして成り立たないので、大好きな「ラブライブ!」と組み合わせ、__世界初のコラボレーション__を実現しました。
#デモ動画
完成したものがコチラです!
位置情報を送ると、最寄りの聖地を教えてくれます。Cloud Functions for FirebaseでNode.js 12を利用する方法
[公式ドキュメント](https://firebase.google.com/docs/functions/manage-functions?hl=ja)の「**ランタイム オプションを設定する**」の項目には Node.js のバージョン 12 が使えることが書かれていますが、その利用方法までは書かれていなかったのでこの記事で説明します。
—
一見、ドキュメントにあるように
“`
“engines”: {“node”: “10”}
“`の箇所を`12`とすれば動きそうですが、ここに書いても動作しません。
Node.js の 12 を利用するためには、[firebase-tools](https://github.com/firebase/firebase-tools)のバージョンを`8.6.0`以上に上げたうえで`firebase.json`に`”runtime”: “nodejs12″`を指定しましょう。
“`
{
“functions”: {
“runtime”: “nodejs12”
}
}
“`参考:[firebase/fir
Node.jsでGoogle Driveにファイルをアップロードする (Google Drive API v3)
Google Driveへのファイルアップロードも試してみます。
* 参考記事
* [Node.jsでGoogle Drive上のファイルを削除する (Google Drive API v3)](https://qiita.com/n0bisuke/items/a1b39635029242f31713)
* [Node.jsでGoogle Drive上のファイルをリネームする (Google Drive API v3)](https://qiita.com/n0bisuke/items/dcc7be337a555b018b19)
* [Node.jsでGoogle Drive上のファイルを指定フォルダに移動する (Google Drive API v3)](https://qiita.com/n0bisuke/items/8f108408a9e1067b9225)
* [Node.jsでGoogle Drive上のファイルを複製(copy)する (Google Drive API v3)](https://qiita.com/n0bisuke/items/6d73bb6e1Node.jsでGoogle Drive上のファイルをダウンロードする (Google Drive API v3)
1年くらい前にGoogle Drive関連の記事を書いてたけど、久々に触りたくなったので調査再開。
* 参考記事
* [Node.jsでGoogle Drive上のファイルを削除する (Google Drive API v3)](https://qiita.com/n0bisuke/items/a1b39635029242f31713)
* [Node.jsでGoogle Drive上のファイルをリネームする (Google Drive API v3)](https://qiita.com/n0bisuke/items/dcc7be337a555b018b19)
* [Node.jsでGoogle Drive上のファイルを指定フォルダに移動する (Google Drive API v3)](https://qiita.com/n0bisuke/items/8f108408a9e1067b9225)
* [Node.jsでGoogle Drive上のファイルを複製(copy)する (Google Drive API v3)](https://qiita.com/n0bisuk
【AWS・Lambda】Lambdaから別リージョンのサービスを使用するための設定
# はじめに
Labmda関数から別のAWSサービスを使用したい…
でも、現在リージョンと別リージョンのサービスを使いたい!そんな時に使用する設定をご紹介します。
Pinpointなど、まだ東京リージョンで使用できないサービスを使う時にも役立ちます。
# 方法
以下はNodeの例です。
“`javascript
const AWS = require(‘aws-sdk’);
// 以下を追加
AWS.config.update({ region:’us-west-2′ });
“`# まとめ
`AWS.config.update`することで、リージョンを切り替えできます。
mongoDBのドキュメント削除方法
初めまして!初投稿です。
こうきといいます。mongoDBでドキュメント内容を削除する方法が日本語で簡潔に纏められている記事がなかったので、
備忘録にと投稿することにしました。# 環境
ターミナル : iTerm
mongoDB : ver. 4.4.0# DB起動 ログイン
“`
mongo // mongoDB起動use admin // adminの部分は各々のDB名を記入
“`#コレクション検索〜ドキュメント削除まで
##### ・コレクション検索
“`
show collections // コレクション検索
“`##### ・コレクションの中身(ドキュメント)表示
“`
db.inventory.find() //inventoryの部分は各々のコレクション名を記入
“`##### ・ドキュメント削除
inventoryの部分はコレクション名を記入
mongoDBのバージョンが3未満なら波括弧{}は不要です。“`
db.inventory.deleteMany({}) //すべてのドキュメントを削除
db.invent
Node.jsでExpress.jsを使ってpng画像を動的に表示するサンプル
画像ファイルを動的に表示するコードです。なかなか見つからなかったのでメモしておきます。
“`javascript:express.js
const express = require(‘express’);
const fs = require(‘fs’);const app = express();
app.get(‘/image’, (req, res) => {
console.log(‘image’);
fs.readFile(‘./example.png’, (err, data) => {
res.type(‘png’);
res.send(data);
});
});app.listen(‘3000’, () => {
console.log(‘Application started’);
});
“`スクリプトを実行し
“`bash
% node express.js
Application started
image
“`ブラウザで下記URLにアクセスすると画像が表示されます
ht
DynamoDB Localトラブルシューティング(Node.js + TypeScript)
`Node.js + TypeScript(Dockerコンテナ)`から`DynamoDB Local`へ接続、操作をする際に発生したトラブルの備忘録です。
## DynamoDB Localとは?
AWS上のDynamoDBにアクセスすることなく、DynamoDBを利用するアプリケーションの開発・テストをすることが可能になります。
[DynamoDB Localの設定(ダウンロード版)](https://docs.aws.amazon.com/ja_jp/amazondynamodb/latest/developerguide/DynamoDBLocal.html)
## 背景
前提として`Node.js + TypeScript`のプログラムはECS on Fargateのタスクスケジューラで定期実行するプログラムです。
今回DynamoDB Localを導入するのは、開発時にAWSのDynamoDBを利用せず、ローカル環境で全て完結させたいというのが理由です。
## 忙しい人のために
トラブル対応後のファイル構成、操作手順が下記になります。
[まとめ? (ファイ
Asciidoctor.jsでプレビューしながら編集する
AsciiDoc の処理系といえば、Ruby の Asciidoctor[^asciidoctor]が有名です。しかし、JavaScript な Asciidoctor\.js[^asciidoctor_js]もあります。本記事は後者を使ってみた記録です。
## 関連
– https://qiita.com/Yamane@github/items/090973185791c174532f : ブラウザで生成結果を見つつ、AsciiDoc 文書を編集できます。反映までの時間が短かく、快適に編集できます。
– https://qiita.com/dbgso/items/927c4e3d0f739855f8d6 : こちらは Ruby 版の Asciidoctor を使っています。Docker で手軽に使い始められるところが良いですね。## バージョン
“`shell-session
$ asciidoctor -v
Asciidoctor 2.0.10 [https://asciidoctor.org]
Runtime Environment (ruby 2.7.1p83 (2
Express+Passportで簡単にOpenID ConnectのRPを作成してみた
#目的と前提
認証/認可について少しづつですが備忘録としてまとめようシリーズ2つめです。
前回はSAML2.0の仕様についてまとめてみました。
https://qiita.com/yuna-s/items/8aa318ca5426c3d9c7e6今回は、Nodejsを使ったRPの作成[1]です。
OpenID Connectのアクセストークン取得まで実装しています。
(UserInfoを取得するところは実装していません)IdPの作成にはオープンソースソフトのOpenAM[2]を使用しています。
認証/認可、基礎的なOpenID Connectの知識があることを前提としています。
#環境
macOS Catalina v10.15.5
OpenAM 14.5.1 Build d8b8db3cac (2020-March-11 23:25)
node v13.13.0利用モジュール
“dependencies”: {
“cookie-parser”: “~1.4.4”,
“debug”: “~2.6.9”,
“express”: “~4.16.1”
esbuildがwebpackより187倍早いらしいので環境構築しよう
# はじめに
久しぶりの投稿になります。
今回は以下の記事で、esbuidがすごい!!という話を聞きつけこの記事を書くことにしました。
参考: [Web フロントエンド] esbuild が爆速すぎて webpack / Rollup にはもう戻れないどのくらいすごいのでしょうか?
参考に挙げている記事によると
> esbuild は Go 言語で書かれた JavaScript および TypeScript のビルドツールです。 esbuild 単体でトランスパイル + バンドル + ミニファイできます。 JSX / TSX もサポートされています。そしてめっちゃくちゃ速いという触れ込みです。最初から速度を意識して無駄がないように書かれており、構文解析・出力・ソースマップ生成は並列化され、ネイティブコードで動作します。公式の
npm install –save firebase で発生したエラーの回避法
記事執筆時点で安定版のfirebase 6.2.4をインストールを試みたところ以下のエラーが出ました。
“`
$ npm install –save firebase@6.2.6
:
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! grpc@1.20.3 install: `node-pre-gyp install –fallback-to-build –library=static_library`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the grpc@1.20.3 install script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.npm ERR! A complete log of this run can be found in:
npm ERR! /Users/yokoyamar
JSON.stringifyで`TypeError: Converting circular structure to JSON`というエラーが出た時の対処法
オブジェクトをJSON.stringifyしたときに、循環参照が含まれていると以下のようなエラーが出ます。
“`js:コード
const a = { a1: “test” };
a.aa = a;
JSON.stringify(a);
“`“`bash:実行結果
JSON.stringify(a);
^TypeError: Converting circular structure to JSON
–> starting at object with constructor ‘Object’
— property ‘aa’ closes the circle
at JSON.stringify ()
“`# 対処法
json-cyclicを使えば解決します。> json-cyclic – npm
> https://www.npmjs.com/package/json-cyclic“`bash
npm install json-cyclic
“`“`js:コード
const { de
ejsでインクルードをするときに、パスをルート相対URLで指定したい
## process.cwd()
Node.jsの`process.cwd()`は、コマンドが実行されたディレクトリを返します。
たとえば、次のようなファイル構成だったとしましょう。
“`plaintext
./project
└ src/
└ *.ejs
└ package.json
└ gulpfile.js
“`この場合、`project`ディレクトリで`gulp`コマンドをたたくことになります。その時に`process.cwd()`が返す値は`path/to/project`になるので、次のように1つ変数化しておけばルート相対URLのような感覚でパス名を記述することができます。
“`js
<% const ROOT = `${process.cwd()}/src`; %>
<%- include(`${ROOT}/path/to/_include.ejs`) -%>
<%- include(`${ROOT}/path/to/_include.ejs`) -%>
<%- include(`${ROOT}/path/to/_include.ejs`) -%>
<
[JavaScript]ESLintの設定をグローバルルールで保存する
# 初めに
学習用でESLintが使いたいけど、プロジェクトごとに設定ファイル(.eslintrc.*)を作成するのは面倒。
そこで、設定ファイルをグローバルルールとして保存してプロジェクトごとに作成しなくていいようにしたので、その時にやった方法を備忘録としてまとめてみました。# 方法
## 1. ESLintのインストール
まずはESLintをグローバルインストール。
“`terminal
> npm -g i eslint
“`ここで、-gは–global、iはinstallを省略したもの。
## 2. ESLintの設定ファイルをグローバルとして保存
`.eslintrc.json`を作成し、ユーザーディレクトリ直下に保存する。
– .eslintrc.jsonを保存する場所
“`
MacOS:/ Users / {USERNAME}
Windows:C:\ Users \ {USERNAME}
“`– .eslintrc.jsonの中身
“`json:.eslint.json
{
“extends”: “eslint:reco
[Node.js] Handlebars Tips
# 概要
テンプレートエンジンであるHandlebarsをいろいろ触ってみた。
Handlebars自体は珍しいライブラリではなく、他に記事があるので、日本語情報が見つからなかった機能を主に紹介する。https://handlebarsjs.com/
Handlebarsを使う際は、ここを一度は目を通すことをお勧めする。> ここでは、通常のテンプレートとしての機能は紹介しない。
> 環境は、AWS Lambda Node.js上で動かす事を想定している。# pertialとhelper
Handlebarsで機能を拡張する方法には、この2種類がある。
* partial : いわゆるサブテンプレート、テンプレートに動的に他のテンプレートを埋め込む事ができる。
* helper : 関数。テンプレートの中でヘルパ関数を実行し、その結果をtemplateに埋め込む事ができる。“`hbs
{{!sample.hbs}}
{{#if hoge }}
{{ sample.sub.hbs hoge }}
{{/if}}
“`例えばこんな感じで、`sample.hbs
Node.jsでOSの環境変数を読み込む
“`
yuta:~ $ node
> process.env
{ SHELL: ‘/bin/bash’,
SESSION_MANAGER:
‘local/CARMILLA:@/tmp/.ICE-unix/1792,unix/CARMILLA:/tmp/.ICE-unix/1792’,
QT_ACCESSIBILITY: ‘1’,
“`## 実行
“`app.js
console.log(process.env.USER)
“`“`
yuta:~ $ node app.js
yuta
“`