推しアイデア
プログラミング初学者は1人での開発につまづきがちです。ASKでは、通常のチャットアプリではできない効率でメンターや友達にプログラムの質問ができます。
プログラミング初学者は1人での開発につまづきがちです。ASKでは、通常のチャットアプリではできない効率でメンターや友達にプログラムの質問ができます。
私は中高生にプログラミングを教えていますが、家で開発してる最中に起きたエラーを通常のチャットアプリでの会話で解決することは難しいため。
SwiftUI、Firestoreを用いてmacOS・iOS共用が可能なアプリとして開発しています。
このアプリ「ASK」はプログラミング初学者が、メンターや友達にプログラミングの質問を効率的にすることができるチャットアプリです。
通常のチャットアプリでは、プログラムを送っても可読性が著しく低いという問題点がありました。 また、初学者にとってはどのコードがエラーを起こしているのかを見つけるのも難しいことが多く、関係のないコードが送信されることも多々ありました。
ASKでは、PC上にあるプログラムファイルを取得し、そのまま送信することが可能です。
送信したユーザーにはコードが小さく表示され、受信したユーザーにはコードが大きく表示されるため、可読性が上がっています。
また、コードのどこを修正すればいいかを明確にするため、コードの修正前と修正後を同時に送信できる機能を実装しました。
メッセージを右クリックして「返信」ボタンを押すと、自動で修正前にコードが入力されるようになっています。
ユーザーのログイン/サインアップ機能も実装されています。
どのユーザーを質問に追加するかを簡単に選択できます。
ASKはSwiftUIとFirestoreを用いて開発されています。 SwiftUIを用いたことでマルチプラットフォームとして実装されており、iOS版も展開も可能です。
MVVMアーキテクチャを採用し、今後の開発でも機能を追加しやすくなっています。
Firebaseとの連携ではasync/awaitを用いた非同期処理を実装しています。
FirestoreAPI
class FirestoreAPI { static private let db = Firestore.firestore() static func fetchUsers(for query: String) async throws -> [User] { let snapshot = try await db.collection("users") .whereField("name", isGreaterThanOrEqualTo: query) .whereField("name", isLessThanOrEqualTo: query + "\u{f8ff}") .getDocuments() var users = try snapshot.documents.compactMap { try $0.data(as: User.self) } for index in users.indices { users[index].imageData = await FirebaseStorageAPI.fetchImageData(from: users[index].imageName) } return users } ...
ログイン状態を端末に保存する機能 LoginManager
class LoginManager: ObservableObject { static var shared = LoginManager() private static let userEmailKey = "savedUserEmail" private static let userPasswordKey = "savedUserPassword" private static let userUIDKey = "savedUserUID" static func saveUser(uid: String, email: String, password: String) { UserDefaults.standard.set(uid, forKey: userUIDKey) UserDefaults.standard.set(email, forKey: userEmailKey) UserDefaults.standard.set(password, forKey: userPasswordKey) } static func loadUserUID() -> String? { return UserDefaults.standard.string(forKey: userUIDKey) } ...
前述の通り、ASKはプログラミング初学者がどこにいてもスムーズに学習を進められる最良の体験を届けるために作られています。ネイティブのアプリとして実装しているため、前述のファイル取得等の機能はもちろん、通知機能やgitとの連携機能を実装していくことで、質問への返答にかかる時間を最小限にし、無理な変更をさせないよう誘導することができます。
私は現在中高生にプログラミングを教えるアルバイトをしているので、実際にその活動の中でASKを用いようと考えています。 さまざまなメディアや既存のチャットアプリのグループの引き継ぎなどが実装できれば、同じアルバイトをする全員がこのアプリを使うことができます。 Web版を開発すれば、mac/windows関係なくこのUIを用いることができるようになり、プログラミング学習サービスにUIを提供することで規模をより拡大していけると考えています。