Slide 1

Slide 1 text

夢を⾒つける ⾃⼰分析アプリ My dog became 6 years today Mariko 1 Chapter One

Slide 2

Slide 2 text

2020 富山県立大学卒業 電子情報工学科 2020 (株)ソラマス・ソフトウェア・サービス  システムエンジニア ● 保険システムの改修・運用をしてました 2022 Qburst Technologies Japan プロジェクトマネージャー勤務 ●日本支社でバイリンガルPMとして インドオフショア メンバーの管理をしていました 2024 Hamigua株式会社 代表取締役 ● 業務委託でソフトバンクロボティクス株式会社にて ITプ ロジェクトマネージャーとして案件を受けています 現在の取り組み : YouTube依存症に悩む人を対象に、視聴時間を可視化し、自己管 理能力や長期的な視点を育むことで、意識的な行動選択を支援す るプロジェクト「Chapter One」を立ち上げ、実行中 2 Tomoyo Hirai

Slide 3

Slide 3 text

タイムライン 3 6/17 プランコンサルティング 開始 アプリ開発始める プログラミングスクール に通う LTやアクセラレーター に参加する 2/14 • クラウドワークスでチューターを探す (7回くらい受けて3萬円) • ChatGPTの方が正確なアドバイスをくれる事に気付く • Android StudioでFirebaseでGoogleログインを実装する • (Sha-1 Fingerprint追加) • UsageStatsManagerを使ってアプリのログを取得してみる • アプリ面の開発というよりかは、精神面やアクセラレータープログラム 時間の使い方やブレストとして利用していました • 宅建の勉強の向き合い方が一番勉強になりました • TechMentor隔週プランに1カ月だけ通う(月39,800円) • プログラミングのスキルはめっちゃついた • 次回は10万円の出費になりそうになりそう:   入会金5万円、隔週メンタリングプラン 月39,800 (税込43,780) • アウトプットしたい意欲が出てくる • システムエンジニアに助けてほしい(他力本願) • 一人でプログラミングするのが嫌になってくる 9/2 12/17

Slide 4

Slide 4 text

私のプログラミング人生遍歴 学生の頃 ● Javaで無人uberを走らせたときのシミュレーションアプリを3人一組で作らされた ● Unityでシューティングゲームをサイトを見て作ってみる 基本的に作りたいものベースで、言語はそれに合ったのを覚えるベースでした 社会人 ● ノーコードBubbleと出会い、ウェブアプリを作りAndroidアプリをここで 初めてリリースしてみる ● React.js Node.jsを研修で触らされる まとめ なんだかんだ、脆弱エンジニア経験の中、Javaが一番長くやっていました プログラミングって一人ぼっちでの作業が強く外交的な私には向いていないと逃げて PMになる

Slide 5

Slide 5 text

ソースコード 5 4つのクラスでできている MainActivity (View: ユーザーインターフェースを提供 ) MainViewModel (ViewModel: 状態の管理・ビジネスロジック ) LogEventWorker (Worker: バックグラウンド処理 ) MyApp (Compose UI: 実際の画面描画 )

Slide 6

Slide 6 text

MVVM アーキテクチャ MVVM の流れ 1. ユーザー操作( View): ○ ユーザーがボタンをクリックやスイッチを操作すると、イベントが発生します。 2. イベント通知( View → ViewModel): ○ View は、操作の内容を ViewModel に伝えます。 ○ 例: 「サインインボタンを押した」というイベントを ViewModel に通知。 3. ビジネスロジック実行( ViewModel → Model): ○ ViewModel は、操作内容に応じたビジネスロジックを Model に実行させます。 ○ 例: Google サインインのリクエストを Model に依頼。 4. データ取得・状態更新( Model → ViewModel): ○ Model は、処理結果を ViewModel に返します。 ○ ViewModel は、この結果を UI 表示に適した形式に変換して保持します。 5. UI 更新(ViewModel → View): ○ ViewModel は、状態の変化を通知します。 ○ View は、その変化に応じて画面を更新します。 6

Slide 7

Slide 7 text

アプリ構造 7

Slide 8

Slide 8 text

MainActivity(View /UI + ユーザー操作 ) このコードは、Android アプリケーションの主要な画面を定義する MainActivity の内容です。 1. Google サインイン/サインアウト管理 ○ Google アカウントを使用したサインイン /サインアウトの処理を行います。 ○ サインイン情報を取得し、アプリ内で使用できる状態に保持します。 2. トラッキング管理 ○ ユーザーの YouTube 使用状況を Google カレンダーに記録するタスクをスケジュールまたは停止します。 ○ トラッキングの有効/無効を切り替えるインターフェースを提供します。 3. アプリのライフサイクル管理 ○ アクティビティのライフサイクルに応じて、必要な初期化処理やリソースの解放を行います。 ● 責務: ○ アプリのライフサイクルを管理。 ○ UI を初期化して、MyApp.kt に必要なデータやイベントハンドラを渡す。 ○ ViewModel を監視し、状態が変わった際に UI を再描画。 ● 主な処理: ○ Google サインインの初期化 (setupGoogleSignIn)。 ○ サインイン/サインアウト操作 (signIn, signOut)。 ○ トラッキング状態の初期化と管理。 8

Slide 9

Slide 9 text

LogEventWorker(Model / データ処理 + API) Android の WorkManager を利用して、バックグラウンドで YouTube アプリの使用情報を取得し、 その使用時間を Google カレンダーに記録する処理を行います。 このコードの目的 1. YouTube 使用データの収集: ○ 過去15分間の YouTube 使用セッションを収集します。 2. Google カレンダーへの記録: ○ 収集した使用データを Google カレンダーに挿入し、ユーザーが確認できるようにします。 3. エラー処理と再試行: ○ カレンダーへの挿入に失敗した場合は、再試行をスケジュールします。 WorkManager を使って15分ごとに LogEventWorker を実行するように設定されています ※アプリが閉じている場合やデバイスが再起動した後でも、指定されたタスクを確実に実行 ● 責務: ○ バックグラウンドで YouTube 使用ログを記録。 ○ 使用状況データを取得して、 Google カレンダーに送信。 ● 主な処理: ○ UsageStatsManager を使って YouTube 使用セッションを取得。 ○ Google カレンダー API を使用して、イベントとして記録。 ○ 作業失敗時には再試行。 9

Slide 10

Slide 10 text

MyApp.kt(View/UI + ユーザー操作 ) MyApp.kt は、Jetpack Compose を使ってアプリの UI を定義する Kotlin ファイルです。 このファイルでは、 MyApp という関数型のコンポーネントが定義されています。 MyApp 関数は、アプリの特定の画面やその一部を構成する UI を記述したものです。 ● 責務: ○ UI を定義し、ユーザーとのインターフェースを提供。 ○ ViewModel から渡されたデータを表示し、ユーザー操作を ViewModel に通知。 ● 主な構成: ○ アカウント情報の表示(名前、メールアドレス)。 ○ ボタンやスイッチによる操作(サインイン/サインアウト、トラッキング切り替え)。 10

Slide 11

Slide 11 text

MainViewModel(ViewModel/状態管理 + ロジッ ク) このコードが提供する機能 ● 状態管理: ○ サインイン情報やトラッキング設定を保持し、 Compose UI と連動します。 ● 永続性: ○ SharedPreferences (トグル)を使って設定やアカウント情報を保存し、アプリの再起動後も状態を維持。 ● バックグラウンド処理 : ○ WorkManager を使って、YouTube の使用ログを Google カレンダーに記録するタスクを効率的にスケジュール 11

Slide 12

Slide 12 text

プログラミングスクールに通う 【平井 知世さん】技術サポート・個別カリキュラム 疑問点 ● Googleカレンダーでリアルタイムでシンクするか(ユーザースタンプ) →できないが、15分毎に共有するライブラリを利用する ● PlayStoreで出せるかどうか(アプリ規約確認) →UIをしっかりしないと、審査通らなさそう 出来るようになったこと ● youtubeの時刻タイムスタンプは取得/入力できるようになった。 ● Toggle Sharedpreference設定(toggleの設定保持) 問題点 ● 二つ以上のyoutubeログがあった際に、一番最新のしか現状挿入できていない ● 根本的なところは出来ているが、細々としたバグが残っている

Slide 13

Slide 13 text

報告フォーマット バグ報告 【行った操作】 【想定する挙動と実際の挙動の差異】 【そのとき出力されたデバッグログ】 進捗報告 日時:8月30日 作業時間:3.5h 作業時間帯:17:30 - 21:30(休憩0.5h) 作業内容: ・[0%→100%] Toggle Sharedpreference設定(toggleの設定保持)(0.2h) ・[0%→20%] WorkManager実装15分ごとに稼働できていっぽいが、ログおかしい(1.3h)   spreadsheetのURLなど

Slide 14

Slide 14 text

振り返り 反省点 ● プログラミング出来ると自分を過信しすぎた且つケチな部分が出てしまった ● ChatGPTの言われるままにコーディングして、 途中分からないままコードも理解しようとしないままやりすぎてしまっていた ● 単純に舐めていた -> 基本物事舐めプ人間なので反省 ● 長期目標、プランを作らずにダラダラ開発してしまっていた 改善策 ● 100日行動目標を作る(スケジュールがざっくりだと脳が動かない) ● アプリ開発は集中して行う(何してったけを振り返る時間のほうが長い) まとめ メリハリの大事さに気づく Firebaseのユーザー認証など実際聞いていただけで実際に触る機会がなかったが知ることが出来た でもそれよりも辛いと思う時間の方が多かったな、、 kotlinがマイナー言語で相談相手/開発者が見当たらないので、メジャーな言語で開発した方が楽しい

Slide 15

Slide 15 text

今後の展望 もうKotlinプログラミングはコリゴリ 自分では無理!(心の声) アプリは何としてでも完成させたいので恐らく外注するでしょう もしくは、三日間Kotlinアプリ開発合宿的なのがあれば、死ぬほど嬉しい 付きっ切りで、合間合間でやる アプリ外注/Kotlin詳しい方お助けください! また、アウトプットの機会を増やしていきたい 成仏させてあげたい