Upgrade to Pro — share decks privately, control downloads, hide ads and more …

改めて整理するWebアプリのビルド・デプロイの基本

os1ma
March 09, 2023

 改めて整理するWebアプリのビルド・デプロイの基本

●発表の中で紹介しているUdemy講座:https://www.nextskill.co.jp/courses

===

近年のWebアプリケーション開発では、開発効率の向上などを目指して、自動ビルドや自動デプロイといった環境を整えることが増えています。

一方で、Webアプリケーションの方式はどんどん複雑化しており、初学者にとっては「そもそもビルドとは?デプロイとは?」といった疑問を解消するハードルが高くなっています。

そこでこの勉強会では、Webアプリケーションにおける「ビルド」と「デプロイ」の基本を改めて整理します。

また、特に混乱を生みがちな、Node.jsによるフロントエンドのビルドについても、まずおさえたい基本を解説します。

※ 初学者向けとして、SSR(Server Side Rendering)などの高度な手法にはふれず、サーバサイドでHTMLを生成する方式のWebアプリケーションや、Web APIを使ったSPA(Single Page Application)などについての解説となります。

os1ma

March 09, 2023
Tweet

More Decks by os1ma

Other Decks in Programming

Transcript

  1. 自己紹介 • 名前:大嶋勇樹(Twitter:@oshima_123) ◦ 最近はよく「しま」と呼ばれています • キャリア ◦ 都内の某 IT

    企業 -> フリーランスエンジニア -> 会社設立 ◦ “ ” 現在は 実務につき始めたエンジニアのスキルアップをサポート ◦ 研修・勉強会の開催・Udemy 講座の作成など • よく関わる技術分野 ◦ クラウド・コンテナ関連 (AWS、GCP、Docker、Kubernetes など) ◦ Web アプリのビルド・デプロイまわりの整備はよく担当
  2. そこで今日は... Web アプリケーションにおける 「ビルド」と「デプロイ」の基本を改めて整理します また、特に混乱を生みがちな、 Node.js によるフロントエンドのビルドについても、 まずおさえたい基本をまとめます ※ 初学者向けとして、SSR(Server

    Side Rendering)などの高度な手法にはふれず、   サーバサイドで HTML を生成する方式の Web アプリケーションや、   Web API を使った SPA(Single Page Application)などについての話になります
  3. まずおさえたい Web アプリケーションの構成 1. 静的サイト ( Web ※ アプリケーションではありません) 2.

    サーバサイドで HTML を生成する Web アプリケーション 3. Web API(Ajax )を使った Web アプリケーション 4. Web API + SPA (Single Page Application) この他にも様々な構成がありますが、 まずは上記の 4 つについて理解するのがおすすめです
  4. 静的サイト • Web サーバだけから成り立つ「静的サイト」では、 固定の HTML や CSS などで Web

    サイトを実現することになります サーバ PC (クライアント) HTML Web サーバ ブラウザ HTTP リクエスト HTTP レスポンス CSS HTTP リクエストの内容に対応するファイルを 特定のディレクトリから探してレスポンスに含める
  5. サーバサイドで HTML を生成する Web アプリケーション • 古典的な Web アプリケーションでは、サーバサイドの(サーバ上で動く) プログラムで

    HTML を生成して返します (例えば、Rails で ERB を使う、Laravel で Blade を使う、Spring で Thymeleaf を使う、といった場合が該当します) HTML Web サーバ ブラウザ HTTP リクエスト HTTP レスポンス アプリケーション データベース 固定の HTML、CSS などは Web サーバが返し、 プログラムによる処理が必要な場合はアプリケーションに依頼 HTML CSS Java・Ruby 等 HTML を生成して返す
  6. Web API(Ajax )を使った Web アプリケーション • 画面にデータを表示したりする際に、Web API・Ajax を使う方法も定番です HTML

    Web サーバ ブラウザ アプリケーション データベース CSS JS JSON などを生成して 返すプログラム (= Web API) HTML JS JSON JavaScript が通信し、 レスポンスの JSON をもとに UI を書き換える (= Ajax) Java・Ruby 等
  7. Web API + SPA (Single Page Application) • さらに画面遷移も JavaScript

    による UI の書き換えで実現するのが SPA です HTML Web サーバ ブラウザ アプリケーション データベース CSS JS JSON などを生成して 返すプログラム (= Web API) HTML JS JSON JavaScript が通信し、 レスポンスの JSON をもとに UI を書き換える (= Ajax) Java・Ruby 等 HTML・JS の取得は 最初のページへのアクセス時のみ
  8. Web アプリケーションの構成の基本 • ここまでに見てきた Web アプリケーションの方式では、どの場合でも 「静的コンテンツ」と「サーバサイドのプログラム」の 2 種類が登場します HTML

    Web サーバ ブラウザ アプリケーション データベース CSS Java・Ruby 等 JS 静的コンテンツ 固定の HTML や CSS、 ブラウザ用の JavaScript など サーバサイドのプログラム HTML や JSON を生成して返す (様々な言語で実装される)
  9. フロントエンドとは?(1/2) • Web アプリケーションでは、ブラウザ上で処理される HTML や CSS、 ブラウザ用の JavaScript などを「フロントエンド」と呼びます

    HTML Web サーバ ブラウザ アプリケーション データベース CSS JS HTML HTML を生成して返す Java・Ruby 等 サーバサイドで HTML を生成する Web アプリケーションの場合、 サーバサイドの一部もフロントエンドを担うような関係になります
  10. フロントエンドとは?(2/2) • サーバサイドが Web API となっている場合は、Web サーバで配信する静的 コンテンツがフロントエンドとなります HTML Web

    サーバ ブラウザ アプリケーション (Web API) データベース CSS JS JSON JSON などを生成して返す Java・Ruby 等 ここからは「静的コンテンツ = フロントエンド」となる Web API を使う方式で話を進めます(分かりやすいため)
  11. プログラムの実行方式 • プログラムには様々な実行方式があります • 書いたコードをそのまま実行:Ruby / PHP / Python /

    JavaScript • 機械語に変換して実行:C / C++ / Go • 別の言語に変換して実行:Java / TypeScript ※ ここで言う「変換」は、明示的に他の形式のファイルに変換するしてから実行するかを指しています ※ 正確には言語ごとに 1 つの実行方式があるわけではないですが、各言語のメジャーな実行方式を書いています ここからは特に混乱されやすい JavaScript と TypeScript を例として扱います
  12. TypeScript とは • TypeScript は AltJS と呼ばれる、JavaScript の代替言語の 1 つです

    • TypeScript は JavaScript に変換して実行するのが基本です TypeScript は Web アプリケーションの フロントエンドの開発でもサーバサイドの開発でもよく使われます hello.ts hello.js 変換 ブラウザや Node.js で実行
  13. Node.js とは • Node.js は、JavaScript の実行環境の 1 種です • Node.js

    を使うと、node コマンドで JavaScript を実行できます • Node.js は、「サーバサイドで動く(≒ コマンドで実行できる) JavaScript の実行環境」のように説明されることがあります hello.js ターミナル console.log('hello node') $ node hello.js hello node
  14. (補足)ブラウザで動く JavaScript がコマンドで動く? • 実際には、コンピュータは JavaScript を動かすことはできません • JavaScript のプログラムが動いているように見えるのは、JavaScript

    を 動かすためのプログラムが動いているためです プログラミング言語 JavaScript 実行環境(ランタイム) ブラウザ Node.js 「ブラウザや Node.js は JavaScript を動かすプログラムを含むため JavaScript を動かすことができている」ということです
  15. TypeScript のビルドの例 • TypeScript で実装した Web アプリケーション(サーバサイド)を実行する ときは、一例として、以下のように 2 段階の変換を行います

    main.ts main.js コンパイル / トランスパイル TypeScript から JavaScript に変換 lib.ts lib.js index.js バンドル / パッケージング / リンク 1 ファイルにまとめる 成果物(Artifact) node コマンドで 実行する対象 ソースコードをもとに、最終的に本番などのサーバで動かす形式に 変換することを「ビルド」と言います
  16. (補足 2 )コンテナや VM のイメージのビルド • コンテナや VM の「イメージ」を作成して、本番環境などで「イメージ」を もとにプログラムを動かす場合、「イメージ」の作成もビルドと呼びます

    • 例えば TypeScript で実装した Web   アプリケーション(サーバサイド)を コンテナとして実行する場合以下の 2 つのビルドが存在します ◦ ソースコードのビルド ◦ コンテナのイメージのビルド このように、ビルドの手順というのは、 アプリケーションの設定や実行環境次第で変わります
  17. Web フロントエンドの動作の基本 • ブラウザは Web サーバに通信して、HTML・CSS や、ブラウザ用の JavaScript などを取得して処理します HTML

    Web サーバ ブラウザ CSS JS ソースコードの変換などが特に不要な場合、Web サーバの参照する ディレクトリにファイルを置くのがフロントエンドのデプロイです /var/www/html など 設定されたディレクトリを参照 ※ Web サーバではなく、Netlify などの   静的サイトホスティングサービスを   使うこともあります
  18. React や Vue.js などのフレームワークを使った開発 • 近年は、Web アプリケーションのフロントエンドを実装するために、 React や Vue.js

    といったフレームワークを使うことが多いです • React や Vue.js を使った開発では、「.jsx」や「.vue」といった、専用の 形式のファイルを作成して実装することがほとんどです
  19. .jsx や .vue ファイルのビルド • ブラウザは、「.jsx」や「.vue」といったファイルを処理できません • そのため、「.jsx」や「.vue 」などのファイルは JavaScript

    に変換してから Web サーバで配信します ソースコードを JavaScript に変換したり、JavaScript の複数の ファイルを 1 つにまとめたりするのが、フロントエンドのビルドです HTML Web サーバ ブラウザ CSS JS .vue .jsx 変換
  20. フロントエンド開発における Node.js • フロントエンドのビルドには、Node.js のエコシステムとして使えるツールを 使用することが多いです • また、フロントエンドの開発時には「npm run dev」などのコマンドで開発

    用の Web サーバを起動して動作確認しながら実装することも多いです (このときも Node.js のエコシステムを使用します) フロントエンドの開発で Node.js を使うというのは、 本番での実行時ではなく、開発やビルドに使うというのが第一歩です ※ より高度なトピックとして SSR(Server Side Rendering)などがあります
  21. ここまでのまとめ • ここまでの内容を図にすると以下のようになります 本番などの環境 デプロイ ビルド Web サーバ を動かすサーバ (コンピュータ)

    ※ Web サーバとアプリケーションは   同じサーバ(コンピュータ)で動かすこともあります フロントエンドの ソースコード 成果物 ブラウザ データベース デプロイ ビルド アプリケーション を動かすサーバ (コンピュータ) サーバサイドの ソースコード 成果物
  22. CI (Continuous Integration) とは • ソースコードのビルドや自動テストを開発者の PC だけで実行していると、 「特定の開発者の PC

    でしかビルドや自動テストが成功しない」ということ になりやすいです • このような状況を防ぐため、GitHub 等へのソースコードのアップロードを トリガとして、ビルドや自動テストを専用の環境で自動的に実行するという 手法があります このような手法を CI(継続的インテグレーション)と呼びます
  23. CI サービス・ツールの設定のイメージ • 例えば GitHub Actions では 右のような設定ファイルを書きます • 最近の

    CI サービス・ツールでは このように YAML 形式で設定を 書くことが多いです CI サービス・ツールではソースコードの push などをトリガーとして あらかじめ設定したコマンドを自由に実行できます name: build on: push: branches: - main jobs: build: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - uses: actions/setup-node@v3 with: node-version: 16.x - run: npm ci - run: npm run test - run: npm run build
  24. CD (Continuous Delivery/Continuous Deployment) とは • ソースコードの push したら自動テストやビルドを実行する「CI」に加えて •

    本番環境へのデプロイ準備までを自動で実行したり • 本番環境への実際のデプロイまでを自動で実行する という手法があります このような手法を CD(継続的デリバリーまたは継続的デプロイメント)と呼びます
  25. CI/CD • CI と CD を組み合わせて「CI/CD」と呼びます • CI/CD の構築は難しそうに見えますが、手作業でビルド・デプロイできれば そこからステップアップとして取り組むハードルは高くないです

    特に GitHub Actions は非常に気軽に使えるので、 ぜひさわってみてください git push trigger deploy build test 本番などの環境 サーバ (コンピュータ) GitHub Actions GitHub
  26. 宣伝 • Udemy で「GitHub Actions で学ぶ CI/CD 入門」という講座を出しています GitHub Actions

    で学ぶ CI/CD 入門 GitHub Actions での CI/CD をテーマに 自動テストやビルド・デプロイの基本から AWS への自動デプロイまで学習する講座です! エラーの解決や疑問点なども、できるだけサポートします クーポン付き URL を共有させていただくので、 ハンズオンもしてみたい方は是非手に取ってみてください