• aboutabout
  • servicesservices
  • worksworks
  • mediamedia
  • contactcontact
  • homeサイトトップ
  • about会社概要
  • services業務内容
  • works実績紹介
  • mediaメディア
  • contactお問い合わせ
ja/

media

メディア

  1. サイトトップ
  2. メディア
  3. プログラミングの記事
  4. フロントエンドの開発環境にVite + TypeScriptを導入する

フロントエンドの開発環境にVite + TypeScriptを導入する

  • 2023.04.08
  • プログラミング
  • Vite
Updated: 2024.05.22
コーディングやフロントエンド開発のプロジェクトではこれまでずっとwebpackを使った開発環境を使っていましたが、PugやJSXなどで作成したコンポーネントが多くなってくるとどうしてビルド時間がストレスになったり、メモリ消費も大きくなってきたこともあり、Viteへ移行することにしました。今回はViteの導入とTypeScriptコンパイルの対応についてまとめていきたいと思います。   Viteについては以前からずっと知っていたのですが、プロジェクトの進行などの都合でなかなか取り組めずにいました。なので今更という感じではありますが、、とりあえず落ち着いたタイミングで本格的に環境周りを整えていきました。従来の環境でもまだまだ対応できるところもあるのですが、良いツールはどんどん活用していくのがベストですからね。    
開発環境へViteのインストール
開発環境にViteを導入するといっても、基本的にはコマンドを入力するだけで揃ってしまいます。npmやyarnで下記のようにViteを使った新規プロジェクトを作成していきます。この辺りはVueCLIやReactのcreate-appに似ていますね。
// npm
$ npm create vite@latest

// yarn
$ yarn create vite
  コマンドを実行すると対話形式でプロジェクトの設定をしていきます。まずは、フレームワークの指定ですが、使用するフレームワークが決まっている場合にはこのタイミングで設定しておくと良いですね。特にフレームワークを使わないなら「Vanilla」を選択します。そして次の質問では言語を選択しますが、「TypeScript」の項目を選択するだけでコンパイル環境などが全て揃うようになります。これはとても簡単ですね。
? Project name: › PROJECT_NAME
? Select a framework: ›
❯ Vanilla
  Vue
  React
  Preact
  Lit
  Svelte
  Others
? Select a variant: ›
  JavaScript
❯ TypeScript
  プロジェクトの設定が終わって先に進めるとViteの環境構築を行なっていきます。設定が完了すると必要なモジュールをプロジェクトフォルダ内でインストールし、ローカルサーバー起動のコマンドを実行すると、初期画面が表示できるようになります。
.....
Done. Now run:
  cd PROJECT_NAME
  npm install
  npm run dev
  他にも、本番用のコードをビルドするコマンドや、本番用のコードをプレビューできるコマンドなどもデフォルトで用意されているようですね。
// 開発用サーバー起動
$ npm run dev

// 本番用ビルド
$ npm run build

// 本番用ビルドをローカルサーバーで確認
$ npm run preview
  Viteではデフォルトで下記のようなディレクトリ構成になります。また、ビルド後のファイル名にはハッシュ値が自動的に付けられます。設定によってプロジェクトのルートや出力先のフォルダ名なども変更できるようですね、この辺りは後ほど詳しくみていきます。Viteではindex.htmlファイルがある場所がドキュメントルートとされるので、ウェブサーバーと同じようなイメージですとわかりやすいですね。
dist
  ┣ assets
    ┣ index-<hash>.js
    ┣ index-<hash>.css
    ┗ sample-<hash>.svg
  ┣ index.html
  ┗ photo.jpg
src
  ┣ main.ts
  ┣ style.css
  ┗ sample.svg
public
  ┗ photo.jpg
index.html
tsconfig.json
..... その他設定ファイル、スクリプトのモジュールなど
  Viteのプロジェクトで扱う基本となる主なディレクトリは下記のようになります。これらはディレクトリ名と共に後述するViteの設定ファイルで変更することができます。  
distビルド後のファイルが格納されるディレクトリで、リソースファイルなどはassetsディレクトリに格納されます。
srcビルド前のソースコードが格納されるディレクトリ、このディレクトリ配下のファイルがコンパイルの対象になります。
publicビルドを通さない静的アセットファイルを格納するディレクトリ、この配下のファイルはdistディレクトリにそのままコピーされて格納されます。
  VIteの新規プロジェクト作成時にTypeScriptに対応させていると、TypeScriptの設定ファイルも自動的に用意されています。これも非常に助かりますね。 【tsconfig.json】
{
  "compilerOptions": {
    "target": "ESNext",
    "useDefineForClassFields": true,
    "module": "ESNext",
    "lib": ["ESNext", "DOM"],
    "moduleResolution": "Node",
    "strict": true,
    "resolveJsonModule": true,
    "isolatedModules": true,
    "esModuleInterop": true,
    "noEmit": true,
    "noUnusedLocals": true,
    "noUnusedParameters": true,
    "noImplicitReturns": true,
    "skipLibCheck": true
  },
  "include": ["src"]
}
   
Viteプロジェクトでの設定
Viteでは上記の内容がデフォルトの構成になりますが、設定ファイルである「vite.config.js」ファイルを作成し、そのファイル内にオプションで設定することでさまざまなカスタマイズができるようになります。デフォルトでは用意されていないので、設定ファイルを新規作成するところからスタートです。プロジェクトのルートに設定ファイルを用意します。
$ cd PROJECT_NAME
$ touch vite.config.js
  設定ファイルが作成できたら、下記のように「defineConfig()」を使って、オプションごとのキーで細かく設定していきます。詳しくは公式サイトにリファレンスとしてまとめられていますので、そちらを参照してみてください。 【vite.config.js】
import { defineConfig } from 'vite';

export default defineConfig({
  server: {
    .....
  },
  build: {
    .....
  }
});
  実務で使う場合にはデフォルトの設定だと使いにくいところもあるので、具体的なケースごとに設定例をまとめてみます。   1.公開時のベースディレクトリ指定 「base」オプションでは公開時のディレクトリを指定することができます。Viteではドキュメントルートでの使用を前提としているため、サブディレクトリなどで公開する場合にはパスが合わなくなるということがあります。また、参照するパスもドキュメントルートを基準としたルートパスになるので、相対パスで扱いたい時にもこの設定で対応します。
// https://example.com/sub-dir/ のURLでサブディレクトリ配下にてアプリを公開する場合
base: '/sub-dir/',

// 公開時にassetsのファイルを相対パスで参照したい場合
base: './',
  2.ビルドファイルのリネーム ビルド後のファイル名にはデフォルトでハッシュ値が含まれてしまいます、これらも不要な場合には「build.rollupOptions.output」でビルドファイルに関する設定が細かくできるようになります。下記のようにあらかじめビルドファイルに関するフォーマットを決めておくことで、それに合わせてファイルが生成されるようになります。もちろん出力先ディレクトリも調整できます。
.....
build: {
  rollupOptions: {
    output: {
      entryFileNames: 'assets/scripts/main.min.js',
      assetFileNames: 'assets/[name].min.[ext]'
    }
  }
},
.....
  3.ビルドファイルの条件分岐など詳細設定 デフォルトの設定ですとファイルごとにビルド後の出力先ディレクトリを分けることができないため、こちらもオプションで設定していきます。ファイル名に含まれる拡張子によって条件分岐させていきます。下記ではスタイルシート、画像、フォントファイルでビルド後のディレクトリを振り分けている設定例になります。
.....
build: {
  rollupOptions: {
    output: {
      entryFileNames: 'assets/scripts/[name].min.js',
      chunkFileNames: 'assets/scripts/[name].min.js',
      assetFileNames: (assetFile) => {
        if(/\.css$/.test(assetFile.name)) {
          return 'assets/stylesheets/[name].min.[ext]';
        } else if(/\.( gif|jpeg|jpg|png|svg|webp| )$/.test(assetFile.name)) {
          return 'assets/images/[name].min.[ext]';
        } else if(/\.( ttf|otf|eot|woff|woff2| )$/.test(assetFile.name)) {
          return 'assets/fonts/[name].[ext]';
        } else {
          return 'assets/[name].[ext]';
        }
      } 
    }
  }
},
.....
  先ほどのファイルリネームと合わせたこの設定でビルド後のファイル、ディレクトリ構成は下記のようになります。この形にしておくと、静的サイトとしてサイトデータを一式まとめて納品しやすくなりますね。
dist //ビルド後のファイルが入るディレクトリ
  ┣ assets
    ┣ scripts
      ┗ main.min.js
    ┣ stylesheets
      ┗ style.min.css
    ┣ images
      ┗ sample.min.svg
    ┗ fonts
      ┗ font.woff2
  ┣ .....
src //ビルド前のソースコードが入るディレクトリ
  ┣ ts 
    ┗ main.ts
  ┣ css
    ┗ style.css
  ┣ img
    ┗ sample.svg
  ┗ font
    ┗ font.woff2
  4.複数ページ・ビルドファイルの対応 ページが複数にわたるケースや、複数のJSファイルなどをバンドルせずに個別にビルドする時には、「build.rollupOptions.input」のオプションでそれぞれキーバリューの形で個別にエントリーポイントとなるファイルを指定します。この時キーの値はビルド後のファイル名になるように紐づけておくことで、複数ファイルのビルドに対応できるようにします。
import { resolve } from 'path';
import { defineConfig } from 'vite';
export default defineConfig({
  .....
  build: {
    rollupOptions: {
      input: {
        index: resolve(__dirname, 'index.html'),
        page1: resolve(__dirname, 'page1.html'),
        page2: resolve(__dirname, 'page2.html'),
        page3: resolve(__dirname, 'page3.html'),
        main: resolve(__dirname, 'main.ts'),
        sub: resolve(__dirname, 'sub.ts'),
        .....
      },
      output: {
        entryFileNames: 'assets/scripts/[name].min.js',
        .....
      }
    }
  }
  .....
});
  5. ディレクトリ構成の変更 ディレクトリ構成なども実案件の要件に合わせて変更したい場合があると思います。設定ファイルを使うことで、ソースコードのルートディレクトリや、静的配信ファイルの場所などもソースコード側のディレクトリにまとめることができます。今回はビルド後に下記のような構成にする例を見ていきます。
dist //ビルド後のファイルが入るディレクトリ
  ┣ assets
    ┣ scripts
      ┣ index.min.js
      ┣ page1.min.js
      ┗ page2.min.js
    ┣ stylesheets
      ┗ style.min.css
    ┣ images
      ┗ sample.min.svg
    ┣ .....
    ┣ index.html
    ┣ page1.html
    ┣ page2.html
    ┗ photo.jpg
src //ビルド前のソースコードが入るディレクトリ
  ┣ js 
    ┗ main.js
  ┣ css
    ┗ style.css
  ┣ img
    ┗ sample.svg
  ┣ public //静的に配信するアセットファイルが入るディレクトリ
    ┗ photo.jpg
  ┣ index.html
  ┣ page1.html
  ┗ page2.html
  上記のような構成にするために、先述の設定に加えて「root」オプションでソースコード側のドキュメントルートを、「publicDir」オプションで静的配信用ファイルのディレクトリをそれぞれ変更しています。デフォルトの構成と比べてもかなりすっきりとしている印象ですね。
.....
root: 'src',
base: './',
publicDir: resolve(__dirname, 'src/public'),
build: {
  outDir: resolve(__dirname, 'dist'),
  emptyOutDir: true,
  assetsDir: 'assets',
  rollupOptions: {
    input: {
      .....
    },
    output: {
      .....
    }
  }
},
.....
   
jQueryなどライブラリを使ってみる
Viteを使うことでサイト制作に必要なリソースと開発環境が簡単に準備できました。実務ではライブラリなども併用することもあると思います。試しに、jQueryを使ってみます。まずはライブラリ本体と、型定義のファイルをインストールしていきます。
$ npm install jquery
$ npm install --save-dev @types/jquery
  インストールしたライブラリをスクリプト側で実行してみると、正しく読み込めていることが確認できますね。 【src/main.ts】
import $ from 'jquery';

$(function() {
  ....
});
  Viteでは1つのコマンドで環境構築が完了し、いろんな設定も設定ファイル内のオプションで指定していく形なので、とても簡単にカスタマイズできる印象ですね。またビルド時間もかなり早く、コーディングがフロントエンドの開発もとてもスムーズで快適に進められます。他にもSassなどのプリプロフェッサーを導入したり、各種フレームワークを使うことも簡単ですので、また別記事でまとめてみたいと思います。   (参考にさせていただいたサイト) Viteの設定 Viteで始めるモダンで高速な開発環境構築
XでシェアLINEで送るはてブに追加

この記事を書いた人オガワ シンヤ

合同会社デザインサプライ代表兼CEO / ディレクター・ウェブデザイナー・フロントエンドエンジニアをやっています。「ウェブとデザインでヒト・モノ・サービスを繋げ新しい価値を生み出す」をコンセプトに日々奮闘中!制作中はダイエットコーラとチョコレートが欠かせないアラフォーWebクリエイター。

Sponsored Link

  • Showcase
  • Startify UI
  • Functional Gradation Generator
  • Coloooors

keyword search

categories

  • WordPress(61)
  • JavaScript(49)
  • Vue.js(48)
  • CSS(46)
  • jQuery(34)
  • Nuxt.js(22)
  • Sass(21)
  • Gulp(17)
  • webpack(16)
  • PHP(14)
  • HTML(14)
  • GSAP(11)
  • React(10)
  • Vite(9)
  • Pug(9)
  • Laravel(8)
  • Cordova(8)
  • Linux(7)
  • Next.js(6)
  • Apache(5)
  • Shopify(4)
  • REST API(4)
  • Node.js(4)
  • Smarty(3)
  • Git(3)
  • JSON(3)
  • その他プログラミング(3)
  • Google Apps API(3)
  • Bootstrap(3)
  • 環境構築・システム(3)
  • TypeScript(2)
  • EJS(2)
  • RMS(2)
  • Docker(2)
  • Instagram API(2)
  • Excel VBA(2)
  • SVG(1)
  • Dart(1)
  • ECカートASP(1)
  • Markdown(1)
  • AMP(1)
  • Nginx(1)
  • XML(1)
  • shellscript(1)
  • Ruby(1)
  • MySQL(1)

recent articles

  • Next.jsとWordPressでヘッドレスCMSのサイトを作成する#6:PWA対応とビルド時のエラー
    read more

    Next.jsとWordPressでヘッドレスCMSのサイトを作成する#6:PWA対応とビルド時のエラー

    2024.12.25/Next.js
  • Next.jsとWordPressでヘッドレスCMSのサイトを作成する#5:アナリティクス・アドセンスの導入とサイトマップ作成
    read more

    Next.jsとWordPressでヘッドレスCMSのサイトを作成する#5:アナリティクス・アドセンスの導入とサイトマップ作成

    2024.08.26/Next.js
  • Next.jsとWordPressでヘッドレスCMSのサイトを作成する#4:静的・動的ルーティングとページ作成
    read more

    Next.jsとWordPressでヘッドレスCMSのサイトを作成する#4:静的・動的ルーティングとページ作成

    2024.07.31/Next.js
  • Next.jsとWordPressでヘッドレスCMSのサイトを作成する#3:メタ情報設定・ファイル最適化・ステート管理
    read more

    Next.jsとWordPressでヘッドレスCMSのサイトを作成する#3:メタ情報設定・ファイル最適化・ステート管理

    2024.06.30/Next.js
  • Next.jsとWordPressでヘッドレスCMSのサイトを作成する#2:コーディング環境の構築
    read more

    Next.jsとWordPressでヘッドレスCMSのサイトを作成する#2:コーディング環境の構築

    2024.05.29/Next.js
  • Next.jsとWordPressでヘッドレスCMSのサイトを作成する#1:インストール・導入
    read more

    Next.jsとWordPressでヘッドレスCMSのサイトを作成する#1:インストール・導入

    2024.04.30/Next.js
  • 次の記事
  • 一覧に戻る
  • 前の記事

まだ依頼内容が決まっていなくても、ご相談ください。

課題の整理や小さな検証、UI/UX・フロントエンドの部分的な支援から始められます。

お問い合わせやご相談はこちらから

Webサイト・プロダクトの企画設計/UI・UXデザイン/フロントエンド開発合同会社デザインサプライ(DesignSupply. LLC)

Office:大阪府大阪市天王寺区清水谷町3-22
Email:info@designsupply-web.com
home
  • サイトトップ
about
  • 3つのポリシー
  • 経営理念
  • 代表・クリエイター紹介
  • 会社概要
services
  • ビジネス・プロダクト支援
  • UI/UX・フロントエンド開発支援
  • プロジェクトの進め方・支援体制
  • エデュケーション事業
works
  • 開発プロジェクト支援
  • クリエイティブ制作
  • 自社プロダクト
media
  • デザイン
  • プログラミング
  • マーケティング
  • Web開発
  • 写真・動画制作
contact
  • お問い合わせ
news
  • インフォメーション
privacy
  • プライバシーポリシー

WE THINK WITH YOU, DESIGN FOR PEOPLE, AND BUILD WHAT WORKS.

WE THINK WITH YOU, DESIGN FOR PEOPLE, AND BUILD WHAT WORKS.

© 2013 - 2026 DesignSupply.LLC
サイトトップへ
contact