Slide 1

Slide 1 text

シード期スタートアップで 2年半カイゼンしてきたこと 株式会社NoSchool CTO @meijin 1

Slide 2

Slide 2 text

自己紹介 - ニックネーム:名人 - フロントエンドが好きなWebエンジニア - 株式会社LIFULL(2016/04〜) 株式会社NoSchool CTO(2019/03〜) - 個人開発するする詐欺 - 趣味は将棋☗ 2 Meijin_garden

Slide 3

Slide 3 text

3

Slide 4

Slide 4 text

今回話すこと 4

Slide 5

Slide 5 text

私がスタートアップに参画して 2年半かけてカイゼンしてきた歴史 5

Slide 6

Slide 6 text

概観 6

Slide 7

Slide 7 text

7 WordPress + Bitbucket + さくらVPS時代 Laravel + 一部Nuxt + GitHub + AWS(EC2ベース)時代 Laravel(with テスト) + 全画面Nuxt + GitHub + AWS(Fargate)時代 前述に加えてGitHub Actions自動化、noImplicitAny脱退、 開発環境改善、XaaSの導入を次々やる時代 2018/05〜 2019/05〜 2020/08〜 2021/04〜

Slide 8

Slide 8 text

8 WordPress + Bitbucket + さくらVPS時代 Laravel + 一部Nuxt + GitHub + AWS(EC2ベース)時代 Laravel(with テスト) + 全画面Nuxt + GitHub + AWS(Fargate)時代 前述に加えてGitHub Actions自動化、noImplicitAny脱退、 開発環境改善、XaaSの導入を次々やる時代 白亜紀 弥生 江戸 平成

Slide 9

Slide 9 text

事業のピボットやプロダクトの多様化、 トレンドの変化に応じてカイゼンしてきました ※白亜紀とか弥生とか言ってますが、それぞれのフェーズの頑張りがあって 今があるのでモダンではない方法や低コストで組むのが必ずしも悪いわけではないです 9

Slide 10

Slide 10 text

1. WordPress + Bitbucket + さくらVPS時代 10 白亜紀 2018/05〜

Slide 11

Slide 11 text

● 当時のサービス名は「NoSchool」 ● Wordpress魔改造で開発 ● (当時GitHubのprivate repoが有料だったので) Bitbucketで運用 ● 複業メンバーだけで勢いで開発 11

Slide 12

Slide 12 text

2. Laravel + 一部Nuxt + GitHub + AWS(EC2ベース) 時代 12 弥生 2019/05〜

Slide 13

Slide 13 text

13 【実録】WordPressサイトをAWS+Laravel+Nuxtにフルリプレイスした話

Slide 14

Slide 14 text

● NoSchoolがシードで資金調達 ● CTO(※僕)入社 ● 複業メンバーは変わらず参画 & 追加 ● 2ヶ月でできうる限りのモダン化 14

Slide 15

Slide 15 text

● Framework使って開発するの最高! ● 横持ちで設計されたデータベース最高! ● AWSでサーバー管理できるの最高! ● フロントエンドのNuxt化を進めていくぞ! 15

Slide 16

Slide 16 text

設計を学んで、Modelに依存しない 設計にチャレンジ 16

Slide 17

Slide 17 text

NuxtのTypeScript化 17

Slide 18

Slide 18 text

3. Laravel(with テスト) + 全画面Nuxt + GitHub + AWS(Fargate)時代 18 江戸 2020/08〜

Slide 19

Slide 19 text

https://note.com/noschool_dev/n/n2e4883315603 19

Slide 20

Slide 20 text

● 最初に手掛けた事業(NoSchool)をピボット😭 ● →ポジティブにとらえて、AWS環境を刷新 ● local ~ prodまで全部コンテナ化! ● 全ページをNuxt化! ● PHP7.3 -> 7.4 class propertyに型指定が...! 20

Slide 21

Slide 21 text

● コンテナ化→検証環境以降のサーバーの挙動を ローカルで再現しやすくなった!AMIで秘伝のタレ 運用から開放された! ● PHP7.4→クラスのプロパティに型が指定できるの で、実装の安全性が向上! 21

Slide 22

Slide 22 text

アーキテクチャのカイゼン 22 app/Services app/Repositories UserService HogeService UserRepository HogeRepository … … 弥生

Slide 23

Slide 23 text

アーキテクチャのカイゼン 23 app/Domain UserAccount UseCase … 江戸 RegisterAccount UnRegsiterAccount Infrastructure MySQLUserAccount Repository Entity/UserAccount Domain Repository/ UserAccountRepository Interface Fat Serviceの欠点→別機能の実装が同クラスに 混在し思わぬ影響が発生。様々な責務の実装が 混ざり読みにくい ↓ 機能(Feature)ごとにnamespaceを切り、 UseCaseやDomain層も必要に応じて作成 (APIテストを徹底して書いているのであとからリ ファクタもできる)

Slide 24

Slide 24 text

4. 前述に加えてGitHub Actions自動化、 noImplicitAny脱退、 開発環境改善、XaaSの導入を次々やる時代 24 平成 2021/04〜

Slide 25

Slide 25 text

https://zenn.dev/manalink/articles/manalink-gith ub-actions 25

Slide 26

Slide 26 text

https://zenn.dev/manalink/articles/manalink-ssl-o riginal-domain 26

Slide 27

Slide 27 text

https://speakerdeck.com/texmeijin/guan-li-hua-mian-fu-kiapigaji an-dan-nizuo-rerumicrocmstofalsexiang-kihe-ifang-matome 27

Slide 28

Slide 28 text

Feature Flags サービスの導入 28

Slide 29

Slide 29 text

カイゼンするなかで思ったこと 29 白亜紀 弥生 江戸 平成

Slide 30

Slide 30 text

その1 事業的に優先度が高いところは、 いずれ機能改善が入るので、 リファクタリングも追ってできる 30

Slide 31

Slide 31 text

その2 自分たちが頑張っても 競争優位性にならないものは XaaSでカバーする 31

Slide 32

Slide 32 text

その3 いずれ開発することになりそうな 技術を先に学んでおいて、 いざ実装するときに思い通りの 技術選定をする 32

Slide 33

Slide 33 text

その4 次々新しい開発をするのも良いけど 1つのプロダクトを ずっとカイゼンし続けるのも 意外と学びがある 33

Slide 34

Slide 34 text

その5 カイゼンの過程を 記事やスライドにすると 見返したとき懐かしいのでおすすめw 34

Slide 35

Slide 35 text

告知! 35

Slide 36

Slide 36 text

エンジニアを絶賛採用中! 36

Slide 37

Slide 37 text

ご清聴ありがとうございました! 37 Meijin_garden