JavaScript

[GAS] GMailで差込みに対応した一斉メール送信

一斉メール送信の仕組みを自分で用意するのは考慮することが色々あって正直ダルいのですが、GASを利用すれば比較的かんたんに実現できます。 大まかな流れは以下の通りです。 文面をGoogleドキュメントで作成 送信者のメールアドレスと差込みたい値の一覧をG…

[JavaScript] 操作を一定時間しないとタイムアウト扱いにする

Webブラウザとサーバー間で常時、または一定間隔で通信を行っている場合、ユーザーが端末の前から長時間離れた際などに通信を停止したい場合があります。最新の情報をサーバからもらってきても使う人がいなければムダですからね。 サーバ負荷的な面で実装す…

[AWS] S3へMIMEタイプを自動判定しながらアップロードする - Node.js

AWS S3を単なるストレージとして使う際には問題とならないのですが、S3をWebサーバとして使う場合はファイルのMIMEタイプ(Content-type)を正しく指定しておかないとWebブラウザからダウンロードを求められるなど意図した通り動いてくれないことがあります。 …

[AWS] Serverless FrameworkでS3にファイルが追加されたらLambdaを起動する

AWS LambdaはRESTful APIの開発時だけではなく、特定のイベントをトリガーとして処理を行うことができます。今回はServerlessFrameworkを利用し、S3に新しくオブジェクトが追加された際に関数を起動するところまでをまとめます。

[JavaScript] フォーム部品に値をセットする(まとめ)

前回に引き続きフォーム部品のまとめです。今回はプログラム側から値をセットしたり選択状態をコントロールするお話です。 前回のフォームに入力された値を取得したいという方は以下をどうぞ。 blog.katsubemakito.net

[JavaScript] フォーム部品の入力値を取得する(まとめ)

Webサービスを作る際に必ずと言ってよいほど利用するフォーム部品ですが、ユーザーに入力された値を取得する際にお恥ずかしながら自分でもたまにど忘れすることがあるのと、新旧の情報がごっちゃになっているため脳内の整理も兼ねてまとめておきます。 フォ…

ログイン画面にreCAPTCHA v3を導入する

ユーザー登録やログインなどで不安になるのが「ボット」の存在です。 検索エンジンのクローラーなど悪意の無いものであればよいのですが、機械的に大量のユーザーを作成されたり、悪意のある人が第三者のアカウントをゲットしようとプログラムを組んで攻めて…

[HTML5] 異なるオリジンのWebStorageの内容を取得する

WebStorage(localStorageとsessionStorage)は同一オリジン内のデータしか読み書きできません。名前空間を分けることでデータの衝突を防いだり、大切なデータを他のサイトから覗き見られることから守ってくれています。 しかしWebサービスを開発していると、…

[AWS] CloudFrontのオリジンを動的に変更する – Lambda@Edge + Node.js

CloudFrontで参照しているオリジンをLambda@Edgeで変更してみます。 今回はhttp://foo.example.comでアクセスされたら、CloudFrontがオリジンhttp://example.com/foo/へリクエストする設定をします。 正直なところあまり需要は無いと思いますがw この設定が…

[JavaScript] 数値がゾロ目か判定する

小ネタです。 指定された数値がゾロ目かどうかを判定する正規表現を試してみます。説明するまでも無いと思いますが「1111」「8888」など同じ数だけで構成された数値をゾロ目と言います。 結論から言うと以下の通り。 /** * ゾロ目判定 * * @param {number} n…

[AWS] CloudFront+S3オリジンでindex.htmlを省略する - Lambda@Edge + Node.js

CloudFrontのオリジンにS3を利用する場合、大きく2つのパターンがあります。 S3を独立したWebサーバとして利用する S3を内部的にHDDのように利用する 前者はS3側で割と色々と設定できるのですが問題は後者です。一般的なWebサーバのように「example.com/hoge…

[AWS] CloudFrontでBASIC認証を行う - Lambda@Edge + Node.js

S3をWebサーバ代わりに使っている方も多いと思いますが、開発中のページや社内だけで閲覧したい場合など簡易的なアクセス制限をかけたい場合がありますよね。以前はEC2の安いインスンスを用意することもありましたが、Lambda@Edgeが登場してからはS3とCloudF…

[Node.js] SequelizeでMySQLを利用する - その5「ToDoアプリ作成編」

Node.jsの代表的なO/RMであるSequelizeの第五弾。 これまで以下のような内容を取り上げてきました。 第1回 インストールから基本的な利用方法 第2回 SELECT文の使い方 第3回 トランザクション 第4回 マイグレーション 今回はここまでの情報の整理も兼ねて、…

[Node.js] SequelizeでMySQLを利用する - その4「マイグレーション編」

Node.jsの代表的なO/RMであるSequelizeの第四弾。 第1回ではインストールから基本的な利用方法、第2回ではSELECT文の使い方、第3回ではトランザクションを取り上げました。 今回は「マイグレーション」のお話です。 Sequelizeから提供されているCLIツールを…

[Node.js] SequelizeでMySQLを利用する - その3「トランザクション編」

Node.jsの代表的なO/RMであるSequelizeの第三弾。 第1回ではインストールから基本的な利用方法、第2回ではSELECT文の使い方を取り上げました。今回はINSERTやUPDATEなど更新系の処理に欠かせない「トランザクション」です。

[Node.js] SequelizeでMySQLを利用する - その2「SELECT文編」

Node.jsの代表的なO/RMであるSequelizeの第二弾。 前回はインストールから基本的な利用方法までを取り上げました。今回はSELECT文にまつわるトピックスを取り上げていきます。 Sequelizeに限った話ではないですが、WHERE句の条件が複雑になってくると「これS…

[Node.js] SequelizeでMySQLを利用する - その1「チュートリアル編」

Node.jsでO/RMと言えば「Sequelize」です。 PostgreSQL, MySQL, MariaDB, SQLite, Microsoft SQL Serverなど主要なRDBに対応しており、AWS上での利用報告もありますのでRDSなどでももちろん使えます。また現在たどれる最古のバージョンv1.1.2は2011年にリリ…

[JavaScript] クレジットカード番号から国際ブランドを特定する

前回に引き続きクレジットカードがテーマです。今回は決済画面などで入力されたクレジットカード番号がどの国際ブランであるかを調べるコードです。 ブランドを検出するロジックは前回と同じですので、ここではユーザーの入力と検出部分のつなぎ込みがメイン…

[JavaScript] クレジットカード番号が正しいか検証する

決済画面などで入力されたクレジットカード番号が正しい物であるか検証するコードを書いてみます。 npmでモジュールを探すとcard-validatorなどいくつか見つかるので、実際にはこれらを使うのが楽ちんですね。メンテナンスされていればカード番号の仕様が変…

[AWS] Comprehendで日本語の感情分析を行う

AWSから提供されているAIツールの一つ「Amazon Comprehend」がいつの間にか日本語に対応していたので試しに利用してみることにしました。 Comprehendは文章を解析し、単語が人なのか場所なのか意味付けを行ったり、今回チャレンジするどういった感情の文章な…

[Node.js] ClamAVでウイルスチェック

Node.jsでウイルスチェックを行います。ユーザーがアップロードしたファイルを公開するようなサービスでは事前にチェックを行わないと、簡単にウイルスを撒き散らすスーパースプレッダーと化してしまいます。 今回は無料で使えるオープンソースのアンチウイ…

[HTML5] リンク先のファイルを超簡単にダウンロード指定する - download属性

なんとa要素にdownload属性を追加するだけで、ページ(ファイル)を表示するのではなく、Webブラウザにファイルを保存するかダイアログを表示させダウンロードを促すことが可能です。 <a href="foo.txt" download>foo</a> download属性にファイル名を指定すれば、デフォルトのファイル名として…

[JavaScript] オンライン・オフラインを判定する

小ネタです。 スマホを使いながら電車などで移動していると通信がプツプツ切れます。家でPCを使う場合と違って通信状況が安定しません。そんな時に活躍するのがブラウザがオンラインかどうかがわかる navigator.onLine です。 このプロパティを参照するだけ…

[Node.js] 指定した時間sleepする - Promise版

小ネタです。 多くのスクリプト言語やシェルなどで実装されているsleep機能がNode.jsには存在しないため、使いたくなったら自分で用意する必要があります。いくつか方法がありますがお手軽なのはPromiseとsetTimeoutを利用した物です。 あっちこっちで使う場…

[JavaScript] 連想配列に forEach を使用する

小ネタです。 forEachは配列用のため、連想配列(ハッシュ)には通常使うことができません。そんなときにはObject.keys()を介すことで利用が可能になります。 const hash = { apple: 100, banana: 130, orange: 98 } const result = [ ] Object.keys(hash) .fo…

[JavaScript] 配列の値が条件を満たすか検証する - some(), every()

every()とsome()は配列内の要素をテストし、条件を満たしていれば最終的にtrue、満たしていなければfalseを返します。 /** * 偶数チェック */ const list = [1, 2, 3, 4, 5] const check = value => ((value % 2) === 0) // テストを行う const check1 = lis…

[JavaScript] 配列の全要素に処理を行い新しい配列を作成する - map()

map()を利用すると、元になった配列の要素を順番に処理していき新しい配列を生み出すことができます。mapは元になった配列を変更しません。 /** * 2乗する */ const list = [1, 2, 3, 4, 5] const newlist = list.map( value => value * value) // [1, 4, 9,…

[JavaScript] 配列からひとつの値を生成する - reduce()

reduce()は配列内の値を順番に処理していき、最終的に1つの値を生成することができます。 /** * 配列の値をすべて足す */ const list = [1, 2, 3, 4, 5] const sum = list.reduce( (prev, current) => prev + current ) // 15 console.log(sum) returnした値…

[JavaScript] 配列から特定の要素だけを取り出す - filter()

filter()は配列の要素を順番にテストしていきtrueが返された要素だけの新しい配列を返却します。 /** * 配列から偶数だけを取り出す */ const list = [1, 2, 3, 4, 5] const newlist = list.filter( value => ((value % 2) === 0) ) // [2, 4] console.log(n…

[Electron] リンクをクリックすると標準Webブラウザで開く

Eletronでアプリを開発していると、ユーザーをWebブラウザに飛ばしたなるときがあります。 これ実装は非常にかんたんなのですが、最近はセキュリティの関係で描画以外の処理はメインプロセスで行う流れになってきていることもあり、今回はメインプロセスでイ…