フロントエンドエンジニア (実稼働まで) ひとりでできるもん
by
gyarasu
Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
Slide 1
Slide 1 text
フロントエンドエンジニア (実稼働まで) ひとりでできるもん 2018/10/18 NuxtMeetup#5 パーソルキャリア株式会社 株式会社オムニス 吉次洋毅
Slide 2
Slide 2 text
自己紹介 ● 吉次 洋毅(ヨシツグ ヒロキ) ● 1991年生(27歳) ● 徳山高専 専攻科修了 ● 経歴 ○ 1年目〜3年目: ぐるなび(主にPHPエンジニア) ○ 3年目〜現在: パーソルキャリア(主にフロントエンド。 React, Vue/Nuxt。) ○ 今年の8月〜: オムニス(主にフロントエンド。 Vue/Nuxt。副業。)
Slide 3
Slide 3 text
今日お話すること ● DODAと(開発中の)開発中新サービスの紹介(前置き) ● nuxt-full-stack-templateの紹介 ● Nodeサーバを実稼働に合わせて整える あれ、Nuxtの話すくない...
Slide 4
Slide 4 text
2018/10/2 DODAはリブランディングして新しくなりまし た。 とはいえ、サイトの使い方そのものは急に大きく変わるこ とはない。
Slide 5
Slide 5 text
「検索、やめてみよう」→新規サービスとして作ろう ● 検索条件の難しさ ● ヒット件数の多さ 細かく条件を設定できて、たくさん情報が出るのはメリットだが、 人によってはデメリットにもなる
Slide 6
Slide 6 text
ざっくりイメージ いくつかの求人を表示して興味の有無を選択 ↓ 機械学習 ↓ いい感じのレコメンドを出す ※細かい検索はしない ※スキマ時間を有効活用できるように思考する時間をできるだけ削る
Slide 7
Slide 7 text
今日は鋭意開発中のサービスにまつわるお話です。
Slide 8
Slide 8 text
技術スタック(現時点) ● フロントエンド ○ Nuxt.js(SSR) ○ PWA(nuxt-pwa-module) ● バックエンド ○ Express.js ○ MySQL ※機械学習部分は別部隊が開発し、APIで連携している これだけ。 今後、サービスのグロースに合わせて見直していく必要はあるかも。
Slide 9
Slide 9 text
体制(現時点) 人が少ない! ● インフラエンジニア: 1人(忙しい) ● フロントエンドエンジニア(サーバサイドも兼任): 1人(吉次。それなりに時間を割け る) ● 企画: 1人 ● デザイナー: 1人(忙しい) ● 機械学習→別部隊 ものづくり先行で進め、適宜デザインを取り入れながら 少ない人数でローンチまでは早くしたい!
Slide 10
Slide 10 text
新規サービス。 とにもかくにもPoCを成立させる必要がある。
Slide 11
Slide 11 text
こんな環境でフロントエンドエンジニアが開発の(ほぼ) 全部をカバーできたら素敵!
Slide 12
Slide 12 text
ガワを作って企画のイメージを具体化させる (フロントエンドエンジニアの強み) + 実は裏側も作っててちゃんとサービスとして動きます (+αの価値)
Slide 13
Slide 13 text
良さそう(小並感)
Slide 14
Slide 14 text
そんなフロントエンドエンジニアのために作りました
Slide 15
Slide 15 text
Nuxtフルスタックアプリケーションテンプレート [nuxt-full-stack-template] https://github.com/gyarasu/nuxt-full-stack-template [mysql57-docker] https://github.com/gyarasu/mysql57-docker
Slide 16
Slide 16 text
構成はシンプル これだけでも基本的な Webアプリケーションは作れる。
Slide 17
Slide 17 text
含んでいるもの ● Nuxt.js: フロントエンド(SSR) ○ 認証チェックミドルウェア ● Express.js: バックエンドAPI ○ MySQLへの接続 ○ サンプルのAPI(認証ルート含む) ○ セッション管理 ○ 【WIP】ロギング ○ 【WIP】環境別の設定ファイル ○ 【WIP】エラーハンドリング ○ 【WIP】マルチプロセスでの Nodeサーバ稼働・プロセス監視・ 80番ポートでの起動 ● MySQLコンテナ ○ MySQL5.7 ○ サンプルテーブル自動生成
Slide 18
Slide 18 text
package.json
Slide 19
Slide 19 text
【本題】Nodeサーバを実稼働に向けて整備する ● マルチプロセスでどうやって動かす? ● 80番ポート使える?(ApacheやNginxは使う?) ● クラスタ構成でうまくロギングできる?
Slide 20
Slide 20 text
マルチプロセス稼働
Slide 21
Slide 21 text
$npm run buld $npm run start
Slide 22
Slide 22 text
productionモードで起動するが、 実稼働環境でこれで動かすことはなさそう
Slide 23
Slide 23 text
$npm run start cluster mode コア数4のマシンで動かす場合
Slide 24
Slide 24 text
$npm run start cluster mode コア数4のマシンで動かす場合 リソース持て余し
Slide 25
Slide 25 text
どうやるか? ● 自分でプログラムを書く ○ https://nodejs.org/api/cluster.html#cluster_how_it_works ● PM2を使う ○ http://pm2.keymetrics.io/docs/usage/cluster-mode/
Slide 26
Slide 26 text
どうやるか? ● 自分でプログラムを書く ○ https://nodejs.org/api/cluster.html#cluster_how_it_works ● PM2を使う ○ http://pm2.keymetrics.io/docs/usage/cluster-mode/ 「自分で頑張らない」が幸せになる 秘訣? クラスタ以外にもいろいろ楽。
Slide 27
Slide 27 text
PM2 vs 自力 自分で頑張る ツールに任せる これだけ。 instance: 0にしとくと勝手にそのマシンのコア数分の クラスタで起動してくれる。
Slide 28
Slide 28 text
80番ポート問題
Slide 29
Slide 29 text
NodeでWebサーバを立てるときにつまずくこと ● 80番で動かしたい ○ well known portはrootユーザでの実行が必要 ○ root以外のユーザでも起動ができる ○ http://pm2.keymetrics.io/docs/usage/specifics/#listening-on-port-80-wo-root ○ authbindを導入して、pm2のエイリアスを設定する
Slide 30
Slide 30 text
リバースプロキシとしてApacheやNginxは? ● Apache(80)×Node(3000)はあんまりやらない? ○ 駆動方式が違うものの組み合わせ(プロセス駆動 ×イベント駆動) ○ 他のサービス(例えば PHPのAPI)なども一緒にプロキシしたい場合? ● Nginx(80)×Node(3000)はよくある気がする ● 結論としては「無くてもできる」
Slide 31
Slide 31 text
クラスタ構成でのロギング
Slide 32
Slide 32 text
アクセスログ等を適切にファイル出力する ● クラスタ構成で1つのファイルにログ出力 ○ それぞれのノードが 1つのファイルに書き込みに行くと干渉し合ってしまう ● pm2×log4jsで解決! ○ おまじない的にこれを書いておけば後は PM2がよし なにやってくれる。
Slide 33
Slide 33 text
PM2でできること ● プロセス監視とモニタリング ● ファイル変更時に自動的にプロセス再起動 ● メトリクスの設定(コード内に埋め込んで計測) ● 環境別に環境変数設定 などなど。便利! http://pm2.keymetrics.io/
Slide 34
Slide 34 text
フロントエンドの枠を飛び出そう!
Slide 35
Slide 35 text
終