🍍

Pine(パイン)-慶應義塾大生限定SNSを作った話🎉🎉

5 min read


https://apps.apple.com/jp/app/pine-パイン-慶應義塾大生限定sns/id1590550932
https://play.google.com/store/apps/details?id=net.pineapp.pine

始めに

こんにちは、今回Pineという慶應生限定のSNSをリリースしました!

この記事ではPineにおいてのエンジニアチームの開発の記録を書き記しています。

このアプリを作った経緯

コロナで大学がオンライン授業になった事で

  • 大学内で自然に出会う場が失われた。
  • 同世代と話す機会が減った。

上記の問題を解決する為にオンライン上で同世代と繋がり、同じ授業の仲間との交流や情報交換、同世代とのマッチングができ、みんなが盛り上がり自然に振舞えるプラットフォームを提供したい!という思いでこのアプリを作ろうと考えました。

Pineの説明

◯ 慶應生だけのコミュニティ「掲示板」

Pine では、サークル、就活、授業などの学生生活の話から、恋愛まで、様々な「ラウンジ」で様々な慶應生生と情報交換や相談が可能となっています!

◯ 慶應生同士のマッチング

新しい慶應生の友達が作れるコネクト機能があります。一日に一人、チャットを送れる友達がコネクトし、交流を楽しめます!まるで、教室で隣の学生と話すような体験が出来ます。

◯ フレンド申請

ラウンジ内で仲良くなった人に、直接チャット申請を送ることが出来ます。これによって、趣味や授業が同じ人と直接つながれて、大学内のコミュニティが広がります。

Pineの機能

認証

慶應大学生のみ承認され、このアプリを使うことができます。

機能 内容
新規登録 新規登録
ログイン ログイン
ログアウト ログアウト
メール承認機能 慶應大学メールアドレスにメール承認メール送信
パスワード変更 ユーザーのメールアドレスにパスワード変更メール送信
アカウント削除 登録情報の削除

掲示板

掲示板機能はジャンル毎にスレッドを立ててその中はオープンチャット仕様になっており、みんなと自由にチャットをすることができます。

機能 内容
スレッド作成機能 ジャンル毎にスレッド作成
スレッド保存機能 任意のスレッド保存
オープンチャット機能 スレッド内でのチャット送信
画像送信機能 スレッド内での画像送信
自分のコメント削除機能 スレッド内での写真送信
スレッド別プロフィール機能 スレッド別でプロフィール設定
フレンド申請機能 任意のユーザーにフレンド申請
通報/ブロック 任意のスレッドを通報/ブロック

マッチング機能

24時間毎に新たな友達と出会う事できます。

機能 内容
マッチング機能 24時間毎にマッチング

個人チャット機能

1対1でのチャットする事ができます。

機能 内容
チャット機能 マッチングした人と個人チャット
ブロック機能/解除 チャット相手をブロック/解除
フレンド申請拒否 フレンド申請をを拒否
フレンド申請通報 フレンド申請者を通報

プロフィール機能

Pineには掲示板用"匿名"プロフィールとマッチングや個人チャットする用のプロフィールの2つがあります。

機能 内容
"匿名"プロフィールアイコン変更 好きなアバターを選択
"匿名"プロフィール変更 名前変更
プロフィール写真変更 写真をアップロードする
自己紹介編集 自己紹介編集
興味タグ編集 興味タグ編集

その他

機能 内容
リンク 利用規約/プライバシーポリシー/twitter/instagram

使用技術/ツール

Pineの構成図

フロントエンド
Flutter/ Dart
バックエンド
Node.js/ FirebaseAuth/ Firestore/ Cloud Functions/ Cloud Storage/
ソースコード管理
GitHub
コミュニケーションツール
slack(エンジニアチーム以外とのやりとり)
discord(エンジニアチーム内での通話)

状態管理(GetX)

状態管理はGetXを採用しました。
GetXの良いところは

  • Providerなどの様に複雑なコードを書かなくて良い点、
  • riverpodとhooksの様に組み合わせる必要がなく、一つで全てを簡潔させられる多用な機能があり。シンプルな故に初心者でも習得が容易いです。

開発手法(モブプログラミング)

モブプログラミングとは

ソフトウェア開発のやり方の1つで、チーム全体で1つの仕事のみを一緒行い、キーボードも1つで、画面やコンピューターも共有してチーム全体で1つの作業のみを行います。

https://techblog.yahoo.co.jp/entry/2020052730002064/
今回は完全オンラインでの開発だったので、このモブプログラミングの開発手法を取り入れました。具体的は、基本的にdiscordで通話をしながら開発をし、詰まったら画面共有をして教え合いながら、開発を進めました。この手法での感じたメリットは、得意不得意をすぐにカバーし合える為、お互いに成長する事もでき、開発もスムーズに進める事ができました。

ソースコード管理(GitHub)

ソースコードの管理はGitHubを用い、main、develop, featureのシンプルなブランチ構成にしました。通常はissueを立ててタスク管理を行うと思いますがDiscordのチャンネルにタスクを書き出していって消化していきました。毎日、常に画面共有をしながらコードを書き、レビューしていくので自分プルリクエストを出して自分でマージを行なっていました。コードを書くのとレビューがいっぺんにできるのでプルリクエスト後にいちいちレビューする必要がないのがメリットかなと感じます。

Appleからのリジェクトについて

Pineがリジェクトされた回数は1回で、リジェクト理由は以下の通りです。

  • 利用規約を同意させていない。
  • ユーザーが不適切なコンテンツをブロックする仕組みを作れていない。
  • 写真にアクセスするためにユーザーの同意を求めていますが、目的文字列で写真の使用を十分に説明していない。
  • iphonのスクリーンショットの画像が機能の大半を占める必要がある。(以下の画像の様に)
  • ipadのスクリーンショットはipadのスクリーンショットである必要がある。

上記の5つがリジェクト理由でした。

SNSアプリを作る上でしっかりとブロック/通報機能を作る必要がありました。
同意画面を最初に作るなど他のアプリを見れば当たり前にある機能が必須の項目なんだと痛感しました。

技術記事はこちら

https://zenn.dev/majo/articles/35c4948900d23e
https://zenn.dev/majo/articles/703d11539e2176
https://zenn.dev/majo/articles/9e539f93840cb4
https://zenn.dev/kai_nakao/articles/7335cf7daacbe0
https://zenn.dev/ymktmk/articles/cb136689b50488

参考文献

https://techlife.cookpad.com/entry/2021/04/21/110000
https://firebase.flutter.dev/docs/firestore/usage/

開発を振り返って

えんでばー

今回のプロジェクトではエンジニアのリーダーという立場をさせて頂き、人をまとめて同じ目標に向かわせるという大切さを深く知りました。みんなのできる事や、得意な事、やってみたい事を理解し、タスクを振る事で仲間のモチベーションを高める。そんな事を考え行動した2ヶ月でした。
うまくタスク振りが出来ず自分で背負ってしまい、仲間に感情をぶつける事もあり、仲間に迷惑やストレスを与えてしまい本当に申し訳なく感じています。

https://twitter.com/endeverva

Tomoki Yamaoka

反省としては必要な機能があまり決まっていない状態からの開発だったので終盤でfirestoreの設計が曖昧になってしまった。最初から必要な機能をしっかり考えてそれに合わせた設計を行うべきだった。自分はUIが不得意なせいで任せっきりになってしまったことで他のメンバーに負担をかけてしまったことです。しかし、Flutter歴1ヶ月での開発スタートで皆んなと知見を共有できたのでいい経験になりました。自分一人では成し遂げることのできないことを協力しリリースまで持っていくことができて良かったです。

https://twitter.com/ymktmk

中尾 開

反省としては、仕様が堅まる前から作り出し始めてしまってい他ので実装した後に仕様変更で実装し直すことがあったので、初めから実装を堅めた方が良かったと思います。
僕は文化祭のような感覚で同い年と一緒に同じ作品(サービス)を作成するのがとにかく楽しかったです。もちろん、いろんな大変なことがありましたが、とにかく楽しかったです。
開発は、discordで常時接続だったのでエラー発生時のコミュニケーションも円滑にできていてそれは良かったと思います。

https://twitter.com/kai_nakao

Discussion

ログインするとコメントできます