2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Vue.js入門ガイド:コンポーネント編

Last updated at Posted at 2025-12-10

Vue.js入門ガイド:コンポーネント編

はじめに
Vue.jsの大きな魅力のひとつがコンポーネントです。
コンポーネントとは「UIの部品」を切り出して再利用できる仕組みで、アプリを小さな部品の組み合わせとして作れるようになります。
コンポーネントは複雑な仕組みではありますが、様々な使い方ができます。
この記事では、初心者がまず理解すべきコンポーネントの基本を紹介します。

1. コンポーネントの基本

機能

  • コンポーネントは「再利用可能な部品」
  • 例:ヘッダー、フッター、カード、ボタンなどを部品化できる
  • 大きなアプリを小さな部品に分けて管理できるので、保守性が高まる

コード例

Vue.component('hello-component', {
  template: '<p>こんにちは!</p>'
});
<div id="app">
  <hello-component></hello-component>
</div>

解説

  • Vue.component('hello-component', {...}) → コンポーネントを登録
  • template → コンポーネントのHTML部分
  • → 実際に使うときはタグとして書ける

2. 親子コンポーネントとProps

機能

  • 親コンポーネントから子コンポーネントへデータを渡せる
  • この仕組みを Props と呼ぶ

コード例

Vue.component('user-card', {
  props: ['name', 'age'],
  template: '<p>{{ name }}さんは{{ age }}歳です</p>'
});
<div id="app">
  <user-card name="Taro" age="20"></user-card>
</div>

解説

  • props: ['name', 'age'] → 親から渡されるデータを定義
  • → 属性としてデータを渡す
  • 子コンポーネント内で {{ name }} や {{ age }} として使える
    → Propsを使うと、同じコンポーネントを違うデータで再利用できる

3. 子から親へイベントを渡す($emit)

機能

  • 子コンポーネントから親コンポーネントへ「イベント」を通知できる
  • この仕組みを $emit と呼ぶ

コード例

Vue.component('counter-button', {
  template: '<button @click="$emit(\'increment\')">+1</button>'
});
<div id="app">
  <counter-button @increment="count++"></counter-button>
  <p>カウント: {{ count }}</p>
</div>

解説

  • 子コンポーネントで this.$emit('イベント名') を呼ぶ
  • 親コンポーネントで @イベント名="処理" を書くと受け取れる
  • この例では、ボタンをクリックすると親の count が増える
    → Propsと$emitを組み合わせることで、親子間のデータのやり取りができる

4. コンポーネントのライフサイクル

機能

  • コンポーネントには「生成」「表示」「破棄」などのタイミングで呼ばれる関数がある
  • これを ライフサイクルフック と呼ぶ

コード例

Vue.component('example-component', {
  template: '<p>ライフサイクルの例</p>',
  created() {
    console.log("コンポーネントが作られました");
  },
  mounted() {
    console.log("DOMに追加されました");
  },
  destroyed() {
    console.log("コンポーネントが削除されました");
  }
});

解説

  • created → コンポーネントが作られた直後に呼ばれる
  • mounted → DOMに追加されたときに呼ばれる
  • destroyed → コンポーネントが削除されたときに呼ばれる
    → API通信や初期化処理は mounted に書くことが多い

5. スロット(slot)

機能
コンポーネントの中に「差し込み部分」を作り、親から自由に内容を渡せる仕組みです。

コード例

Vue.component('card-box', {
  template: `
    <div class="card">
      <slot></slot>
    </div>
  `
});
<card-box>
  <p>ここに好きな内容を入れられます</p>
</card-box>

解説

  • → 親コンポーネントから渡された内容がここに差し込まれる
  • コンポーネントを「枠」として使い、中身を柔軟に変えられる
  • UI部品を汎用的に作るときに便利

6. コンポーネントのスタイル

機能
コンポーネントごとにスタイルを閉じ込めて管理できる仕組みです。

コード例

<template>
  <p class="message">こんにちは</p>
</template>

<style scoped>
.message {
  color: red;
}
</style>

解説

  • scoped を付けると、そのコンポーネント内だけにスタイルが適用される
  • 他のコンポーネントに影響しないので安心
  • 大規模アプリでもスタイルが衝突しにくい

7. コンポーネント間通信の応用

機能
親子関係だけでなく、兄弟コンポーネントや遠いコンポーネント間でデータをやり取りする方法があります。
小規模なら「イベントバス」や「provide/inject」

コード例

// 親コンポーネント
Vue.component('parent-box', {
  provide: {
    color: 'blue'
  },
  template: `
    <div>
      <child-box></child-box>
    </div>
  `
});

// 子コンポーネント
Vue.component('child-box', {
  inject: ['color'],
  template: '<p style="color: {{ color }}">色付きテキスト</p>'
});

解説

  • provide → 親コンポーネントが「共有したいデータ」を提供
  • inject → 子コンポーネントがそのデータを受け取る
  • Propsのように毎回渡さなくても、深い階層のコンポーネントにデータを届けられる

まとめ

この記事では、Vue.jsのコンポーネントについて紹介しました。
内容をまとめると以下の通りです。

  • 基本 → 再利用可能な部品を作れる
  • Props → 親から子へデータを渡す
  • $emit → 子から親へイベントを通知する
  • ライフサイクルフック → コンポーネントの生成・表示・削除のタイミングで処理を実行
  • slot → コンポーネント内に差し込み部分を作れる
  • コンポーネントのスタイル → コンポーネントごとにスタイルを閉じ込められる
  • コンポーネント間通信の応用 → 親子以外でもデータをやり取りできる
2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?