パッケージ | バージョン |
---|---|
yarn |
1.22.17 |
node |
v15.14.0 |
firebase |
9.6.1 |
firebase
に関しては,8 系と 9 系でコードの書き方が大きく異なるので,注意すること
- Homebrew
- インストールしていない方はこちらから
- git
- こちらは必須ではないが,Node のパッケージ管理が楽になるのでおすすめ
- 直接 Node をインストールしても OK
- すでに Node が入っている場合は削除すること
# Nodeが入っているかを確認
which node
# brewでインストールしていれば,以下のコマンドで削除
brew uninstall node
# brewのアップデート
brew update
# nodebrewのインストール
brew install nodebrew
# nodebrewのバージョンの確認
nodebrew -v
- 環境変数を追加する
- bash を使っている方は,
zshrc
の部分をbash_profile
に変更
- bash を使っている方は,
# zshrcを開く
- vi ~/.zshrc
- 以下の環境変数を
zshrc
もしくはbash_profile
の末尾に追加
export PATH=$HOME/.nodebrew/current/bin:$PATH
zshrc
もしくはbash_profile
を更新
# zshrcを更新
source ~/.zshrc
- 最後にセットアップして完了
- これをやらないと,nodebrew が使えない
# セットアップ
nodebrew setup
- 今回の開発では Node 15 系を使用しているので,こちらをインストール
- 15 系であれば,どのバージョンでも OK
# nodebrewでインストールできるNodeのバージョンを確認
nodebrew ls-remote
# Nodeのインストール
nodebrew install-binary v15.14.0
nodebrew compile v15.14.0 # M1の場合はこちら
# インストールしたバージョンの確認
nodebrew ls
# 使いたいバージョンを指定
nodebrew use v15.14.0
# nodeのバージョンを確認
node -v
npm -v
- 今回の開発では,
npm
ではなく,yarn
でパッケージ管理を行った - npm と yarn の違いはこちらから
Cloud Functions では,
npm
を使用しているが,
パッケージをインストールしなくていいので,基本的にnpm
は使用しない
# npm 経由でyarnをインストール
npm install -g yarn
# yarnがインストールできたかを確認
yarn -v
- Firebase を使用した開発ではほぼ必須の CLI なので,こちらもインストール
- このパッケージをインストールすると,Firebase の操作用コマンドが使用できる
npm install -g firebase-tools
git
にて,リポジトリのクローンを行う- GitHub に ssh 接続ができるように設定しておきましょう
git clone git@github.com:Kenny-NISLab/lab-assignment.git
yarn
にて,今回使用するパッケージのインスール
# ディレクトリの移動
cd lab-assignment
# パッケージのインストール
yarn install
- プロジェクトのルートディレクトリに
.env
の作成.env
は環境変数用のファイル- git にて管理を行いたくない情報を管理している
.env
は先輩から引き継ぐようにしてください
# .envの作成
touch .env
# .envの中身
FIREBASE_API_KEY='xxxx'
FIREBASE_AUTH_DOMAIN='xxxx'
FIREBASE_PROJECT_ID='xxxx'
FIREBASE_STORAGE_BUCKET='xxxx'
FIREBASE_MESSAGE_SENDER_ID='xxxx'
FIREBASE_APP_ID='xxxx'
ADMIN_EMAIL='xxxx'
ADMIN_ROOT_URL='xxxx'
ADMIN_SUB_URL='xxxx'
CRYPT_JS_PASSPHRASE='xxxx'
- 開発環境の Firebase プロジェクトの選択
- Firebase のプロジェクトに関しては,後述
# Firebaseにログイン
firebase login
# プロジェクトの選択
firebase use lab-assignment-dev
- 起動できたら,ブラウザにて
localhost:3000
にアクセス
# このコマンドでローカルホストの起動ができる
yarn dev
# 停止したい場合は以下を押下
control + C
- 以下の画面が出てこれば完了!
開発するにあたり,以下の拡張ツールをインストールしておいてください
- ESLint
- Vetur
- Prettier
- Google が提供しているモバイル・Web アプリケーション向けのプラットフォーム
- 全ての機能が Google のインフラ技術に支えられており、簡単にアプリケーションの開発を行うことができる
- Firebase コンソール:https://console.firebase.google.com/
nislab.root@gmail.com
のアカウントで Google にログインを行えば,操作可能- 操作する場合は,ネットワーク班の担当者から共有してもらうこと
環境名 | プロジェクト名 | URL | 備考 |
---|---|---|---|
本番環境 | lab-assignment-prod | ・https://assign.nislab.io ・https://lab-assignment-prod.web.app |
B3 の学生がデータを入力する際に使用 |
開発環境 | lab-assignment-dev | https://lab-assignment-dev.web.app | ローカルホストと開発環境用に使用 |
- 認証/認可を行うサービス
- 今回はメールアドレス認証のみを有効にした(プロバイダによる認可は未実装というか必要なし)
- Firebase におけるデータベース用のサービス
- NoSQL であり,コレクションとドキュメントという概念で DB を管理
- インデックスやセキュリティルール(権限)の設定も可能
- 詳しくは公式ドキュメントにて
- 研究室配属希望調査のデプロイ先
- デプロイは
Github Actions
が担当しているので,気にしなくて良い - URL の末尾スラッシュの設定をオフにしている
- Firebase で使用されるサーバレスのバックエンドフレームワーク
- クライアントから HTTP リクエストを呼ぶことで,呼び出すことが可能
- 主にメールの送信と,ユーザの作成・削除にて使用
- Cloud Functios のみデプロイの仕方が違うので,注意
# デプロイ先のプロジェクトを選択(本番環境であれば,lab-assignment-prod)
firebase use lab-assignment-dev
# Cloud Functionsのみデプロイ
firebase deploy --only functions
- Vue.js のフレームワーク
- Vue.js はライフサイクルの考え方が開発をする上で,非常に重要なので理解をすること
- 基本的には,Vue.js と同じだが,一部 Nuxt.js の方が使いやすくなっているイメージ
- 今回は
SPA(Single Page Application)
にて開発を行なった
- 本開発では,Vuetifyを使用
- 公式ドキュメント
- Vue.js のマテリアルデザインのコンポーネントを提供
- よく使用したコンポーネント
- URL 構造は
pages
のディレクトリ構造と一致しているため,編集したいページのコードは対応するファイルから探すようにすること
URL | 備考 |
---|---|
/ | トップとログインページ |
/form | 学生が問い合わせを行うページ |
/user | 各学生の研究室の得点や進路希望の調査結果を表示するページ |
/user/edit | 各学生の研究室の得点や進路希望を編集するページ |
/admin/users | 管理者画面・学生のデータを管理するページ |
/admin/teachers | 管理者画面・教授のデータを管理するページ |
.
├── assets # CSSの設定等
├── components
│ ├── admin # 管理画面に使用するコンポーネント
│ ├── card # カードの汎用コンポーネント
│ └── layouts # 汎用コンポーネント
├── firebase.json # Firebase Hostingの設定を行う
├── firestore.rules # Firestoreのセキュリティルールを設定
├── functions
│ ├── index.js # Cloud Functionsのソースコード
├── layouts # レイアウトの表示
├── middleware
│ ├── auth.js # 認証情報の取得
│ └── redirect.js # リダイレクト設定
├── nuxt.config.js
├── package.json # yarnでのパッケージの管理
├── pages # URL構造と対応
│ ├── admin
│ │ ├── teachers.vue # /admin/teacher
│ │ └── users.vue # /admin/users
│ ├── form.vue # /form
│ ├── index.vue # /
│ └── user
│ ├── edit.vue # /user/edit
│ └── index.vue # /user
├── plugins
│ ├── firebase.js # Firebaseの初期化
│ └── utils.js # 汎用関数の設定
├── static # ファビコンの設定等
├── store
│ ├── auth.js # 認証情報の状態を管理
│ ├── drawer.js
│ ├── excel.js
│ ├── menu.js
│ ├── teachers.js # 教授データの状態を管理
│ └── users.js # 学生データの状態を管理
└── yarn.lock
- Nuxt.js のディレクトリ構造の詳細はこちらを参照すること
- ページロード時の実行順番
plugins
→middlewares
→layouts
→pages
→components
Vuex
について- Vue.js の状態管理ライブラリ
- 詳細はこちら
store
ディレクトリに,状態管理を行うためのファイルを格納
- Vue.js の状態管理ライブラリ
作成したテーブルは以下の 2 つ
users
"users": {
"docmentID": {
"id": "1316200127",
"name": "中井",
"mail": "ctwf0127@mail4.doshisha.ac.jp",
"password": "pass",
"status": "test",
"isActive": true,
"isPointAssigned": false,
"group": 1,
"rank": 39,
"isGraduate": true,
"point": {
"ksato": "3",
"tkoita": "1",
...
},
"year": "2022",
},
"docmentID": {
"id": "1316200149",
"name": "田中",
"mail": "ctwf0149@mail4.doshisha.ac.jp",
"password": "pass",
"status": "prod",
"isActive": true,
"isPointAssigned": false,
"group": 1,
"rank": 1,
"isGraduate": true,
"point": {
"ksato": "3",
"tkoita": "1",
...
},
"year": "2022",
},
...
}
teachers
"teachers": {
"docmentID": {
"id": "ksato",
"name": "佐藤 健哉",
"lab": "ネットワーク情報システム研究室",
},
"docmentID": {
"id": "tkoita",
"name": "小板 隆浩",
"lab": "ネットワーク情報システム研究室",
},
...
}
documentID は Firebase にデータを追加した際,自動的に付与される ID
teachers のid
に関しては,運用ルール(Notion 参照)に従って保存すること
- 本番環境用のブランチ
develop
からのみマージされるように運用することfeature
からマージしないように
- 開発環境用のブランチ
feature
ブランチからのみマージされるように運用すること
- 開発者がコードの修正・追加を行うブランチ
- 必ず
develop
ブランチから切るようにすること - PR を投げる際に,
develop
に向けるように注意すること- デフォルトは
main
のため
- デフォルトは
- チケット番号は Issue の番号を参照にすること
# mainにチェックアウト
git checkout main
# mainの最新状態を取得
git pull origin main
# developにチェックアウト
git checkout develop
# developの最新状態を取得
git pull origin develop
# featureブランチを作成
git checkout -b feature/#(チケット番号)
# 作業を開始
# 作業が終了した場合
git add .
git commit -m "#(チケット番号) 修正内容のコメントを記述"
git push origin feature/#(チケット番号)
- Github の「Pull Request」にて,自身が開発を行なった
feature
ブランチからdevelop
ブランチに向けて,PR を投げる - その後,すぐに「Merge Pull Request」を押さないようにする
- Github Actions が走るまで,ライムラグがあるため
- Github Actions が終われば,レビューとテストを実施
- 問題がなければ,「Merge Pull Request」を押下し,
develop
にマージ - その後,Github Actions が走り,開発環境にデプロイを行う
- Github の「Pull Request」にて,
develop
ブランチからmain
ブランチに向けて,PR を投げる - 問題がなければ,「Merge Pull Request」を押下し,
main
にマージ - その後,Github Actions が走り,本番環境にデプロイを行う
.github/workflow
に設定ファイルを格納
-
feature
ブランチへ push した際- ファイル名:
ci.yml
- 構文チェック
- ファイル名:
-
develop
ブランチに PR を投げた際 -
develop
ブランチに投げた PR をクローズした際(マージした際)- ファイル名:
deploy_on_dev.yml
- 開発環境へデプロイ
- 開発環境に Cloud Functions をデプロイ
- プレビュー環境の削除
- ファイル名:
-
main
ブランチに投げた PR をクローズした際(マージした際)- ファイル名:
deploy_on_prod.yml
- 本番環境へデプロイ
- 本番環境に Cloud Functions をデプロイ
- ファイル名:
かなり急いで開発をしたので,リファクタリングやパフォーマンスチューニング等大募集しています!