【個人開発への道①】初心者が、Nuxt.jsでFullCalendarを使ってカレンダーページ作りにチャレンジ！結果は・・・！？


こんにちは！たわちゃんです:sunny:

私は３ヶ月前からプログラミングを学び始めた初心者ではございますが、
プライベートでサービス開発にチャレンジしようとしております・・・！

その開発までの道のりを、これからQiitaにちょこちょこ書いていこうかなと思うので、
さりげな～く応援よろしくお願いします！:relaxed:

#構想中のサービス
![クラウドファンディング小.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/670338/5c10bc14-827c-1814-7ebc-f681a65db3a9.png)
現在、考えているのがこちらのサービス！

私の兄はマジシャンをしているのですが、常日頃から告知や宣伝活動に困っているのを見てきました。

そこで、兄のような芸人さん、さらには個人経営の店主さんを対象に
告知専用サービスを作ろうと考えました！

主な機能は３つ
（１）__スケジュールの管理・共有URLの発行__
（２）__SNSで簡単にシェア！__
（３）__告知用の画像もラクラク作成できる！__

※「できる・できない」は度外視して考えた機能です！もちろん全部実現させる予定ですが・・・！

そこで、個人開発への道、第一歩として！

__（１）の機能で使えるカレンダーページを作ってみることにしました！__

#前提

カレンダーページを作る前に、Nuxt.jsでサイトを作りました。
[![Image from Gyazo](https://i.gyazo.com/961c5828807fb80e8b38be2189bebfff.png)](https://gyazo.com/961c5828807fb80e8b38be2189bebfff)

トップページに「カレンダーを見る」というボタンを作ったので、
それを押すとカレンダーページに飛ぶようにしたいと思います！

#いざ！カレンダーページ作り！
[Nuxt.jsでカレンダーコンポーネント『FullCalendar』のVue.js版を使う](https://qiita.com/tkpea08/items/4a2329485561631c50b8)
[高機能でかつ軽快に動作するカレンダーFullCalendarをNuxt.jsで使う](https://www.virment.com/nuxt-js%E3%81%A7fullcalendar%E3%82%92%E4%BD%BF%E3%81%86/)

これらの記事を参考に、シンプルだけど機能性が高そうな__[FullCalendar](https://fullcalendar.io/)__を使ってページ作成にチャレンジしました！

###FullCalendarをインストール
まず、以下のコマンドでFullCalendarのモジュールをインストール！

```
$ npm install --save @fullcalendar/vue @fullcalendar/core @fullcalendar/daygrid @fullcalendar/timegrid @fullcalendar/interaction
```
###FullCalendar用のプラグインファイルを作成
pluginsというディレクトリに適当な名前（今回はfullcalendar.js）でファイル作成し、以下の内容を入力！

```js:plugins/fullcalendar.js
import Vue from 'vue'
import Calendar from '~/components/Calendar'

Vue.component('full-calendar', Calendar)
```

###nuxt.config.jsに設定を追記

```js:nuxt.config.js
// 省略
  plugins: [
     // 以下を追記
    { src: '~/plugins/fullcalendar', ssr: false }
  ],
// 省略
```

###Componentを作成
componentsディレクトリにCalendar.vueという名前でファイルを作成し、以下を入力します。

```vuejs:components/calendar.vue
<template>
  <FullCalendar default-view="dayGridMonth" :plugins="calendarPlugins" />
</template>

<script>
import FullCalendar from '@fullcalendar/vue'
import dayGridPlugin from '@fullcalendar/daygrid'
import timeGridPlugin from '@fullcalendar/timegrid'
import interactionPlugin from '@fullcalendar/interaction'

export default {
  components: {
    FullCalendar
  },
  data () {
    return {
      // 使用したいプラグインを以下で指定。事前にimportでインポートする。
      calendarPlugins: [ 
        dayGridPlugin,
        timeGridPlugin,
        interactionPlugin
      ]
    }
  }
}
</script>
<style>
@import '~/node_modules/@fullcalendar/core/main.css';
@import '~/node_modules/@fullcalendar/daygrid/main.css';
@import '~/node_modules/@fullcalendar/timegrid/main.css';
</style>
```

###カレンダーを表示させる
私は既に作っていたuserPageというページで表示させたかったので、以下のように追記しました！
fullcalendarを表示させるdivを追加し、呼び出せるようにしました！

```vue:userPage.vue
<!--CSS省略-->
<template>
  <div align="center" class="page">
    
    <h1>My Calendar</h1>
    <div class="columns is-mobile">
      <full-calendar />
    </div>
    <router-link to="/login">
        <button class="btn-calendar"><a class="btn-text">TOPに戻る</a></button>
    </router-link>

  </div>
</template>

<script>
//省略
export default {
  name: 'Schedule',
//省略
    },
</script>
```

#いざ、や～んでぶ！
さぁ、準備は整いました。ページを見てみましょう！
や～ん　でぶっ！！！

```
$ yarn dev
```
[![Image from Gyazo](https://i.gyazo.com/88f09329fc22ff53cf10460d259be02c.png)](https://gyazo.com/88f09329fc22ff53cf10460d259be02c)

なぜだ・・・。

そのあと、色々模索するも、うまくいかず・・・。
一旦元に戻そうとすると、そもそものページも出ず、以下のようなエラーが。

[![Image from Gyazo](https://i.gyazo.com/2e637dc492d46e32e55966d4242537bf.png)](https://gyazo.com/2e637dc492d46e32e55966d4242537bf)

調べると、キャッシュが残っているとかなんとか。

不幸中の幸いなのかわかりませんが、カレンダーを入れる前の画面に戻す方法だけは会得しました・・・。


（１）__node_modules__　と　__package-lock-json__ を削除
（２）以下のコマンドを実行

```
yarn install 
yarn dev
```
（参考記事▶[nuxtプロジェクトの実行中にエラーが発生しました](https://www.366service.com/jp/qa/263a2b7c1c514b8f86be0f608dcc6d9a)）

こちらでエラーは消えると思うので、私のようにつまずいた方の参考になりますよう・・・。

#とりあえずのGoogleカレンダー
FullCalendarはもうちょい調査が必要なので・・・
とりあえず何かカレンダー表示させられないかと調べました。

Googleカレンダーの埋め込みなら私でもできそうだったのでチャレンジ！

>Googleカレンダーの設定 ▶ マイカレンダーの設定 ▶ 表示させたいカレンダーを選択 ▶ カレンダーの統合

この手順で埋め込みコードを取得することができます！

今回はとりあえず、こちらをuserpageに追加！

```html
  <div align="center" class="page">
    
    <h1>My Calendar</h1>
    <iframe src="https://calendar.google.com/calendar/embed?src=twtjudy%40gmail.com&ctz=Asia%2FTokyo" 
    style="border: 0" width="800" height="600" frameborder="0" scrolling="no"></iframe>
　　<br>
    <router-link to="/login">
        <button class="btn-calendar"><a class="btn-text">TOPに戻る</a></button>
    </router-link>

  </div>

```


<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">とりあえずのGoogleカレンダー🥺<a href="https://twitter.com/hashtag/protoout?src=hash&amp;ref_src=twsrc%5Etfw">#protoout</a> <a href="https://t.co/uiOyH1ssva">pic.twitter.com/uiOyH1ssva</a></p>&mdash; カレー大好き★たわちゃん (@tawachan1128) <a href="https://twitter.com/tawachan1128/status/1316547029728862208?ref_src=twsrc%5Etfw">October 15, 2020</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>


これは簡単に表示されました。とりあえず良かった・・・。


#結果まとめ＆今後の課題

・Nuxt.js難しい…。FullCalendarを表示できるように、引き続きチャレンジ！
・CSSもひどいので、ライブラリとか使ってシンプル＆見やすさを意識する
・PCとスマホどっちで見ても綺麗にするにはどうすればいいのか調べる
・エラーから学ぶことも多いので、エラー出てもくじけない

今回はうまく行きませんでしたが、これからチャレンジすることのハードルを認識できたので良かったです。

ちょっと楽観的になってる部分があったので、ちゃんと気を引き締めて、課題を把握し、
ひとつひとつ潰していかないとサービス完成しないなと・・・

不安と焦りは強くなりましたが、ストレッチきいた目標がある方が成長できると思うので頑張ります。

#おまけ

ボタンを押すとページ遷移するっていうのを覚えたら楽しくなったので、
遊びのボタンを２つ作りました。

[![Image from Gyazo](https://i.gyazo.com/ac5a543a486e7122158f41cf1cddc509.png)](https://gyazo.com/ac5a543a486e7122158f41cf1cddc509)

「撃たれる」を押すと、以前自分で作った__[ステイサムに撃たれるアプリ](https://jovial-johnson-e7befb.netlify.app/handsup)__に飛びます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/670338/5d35205b-be5f-b1e2-d11a-5706604e6230.png)
参照▶[ジェイソン・ステイサムに「死にたくないなら手を挙げろ！」と言われるのが夢だったので、自分でそんなアプリを作りました。](https://qiita.com/twtjudy1128/items/4c29a98a035a6e8cbcb4)

次に「映画を見る」を押すと、以前自分で作った__[ステイサムのオススメ映画を教えてくれるアプリ](https://trusting-yalow-80ebbf.netlify.app/jason.html)__に飛びます。
<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">完成した〜〜〜(´；ω；｀)<br><br>ジェイソンステイサムのオススメ映画を教えてくれるアプリ！<br><br>I made an app that teaches you a recommended movie of Jason Statham❤<a href="https://twitter.com/hashtag/protoout?src=hash&amp;ref_src=twsrc%5Etfw">#protoout</a> <a href="https://twitter.com/hashtag/jasonstatham?src=hash&amp;ref_src=twsrc%5Etfw">#jasonstatham</a> <a href="https://twitter.com/hashtag/%E6%9C%AC%E4%BA%BA%E3%81%AB%E5%B1%8A%E3%81%91?src=hash&amp;ref_src=twsrc%5Etfw">#本人に届け</a> <a href="https://twitter.com/hashtag/javascript?src=hash&amp;ref_src=twsrc%5Etfw">#javascript</a> <a href="https://twitter.com/hashtag/vuejs?src=hash&amp;ref_src=twsrc%5Etfw">#vuejs</a> <a href="https://twitter.com/hashtag/%E9%A7%86%E3%81%91%E5%87%BA%E3%81%97%E3%82%A8%E3%83%B3%E3%82%B8%E3%83%8B%E3%82%A2?src=hash&amp;ref_src=twsrc%5Etfw">#駆け出しエンジニア</a> <a href="https://t.co/0uYyYOIMDz">pic.twitter.com/0uYyYOIMDz</a></p>&mdash; カレー大好き★たわちゃん (@tawachan1128) <a href="https://twitter.com/tawachan1128/status/1290810112848719873?ref_src=twsrc%5Etfw">August 5, 2020</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

参照▶[あなたにピッタリなジェイソン・ステイサムの映画を教えてくれるアプリを作りました【Vue.js】](https://qiita.com/twtjudy1128/items/e786f2f99e7389d22109)


たのしい・・・。


自分は遊びもどこかに入れないと、モチベが保てないということも今回でわかったので
全部ひっくるめてどういうサービスを作っていくか方向性を決めていくのも大事だとわかりました。

個人開発への道は長い・・・。

（つづく）