Flutterアプリケーション開発概論

【完成イメージ】ログイン・トーク一覧・タスク画面・メンバー管理の全体像をつかむ

3LINE風チームタスク管理アプリを作りながら、ログイン・データベース・権限管理を学ぶ
FlutteriOSAndroidMacOSWindows基礎から学ぶ開発アプリ開発

このページで学ぶこと

このページでは、これから作るLINE風チームタスク管理アプリの完成イメージを確認します。

いきなりコードを書く前に、まずは「どんな画面があり、どんな順番で使うのか」を見ておきます。

アプリ開発では、最初に完成形のイメージを持つことがとても大切です。

完成形が見えていると、コードを読んだときに、

このコードはログイン画面のためにあるんだ
この部分はトーク一覧を表示しているんだ
この処理はFirestoreに保存しているんだ

と理解しやすくなります。


この教材の進め方をもう一度確認する

この章では、次の流れで進めます。

完成コードを使う
↓
一部分だけ変更する
↓
保存する・実行する
↓
画面の変化を見る
↓
次のステップへ進む

今回のページでは、まず「完成コードを使ったときに、最終的にどんな画面になるのか」を確認します。

細かいコードの意味は、あとから順番に見ていきます。

まずは、アプリの全体像をつかみましょう。


完成するアプリの全体像

今回作るアプリは、LINEのような見た目を参考にした、チーム型タスク管理アプリです。

画面の流れは、次のようになります。

アプリ起動
↓
ログイン画面
↓
新規登録またはログイン
↓
トーク一覧画面
↓
チームを選択
↓
タスク一覧画面
↓
タスク作成・編集・削除
↓
メンバー管理画面
↓
メンバー追加・権限変更

見た目はシンプルですが、中身はかなり本格的です。

ログインしたユーザーごとにデータを分け、チームごとにタスクを保存し、さらに権限によって操作できる内容を変えます。


画面1:ログイン画面

最初に表示されるのは、ログイン画面です。

この画面では、メールアドレスとパスワードを入力してログインします。

WorkBoard

チームの会話のように、タスクを共有する

メールアドレス
パスワード

[ログイン]

新規登録はこちら

この画面で学ぶことは、Firebase Authenticationです。

Firebase Authenticationは、ユーザー登録やログインを担当するFirebaseの機能です。

このアプリでは、メールアドレスとパスワードを使ってログインします。

項目役割
メールアドレスユーザーを識別する
パスワード本人確認に使う
ログインボタンFirebase Authenticationにログインを依頼する
新規登録はこちらアカウント作成画面へ移動する

ログインに成功すると、トーク一覧画面へ進みます。


画面2:新規登録画面

まだアカウントがない場合は、新規登録画面を使います。

この画面では、名前、所属、メールアドレス、パスワードを入力します。

新規登録

プロフィール作成

名前
所属
メールアドレス
パスワード

[新規登録]

新規登録では、2つの処理を行います。

Firebase Authenticationにユーザーを作成する
↓
Cloud Firestoreにプロフィールを保存する

つまり、ログイン用のアカウントはFirebase Authenticationに作り、名前や所属などのプロフィール情報はFirestoreに保存します。

保存先保存する内容
Firebase Authenticationメールアドレス、パスワード、uid
Cloud Firestore名前、所属、メールアドレス、作成日時

ここで大切なのが uid です。

uid はFirebase Authenticationがユーザーごとに発行するIDです。

この uid を使って、Firestoreの users/{uid} にプロフィールを保存します。


画面3:トーク一覧画面

ログインすると、トーク一覧画面が表示されます。

LINEのトーク一覧のように、自分が参加しているチームが並びます。

トーク

[+] [ログアウト]

● 開発チーム
  タスクとメンバーを確認できます        今

● 学校イベント準備チーム
  タスクとメンバーを確認できます        今

● 営業チーム
  タスクとメンバーを確認できます        今

この画面では、自分が参加しているチームだけを表示します。

Firestoreでは、チーム情報を teams コレクションに保存します。

teams/{teamId}

そして、自分が参加しているチームを見つけるために、チームドキュメントには memberIds という配列を持たせます。

memberIds: [ログインユーザーのuid]

アプリ側では、次のような考え方でチームを取得します。

ログイン中のuidを取得する
↓
memberIdsに自分のuidが含まれるチームだけ取得する
↓
トーク一覧として表示する

この仕組みによって、ユーザーごとに表示されるチームが変わります。


画面4:チーム作成UI

トーク一覧画面の右下にあるボタンを押すと、チーム作成UIが表示されます。

普通のダイアログではなく、下から出るボトムシートにしています。

新しいトークを作成

チーム名を入力して、タスク共有を始めます

トーク名
例:開発チーム

[作成する]
キャンセル

このUIでは、チーム名を入力して「作成する」を押します。

すると、Firestoreに次のデータを作ります。

teams/{teamId}
teams/{teamId}/members/{uid}

チームを作った人は、自動的に owner になります。

チームを作成する
↓
teamsにチーム情報を保存する
↓
membersに自分をownerとして保存する

ここで、「データを1つ保存して終わり」ではなく、チーム情報とメンバー情報を同時に作るのがポイントです。


画面5:タスク一覧画面

トーク一覧からチームを選ぶと、タスク一覧画面に移動します。

この画面は、LINEのトーク画面のような雰囲気にしています。

開発チーム
あなたの権限: owner

        未対応 2

●  提案資料を作成する
   6月打ち合わせ用の資料を作る
   未対応  重要  sample@example.com

        進行中 1

●  Flutter画面を作成する
   ログイン後のタスク一覧UIを作る
   進行中  通常  sample@example.com

        完了 0

タスクは、次の3つのステータスで分けて表示します。

ステータス表示名
todo未対応
doing進行中
done完了

Firestoreでは、タスクをチームの中に保存します。

teams/{teamId}/tasks/{taskId}

チームごとにタスクが分かれているので、開発チームのタスクと営業チームのタスクが混ざりません。


画面6:タスク作成・編集画面

タスク一覧画面の右下ボタンを押すと、タスクを作成できます。

タスクには、次の情報を保存します。

タイトル
説明
担当者メールアドレス
ステータス
優先度
作成者
作成日時
更新日時

画面イメージは次のようになります。

タスク作成

タイトル
説明
担当者メールアドレス
ステータス
優先度

[保存]
キャンセル

既存のタスクをタップすると、同じ画面で編集できます。

つまり、同じUIを「作成」と「編集」の両方に使います。

新しいタスクなら作成
既存タスクなら編集

この考え方は、実務アプリでもよく使います。


画面7:メンバー管理画面

タスク画面の右上にあるメンバーアイコンを押すと、メンバー管理画面に移動します。

メンバー管理

● 山田太郎
  yamada@example.com              owner

● 佐藤花子
  sato@example.com                admin

● 鈴木一郎
  suzuki@example.com              member

● 高橋次郎
  takahashi@example.com           viewer

この画面では、チームに参加しているメンバーと、その権限を確認できます。

権限は次の4種類です。

権限できること
ownerすべての操作、権限変更、チーム削除
adminメンバー追加、タスク編集、タスク削除
memberタスク作成、タスク編集
viewer閲覧のみ

権限によって、画面に表示するボタンや実行できる操作が変わります。


画面8:メンバー追加UI

メンバー管理画面のボタンを押すと、メンバー追加UIが表示されます。

これも、LINE風のボトムシートUIにしています。

メンバーを追加

登録済みユーザーのメールアドレスを入力します

メールアドレス
example@example.com

権限
[admin] [member] [viewer]

memberはタスクの作成・編集ができます。
削除や権限変更はできません。

[追加する]
キャンセル

この画面では、登録済みユーザーのメールアドレスを入力します。

アプリはFirestoreの users から、そのメールアドレスのユーザーを探します。

見つかったら、チームの members に追加します。

メールアドレスを入力
↓
usersから該当ユーザーを検索
↓
uidを取得
↓
teams/{teamId}/members/{uid} に追加
↓
teams/{teamId}.memberIds にuidを追加

この処理によって、追加されたユーザーのトーク一覧にも、そのチームが表示されるようになります。


画面9:スワイプ削除

トーク一覧では、チームを左にスワイプすると削除できます。

チームを左にスワイプ
↓
赤い削除エリアが表示される
↓
削除確認
↓
削除

この機能には、Flutterの Dismissible を使います。

LINEなどのスマホアプリでは、リスト項目をスワイプして操作するUIがよく使われます。

今回の教材では、そうしたスマホアプリらしい操作も取り入れます。


Firebaseで見る完成イメージ

アプリの画面だけでなく、Firebase Console側にもデータが保存されます。

Firestoreでは、最終的に次のような構造になります。

users
  └ uid

teams
  └ teamId
      ├ members
      │   └ uid
      └ tasks
          └ taskId

もう少し具体的に見ると、次のようなイメージです。

users/{uid}
  displayName
  email
  department
  createdAt
  updatedAt

teams/{teamId}
  name
  ownerId
  memberIds
  createdAt
  updatedAt

teams/{teamId}/members/{uid}
  uid
  email
  displayName
  role
  joinedAt

teams/{teamId}/tasks/{taskId}
  title
  description
  status
  priority
  assigneeEmail
  assigneeId
  createdBy
  createdAt
  updatedAt

画面で入力した内容がFirestoreに保存され、Firestoreに保存された内容が画面に表示されます。

このつながりを理解することが、Flutter × Firebase学習の大きな目的です。


このアプリで身につく考え方

この完成イメージを通して、次の考え方を身につけます。

考え方内容
認証誰がログインしているのかを判断する
データ保存入力内容をFirestoreに保存する
リアルタイム表示Firestoreの変更を画面に反映する
チーム管理ユーザーごとに参加チームを分ける
権限管理できる操作をroleによって変える
UI設計LINE風に見えるように画面を整える
実務設計画面・データ・権限をセットで考える

ただの画面作成ではなく、誰が、どのデータを、どこまで操作できるのかを考えるのが重要です。


このページで覚えてほしいこと

このページでは、細かいコードを覚える必要はありません。

まずは、次の流れだけつかめればOKです。

ログインする
↓
トーク一覧を見る
↓
チームを作る
↓
チームを開く
↓
タスクを作る
↓
メンバーを追加する
↓
権限によってできることが変わる

この流れが分かっていると、次からコードを読んだときに迷いにくくなります。

コードは長く見えますが、画面ごとに分けて考えれば大丈夫です。


ミニ確認問題

Q1. ログイン画面で使うFirebaseの機能は何ですか?

回答

Firebase Authenticationです。

メールアドレスとパスワードを使って、ユーザー登録やログインを行います。


Q2. チーム情報はFirestoreのどこに保存しますか?

回答

teams/{teamId} に保存します。

また、チームのメンバー情報は teams/{teamId}/members/{uid} に保存します。


Q3. タスク情報はFirestoreのどこに保存しますか?

回答

teams/{teamId}/tasks/{taskId} に保存します。

チームごとにタスクを分けて保存することで、別チームのタスクと混ざらないようにします。


Q4. viewer権限の人は何ができますか?

回答

viewerは閲覧のみできます。

タスクの作成、編集、削除はできません。


このページのまとめ

このページでは、完成するLINE風チームタスク管理アプリの全体像を確認しました。

大切なポイントは次の通りです。

  • 最初に完成イメージを持つと、コードの理解がしやすくなる。
  • アプリは、ログイン画面、新規登録画面、トーク一覧画面、タスク一覧画面、メンバー管理画面で構成される。
  • ログインにはFirebase Authenticationを使う。
  • データ保存にはCloud Firestoreを使う。
  • チーム情報は teams/{teamId} に保存する。
  • メンバー情報は teams/{teamId}/members/{uid} に保存する。
  • タスク情報は teams/{teamId}/tasks/{taskId} に保存する。
  • トーク一覧には、自分が参加しているチームだけを表示する。
  • タスクは、未対応、進行中、完了に分けて表示する。
  • メンバーには、owner、admin、member、viewerの権限を設定する。
  • このアプリでは、画面、データ、権限をセットで考えることが大切。

次のページでやること

次のページでは、アプリ全体の設計を整理します。

単なるTodoアプリではなく、なぜチーム型アプリとして作るのか。

そして、usersteamsmemberstasks がどのようにつながるのかを確認していきます。

教材トップへ戻る