プログラミング

【週末個人開発】個人開発のスプリント1で取り組んだこと

こんにちは、ともです。

週末の1日を友人と個人開発の日として開発をしています。

アジャイル開発を取り入れながら作業しており、2019/10/20から2020/01/26まで1スプリントとして開発を行いました。

どのような作業をしているかについて書きたいと思います。

作りたい物を決める

所持している本の最新巻は何か管理するアプリを作成しています。本屋さんで本を買うときに持っている本を買ってしまうことはありませんか?

そのようなことあるよね、という話になって所持している本を管理するアプリを作成することにしました。

この開発で成し遂げたいことは何か話し合った所、「スキルアップする」ことを目標においたため、自分たちが欲しいと思うアプリ(ニーズは度外視)にしました。

雰囲気アジャイルで作る

アジャイル開発に興味があって、アジャイル開発のScrumのようにスプリント毎に分けて作業しました。

  • 動く物を作ることを最優先にしようと心がけて
  • コードを常にアップデートする
  • 変化を受け入れる
  • プランニングポーカーで見積もる
  • スプリントレトロスペクティブで振り返る

などをやってみました。実際には動く物最優先という訳ではなく、ウォータフォールのように設計してから実装になってしまいましたが。

個人開発は「自由に興味があることに挑戦する場所」として位置付けてやっています。(笑)

GitHubでイシューを洗い出す

GitHubにIssueを書き出しました。イシューの書き出し方は下記です。

  1. 画面遷移図を作成
  2. テーブル定義書を作成
  3. ワイヤーフレームを作成
  4. HTMLを作成
  5. 機能を作成
  6. リファクタリング

成果物を作成する度に、チーム(2人)でコードレビューを行います。

画面遷移図を作成する

Cacooで画面遷移図を作成します。

画面遷移を作成し、チームで認識合わせをしていきます。その際に、URLも一緒決めておきます。

画面遷移図を作成することにより、下記の2つを行うことができます。

  1. 気づかなかったことに気づくことができる
  2. チームで認識を合わせることができる

ユーザが使いやすいように出来る限り画面遷移せずにしたいよね、この場合はどうする?など議論が活発化します。

テーブル定義を作成する

テーブルにどのようなカラムを持たせるか、外部キー制約はどうするかについて話し合います。スプリント1で作成する機能以外に今後を見据えて定義しています。

例えば、

  1. ユーザ名は「UNIQUE」にするか?
  2. ログインIDは「名前」でするか、「メールアドレス」ですか?
  3. ユーザの退会は論理削除?物理削除?
  4. 論理削除なら、どのカラムでする?

友人は会社でDBを扱っているため彼のアドバイスはとても助かりました。

ワイヤーフレームを作成する

プロのコーダーさんに言わせれば雑すぎるものですが、画面に対する認識合わせのためにワイヤーフレームを作成します。

本来はマージン等を決めておく必要がありますが、その知識がないため簡単なラフ画としました。今後はワイヤーも綺麗に作りたいです。

チームのHTMLのコーディング力がまだ低いため、実装しやすさをまずは重視しています。私たちはまずリリース・運用の経験を積みたいので、少し手を抜いてしまったかもしれません。

Issueの書き方

私たちはIssueを上記のように書くようにしています。(まだ不十分かもしれませんが)

  1. 目的(なぜその機能を作成するのか)
  2. 機能(何を作成するのか)
  3. 完了条件(イシューをCloseする条件)

を書くようにしています。機能についてはもっと細かく書いてもいいですが、まずは実装してみて、コードレビュー時におかしな実装であれば取り除くようにしています。

Labelを作る

Issueにつけるラベルはこのようになりました。Issueを出していったら自然と上記のようになりました。今後、また整理するかもしれません。

マイルストーンを作る

マイルストーンを上記のように設定しました。1スプリント・1マイルストーンとしています。スプリント1ではユーザ管理はせず、1ユーザだけを想定した開発を行いました。

HTMLの作成→機能の作成

HTMLや機能の作成のブランチを切って、各人で作業を始めます。

HTMLや機能の作成後は必ずIssueの完了条件を確認します。

全てのIssueに対してコードレビューはしています。レビュー→コーディング→レビュー・・・のような作業の流れになります。(大体一度のレビューで終わりますが)

プランニングポーカー

1スプリントが終わった段階で、プランニングポーカをしてIssueごとに重みを付けました。本来は初めにやるものなんでしょうけど、最終日にやってみることにしました。

プランニングポーカーには次のサイトを利用しています。

今後の予定

スプリント2で作成した物をリリースする予定です。作業はスプリント1でやった手順と同様の手順ですね。(スプリント2では、プランニングポーカーはIssue洗い出し後にします)

今回のスプリントで

  • Teamビルディング
  • GitHub
  • Golang(開発しているアプリのサーバサイドの言語)

について少し詳しく慣れました。

今後は、

  • デプロイに向けてAWSの学習

を行っていきます。

今年中にスマホアプリ版でもリリースする予定なので少しずつスキルアップしていきたいです。また会社での経験を個人開発にも生かし、個人開発の経験を仕事にも生かしていきたいです。