時代に翻弄されるエンジニアのブログ

ゲームプログラマをやっています。仕事やゲームや趣味に関してつらつら書きたいと思います。

開発で大切なこと ~swiftで体重管理アプリをつくったよ!~

こんには、みなさんGWはどうすごしましたか?
ぼくは高校時代の友達とswiftでアプリをつくっていました。

はじめてのswiftで二日間でつくったのですが、効率的に開発ができたせいか結構余裕をもってつくることができました。

今日は作ったアプリの説明と、開発の仕方で良かったことを紹介したいと思います。

何を作ったの?

下の画像のような体重管理アプリをつくりました。

f:id:tkymx83:20170508223959p:plain:w200 f:id:tkymx83:20170508224000p:plain:w200


機能としては、日にち単位で体重を入力して一覧で表示するだけです。

ではこのアプリをどのように作ったのかを説明していきたいと思います。

作業日程

一日目

  • 10:00 ~ 11:00 機能の洗い出し、画面レイアウトの作成
  • 12:00 ~ 13:00 実装計画を立てる
  • 13:00 ~ 13:30 昼ごはん
  • 13:30 ~ 14:30 数値打ち込み部分の作成
  • 14:30 ~ 15:00 日付の表示と移動をできるようにする
  • 15:00 ~ 16:00 体重データの保存
  • 16:00 ~ 17:00 体重一覧表示作成
  • 17:00 ~ 18:00 体重入力と一覧表示の遷移

二日目

  • 11:00 ~ 12:00 AutoLayoutの設定
  • 17:00 ~ 19:00 フリックで画面遷移

途中予定があったのですが、このような形で勧めていきました。一日目に基礎的な部分を作成して二日目に追加機能やレイアウトの調整などを行いました。

やってよかったこと

今回の開発でやってよかったことをまず挙げたいと思います。

  1. 機能の洗い出しと画面レイアウトの作成を先に行った
  2. タスクを一時間でできそうなものに絞った
  3. タスクにかけた時間を測定していた
  4. 適度に休みがあったこと
  5. 誰かがいたこと

それではこれらについて説明していきたいと思います。

1.機能の洗い出しと画面レイアウトの作成を先に行った

 2日でアプリを作ろうと考えたとき、とりあえず作り始めようと考えると思います。その場合、ある機能が完成したら次の機能を考えるというようにいきあたりばったりになります。このようにその都度整合性を取ろうとすると最終的にめんどくさくなり、モチベーションが大きく下がってしまうと思います。

 そのため、プログラミングに集中できないで中途半端で飽きてしまいます。原因は目標がはっきりしていないことです。最終的なゴールが想像できないと不安が生まれるどこまで作るればいいかがあいまいになり、ある程度作って飽きてしまいます。

 なので目標を作る必要がある。今回は画面レイアウトを作ることで具体的な機能とプログラムの内容が想像できました。理由としては視覚的に必要な要素がわかり、最終的な見た目が想像できたからだと思います。そして、ここまで作ろうと言う目標が生まれた。

2.はじめにタスク一覧を作成。タスクを一時間でできそうなものに絞った

 今回のタスクは以下のようになっています。
これは実装計画を立てる段階で作成しました。

  • 体重を入力する部分を作成
  • 日付の表示と日付の遷移を作成
  • 体重を日付ごとに保存する
  • 体重一覧表示の作成
  • 画面遷移部分の作成
  • フリックで画面遷移を行う

タスク分解の基準は機能ごとに作っていくことです。

 もしタスクを作らなかったり、大きなタスク(入力画面をつくる)で作ってしまうと
以下のようなデメリットが生じます。

1. 長い時間同じことをしている気になってしまう

 長時間同じ作業をやっているといつ終わればいいのかわからなくなり、結果として一つの作業をだらだらやってしまいます。一時間と決めると、それまでに完成させようというモチベーションがわきます。

2. 細かいタスクを考えながら実装する必要がある

 タスクが決まっていなければ、あるタスクが完成した段階で、次のタスクを考えることになります。その時作りたいことは全体としては必要がない機能かもしれません。必要な機能というのは二日間という時間を考えることで初めて実装スべきか判断できるものなので、不必要なタスクを実行してしまう恐れがあります。また、どこまで実装して完成かを把握することがないのでだらだらと作り続けてしますことになる可能性があります。

このように初めにタスクを見積もることは時間内で必要な機能を集中してつくるにかなり役立ちます。

3.タスクにかけた時間を測定していた

これが今回の開発で一番良い点だったと思います。
時間はタスクごとにストップウォッチではかっていました。

 2.でも話しましたがタスクは1時間でできるものとしていました。なので、実際に一時間で達成できたかを図る必要があります。最終的にはオーバーしたものや時間内でできたものがありましたが、トータルとしてみると平均一時間くらいだったお思います。

 また、時間を図ることで残り時間を意識するようになります。人はある程度の制約がないと頑張ることができません。時間が見えると言うのはモチベーションの上でかなりの制約になります。

この制約は、実装するときの心構えにも影響しました。ある機能が完成したときにちょっと休憩しようかなと思ってしまったり、調べ物が脱線してしまう事があると思います。そんなときに時間を見ることで、”やらないと”という気持ちにさせてもらえます。

4.適度に休みがあったこと

1時間半おきごとに休憩を取っていました。
休憩では立って歩いたり、ストレッチをしたり周りの話をきいたりしていました。

そのあと椅子に座ると集中できている自分に気づきました。
ずっと座っていると体の血も偏りますし、肩もこります。

体が痛くなってからでは遅く、人の集中力もそんなに続きません。
プログラムをしている時は、もっとやりたい、早く完成させたいと思うものです。
ですが、あせってケアレスミスで時間を潰すのはもったいないことです。
さらに、集中力が切れてせっかくの調べ物の効率を悪くするのも行けないです。

休憩は長くなくても、ちょっと立って背伸びするだけでも、かなり集中力が違います。
集中力が切れそうと少しでもおもったら、切れる前に立ち上がることを推奨します。

5.誰かがいた事

 僕は一人で何かをつくることができません。いつも誰かのために作っています。普通物事を行うときは誰かに喜んでもらう姿を想像します。

しかし、そんな長期的な想像でははじめは良くても次第に集中力もきれだれてしまいます。

 今回のアプリ作成は友達と一緒におこないました。機能が完成するたびに友だちに見せてモチベーションを上げたり、集中力が切れたときに友達の存在を意識することで頑張ろうとなりました。

仕事場には自分以外の誰かがいます。しかし、個人開発は自分しかいません。そんな中で一緒にやってくれる人はとても貴重だと思います。

みなさんも共同開発とまではいかなくても、誰か一緒にプログラムをしてくれる友達がいたらアプリ開発はかなり捗ると思います。

まとめ

今回実践したことは普段の仕事や勉強などでも役に立つと思います。最後に重要なことをまとめたいと思います。

  1. 目標設定をしっかりする(機能の洗い出しと画面レイアウト)
  2. タスクは実行できる一定の細かい範囲で作る
  3. 作業時間を測定する
  4. 一時間に一回は立ち上がってストレッチをする
  5. 誰かと作る

今回、いちばん重要なことは誰かと作ることとだと思います。それが僕が一番モチベーションを感じる方法だと思いました。一緒に開発してくれた友達に感謝します。

次の記事ではアプリ開発でつまずいた技術的なところをまとめたいと思います。