Slide 1

Slide 1 text

Vue+Nuxt+Serverlessの 開発で得た知見(主につらみ) +4FSJOGPճه೦Πϕϯτ !Z@UFNQ

Slide 2

Slide 2 text

About me • Yuki Terashima • Twitter/@y_temp4 • ALIS Co., Ltd. • 4月から東京に来た新卒

Slide 3

Slide 3 text

About ALIS https://alismedia.jp/ja/

Slide 4

Slide 4 text

今回話すこと

Slide 5

Slide 5 text

実際にALISのフロントエンドを
 開発する中で得た知見 主につらみ

Slide 6

Slide 6 text

主なトピック • Vue / Nuxt / Serverless(AWS Lambda) • Atomic Design • CSS Grid Layout • Vuex • Cognito

Slide 7

Slide 7 text

Vue / Nuxt / Serverless

Slide 8

Slide 8 text

ALISの初期開発スケジュール(概要) 2018/01中旬くらい 2018/04/23 〜設計 クローズドβ版リリース 開発〜

Slide 9

Slide 9 text

とにかく時間がなかった • 自分がジョインするタイミングでは不安しかなった • 本当に間に合うのか? • 開発速度が求められた • とにかく時間がない

Slide 10

Slide 10 text

ALISの初期開発スケジュール(概要) 2018/01中旬くらい 2018/04/23 〜設計 クローズドβ版リリース 開発〜 このへんがヤバかった

Slide 11

Slide 11 text

(そんな中で)Vue / Nuxtの開発

Slide 12

Slide 12 text

開発速度が保てた •Nuxtがいろんなことをやってくれて便利!!! などなど…

Slide 13

Slide 13 text

Nuxtを選定して(特に)よかったこと •規約があり、設計で迷いにくい •オレオレアーキテクチャの排除 •便利機能が本当に便利 •かんたんSSR •pages/以下でルーティング

Slide 14

Slide 14 text

Vueの生産性が高かった • 初めてでもすぐ書き始められる • 公式ドキュメントが充実しており、
 迷いにくい

Slide 15

Slide 15 text

Serverlessの話

Slide 16

Slide 16 text

Nuxt on Lambda • ALISのNuxtはLambda上に乗っている • mya-ake/nuxt-on-lambda が非常に参考になった

Slide 17

Slide 17 text

• 他に必要な設定は severless.yml くらい • デプロイは
 yarn build して sls deploy するだけ

Slide 18

Slide 18 text

【ALISのシステム】サーバサイドアーキテクチャ:その1 〜ALIS サーバサイド構成〜 - https://alis.to/AB2/articles/KBXeJ1VgwzNB

Slide 19

Slide 19 text

選定した技術の話

Slide 20

Slide 20 text

ALISのフロントエンドのトピック • Atomic Design • CSS Grid Layout • Vuex • Cognito • これらの功罪について見ていきます

Slide 21

Slide 21 text

Atomic Design

Slide 22

Slide 22 text

No content

Slide 23

Slide 23 text

No content

Slide 24

Slide 24 text

No content

Slide 25

Slide 25 text

ArticleCard.vue ArticleCardImage.vue ArticleCardContent.vue ArticleCardContentTitle.vue ArticleCardContentOverView.vue ArticleCardContentData.vue ArticleCardContentTokenAmount.vue ※一部省略

Slide 26

Slide 26 text

よかったこと • コンポーネントの責務を意識して開発できる • 再利用性のあるコンポーネントかどうか、など • BEMとか使う必要がない • セレクタの詳細度が平坦に近づくため • 参考:Atomic Designの考え方と利点・欠点
 https://blog.kubosho.com/entry/using-atomic-design/

Slide 27

Slide 27 text

現実 • スピードが求められる現場では
 「なんちゃってAtomic Design」になる • 大きすぎるAtom • 切り分けられていないコンポーネント • 正直、最初はディレクトリ構成だけ切ってあとで
 キレイにする、で良い気がしている(時間がない場合)

Slide 28

Slide 28 text

CSS Grid Layout

Slide 29

Slide 29 text

No content

Slide 30

Slide 30 text

No content

Slide 31

Slide 31 text

No content

Slide 32

Slide 32 text

app-header article-card-list

Slide 33

Slide 33 text

• 複雑なレイアウトにも比較的簡単に対応できる • grid-areaによる名前付けでレイアウトがイメージしやすい • 想定よりも、学習コストが低い よかったこと

Slide 34

Slide 34 text

• 無駄にGrid Layoutで実装してしまった部分があった • コンポーネント粒度によっては、flexboxのほうが効果的 • 使い分けが大切 • 可変の値を駆使したほうが良い部分があった • auto、frなど 学び

Slide 35

Slide 35 text

Vuex

Slide 36

Slide 36 text

No content

Slide 37

Slide 37 text

• データの管理がしやすい • バケツリレー不要 • そこまで厳格に書く必要がない • 必要に応じてVueの双方向バインディングと組み合わせて
 使える 良かったこと

Slide 38

Slide 38 text

•型 •複雑なAction •巨大なModule つらみ

Slide 39

Slide 39 text

• 現状、ない • 実装当初に検討したが、いろいろとつらそうだったのでやめた • 人数が増えてきたときに心配、できれば導入したいが
 ベストプラクティスがない • 詳しい方、教えてください 型

Slide 40

Slide 40 text

複雑なAction

Slide 41

Slide 41 text

複雑なAction •Actionで非同期処理しつつデータの保存をすると
 どうしても肥大化しがち •この領域にはベストプラクティス的な規約がない
 ため、煩雑になりがち

Slide 42

Slide 42 text

巨大なModule •700行 over •さすがに分割したい

Slide 43

Slide 43 text

Cognito

Slide 44

Slide 44 text

No content

Slide 45

Slide 45 text

つらみ • 提供されているnpm packageがやや使いにくい • Promiseを返してほしい…! • 融通が効かない • 最初に気合いを入れて設計する必要がある

Slide 46

Slide 46 text

まとめ

Slide 47

Slide 47 text

Nuxtについて • (何度も言われているが)
 Nuxtはふつうに使ったほうが良い • SSRしなくてもメリットは大きい

Slide 48

Slide 48 text

Serverlessについて • 運用負荷が減るのは大きい • ただし設計の難易度が高い • 情報も少ないので、気合いが必要

Slide 49

Slide 49 text

Atomic Design / CSS Grid Layoutについて • Atomic Designはともかく、CSS Grid Layoutは採用している ところをあまり聞かない • ふつうに便利なので、試してみてもいいと思う • 対応ブラウザにもよるが… • 両者の相性は良いと感じた

Slide 50

Slide 50 text

Vuexについて • 型との相性の悪さが絶望的 • 頑張ればいけるっぽい話もあるが・・・ • ここを諦めるかどうかで結構意見が分かれそう • 今のプロジェクトは現状大丈夫だけど、今後がかなり心配

Slide 51

Slide 51 text

Cognitoについて • 使うなら、覚悟して使ったほうが良さそう?

Slide 52

Slide 52 text

さいごに

Slide 53

Slide 53 text

ALISのソースコードはオープンソースなので、 ぜひ見てみてください! github.com/AlisProject