Vue.js + FireBaseで作成した英語学習のポートフォリオサイトを作成しました。


## このポートフォリオサイトを制作した背景 ##
海外サイトの公式ドキュメントを読み込んだり、エラーメッセージを確認する際に必ず必要になる英語スキル。
英語が使えるエンジニアになるために、英語学習アプリを開発しました。

・サイトタイトル名：Study-Tube
　URL   ：https://english-tube-c340d.web.app/
　GitHub：https://github.com/MASAKi-cell/Study-Tube

・テスト用アカウント
　メールアドレス：bje@gmail.com
　パスワード　　：English
　※ユーザー管理はfirebaseのAuthenticationを使用してます。
　※ゲストログイン機能もあります。
<br>

![fv.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/895528/dedee719-ca66-c766-f788-d3e6a70aacf5.gif)


## 使用技術 ##
・フロントエンド：Vue.js(VueRouter,Vuex,Vuetify,axios)、HTML、Sass
・バックエンド　：Firebase(Hosting,Authentication)

その他ツール
・VScode、Developer Tools
・ソースコード管理：GitHub
・進捗管理　　　　：Trello

## 主な機能一覧 ##
・新規会員登録機能、ログイン/ゲストログイン、ログアウト、Googleアカウントのログイン機能
・New York Times APIを使用して英語記事表示機能
・Youtube Video APIから動画をキーワード検索、一覧表示
<br>

## こだわりポイント ##
・ Vue.js上のデータフローを管理するためVuexを使用
・ シングルページアプリケーションを実現するためのVue Router使用
・ Vue.jsの開発環境を素早く立ち上げることができるVue CLI使用
・ Firebase Authenticationを使用したGoogleアカウント認証機能
・ Firebase Hostingを使用したアプリケーションの公開
・ Youtube APIで動画検索機能実装
・ New York Times APIで記事表示機能を実装

### 1. ファーストビュー　

・ 最初にアクセスすると本サイトの説明文が記載された画面が現れます。
・ ヘッダーはvue-routerを使用し、router-linkで選択した画面が現れます。

### 2.新規会員登録/ログイン機能 
・ ヘッダーの右側に会員登録機能、ログイン機能のボタンを配置しました。
・ ログインすると、動画検索や学習記録の欄が表示されます。
・ 新規会員登録にはサーバーとHTTP通信を行うためにaxiosを使用しました。
　 既に新規登録が完了している場合は、ログインボタンを押して登録したメールアドレスとパスワードを入力してログインします。
・ ログインユーザーはfirebaseのAuthenticationを使用してユーザーを管理しています。

![ログイン.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/895528/2e777978-f7f5-9509-21dc-3eab6fc0a63b.gif)


###3.google アカウントログイン機能
・ googleアカウントでのログイン機能も追加しました。
・ stateでlogin_userを格納し、actionを使用してログイン、ログアウトの状態を管理しています。

### 4.動画検索 
・ Youtube APIから取得した動画を表示させることができます。
・ 検索フォームからキーワードを入力して動画を検索することができます。

![動画検索.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/895528/ccbab68e-6e95-b414-6bda-9a55dadee9fd.gif)



### 5.記事表示機能 
・ New APIから取得した記事を表示させることができます。

![記事検索機能.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/895528/97619a46-075a-be9c-b0e2-e482c60d44cb.gif)


### 6.学習記録機能 
・ 日々の学習状況を記録することができます。

![学習記録.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/895528/b03a5629-6a0c-0b7d-dc65-247d87297889.gif)





## 開発を通じて学んだこと ##
・firebaseの使い方
　認証、デプロイといったバックエンドの実装がfirebaseを使って出来るようになりました。

・Vuexの使い方
　最初はVuexについて苦手意識がありましたが、実際に使用してみると色々な機能が実装できることが分かりました。

・Vue.jsにおけるSPAの作り方
　SPAの下準備から各ページ作成・Vou-router調整ができるようになりました。

## 今後実装していきたい機能 ##
・ 条件を絞り込んだ検索機能
・ いいね機能
・ お気に入りをストックする機能


## 参考にした教材 ##

### 公式ドキュメント
・<a href="https://jp.vuejs.org/v2/cookbook/using-axios-to-consume-apis.html">axiosを利用したAPI使用例</a>
・<a href="https://cr-vue.mio3io.com/tutorials/firebase.html">認証付きの簡易チャットを作る！</a>
　⇒ アプリを作成する為に、まずは公式のドキュメントを参考にしました。

### Vue.jsにおけるSPAの作り方
・<a href="https://coinbaby8.com/vue-jsvue-router-bulma-spa.html">Vue.js】【SPA】の作り方をわかりやすくまとめてみた【初心者向け】</a>
　⇒ SPAについて詳しく記載されたサイトです。

### created, mountedのライフサイクルフック
<a href="https://reffect.co.jp/vue/vue-js-created-mounted-diffrence">vue.jsのcreatedとmountedの違いを目で見て理解</a>
⇒ vue.jsのcreatedとmountedの違いが判りませんでしたが、このサイトを見て理解が深まりました。

### Vue.js参考書籍&動画学習　
・<a href="https://www.amazon.co.jp/Vue-js%E3%81%AE%E3%83%84%E3%83%9C%E3%81%A8%E3%82%B3%E3%83%84%E3%81%8C%E3%82%BC%E3%83%83%E3%82%BF%E3%82%A4%E3%81%AB%E3%82%8F%E3%81%8B%E3%82%8B%E6%9C%AC-%E4%B8%AD%E7%94%B0-%E4%BA%A8/dp/4798056499/ref=sr_1_2_sspa?adgrpid=116723389878&dchild=1&hvadid=492579605228&hvdev=c&hvqmt=b&hvtargid=kwd-609297642876&hydadcr=28798_10688914&jp-ad-ap=0&keywords=vue.js+%E6%9C%AC&qid=1619669937&sr=8-2-spons&psc=1&spLa=ZW5jcnlwdGVkUXVhbGlmaWVyPUE4WDM4MzAwVjBJN04mZW5jcnlwdGVkSWQ9QTA4MzQwNTFPU1ZPWlBVVllGWkYmZW5jcnlwdGVkQWRJZD1BMkM4TlBPS1VOUTdYRCZ3aWRnZXROYW1lPXNwX2F0ZiZhY3Rpb249Y2xpY2tSZWRpcmVjdCZkb05vdExvZ0NsaWNrPXRydWU=">Vue.jsのツボとコツがゼッタイにわかる本</a>
　⇒ Vue.jsの事が丁寧に解説されており、Vue.jsの初心者にとってはちょうど良い内容かと思います。

・<a href="https://www.amazon.co.jp/dp/B08N4VYZX6/ref=dp-kindle-redirect?_encoding=UTF8&btkr=1">プロフェッショナルWebプログラミング　Vue.js</a>
　⇒ 同じくVue.jsの書籍です。

・<a href="https://www.udemy.com/course/vue-js-complete-guide/">Udemy 超Vue.js 2 完全パック (Vue Router, Vuex含む)</a>
　⇒ Vue.JSの基礎から、仮想DOM、Vue CLIを使った開発方法などVue.jsの全体的な内容を学ぶことができました。

・<a href="https://www.udemy.com/course/vuejs-firebase/">Vue.js + Firebaseで作るシングルページアプリケーション</a>
　⇒ Firebase Authenticationを使った認証機能をメインに学ぶことが出来ました。

・<a href="https://www.youtube.com/watch?v=i43MZ_oSRfs&list=LL&index=3">Learn how to build app with API in Vue js tutorial</a>
　⇒ 海外の動画ですが、Web APIをVue.jsで実装方法について理解が深まりました。

・<a href="https://www.youtube.com/watch?v=yxhNo1xTOlM&list=FLA0UbTzbZebxNPC5MvuI-KA&index=7">PythonでぐるなびAPIを扱おう | Python活用シリーズ</a>
　⇒ Web APIのことが説明されています。

・<a href="https://www.youtube.com/watch?v=qFAls_LCJCU&list=FLA0UbTzbZebxNPC5MvuI-KA&index=10">初心者のためのYouTube API入門～基本編～</a>
　⇒ Youtube APIの実装方法について。

・<a href="https://www.webprofessional.jp/fetching-data-third-party-api-vue-axios/">Vue.jsとAxiosなら驚くほど簡単に作れる！外部APIを使ったWebアプリの実例</a>
　⇒ この記事ではNew York Times APIをaxiosで実装する方法について解説されています。神記事です。



## 反省点 ##
・axiosを利用したHTTPリクエストやサーバーサイドの知識を深めていく必要があると感じました。
・これまで、GitHub DesktopでGitHubにアクセスしてましたが、今回はコマンドプロンプトを使用してコードを管理しました。
　ただやり方がわからず、もっと理解を深めていく必要があると感じました。
・Vuexを使用した状態管理についてもっと学習していきます。

## 最後に ##
Vue.js初心者で、いろいろコードの間違いがあると思いますので、ご指摘いただけると助かります。
最後まで読んでくださり有難うございました。