ポモドーロタイマーアプリを Rork で作ってみよう
集中力を高めるテクニックとして世界中で人気のポモドーロ・テクニック。25分間集中して5分休憩するというシンプルなサイクルを繰り返すだけで、驚くほど生産性が上がります。
ここではRork を使ってポモドーロタイマーアプリをゼロから作る方法をステップバイステップで解説します。プログラミング経験がなくても大丈夫です。Rork の AI がコードを自動生成してくれるので、アプリのアイデアと完成イメージを伝えるだけで、実用的なタイマーアプリが完成します。
このチュートリアルで学べること:
- Rork でのプロジェクト作成と基本操作
- カウントダウンタイマーの実装方法
- セッション(作業・休憩)の自動切替ロジック
- 円形プログレスバーによる視覚的フィードバック
- 効果音・バイブレーションによる通知
前提知識と環境準備
必要なもの
- Rork アカウント(無料プランでも作成可能)
- ブラウザ(Chrome / Safari 推奨)
- 動作確認用のスマートフォン(iOS / Android どちらでもOK)
Rork の基本をおさらい
Rork は AI を搭載したアプリ開発プラットフォームです。自然言語でアプリの機能を伝えるだけで、React Native ベースのクロスプラットフォームアプリを自動生成してくれます。まだ Rork を使ったことがない方は、先に入門ガイドを読んでおくとスムーズです。
Step 1: プロジェクトを作成する
Rork のダッシュボードで「New Project」をクリックし、以下のプロンプトを入力します:
ポモドーロタイマーアプリを作成してください。
機能要件:
- 25分の作業タイマーと5分の休憩タイマー
- 長い休憩(15分)を4セッションごとに挿入
- 開始・一時停止・リセットボタン
- 円形プログレスバーで残り時間を表示
- セッション完了時にバイブレーション通知
- 完了したセッション数のカウント表示
- ダークモード対応のシンプルなUIRork の AI がこのプロンプトを解釈し、アプリの画面構成とコードを自動生成します。生成されたプレビューを確認して、ベースとなるアプリが正しく動作しているか確認しましょう。
Step 2: タイマーのコアロジックを理解する
Rork が生成するタイマーのコアロジックは、React Native の useEffect と setInterval を使ったカウントダウン処理です。ここでは生成されるコードの仕組みを理解しておきましょう。
// タイマーのコアロジック(Rork が自動生成)
import { useState, useEffect, useRef } from 'react';
const useTimer = (initialMinutes: number) => {
const [seconds, setSeconds] = useState(initialMinutes * 60);
const [isRunning, setIsRunning] = useState(false);
const intervalRef = useRef<NodeJS.Timeout | null>(null);
useEffect(() => {
if (isRunning && seconds > 0) {
intervalRef.current = setInterval(() => {
setSeconds((prev) => prev - 1);
}, 1000);
}
return () => {
if (intervalRef.current) clearInterval(intervalRef.current);
};
}, [isRunning, seconds]);
// 残り時間を mm:ss 形式に変換
const formatTime = () => {
const mins = Math.floor(seconds / 60);
const secs = seconds % 60;
return `${mins.toString().padStart(2, '0')}:${secs.toString().padStart(2, '0')}`;
};
return { seconds, isRunning, setIsRunning, setSeconds, formatTime };
};
// 期待する出力例:
// formatTime() → "25:00"(開始時)
// formatTime() → "24:59"(1秒後)
// formatTime() → "00:00"(終了時)このカスタムフックが、タイマーの状態管理を担当します。isRunning が true の間、1秒ごとに seconds をデクリメントしていく仕組みです。
Step 3: セッション管理を追加する
ポモドーロ・テクニックでは、作業セッションと休憩セッションを交互に繰り返します。Rork のチャットで以下のように指示を追加しましょう:
セッション管理を改善してください。
- 作業セッション(25分)完了後、自動的に休憩セッション(5分)に切り替え
- 4回の作業セッション完了後は、長い休憩(15分)に切り替え
- 現在のセッション種別(作業/短い休憩/長い休憩)を画面上部に表示
- セッション完了数を「🍅 × 3」のようなトマトアイコンで表示Rork が生成するセッション管理のロジックは以下のようになります:
// セッション管理ロジック
type SessionType = 'work' | 'shortBreak' | 'longBreak';
interface PomodoroState {
sessionType: SessionType;
completedSessions: number;
totalWorkMinutes: number;
}
const getNextSession = (state: PomodoroState): SessionType => {
if (state.sessionType !== 'work') {
return 'work'; // 休憩後は必ず作業セッション
}
// 4セッションごとに長い休憩
return (state.completedSessions + 1) % 4 === 0
? 'longBreak'
: 'shortBreak';
};
const getSessionDuration = (type: SessionType): number => {
switch (type) {
case 'work': return 25;
case 'shortBreak': return 5;
case 'longBreak': return 15;
}
};
// 期待する出力例:
// getNextSession({ sessionType: 'work', completedSessions: 2, ... })
// → 'shortBreak'
// getNextSession({ sessionType: 'work', completedSessions: 3, ... })
// → 'longBreak'
// getNextSession({ sessionType: 'shortBreak', completedSessions: 3, ... })
// → 'work'Step 4: 円形プログレスバーを実装する
タイマーアプリの見た目を大きく左右するのが、プログレスバーのデザインです。Rork に以下のように指示して、円形プログレスバーを追加しましょう:
タイマーの表示を円形プログレスバーに変更してください。
- SVGで円形のプログレスリングを描画
- 残り時間に応じてリングが減っていくアニメーション
- 作業セッションは赤系(#FF6B6B)、休憩セッションは緑系(#51CF66)
- リングの中央に残り時間を大きく表示
- スムーズなアニメーション(1秒ごとに滑らかに遷移)円形プログレスバーは SVG の strokeDashoffset プロパティを使って実現します。Rork はこのような UI コンポーネントも AI で自動生成してくれるため、SVG の知識がなくても心配ありません。アプリの見た目にこだわりたい方は、Rork アニメーションガイドも参考にしてください。
Step 5: 通知とフィードバックを追加する
セッション完了をユーザーに知らせる通知機能は、ポモドーロアプリの重要な要素です:
セッション完了時の通知を追加してください。
- バイブレーション(Haptics)でセッション完了を通知
- 完了時に短い効果音を再生
- セッション種別に応じて異なるバイブレーションパターン
- 作業完了: 長め(成功パターン)
- 休憩完了: 短め(再開パターン)Rork は Expo の expo-haptics モジュールを使って、以下のようなバイブレーション制御コードを生成します:
import * as Haptics from 'expo-haptics';
// セッション完了時のフィードバック
const onSessionComplete = async (sessionType: SessionType) => {
if (sessionType === 'work') {
// 作業完了: 成功パターン
await Haptics.notificationAsync(
Haptics.NotificationFeedbackType.Success
);
} else {
// 休憩完了: 軽いタップ
await Haptics.impactAsync(
Haptics.ImpactFeedbackStyle.Light
);
}
};
// 期待する動作:
// 作業セッション完了時 → 強めのバイブレーション
// 休憩セッション完了時 → 軽いバイブレーションStep 6: UI を仕上げる
最後に、アプリ全体の見た目を整えます。Rork に以下の指示を出して、仕上げましょう:
UIを仕上げてください。
- ダークモード対応(背景: #1A1A2E、テキスト: #EAEAEA)
- セッション切替時にフェードアニメーション
- 下部に統計情報を表示(今日の合計作業時間、完了セッション数)
- フォントはシステムフォント(太字)で時間を大きく表示
- 開始ボタンは丸型、一時停止とリセットは小さめに配置これでポモドーロタイマーアプリの主要機能が完成です。Rork のプレビュー機能で実際にタイマーを動かして、期待通りに動作するか確認しましょう。
よくあるエラーと対処法
タイマーがバックグラウンドで止まる
React Native のアプリはバックグラウンドに移行すると setInterval が停止します。これは仕様上の制限ですが、Rork に「バックグラウンドでもタイマーが正確に動作するようにしてください」と指示すれば、Date.now() を使った経過時間計算方式に切り替えてくれます。
プログレスバーがカクつく
アニメーションの描画が重い場合は、useNativeDriver: true オプションを有効にするよう Rork に指示してください。ネイティブドライバーを使うことで、JS スレッドとは別にアニメーションが処理され、滑らかな表示になります。
セッション数がリセットされてしまう
アプリを閉じるとステートが失われます。「AsyncStorage を使ってセッション数を永続化してください」と Rork に指示すれば、アプリを再起動しても記録が保持されるようになります。
応用: さらに機能を追加するには
基本のポモドーロタイマーが完成したら、以下の機能を追加してアプリをさらにレベルアップさせましょう:
- タスクリスト連携: 作業セッションごとにタスクを紐づけて、何に集中したかを記録します。タスク管理の基本はToDoアプリのチュートリアルを参考にしてください。
- 統計ダッシュボード: 日別・週別の作業時間をグラフで表示する
- カスタムタイマー設定: 作業時間と休憩時間をユーザーが自由に変更できるようにする
- ホワイトノイズ再生: 作業中にBGMやホワイトノイズを再生する機能を追加する
全体を振り返って
このチュートリアルでは、Rork を使ってポモドーロタイマーアプリをゼロから作成する方法を解説しました。タイマーのコアロジック、セッション管理、円形プログレスバー、通知機能と、実用的なアプリに必要な要素を一通りカバーしています。
Rork の AI アプリ開発なら、自然言語の指示だけでこれだけの機能を実装できます。まずはこのチュートリアルの通りに作ってみて、慣れてきたら自分だけのカスタマイズを加えてみてください。ポモドーロ・テクニックを実践しながら、Rork でのアプリ開発スキルも一緒に磨いていきましょう。