作りたいものは作り始める前に今すぐにデプロイしよう

<img width="1240" height="112" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/672609/6d8a7098-9aef-a19a-54fe-83a2d493e033.png" alt="YUMEMI New Grad Advent Calendar 2023">

[株式会社ゆめみの23卒 Advent Calendar 2023](https://qiita.com/advent-calendar/2023/yumemi-23-graduation) の 22日目の記事を書きました :santa: 

# はじめに

今見ているあなたは趣味で行った開発の中でデプロイしユーザーに使ってもらった経験はありますか？

「趣味で開発してたものはあるが、実際にデプロイしたことがない」「デプロイしたものもあるが、デプロイできるまでやり通すことの方が珍しい」という方がほとんどだと思います。

また趣味で行っている開発についての話題になると、「やる気があるうちにデプロイした方が良いよね～」みたいな話題になると思うのですが、そう思っていながらも実際に意識して取り組む方はなかなかいないと思います。

今年の趣味開発を考えている時に Discord で使用できる Bot を作成して運用したいな～と思っていたのですが、私も趣味で開発していたものを途中でやめてしまうことがほとんどだったので、今回の開発は**まずデプロイ**という事を意識してやってみました。

そこでなぜデプロイを先にすることが大事かということを身を持って体験したので、体験談として残しておこうと思います。


# なぜ先にデプロイをしようと思ったか

**趣味で行う開発はモチベーションに左右されるからです**

仕事での開発はやらなければいけないもので、やらないと周りの方に迷惑を掛けたり、そもそも自分自身が生きていくことができないため、モチベーションに関わらず進めていけることが多いです。

しかし、趣味で行う開発はデプロイしてユーザーに公開していなければ誰も困らない、やらないといけない事でもないためモチベーションで開発しきることが出来るかが決まります。

このことから、趣味で行う開発にはモチベーションを維持することが大事なのですが、人間最後までモチベーションを保ちながらやりきることはそうそう難しいです。

ここで自分が考えたのが**やらないといけない環境を作ること**でした。例えば「この発表してたものはいつ使えるようになるの？」と1人のユーザーさんから声を掛けられたら「や、やらなきゃ...！」となりませんか？

私は開発を行う前にこのやらないといけない環境を作ってしまおうと考えました。


# デプロイを優先した環境作り
ここからは私の開発フローがどのようなものだったか、どのような考えで開発をしたかを説明していきます。

## 触れるものを簡単に作成する

**とりあえず動作確認ができるものを作る** ということに注力を注ぎました。
これは先程から申している通り、**すぐにデプロイしたいから**です。

作りたい内容に関わらず Hello World! を出力できるレベルのもので大丈夫で、とりあえず動作確認ができる環境ができれば大丈夫だと思います。

私は Discord Bot を作成しようとしていたので、コマンドを入力したら適当に何か返すものを**1時間程度で作成**しました。

実際に作ったものだと、 `/clip-gacha` コマンドを実行すると動画のサムネイルとタイトル、動画リンクを組み込んで返すものです。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2742206/d4e18ee7-6d6d-9e0b-3235-ae48fe3cf172.png" width=400 />

しかもガチャなのに同じ結果を返すようにしています。**私が作りたかった Bot の要件を全く満たしていませんが、要件に関わる部分はデプロイしてから作成する**ことにしています。


## デプロイする

**個人的に趣味で行う開発で一番面倒だと思っているのが、このデプロイする工程**です。

モチベーションがあるうちにやらないと「やったことないし面倒だからいいや～」となりがちな気がしているので、開発よりも設計よりも真っ先にここをやる事を意識していました。

今回の私の場合は、毎回デプロイするのにコンソールをいじって作業するのが面倒だと思い、[GitHub Actions - workflow_dispatch](https://docs.github.com/ja/actions/using-workflows/events-that-trigger-workflows#workflow_dispatch) を使用してデプロイできる環境を作るところまで行いました。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2742206/40bc114d-414d-56f9-48ff-3a94cbc28dd2.png" width=600 />


## 自分が作るものを宣言する

**ターゲットになるユーザーさんにこれから作るものを宣言**しました。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2742206/2b04e1e6-a773-e30f-2911-482b417a19f7.png" width=500 />

これは [なぜ先にデプロイをしようと思ったか](#なぜ先にデプロイをしようと思ったか) に記載した通り、やらなければならない環境を作りたかったからです。

## 作りたいものを開発する

ここにきてやっと開発です。
通常、趣味で行う開発であればものを作る所から先に行う方が多いと思います。

この開発で意識しないといけないことが、**デプロイしても大丈夫である状態にしておく**ことです。

これは、試したい事があるからという理由で一時的に動かない状態にしないように意識したり、ちゃんと動くことを担保するためにテストを書いてデプロイ時に問題が無いかを確認するなど、保守・運用を意識しようという意味合いです。趣味で行う開発ではなかなかできないたいけんかもしれません。


# 先にデプロイしてみての良い事

## 経験が薄いデプロイ、保守・運用、マーケティングなどが経験できる

趣味開発や仕事では中々することがない開発以外の経験が積めたりするので、とても良い経験だなと感じました。

個人的に大変だと思ったのは、ユーザーさんに仕様をお伝えする場が設けられていない中でどうやって宣伝するかという点は頭を悩ませました。

リリース時には追加機能の画像を作ったりしました。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2742206/2fc44796-ac80-23b3-c65e-8c5706dd7bef.png" width=600 />

## ユーザーさんからの反応がモチベーションになる

形になっていないのに思ったより反応して頂けて、開発のモチベーションに繋がってます。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2742206/f8096383-56a6-ade2-bc5b-697c739c463f.png" width=500 />

## モチベーションが低くても開発が止まることが無くなった

モチベーションが低いと開発自体の手を止めてしまい、開発が続かないという事は次回モチベーションが高くなることがないのでその場でストップしてしまう... ということが現状起きていません。

もちろんモチベーションが低い時もあるので、その時は開発の手を止めてたりしますが、定期的にやる気が出て続きから行うことができているのでその点は凄く良いと感じました。

## 作ったものがすぐデプロイできる喜び

**開発したものをすぐにデプロイできるのは開発体験としてはとても良い**と思いました。
昨日を試験的に入れてみて、「こんな感じで作ろうと思うんだけどどう？」みたいな投げ方もできるので、今後の開発でもデプロイのワークフローはスムーズにできるような体制に持っていきたいなと思うくらい素晴らしいと思いました。


# 最後に

モチベーションに左右されない環境を作ってみたら、開発体験が良くなるしちょっと変わった経験もできて大変良いなと思いました！
趣味開発をしているそこの方！今すぐデプロイしてみませんか？