【勉強会メモ】関西Node学園 6時限目
- 日時:2019/05/09(木) 18:40 〜 21:00
- 場所:さくらインターネット株式会社 大阪本社
Node.js v12 Notable Changes
@shisama_ さん
遅れて参加したので残念ながら聞けませんでしたが発表資料にもあるブログ記事も含めて、いつもためになる情報を発信していただきとても助かっております。
半年がかりでNode.jsにコミットして得たもの
@koh110 さん
こちらも最後のほうしか聞けませんでした。Node本家へPRを出してマージしてもらうまでの話のようでした。
eslintでtypescript
@zilch8 さん
eslint
- JSのLinter
- 単体ではTypeScript非対応
tslint
- TSのlinter
- TS界ではeslintの代わりに使われてきた
ある日
The future of TypeScript on ESLint:https://t.co/PTCWKWN22s
— ESLint (@geteslint) January 18, 2019
というわけでやってみよう
tslintを使ったプロジェクトを作成して(あとから)eslintで動くようにしてみる
- tslint導入
- .tsファイルに怒られそうなコードを書いてみる
- 無事にエラーが出た
- eslintでも発生するようにしてみる
- eslint導入&実行
- eslintrcにparser追記
- eslintがTSを解釈できるようになってlintエラー発生
- 若干エラーの内容が違う
- tslintにあったルールが不足
- tslintのルール⇒eslintのルールへ
- ルールの置き換え
所感
- TSでeslintが動くようにするのは簡単
- ルールの置き換えが大変
- 既存PJで置き換えはつらそう
- eslintだとまだ処理が重い?
- 近い将来に期待
Node.jsサーバアプリケーションの稼働方法
@akkun_choi さん
基本
- httpモジュールを使えばたった数行でサーバが動く
nodeコマンド
- 基本的にシングルプロセス、シングルスレッド
- エラー等でプロセスが落ちると停止してしまう
- 更新する際にダウンタイムが発生
プロセスマネージャ
- expressjs.comより
http://expressjs.com/ja/advanced/pm.html
PM2
- 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サーバコンテナが動く
- 複数サーバ構成が抱える課題
- デプロイ
- ログ収集
- スケールアウト
- サーバ構成管理
ローリング更新
- 新しいバージョンを起動
- 新しいバージョンの疎通が確認できれば旧バージョンを止める
ECSコンテナの自動復旧
まとめ
- pm2でサーバ運用の大部分は解決できる
- 用途にあった構築
tsxをJavaScriptで綺麗に構文強調したい+おまけ
@mochiya98 さん
Webで動くVSCodeのエディタ
ハイライトだけではなくマウスオーバーでの型表示などVSCodeのあれこれがWebで使える?⇒そうはいかない
- とても重い
- 3MB超
Monarch
- Monaco Editorの字句解析器
- これとハイライト機能だけほしい
standalone-monarch
- 必要なものだけ取り出した
VSCodeと違う⇒Tokenizerが違う
tmLanguage#とは
VSCodeのTokenizer
- JS版のOnigurumaは?
- WASMのOnigurumaがあるらしい
- Oniasm使用
shiki
- Oniasm/tmLanguageのライブラリ
おまけ:バンドルサイズを半減させた話
- Reactはデカイ
- Preactに移行
- 実際のところ少しだけ挙動が違う
- 一部ライブラリはそのままあじゃ動かない
- Preact特有のバグに対応しづらい
- 簡単なWebアプリなら良さそう
便利で危ない npm install
@dos_pg さん
npm install
- 1,000万以上のオープンソースからほしい機能のパッケージをプロジェクトに導入
- 依存関係を一括導入
- 一気に更新
インストールするパッケージどうやって選ぶか?
パッケージの危険性
- Node.jsはOSへの操作が可能
- 信用できるパッケージのみ使おう
昨年、想定していなかったインシデントが起きた
対策は難しい
npm audit
があるが全ては検知できない- ニュース等をチェック
※参考
ニュース