radioc@?

レディオキャットハテナ

【勉強会メモ】関西Node学園 6時限目

nodejs.connpass.com

Node.js v12 Notable Changes

@shisama_ さん

speakerdeck.com

遅れて参加したので残念ながら聞けませんでしたが発表資料にもあるブログ記事も含めて、いつもためになる情報を発信していただきとても助かっております。

shisama.hatenablog.com

半年がかりでNode.jsにコミットして得たもの

@koh110 さん

speakerdeck.com

こちらも最後のほうしか聞けませんでした。Node本家へPRを出してマージしてもらうまでの話のようでした。

eslintでtypescript

@zilch8 さん

eslint

eslint.org

  • JSのLinter
  • 単体ではTypeScript非対応

tslint

palantir.github.io

  • TSのlinter
  • TS界ではeslintの代わりに使われてきた

ある日

というわけでやってみよう

tslintを使ったプロジェクトを作成して(あとから)eslintで動くようにしてみる

  • tslint導入
    • .tsファイルに怒られそうなコードを書いてみる
    • 無事にエラーが出た
  • eslintでも発生するようにしてみる
    • eslint導入&実行
    • eslintrcにparser追記
  • eslintがTSを解釈できるようになってlintエラー発生
    • 若干エラーの内容が違う
    • tslintにあったルールが不足
  • tslintのルール⇒eslintのルールへ
    • ルールの置き換え

github.com

所感

  • TSでeslintが動くようにするのは簡単
  • ルールの置き換えが大変
  • 既存PJで置き換えはつらそう
  • eslintだとまだ処理が重い?
  • 近い将来に期待

Node.jsサーバアプリケーションの稼働方法

@akkun_choi さん

基本

  • httpモジュールを使えばたった数行でサーバが動く

nodeコマンド

  • 基本的にシングルプロセス、シングルスレッド
  • エラー等でプロセスが落ちると停止してしまう
  • 更新する際にダウンタイムが発生

プロセスマネージャ

  • expressjs.comより

http://expressjs.com/ja/advanced/pm.html

PM2

http://pm2.keymetrics.io/

  • Node.js製のプロセスマネージャ
  • インストール、起動簡単

デプロイ

  • 設定ファイルに記述してコマンド実行
  • ゼロダウンタイムで更新可能
  • capistranoとの相性が悪い

自動起動

  • サーバ起動時に自動的にプロセスを起動する
  • 各OSに合わせた自動起動設定を生成するコマンドが用意されている

マルチプロセス

  • CPUリソースを最大限使うため
  • ワーカープロセスが1つ停止しても、他のプロセスで動作
  • デメリット
    • プロセス無いのデータやイメンドは共有されない
    • Redis等で共有する

負荷分散を自分でやる⇒forkモード 負荷分散をpm2に任せたい⇒clusterモード

nodeの起動はpm2で事足りる マルチプロセスにする場合はモードの違いに注意

サーバアーキテクチャ

  • シングルプロセス・シングルサーバ
    • 最もシンプル
    • 開発環境、プロトタイプ向け
  • マルチプロセス・シングルサーバ
    • 手軽にスケールアップしたい、可用性を上げたい
    • forkモードならロードバランサ必要
  • シングルプロセス・マルチサーバ
    • サーバ側の構成
    • シンプルでスケールアウト
  • マルチプロセス・マルチサーバ
    • マルチコアサーバで負荷分散したい
    • forkモードで動かすと面倒

AWS ESC x Node.js

  • DockerとNode.jsの相性が良い
    • どちらも基本はシングルプロセス
    • Node.jsコンテナだけでWebサーバコンテナが動く
  • 複数サーバ構成が抱える課題
    • デプロイ
    • ログ収集
    • スケールアウト
    • サーバ構成管理

ローリング更新

  1. 新しいバージョンを起動
  2. 新しいバージョンの疎通が確認できれば旧バージョンを止める

ECSコンテナの自動復旧

まとめ

  • pm2でサーバ運用の大部分は解決できる
  • 用途にあった構築

tsxJavaScriptで綺麗に構文強調したい+おまけ

@mochiya98 さん

m98.be

Webで動くVSCodeのエディタ

microsoft.github.io

ハイライトだけではなくマウスオーバーでの型表示などVSCodeのあれこれがWebで使える?⇒そうはいかない

  • とても重い
  • 3MB超

Monarch

  • Monaco Editorの字句解析器
  • これとハイライト機能だけほしい

standalone-monarch

  • 必要なものだけ取り出した

github.com

VSCodeと違う⇒Tokenizerが違う

tmLanguage#とは

VSCodeのTokenizer

  • JS版のOnigurumaは?
  • WASMのOnigurumaがあるらしい
  • Oniasm使用

github.com

shiki

  • Oniasm/tmLanguageのライブラリ

shiki.matsu.io

おまけ:バンドルサイズを半減させた話

  • Reactはデカイ
  • Preactに移行

github.com

  • 実際のところ少しだけ挙動が違う
  • 一部ライブラリはそのままあじゃ動かない
  • Preact特有のバグに対応しづらい
  • 簡単なWebアプリなら良さそう

便利で危ない npm install

@dos_pg さん

npm install

  • 1,000万以上のオープンソースからほしい機能のパッケージをプロジェクトに導入
  • 依存関係を一括導入
  • 一気に更新

インストールするパッケージどうやって選ぶか?

パッケージの危険性

  • Node.jsはOSへの操作が可能
  • 信用できるパッケージのみ使おう

昨年、想定していなかったインシデントが起きた

  • event-streamから参照されていたパッケージ
  • 別名:Coin Steal
  • OSSウォレットアプリのCopayを狙ったマルウェア
  • Copayビルド時にアカウント情報を送信するコードを挿入する

対策は難しい

  • npm audit があるが全ては検知できない
  • ニュース等をチェック

※参考

qiita.com

qiita.com

ニュース

gigazine.net