# Twitterシェアボタンを設置しました!

# ボタン作成

まずはTwitterシェアボタンを作成していきます。 公式のボタン生成ページがあるのでそちらを利用します。

  1. 下の方にスクロールすると見える Twitter Buttons をクリック
  2. Share Button をクリック → ボタンの貼り付け用コードとプレビューが表示されます。
  3. 「That’s all we need, unless you’d like to set customization options.」をクリックで内容をカスタマイズ
  4. Update を押して内容を更新する → ボタンのプレビューが更新されます。

カスタマイズで LanguageJapanese にすると日本語表示になります。

# コンポーネント化する

このサイトはVuepressで作られていますので、このTwitterボタンもVueコンポーネントにしていきたいと思います。 まずはコピーしたタグを展開してみましょう。

<a
  href="https://twitter.com/share?ref_src=twsrc%5Etfw"
  class="twitter-share-button"
  data-size="large"
  data-text="| Plus oneブログ"
  data-url="https://plus-one.tech/"
  data-lang="ja"
  data-show-count="false"
>
  Tweet
</a>
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8" />
1
2
3
4
5
6
7
8
9
10
11
12

こうしてみると、どのプロパティに何を入れたらいいのかひと目でわかりますね。 さらに、scriptの読み込みは一箇所にまとめてしまっても良さそうです。

最終的に下記のような形に落ち着きました。

TwitterShareButton.vue(クリックで展開)
<template>
  <a
    href="https://twitter.com/share?ref_src=twsrc%5Etfw"
    class="twitter-share-button"
    :data-url="dataUrl"
    :data-text="dataText"
    :data-lang="lang"
    :data-size="large ? 'large' : undefined"
    :data-show-count="showCount"
  >
    Tweet
  </a>
</template>
<script>
export default {
  name: 'TwitterShareButton',
  props: {
    url: { type: String },
    text: { type: String },
    lang: { type: String, default: 'ja' },
    large: { type: Boolean, default: false },
    showCount: { type: Boolean, default: false },
  },
  computed: {
    dataUrl () {
      return this.url || location.protocol + '//' + location.host + this.$page.path
    },
    dataText () {
      return (this.text || this.$page.title) + ' | ' + this.$siteTitle + ' @plus_one_masaki'
    },
  },
  /**
   * ボタン用スクリプトの読み込み
   */
  mounted () {
    const twitterWidgetScript = document.createElement('script')
    twitterWidgetScript.src = 'https://platform.twitter.com/widgets.js'
    twitterWidgetScript.async = true
    document.body.appendChild(twitterWidgetScript)
  },
}
</script>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46

facebookなども同じ感じでできるようなので、ぜひお試しください!