node Express にまつわるあれやこれや

本番環境で使うなら

サーバサイド JavaScript が語られる時、大抵は node の話が出てきて

PC 上でも JavaScript が動く→サーバ開発用としても使える

みたいなストーリーになっているのだが、 現実的に言えば、そのままでは使えない

思い出して欲しいのだが、そもそも JavaScript は非同期のクセの強いスクリプト系言語だ。
これだけでも使い勝手が悪い上、エラーが出るとプログラム自体が停止してしまう、というおおよそサーバー開発用言語としては不向きな弱点を持っている。

この弱点を回避するためには、停止した際に復旧する仕組みなどが必要なのだが、最近では pm2 の評判がいいようだ。

ところで、pm2 をグローバルでインストールするとき、sudo つけないとできなくない?

実用的にも

sudo npm install -g pm2

でいいと思うんだが。(詳しい使い方はこの記事あたり参照)

ちなみに pm2 の p はプロセスの p でしょう。
(ここでいうことではないかもしれないが、特異な言葉の使い方は周囲から理解されにくくなるのでやめた方がいいと思う。何言ってるかわからん人はリンク記事読んでください。通常、「スレッド」というべきところを「プロセス」と言っちゃているので、内容にはそそられるところがあったが、結局、読むのをやめてしまったっていう話です)

SSL 化

本番で使うなら、SSL 化は必須。

これも(今となっては)使えない書き方している記事は多い。

Express 3 以降は以下のように書き方になるらしい。

var fs = require('fs');
var http = require('http');
var https = require('https');
var privateKey  = fs.readFileSync('sslcert/server.key', 'utf8');
var certificate = fs.readFileSync('sslcert/server.crt', 'utf8');

var credentials = {key: privateKey, cert: certificate};
var express = require('express');
var app = express();

// your express configuration here

var httpServer = http.createServer(app);
var httpsServer = https.createServer(credentials, app);

httpServer.listen(8080);
httpsServer.listen(8443);

StackOverFlow より。

秘密鍵 server.key とサーバー証明書 server.crt を sslcert というフォルダに配置して読み込むだけでいい。

こういうことができる node 環境は素晴らしいと思う。

しかし、こういう情報を海外筋から入手しないといけないというのは少々いただけない。

愚痴

少々、愚痴っぽいテイストが入っているので、この際だから言わせてもらうと、ある程度、この業界でちゃんと生きていきたければ

CUnix

に関しては、イロハ+α 程度のスキルは身につけておいてほしい。

なんで、突然、こんなことを言い出したかといえば、某会社経由で「C や Unix ? あー、彼なら、余裕っすよ。経験あります」という触れ込みで配属された人が、まるっきりできていなかったから(笑・・えない)。

 

 

(続く)

 

 

 

Mac アプリインストーラー .pkg の作り方

あまり作る機会がないのだが、Mac アプリ用のインストーラーとして pkg 形式というものがある。

アプリそのものの場合、公証を受けなくてもユーザーが右クリック→「開く」でインストさせることはできるが、インストーラーの場合、デフォルトでは

オーナー root :グループ wheel

でインストされるせいか、この辺はキビしく、公証を受けていないと

このパッケージは、このバージョンの macOS と互換性がありません

という無慈悲なアラートとともにインスト自体がストップしてしまう。

だから、配布したい場合、公証まで受ける必要がある。

で、pkg 形式のファイルの作り方だが、現在だと『Mac用installerの作り方』 がまとまっているようだ。
ただ、この記事、.app が前提となっていて、コマンドラインツールでは全く通用しない。
説明も、もっぱら手順のみでコマンドの意味もまったく解説されておらず、ある程度のスキルを持った人はイライラすると思う。

コマンドラインツールの公証

追記の記事が一番確実。(ワイも Xcode 上で実行できないか試したが、記事のようにコマンドラインからビルドするのが確実なようです。しかし –timestamp というフラグは言われないと気が付かない)

だが、その他のコマンドがいささか古いのでアップデート。

まず、XXX.plist をつくる。

pkgbuild --analyze --root build/pkgroot hoge.plist

中身を見るとわかりますが、コマンドラインツールの場合、hoge.plist はほぼ何の有益な情報も記入されてないです。次のコマンドのために形式的に必要なのでは?と思います。

次はこれを使って .pkg を作成。

pkgbuild --root build/pkgroot --component-plist hoge.plist --scripts scriptDir --identifier id --version version --install-location "/" hoge.pkg

お次は hoge.pkg に(インストーラーの方の)署名。

productsign --sign "Developer ID Installer: team name" "hoge.pkg" "hoge2.pkg"

この時点でも公証は受けられる。
この時の password は apple ID 本体のやつではなくて、サードパーティアプリの二段階認証用のものを使う。
ない場合は(ほとんどの場合、ないと思うが)、appleID のページに行って作成。

xcrun notarytool submit hoge2.pkg --apple-id "hoge@hoge.com" --password 1234-5678-abcd-efgh --team-id 1234ABCD --wait

それほど大きくないソフトであれば数分で以下のメッセージが返ってきます。

Processing complete
  id: 1234678-abcd-4f44-86ae-792c54d13965
  status: Accepted

その他事項はまずはこの確認やってからでいいと思う。
ネットに落ちている情報は古いことが多く(この記事だっていつかは陳腐化するでしょう)、一回で決まることはまずないと思うので。


追記:英語になるがこの記事 や この記事(こちらは日本語)なども参考に。