14日目のゴールとテーマ
14日目のテーマは
「2週間で身につけた“Javaでアプリを作る力”を言語化して、次の一歩につなげる」 です。
今日は新しい文法を増やす日ではありません。
この2週間であなたが積み上げてきたものを振り返りながら、
自分は何ができるようになったのか
どんな考え方を身につけたのか
この先、どう広げていけるのか
を、ちゃんと自分の言葉で整理していく日です。
「なんとなく分かった気がする」で終わらせず、
「ここまでは自信を持ってできる」と言えるラインをはっきりさせていきます。
2週間で作り上げた“ひとつのアプリ”を俯瞰する
タスク管理アプリの全体像を言葉で説明してみる
まずは、あなたが今持っているタスク管理アプリを、
コードではなく「言葉」で説明してみます。
このアプリには、こんな世界があります。
タスクという“登場人物”がいる。
タスクは、タイトル・完了フラグ・優先度(場合によっては締め切り)といった情報を持っている。
タスクは、自分の表示の仕方を知っていて、自分を完了にすることもできる。
タスクをまとめて管理する TaskManager という“管理者”がいる。
TaskManager は、タスクの一覧を持ち、追加・表示・絞り込み・完了・削除・保存・読み込みといった操作を引き受ける。
Main という“司令塔”がいて、
ユーザーからの入力を受け取り、
TaskManager に「これをやって」と指示を出す。
InputHelper のような“道具役”もいて、
数字入力を安全に扱うなど、細かい面倒を引き受けてくれる。
そして、アプリは起動時にファイルからタスクを読み込み、
終了時にファイルにタスクを保存することで、
「前回の続き」から再開できる。
これを全部、自分の手で組み立ててきたわけです。
ここまで来ている時点で、「Javaでアプリを作れる人」です。
文法レベルで身につけたことを整理する
「書けるようになったもの」をちゃんと自覚する
次に、もう少し“文法寄り”の視点で振り返ります。
あなたは今、こういうことができます。
変数を宣言して、値を代入できる。
if 文で条件分岐を書ける。
for / while で繰り返し処理を書ける。
配列や ArrayList で複数のデータを扱える。
メソッドを定義して、処理を分けて整理できる。
クラスを定義して、自分だけの“型”を作れる。
コンストラクタで「作るときの初期化」をまとめられる。
フィールドを private にして、getter / setter や意味のあるメソッドで状態を管理できる。
クラス同士を「〜が〜を持つ」「〜が〜を使う」という関係でつなげられる。
例外処理(try / catch)で「落ちない振る舞い」を設計できる。
ファイル入出力で、データを保存・読み込みできる。
これらは、単なる「文法の一覧」ではなく、
あなたが実際にアプリの中で使った“道具”です。
「知っている」ではなく「使ったことがある」。
ここが大きな違いです。
考え方レベルで身につけたことを整理する
「どう書くか」から「どう設計するか」へ
この2週間で、あなたの中には
“考え方”としての変化もかなり起きています。
クラスは「データの入れ物」ではなく、「役割を持った登場人物」だと感じられるようになったはずです。
Task は「タスク1件」という役割を持ち、
TaskManager は「タスク全体の管理者」という役割を持ち、
Main は「アプリ全体の司令塔」という役割を持つ。
フィールドを public にさらすのではなく、
private にして、
getter / setter や意味のあるメソッドを通して状態を扱う、
という「カプセル化」の感覚も身についてきました。
「新しい機能を足したい」と思ったときに、
いきなりコードを書き始めるのではなく、
「これはどのクラスの責任だろう?」と一度立ち止まって考えるようになってきたはずです。
例外処理についても、
「エラーを潰す」のではなく、
「普通じゃないことが起きたときに、アプリとしてどう振る舞うかを決める」
という視点を持てるようになってきました。
そして、ファイル保存を通して、
「アプリに記憶を持たせる」という感覚も味わいました。
これらは全部、「設計の感覚」です。
ここが育っているのは、かなり大きいです。
14日目の例題:自分で“仕様変更”を考えてみる
「こうしたい」を自分で設計に落としてみる
最後に、あえて新しいコードを書くのではなく、
「もしこうしたかったら、どう設計するか」を考える練習をしてみましょう。
例えば、こんな仕様変更を想像してみてください。
タスクに「カテゴリ」を付けたい。
「仕事」「プライベート」「勉強」などで分類して、
カテゴリごとに絞り込んで表示したい。
このとき、あなたならどう考えますか。
まず、「カテゴリ」はタスク1件に紐づく情報なので、
Task クラスにフィールドを足すのが自然です。
private String category;
コンストラクタにカテゴリを追加するか、
あとから setter で設定するかを考えます。
表示のときにカテゴリも出したいので、printWithNumber にカテゴリ表示を足すことになります。
カテゴリで絞り込んで表示したいなら、
「タスク全体の中から条件に合うものを選ぶ」処理なので、
TaskManager にメソッドを足すのが自然です。
printTasksByCategory(String category) のようなメソッドを作り、
中で task.getCategory().equals(category) のように判定します。
Main では、
メニューに「カテゴリで絞り込む」を追加し、
ユーザーからカテゴリ名を入力してもらい、
TaskManager に渡します。
ここまでの流れ、
もうあなたならイメージできるはずです。
大事なのは、
「文法的にどう書くか」より先に、
「どのクラスが何を担当するか」を考えていることです。
「この先どう広げていけるか」を具体的にする
いきなり“別世界”に行かなくていい
ここから先の学び方として、
よくあるパターンはこうです。
いきなり GUI(画面付きアプリ)に行く。
いきなり Web アプリ(Spring など)に行く。
いきなりフレームワークに飛び込む。
もちろん、それも悪くはありません。
でも、あなたにはすでに「土台」があります。
だからこそ、
こんなステップで広げていくのも、とても良いです。
今のタスクアプリに、少しずつ機能を足していく。
カテゴリ、締め切り、繰り返しタスク、検索機能などを自分で設計してみる。
保存形式をタブ区切りから JSON 風に変えてみる。
テスト用に「ダミーデータを自動で入れる」機能を作ってみる。
あるいは、
タスクアプリとは別に、
「本の管理アプリ」「家計簿アプリ」「簡易チャットログビューア」など、
同じコンソールベースで別のアプリを作ってみるのもいいです。
大事なのは、
「まったく新しい世界」に飛び込む前に、
今持っている道具を使い倒してみることです。
14日目のミニ課題(やってみたい人向け)
コードを書いてもいいし、頭の中で設計するだけでもいい
最後に、やってみたい人向けに、
小さな課題をいくつか投げておきます。
タスクに「メモ(詳細説明)」フィールドを追加して、
一覧ではタイトルだけ、詳細表示モードではメモも表示するようにしてみる。
タスクに「作成日時」を持たせて、
新しい順に表示する機能を考えてみる(ソートのイメージを持つ)。
「完了したタスクを一括削除する」機能を TaskManager に足してみる。
「今日やるタスクだけ表示する」機能を、締め切り日と組み合わせて考えてみる。
全部やる必要はありません。
1つでも、「自分で仕様を考えて、自分でクラス設計に落とす」
という流れを体験できれば、それで十分価値があります。
14日目で一番大事なメッセージ
「あなたはもう、“Javaでアプリを作れる人”になっている」
ここまで2週間、かなり濃いペースで走ってきました。
もしかしたら、
「まだ全然分かってない気がする」
「覚えきれてないところが多い」
と感じているかもしれません。
それでいいです。
というか、それが普通です。
大事なのは、
クラスを自分で作って
オブジェクトを new して
リストで管理して
メソッドで振る舞いを分けて
例外と付き合って
ファイルに保存して
という一連の流れを、
あなたが「一度、自分の手で通した」という事実です。
これは、もう消えません。
細かい文法は忘れても、
「こういうときはクラスを作ればいいんだな」
「こういうのは別クラスに分けたほうがいいな」
という感覚は、ちゃんと残ります。
この2週間で、
あなたは「Javaの文法を学んだ人」ではなく、
「Javaでアプリを作った人」になりました。
ここから先は、
その事実を前提に、
自分のペースで、好きな方向に広げていけばいいだけです。
それだけは、ちゃんと覚えておいてほしいです。
