LIFE Cook

人生を豊かにするために(料理ブログではありません)

社畜サラリーマンが個人開発でプロダクトをリリースするまで

はじめに

先日、個人開発で作ったAlexa Skillをリリースしました! その名も「経済指標カレンダー」です。

Amazon.co.jp: 経済指標カレンダー : Alexa Skills

実は前々から、個人開発で作ったサービスをリリースすることに憧れを持っていました。 小さな目標ですが、それを一つ達成したことになります。

技術的な内容はQiitaで記事にして公開しているので、 今回は初めての個人開発を経て、得た教訓や苦労を中心にまとめたいと思います。

とはいえ、苦労話として技術面のトライアンドエラーの話は避けては通れないので、 時間が無い人は得た教訓の章まで読み飛ばしてください。

プロダクトについて

今回リリースしたAlexa Skillは、その日に発表される経済指標を教えてくれるとサービスです。 普段、FXをやっているのですが、米国雇用統計などの大きなイベントをついつい見逃してしまったり、 イレギュラーな日程での発表に翻弄されたりといった経験から、着想を得ました。

まずはMVPとしてリリースしているので機能は至ってシンプルです。

  • 当日発表される経済指標を列挙するのみ
  • 対象の国は米国、日本、英国、欧州、インド、中国、豪州などメジャーな国に絞っています
  • 5つずつ指標を発話するようになっていて、続きの発話は「はい」「いいえ」でコントロールできます

開発の過程

サービスを支えるシステム全体は以下のようなシンプルな構成です。 構成はシンプルですが、リリースまでの過程で意思決定や試行錯誤に多くの時間をかけてしまいました。

アーキテクチャ

アイディア出し

個人開発をやってみたいとは前々から考えていて、アイディアは複数ストックしてありました。 しかし問題だったのは、自分が作りたいものに開発難易度が高い要素を含めてしまうところ。

作るからにはオリジナリティを求めてしまうものです。 そうなると、まだ世界に無いものということになるので、自分の技術レベルを超えていたり、開発に時間がかかるものだったりして、結果的に先に進めなくなってしまっていました。

Alexa Skill にしようと思い至ったきっかけは、会社の後輩が簡単なアプリをリリースして、AWSから無料のクーポンをもらったという話を聞いたことでした。 そんなキャンペーンはとっくに終わっていた訳ですが(笑)。

UIを作らなくていいところにも惹かれました。 普段の仕事でフロントエンドの開発を多くしていたので、UIを作るとなると職業柄のこだわりが出て、時間がかかってしまうイメージをしていました。

技術選定

最も苦労した点が技術選定や実現性の検討でした。

機能はまだ少ないので、サービス自体の実装量は多くないです。 そのため、技術選定や実現性検討にほとんどの時間をかけていたと思います。

ざっと挙げると以下のような検討項目がありました。

  • 経済指標の情報の取得方法
  • 経済指標の和訳方法
  • AWS Lambdaで経済指標を取得する方法
  • Alexa SkillからDynamoDBへのアクセス方法
  • DBスキーマの検討
  • Alexa Skillの実装方法
  • サービスのホスティング方法
  • サービスのデプロイ方法
  • etc

経済指標の和訳

例えば、経済指標の和訳が課題の一つでした。

機械翻訳サービスはいくつもあるのですが、経済指標という特殊なワードを上手く和訳してくれませんでした。 Google翻訳Amazon Translate、DeepLを試してみて、最も上手く和訳してくれた Google 翻訳を選定。 しかし、Google 翻訳も常に完璧ではなく、特定の指標は上手く訳せませんでした。

経済指標名 機械翻訳結果 正しい和訳
Fed Chair Powell Speaks パウウェルFRB議長が語る パウウェルFRB議長発言
6-Month Bill Auction 6カ月請求書オークション 6カ月債入札

データベースに辞書テーブルを用意しているのはそのためです。

経済指標の種類は有限だと想定して、一度翻訳した単語は辞書テーブルに保存して、間違った和訳は後で修正できるようにしました。 上手く訳せない指標はだいたい決まっています。 上記の例でいうと、"Speaks"や"Auction"といった単語を含む指標です。 手作業ではありますが、データベースに登録することで、これらの指標を検索して一括で修正して、下手な和訳が発話されないようにしました。

サービスのホスティング/デプロイ

Alexa Skillのホスティングやデプロイ方法も検討に時間を要した項目の一つです。

AWS ではよくあるのですが、デプロイ方法やホスティング方法が複数用意されていて、全部試してどれが最適か検討しました。

  • Hosted your skill code by Alexa
  • AWS with Cloudformation
  • AWS Lambda
  • AWS Codestar

Amazonとしては Alexa Skillはお手軽アプリと想定しているためか、そこまで取り回しが効くものも無いように感じました。 デプロイ先の環境情報がコンフィグファイルとして含まれてしまうので、複数環境を用意しづらいことや、 これらをGithubで管理することにセキュリティリスクが懸念されることなどから、納得いく形を模索しました。

また、ソフトウェアエンジニアという職業柄、CI/CDパイプラインを作れる余地を作っておきたいとか、Github Actionsを使ってみたいとか考えてしまい悩みましたが、 結果的に Cloudformationを使ってデプロイし、自分の AWS アカウントでホスティングする方針に決めました。

要件定義

要件定義で課題になったのは、VUIの設計とリリースまでにどこまでの機能を含めるかです。

元々は経済指標の予測値と結果も発話することや、当日だけでなく次の日に発表される指標も発話できるようにするなども考えていました。 また、重要度を考慮しなければ、一日に発表される経済指標は雇用統計やCPIといった有名どころ以外にもたくさんあり、どの指標をどのように発話させるかも決めなくてはいけませんでした。

結果的には、初回リリースは最低限の機能に絞ることにして、現在の形に落ち着きました。 このままだといつまでもリリースできないことを悟ったんですね。 ここは、普段の仕事と同じ感覚でできました。

リリース準備

Alexa Skillの開発だけで済めば楽なのですが、プロダクトとしてリリースするには見栄えも必要です。

  • アイコンの作成
  • 利用規約、プライバシーポリシーの作成と公開

デザインの知識などないので、アイコン作成となると身構えてしまうのですが、 今回は話題の生成 AI を利用して簡単に作ることができました! 方法は Qiitaの記事にまとめてあります。

qiita.com

他のAlexa Skillを見ると、利用規約やプライバシーポリシーが無いものもあるのですが、 何せ金融や経済に関わるサービスではあるので用意することにしました。

利用規約などの公開はGithub Pagesを使おうと前々から決めていました。

smallriver0316.github.io

仕様にクセがあり、ここでもトライアンドエラーは必要でしたが、 web デザインの知識がなくてもマークダウンで手軽にページを作れることやデザインテンプレートを利用できることから、 それらしいページを作成することができました。

今は利用規約とプライバシーポリシーを載せるためだけのページになってますが、 もう少しサービスをアピールできるページにするつもりです。

今回の経験で使い方はマスターしたので、 別のサービスの公開時や自分のポートフォリオサイトの作成などに活用していきたいです。

リリース結果

満を持してスキルの公開申請をしたところ、なんと一発OKでした!

ロケールの自動公開は失敗とありましたが、元々日本でしか公開していないので無問題です。

リリース後の集客

あまりブログを頻繁に書けていなかったのですが、 個人開発のプロダクトリリースを経て、技術系の記事を3本も書くことができました。

qiita.com

qiita.com

qiita.com

実を言うと、この記事自体も宣伝活動の一環です。

会社ではそれなりに頑張ってきたつもりでしたが、個人としてのブランド力はまだまだです。 サービスの利用者を増やすためにも、これを皮切りに頑張っていきたいです。

得た教訓

アウトプット活動が苦手な手前、今回の開発経験では多くを学びました。

時間管理

結局、一番大事なのは時間を確保することです。そして、それは"朝"です!

転じて健康の話になりますが、人間の身体は睡眠中に体力や人体の回復を行っています。 そしてその効果が最も発揮される時間帯も決まっています。夜の22時から2時と言われています。

sports.yahoo.co.jp

22時から2時の説は現在は否定する研究もあるようですが、 だいたいこのぐらいの時間帯に寝ておくことが重要なのでしょう。

また、必要な睡眠時間もきっかり決まっています。7時間です。

www.otsuka.co.jp

そうなると、何をするにしても早寝早起きするしかないのです!

私自身は、元々学生時代から夜の2時に寝て、朝の8時ぐらいに起きるメチャクチャな生活をしていました。 大学が家から遠かったこともあり、その生活スタイルが習慣化して社会人になっても続きました。 その結果、30代で健康面でいろいろ問題に直面するようになりました。

Twitterなどで3時から朝活をしていることをアピールしている人を見て、 逆に健康に悪いのでは?と以前は思っていました。 でも、本業以外で何かをやるにはこれがベストだと分かりました。

Trelloとnotionでタスク管理

仕事でもこれらのプロジェクト管理、タスク管理ツールは使いますが、 個人開発でも役立ちました。

普段の仕事と比べて、個人開発で使える時間は限られてきます。 そのため、日々の進捗もわずか。 ときには、仕事や雑務に時間を取られて、間が空いてしまうこともあります。

そうなると、前回どこまで進んだのか、次に何をやるのかをメモしておかないと続けられなくなってしまいます。

技術の知見を貯めるのには、マークダウンで管理できるnotionが有効。

coosy.co.jp

タスク管理はTrelloを使っていましたが、チケットをたくさん切るのではなく、 最新の状況や次にやることをメモしておくために使っていました。

trello.com

ほんのわずかでも前に進める

上記に加えて、適切にタスクを細分化することが大事です。 あまり大きいタスクだと時間がかかりすぎて、やる気が続きません。

これについても仕事と比べて、かけられる時間が少ないことから、 普段の仕事よりも細かく分割することが必要です。

これもTrelloのチェックリストの機能を使って管理していました。 チームで開発しているのではないので、いくつもチケットを作る必要はありません。 ひたすら一つのチケット上でチェックリストをつぶしていく感じです。

そして、これをできる限り毎日、少しでも進めることが重要です。 仕事や副業、生活上の雑務、または壁にぶつかったりして進捗が止まると、しばらく停滞してしまうこともありました。

今回、簡単なAlexa Skillでもリリースまで長い期間がかかってしまったので、"少しでも進める"ことの重要さを痛感しました。

普段から作りたいサービスをイメージして技術を試すことが大事

「作りたいものをもっとスピーディーに作るためにどうすればいいか?」 これが今回の個人開発における一番の課題です。

初めての個人開発とはいえ、Alexa Skill開発にけっこうな時間をかけてしまいました。 (長すぎのため開発期間は伏せておきます。。。)

そのためには、普段から作りたいサービスを念頭に、APIやライブラリを試しておくことが必要だと思いました。

私は仕事で経験した内容をブログ記事などには載せていません。 そのため、ベンチャーで活動しているエンジニアの方よりアウトプットは少なくなってしまっていると感じてます。

zenn.dev

今回、プロダクトをリリースしてからQiitaで記事をまとめて書いたのですが、 これを試した時、その都度やっておけば、個人のブランディングにもつながるのではと期待しています。

今後やりたいこと

経済指標カレンダースキルのアップデート

本業でもプロダクト開発をしているので、作りたい機能のアイディアには困りません。

  • 国別で指標を発話できるようにする
  • ユーザーのステータスを保持できるようにする
  • 経済指標の予測値と結果の発話
  • 課金機能の実装
  • etc

経済指標カレンダースキルはまだMVPの状態です。 もっと機能を増やしてプロダクトとしての体を成したら、ちゃんとアピールしたいです。

新しいプロダクトのリリース

最初の個人開発がAlexa Skillだったからこそですが、 手軽にブラウザやスマホからアクセスできるWebサービスをリリースして運用したいと思うようになりました。

OpenAIのAPIを使ったサービスのアイディアも考えています。

個人開発者でも自身が開発したプロダクトをリリースして、さらにOSSとして公開している方や、 個人開発で生活できるぐらいの収益を得ている人もいます。 立派なサービスを作り上げれば、サービスが自分の名刺代わりになりますよね。

github.com

levtech.jp

www.inkdrop.app

Mini Tokyo 3Dのnagixさんや、Inkdropを作っているTAKUYAさんは憧れですね。 彼らを目標にして自分も精進したいです。

時間管理

既に述べましたが、重要なのでもう一度。 最も重要なのは時間管理です。

今の生活スタイルでは、毎朝コンスタントに確保できる時間は1時間強というところです。

これを2時間に増やしたいです。

理想的には3時間欲しいですが、元々夜型だった自分はいきなりそれをやって何度も挫折してきたので、 まずは2時間確保を目標にしたいです。