Node.js

[Electron] メニュー「アプリについて」をカスタマイズする

メニューからWindowsなら「ヘルプ」→「(アプリ名)について」、macOSなら「(アプリ名)」→「(アプリ名)について」とたどるとアプリのバージョン情報や製作者名が表示される機能をElectronではAboutPanelと呼びます。

今回はこのAboutPanelの表示内容をカスタマイズします。

続きを読む

[Electron] Webの技術だけでWindowsやmacOS用のアプリを作成する

HTMLやJavaScriptだけでPC用のアプリが作成できるツールはいくつかありますが、その中でもVisualStudioCodeやSlackなどの実績があるElectronは検討候補から外せないでしょう。

1つのソースコードで複数のプラットフォーム用のアプリを同時に開発できるのは非常に魅力的です。
今回はElectronでHelloWolrd的なアプリを作成し、実際にWindowsやmacOSで動作する実行可能なファイルを作成するところまでをまとめてみます。
続きを読む

はじめてのSocket.io #3 チャット編「ユーザー間でのなりすましを防ぐ」

Socket.ioでチャット開発するシリーズも3回目。
前回はSocket.ioから送信されてきた発言内容が自分の物かを判定するプログラムを書きましたが、この仕様だと簡単に他人へのなりすましが出来てしまいます。今回はこれを防ぐ簡易的な方法を紹介しつつ、チャットルームへの入退室などいくつかの機能追加を行います。


続きを読む

[Node.js] expressで作るHTTPサーバ – 入門編 その3「非同期処理とファイル」

※この記事は専門学校の講義用に作成されたものです

Node.js+expressでHTTPサーバを作成する第3段。今回は最終的にファイル処理について取り上げるのですが、その前に知っておかないとグローバル変数以上のハマりどころである「非同期処理」についても説明します。Node.jsはApacheなどのWebサーバと比べると仕組みが大きく異ります。この違いをまずは抑えましょう。
続きを読む

[Node.js] expressで作るHTTPサーバ – 入門編 その2「グローバル変数の生存戦略編」

※この記事は専門学校の講義用に作成されたものです

Node.js+expressでHTTPサーバを作成する第2段。今回は「罠」にも「武器」にもなるポイントについてお話します。

PHPでサーバサイドを実装する際には、Webサーバとしての機能はApacheが受け持つパターンが多いわけですが、この場合PHPはリクエストがある度に起動と終了を繰り返します。つまり起動時に前回の処理結果などを気にする必要は基本的にありません。ところがexpressでサーバを作っている場合には1つのプログラムが起動しっぱなしであることを意識する必要があるのです。
続きを読む

[Node.js] expressで作るHTTPサーバ – 入門編 その1

※この記事は専門学校の講義用に作成されたものです

Node.jsでHTTPサーバを作成します。

以前からNode.jsはサーバを作るための言語であるという誤解している方が結構いらっしゃるのですが、標準モジュールだけでも非常に気軽にHTTPサーバをポンッと作成して立ち上げることが出来てしまうことも起因しているのだと思います。外部のモジュールを取ってくれば様々なサーバ・ソフトウェアが転がっていることでも更に拍車をかけたのでしょう。

今回は標準のモジュールに加えてExpressと呼ばれるモジュールと組み合わせることで、さらに簡単にWebサーバを構築する手順について解説します。
続きを読む

[AWS] Serverless FrameworkでRESTfulAPIを作成する (S3編)

今回はServerless FrameworkでRESTfulAPIを介しS3からデータを取得したり保存したりします。

DynamoDBの回と同様に、プロジェクトの設定ファイルであるserverless.ymlにCloud Formationの書式でS3の設定からIAM周りまで一元管理できます。分かってくると楽しいですね。逆に詰まるとネット上に情報があまり転がってなくて地獄ですがw
続きを読む

[AWS] Serverless FrameworkでRESTfulAPIを作成する (DynamoDB編)

今回はServerless FrameworkでRESTfulAPIを介しDynamoDBを触ります。

プロジェクトの設定ファイルであるserverless.ymlにCloud Formationの書式でいろいろ定義できるのでテーブルの作成やIAM周りの設定もすべて一元管理できます。テキストファイルでほとんどが完結するのほんと最高ですね。
続きを読む

[AWS] Serverless FrameworkでRESTfulAPIを作成する (外部サーバと通信編)

Lambdaから外部のサーバとHTTPによる通信を行ってみます。

とは言っても特別な制約はありませんので基本的に自由行うことができますが、実行時間によって課金される点に注意が必要です。相手方のサーバからレスポンスが中々返って来ないとその時間分だけ課金されます。またVPCの中にLambdaを置いて実行する場合はインターネットゲートウェイなどの設定が必要になります。

では行ってみましょう。
続きを読む

[Node.js] JSONをCSV形式でファイルに書き込む – csv-writer

小ネタです。
csv-writerモジュールを使うとJSON的なデータをCSV形式でかんたんに保存することができます。

// CSVにしたいデータ(オブジェクト)
const data = [
  {id:1, title:"吾輩は猫である", view:123},
  {id:2, title:"坊っちゃん",     view:456},
  {id:3, title:"こころ",        view:789}
];

// 準備
const createCsvWriter = require('csv-writer').createObjectCsvWriter;
const csvWriter = createCsvWriter({
  path: '/var/tmp/data.csv',       // 保存する先のパス(すでにファイルがある場合は上書き保存)
  header: ['id', 'title', 'view']  // 出力する項目(ここにない項目はスキップされる)
});

// 書き込み
csvWriter.writeRecords(data)
  .then(() => {
    console.log('done');
  });

次のようなファイルが生成されます。

$ cat /var/tmp/data.csv
1,吾輩は猫である,123
2,坊っちゃん,456
3,こころ,789

続きを読む

[JavaScript] 既存のオブジェクトにメソッドを追加する

小ネタです。
JavaScriptのグローバルオブジェクトには様々なメソッドが最初から用意されています。例えば文字列を扱うStringには、検索置換するreplace()や一部を取り出すslice()などです。ここに自分で用意したオレオレなメソッドを追加することができます。

結論から言うとprototypeで宣言するだけ。以下の例では文字列中のホワイトスペースをすべて削除する、連続するスペースを1つにまとめてくれるメソッドを追加しています。

/**
 * めっちゃtrimするメソッド
 */
String.prototype.trim2 = function(){
  return(
    this
        .trim()                     // 両端のスペースを削除
        .replace(/\r|\n|\t/g, "")   // 改行とタブを削除
        .replace(/\s{2,}/, " ")     // 複数のスペースを1つにまとめる
  );
}

実際に文字列の後ろにチェーンして利用できるようになります。

" foo   bar ".trim2()  // "foo bar"

なお、利用する箇所よりも前にprototypeで定義しないとエラーとなるのでご注意を。またアロー関数式だとthisの意味が変わってくるのでご注意ください。

続きを読む