初めてのチーム開発(ほぼハッカソン)に参加した件 その2

9月前半に株式会社ラクス様のインターンシップに参加しました

この記事の続きを書いていきます。

melheaven.hatenadiary.jp

随分と前の話になるので、早めにまとめておきたいと思ってたのですが・・・
前回の記事の流れから
「チャット機能を兼ね備えたタスク割り振り・タスク量を定量化したアプリ」
を作ることになりました!

使用技術

特に活用した技術は3つの通りです.
自分はページ遷移・ユーザー管理・DB周りを担当しました。

  • Express (Socket.io, session, sequelize)
  • SQLite
  • Git

設計

こんな感じの作りたい

f:id:electric-city:20201008001441p:plain
設計図

開発工程

最初の方Expressをほとんど触らない人が多かった(自分もそう)ので、
チュートリアルでチャット機能(socket.io)を勉強しました。
node.jsを触る機会がなかったため、非同期処理の考え方に苦労しました。

最初に自分たちで設計したモデルはあまりにも工程が多く、
限られた期間で開発するのは現実的ではありませんでした。
そのためメンターさんから「MVP開発をすればどう?」とお話を受けました。

MVP開発とは、Minimum Viable Productの略で
製品開発における実用最小限で開発し、
そのプロダクトの価値を評価したり、
後の機能追加や機能変更にも適応しやすい開発です。

boxil.jp

MVP開発を行った後、
顧客の反応を伺い、さらなるブラッシュアップを続ける開発は
近年主流のアジャイル開発にも近い考え方です。

Express

ページ遷移は大昔に趣味でRailsをいじったことがあったので、
routerやviewの仕組みなどはすんなり入ってきました。
ただ厄介だったのはviewで読み込まれるテンプレートエンジンが
HandleBarsだったことです。

  • 一般的なejsより情報量が少なすぎる。
  • ヘルパー関数の定義がだるい
  • レンダー時にObject型の引数を渡す際、JSの値をHTMLに埋め込む時にクセがある

qiita.com

stylist.hatenadiary.org


本来であれば環境構築も自分たちでやればよかったのですが、
最初から用意されていた環境(AWS EC2 + express)に依存してしまいました。

sessionは自分がユーザー管理時に必要だと思い、導入しました。
ブラウザからリロードしてもsessionによりユーザー認証が継続された状態で、
他ページからユーザー情報を簡単に取得できるので便利だなと。

DataBase

DataBaseについてはExpressで簡単に定義して活用できるSQLiteを活用。
本来はMySQLとかPostgreSQLの方がいいのかもしれませんが、MVP開発だし多少はね。

最初はSQL文をゴリゴリ書いていたのですが、
リレーションシップが面倒ということでしたので、
メンバーの一人がO/Rマッピングを使おうと!

qiita.com

それで代表的なsequelizeを勉強することになったのですが、
これがすごく便利で導入して良かったなと。

O/Rマッピング/sequelizeに関しては以下の記事にまとめています。

melheaven.hatenadiary.jp

Git

チーム開発でこいつが一番厄介でした。
メンバーが全員同時に開発を進めるのでConflictが発生したり、
pullを忘れて自分の手元のブランチ環境が古すぎたり・・・
自分の場合はトラブル続出で、メンバーもGit初心者でしたので、
結局Google先生しか頼れる人はいませんでした笑

mergeする際にConflictが発生するのをVSCodeを使って修正してVSCodeの有能さを知る。
プルリクの承認するためにプルリク(数字)ブランチを作って動作確認してMergeの段取りを知る。
Gitの簡易的な概念や機能を理解するために読んだ「サル先生のGit入門」の親切さを知る。

backlog.com

感想

チームメンバーで役割を分担して開発を進めるのですが、
経験が未熟なため、先が読めずに
修正するソースコードやタスクがバッティングしたり、
チーム開発としてはgdgdだったかも?
(エンジニアさん曰く、最初はそんなもん)
ただ最終的にはいい成果物ができました!

f:id:electric-city:20201008001511p:plain

github.com