近年、フロントエンド開発では『コンポーネント設計』という言葉を頻繁に耳にするようになりました。
今回はそんなコンポーネント設計と流行しているJavaScriptフレームワークについてご紹介します。
構成要素を部品ごとに分けて構成し設計することです。
コンポーネントを用いて開発するよう設計されたJavaScriptのフレームワークです。
類似のフレームワークにReactやAngularJSがあります。
ご存じの方も多いかと思いますが、
コンポーネント設計をするにあたってアトミックデザインという手法を用いることが多いです。
今回はアトミックデザインを使ったコンポーネント設計についてご紹介します。
アトミックデザインは5種類の粒度で部品を分けます。
具体的には、
という具合です。
部品を作り、それらを組み立てていくイメージです。
無理なく導入する為にはどういった知識・手順が必要なのかを大きく4段階で分けました。
1.構造を意識したHTMLが書ける
HTMLをタグの意味にもとづいてマークアップできることが大切です(セマンティックHTML)
HTMLのマークアップが適切に行われていない場合、その後のCSSやJavaScriptの開発時にも影響します。
その為、まず適切なHTMLでのマークアップが必要になります。
2.CSSを部品化する
同じレイアウトのCSSのクラスは共通部分を汎用的な部品として切り出し、再利用できるようにする意識が大切です。
例えばボタンや矢印などは再利用する機会の多い部品です。
3.CDN版でVue.jsを使う
HTML, CSS, JavaScriptを1ファイルにまとめて書くことや、ソースコードのminityを行うことはできませんが、
手軽にVue.jsの構文の学習ができます。
また、LPページであれば業務でも十分使用することができます。
<!-- Vue.js のCDN版を使用する-->
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
4.NPM版でVueやVue-CLIを使う
各モジュールハンドラを用いて単一ファイルコンポーネントを利用したり、minifyを行ったりすることができます。
ここまで準備が整った段階で5種類の粒度で部品を分けるディレクトリを作り、設計・開発に進みます。
尚、実際の開発時にはディレクトリ構成や部品の粒度などはエンジニアのスキルセットや案件規模によってアレンジされることが多いようです。
今回用意したサンプルのディレクトリ構成は以下です。
※Lv4のtemplateは今回省いてあります。
部品を組み合わせて作った画面です。
部品にLvとファイル名を表示すると以下のようになります。
Lv5のpageComponent.vueのソースコードの一部です。
以下の様に自分よりもLvが低い部品を呼び出して、組み合わせます。
この時、部品に値を渡すこともできます。
<template>
// HTML部分
<div>
// 部品を表示する
<header-component></header-component>
<main-component></main-component>
<footer-component></footer-component>
</div>
</template>
<script>
// JS部分
// 部品をインポート
import HeaderComponent from "../organisms/HeaderComponent.vue";
import FooterComponent from "../organisms/FooterComponent.vue";
import MainComponent from "../organisms/MainComponent.vue";
export default {
components: {
FooterComponent,
MainComponent,
HeaderComponent,
}
</script>
<style lang='scss' scoped>
/* CSS部分 */
/* Sass記法で書ける。 */
/* ここで書いたものは他の部品に影響しない。 */
div{
max-width: 900px;
margin: 0 auto;
}
</style>