Node.js

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

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

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

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

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

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

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

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

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

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

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

[Electron] contextBridge経由でIPC通信を行う

Electron v12で破壊的な変更がいくつか行われました。FLASH関係の廃止、レンダープロセスでremoteが非推奨になるあたりが話題になりますが、IPC通信時に一工夫する必要が生じたのが地味に面倒ですw これまではレンダラープロセスからメインプロセスを呼び出…

[AWS] Rekognitionで"けしからん"画像か判定する

前回試したAmazon Rekognitionには、画像に不適切な内容が含まれるかチェックする機能が搭載されています。 今回もNode.jsからRekognitionを利用するコードを書いてみます。SDKを利用してRekognitionへ画像を送ると0〜100の間でどの程度けしからんか判定して…

[AWS] Rekognitionで画像内に存在する物体を検出する

Amazon Rekognitionを使うと画像や動画をAIで解析し、そこにどういった物体が存在しているか「ラベル」を付けてくれます。例えばジャイアントパンダが写っていれば「Giant Panda」というテキストと、画像内のどこに存在しているか座標情報が送られて来ます。…

[Electron] 第三者が作ったアプリのソースコードをのぞき見る

Electron製のアプリは非常に簡単に内部のソースコードが閲覧出来てしまいます。これを認識していないと簡単にコピーアプリを作られたり脆弱性を調べられます。 今回はどれくらい手軽に行えるか実際にやってみます。ハリーポッターで言う「闇の魔術に対する防…

[Electron] Windows用アプリにコード署名を行う

Electronで作成したWindows用アプリをインターネット経由で配布した場合に、悪い人に改ざんされておらず安全であることを証明するためにコード署名を付加します。 ここではelectron-builderを使った例になります。macOS用アプリの場合と比べれば、環境変数を…

[Electron] 多言語対応する - i18n

WindowsもmacOSも世界中で利用されていますし、日本国内にも外国語が母国語な方も大勢いらっしゃいます。そこで今回はElectronをユーザーの言語環境に合わせる国際化(i18n)を行ってみます。 Electron自体にはそのための専用の機能は用意されていないようなの…

[Electron] アプリ起動時にスプラッシュ画面を表示する

アプリの本体のウィンドウが起動する前に、会社やアプリのロゴが表示される画面を見たことがある方も多いと思います。いわゆる「スプラッシュ」と呼ばれる画面です。今回はこちらの実装を行ってみます。 スプラッシュはブランディングなどが目的の場合もあり…

[Electron] 設定情報をローカルファイルに簡単保存 - electron-store

設定情報やちょっとしたデータの管理にレンダラープロセスの場合はWebStorageやIndexedDBが利用できますが、メインプロセスでは自力でファイルに保存する処理が必要でちょっと面倒。そんな時に利用するのがelectron-storeです。手軽にデータの永続化ができま…

[Electron] クラッシュレポートの自動送信に対応する

Electronにはアプリがクラッシュした際に自動的にダンプファイルや各種情報を指定サーバへ送信する機能が用意されています。今回は受信サーバも含めて実装してみます。

自分のグローバルIPを確認するコマンド「showip」

手前味噌ですが、自分のグローバルIPをコマンド一発で確認できる「showip」をついカッとなって作成しました。VPNやプロキシ経由で接続中に自分のIPがほんとに変わったか確認したかったのです。 $ showip 203.0.113.1 内部の処理的にはIPアドレスを表示してく…

[Electron] 自動アップデートに対応する - electron-builder + AWS S3

アプリを起動すると自動的に最新版があるか確認し、もし更新されていれば自動的にバージョンアップしてくれる機能を実装します。 いくつか方法はあるのですが今回は electron-builderの機能を使う ビルドしたアプリはAWS S3へアップ 更新があるとユーザーの…

[Electron] macOS用アプリに「コード署名」と「公証」を行う

今回はインターネット経由で配布したmacOS用のアプリが安全であることを証明するための作業を行います。 ぶっちゃけ面倒です← あとmacOSがないと作業できませんのでWindowsユーザーの方は(お小遣いを)準備してから挑んでください。

[Electron] ログをファイルに記録する - electron-log

開発中はconsole.logで見れば良いのですが、ファイルにも情報を記録しておきたい場合にelectron-logを利用すると非常に簡単にログを記録することができます。 const log = require('electron-log'); log.info('Hello, log'); log.warn('Some problem appears…

[Electron] ダイアログで指定したファイルに保存する

前回はファイルダイアログで読み込みを行いましたが、今回は保存を行います。 今回もOSの機能を利用するダイアログの表示とファイルを読み込む部分はメインプロセスが担当し、それ以外の部分をレンダラープロセス(Chromium上で動いている箇所)が行うことにし…