目次
はじめに
こんにちは。最近VSCodeからZedに乗り換えたMotchiyです。
今回は、自作したタスク管理アプリを紹介していきます。
開発を始めた理由
はじめはGoogle Tasksを使っていましたが、インターネットの遅い地域で開こうとすると、かなりの時間を待たされたり、エラーになったりして、それがストレスでした。
次に、ローカルベースのタスク管理アプリを使いたいと思って見つけたのがObsidianです。起動が早く、インターネットがなくても起動できるので、かなり良かったです。
しかし、それでも問題がありました。
1つ目は、PCとスマホの同期がスムーズでないこと。
本来ならばObsidian Syncというのを使って同期することができるのですが、それは有料なので却下。
代わりにObsidian GitやFitといった無料のコミュニティプラグインを使うことにしましたが、衝突が起きたり変更がアップロードされていなかったりと、不安定なところがありました。
2つ目は、カレンダーの使い勝手が悪かったこと。
Googleカレンダーのように日付をマウスでまとめて選択できるところは気に入っていたので、Obsidianにあるカレンダープラグインはどれも微妙でした。
他にもいろいろタスク管理アプリはあるようでしたが、有料だったりオフラインでの起動が微妙だったりして、理想に合うものを見つけられませんでした。
そこで、スキルアップも兼ねて自分の理想のタスク管理アプリを作ることにしました。
開発環境
| 種類 | 名前 | バージョン |
|---|---|---|
| OS | Windows 11 | 25H2 |
| Android | 17 | |
| Ubuntu | 24.04 | |
| 言語 | Dart | 3.13.4 |
| フレームワーク | Flutter | 3.47.5 |
| シェル | PowerShell | 7.6.6 |
※開発を始めた時点でのバージョンです。
要件定義
- WindowsとAndroidに対応
- モダンなデザイン
- PCとスマホの同期がスムーズ
- ドラッグで期間を追加し、カレンダーに予定を追加
- Googleカレンダー風のカレンダーとToDoリスト表示
- インターネット速度に左右されない
- ToDoリストとカレンダーを常に同期
設計
複数のOSに対応する必要があり、モダンなデザインを簡単に作りたかったので、フレームワークはFlutterを使用します。
PCとスマホの同期を行うため、Flutterとも相性がいいGoogleのFirebaseを用いて、アカウントごとにタスクを保存する形式にします。
実装
コーディング
ここらへんはAIにやってもらいました。
AIで生成したコードはバグだらけのイメージが有ったんですけど、今回はすんなりと動いてくれました。FlutterとAIは相性がいいのかもしれません。
コードはGitHubで公開しています。
バックエンド
- データ保存とOAuthクライアント(iOS, Android, WEB向け)
Firebase コンソールにプロジェクトを作成し、公式ドキュメントの指示通りにFlutterへ導入しました。
- OAuthクライアント(Windows向け)
Google Cloud コンソールにてクライアントIDを発行し、config/google_oauth.jsonに保存しました。
配布
必要なのはWindows版とAndroid版だけですが、一応できる限りのプラットフォームに対応したいので、Linux版とWEB版も配布できるようにします。(iOSとmacOSのビルドはmacOSでないとできないらしい)
Linux版ビルドの準備
Windows環境でもLinux版をビルドできますが、少し準備が必要です。
① WSLをインストール
今回は使い慣れているUbuntuを使用します。
wsl --install -d Ubuntu-24.04
ここからはWSL側の操作です。
② 必要なパッケージをインストール
sudo apt install -y \
git curl unzip xz-utils zip libglu1-mesa \
clang cmake ninja-build pkg-config \
libgtk-3-dev libstdc++-12-dev
echo 'export PATH="$HOME/development/flutter/bin:$PATH"' >> "$HOME/.bashrc"
source "$HOME/.bashrc"
③ Linuxデスクトップを有効化
flutter config --enable-linux-desktop
④ Linux版だけビルド
flutter pub get
flutter build linux --release \
--dart-define-from-file=config/google_oauth.json
pubspec.yamlを更新するたびに実行する必要があります。
ここからはWindows側の操作に戻ります
ビルド
ビルド用のスクリプトを実行します。
.\tool\build_all.ps1 -Version 1.1.2
リリース
GitHubのリリース機能を使用します。
タイトルとタグはバージョン(v1.1.2)にし、簡単な説明をつけて投稿します。
今後の展望
- デザイン性の向上
- PC版でのバックグラウンド起動
- Microsoft Storeでの配布
- パッケージ管理システムでの配布
- 時刻でのタスク管理
まとめ
まずは、ここまで読んでくださりありがとうございます。
今回の開発を振り返って一番驚くのは、AIにすべてのコードを書かせたことです。
言語やフレームワーク、求められるレベルによっては、コーディングをすべてAIに任せられるレベルなのかなと思いました。
これからも自分の理想のタスク管理アプリを目指して、開発を進めていきます。