会社員エンジニアが実際にやってみて感じた、個人開発の楽しさと難しさ

はじめに

こんにちは。
価格.comサービスシステム部の大呂です。
普段は価格.com自動車・バイクカテゴリの開発に従事しています。

前回記事で.NET MAUIとFlutterについて比較しました。
そこで色々調べているうちに、Flutterに対して興味が湧いてきたので、実際に色々遊んでみました。
その結果、最終的に個人開発でGoogle Playにアプリをリリースできました。

そこで今回の記事では、以下のようなことを、思うがままに書いていきたいと思います。

  • 個人開発に至る経緯
  • 個人開発の楽しかった点や難しかった点
  • 改めて感じた個人開発と企業での開発の差

個人開発に至る経緯

私は趣味でフェンシングをしています。

フェンシングでは、1vs1の練習をする際、審判をする人が必要になります。
審判の際は、どちらが先に突いたかを審判機が判定してランプが点灯するので、それを見て得点を数えます。
その際、審判機が高性能なものなら、得点や残り時間の表示なども行なってくれます。

しかし、そのような審判機は高価で、すべてのフェンシングクラブに備わっているものではありません。
そのため実際には、どちらが先に突いたかの判定しかできない審判機を使って、得点は頭のなかで数え、残り時間はキッチンタイマーなどで測ることが多いです。

また、実際には先に突いたかどうかの判定のみならず、種目によっては、「どちらが先に攻撃の状態に入っていたか」「選手同士の接触が発生した場合、ランプが点灯したのは接触の前か後か」などの判定をせねばなりません。
そのため、ビデオ判定をできるようにするのが望ましいですが、左手にキッチンタイマー、右手にスマートフォンのカメラ、得点を頭のなかで...というのは非現実的です。
実際の練習では、ビデオ判定は諦めて、審判の目だけで判断することになります。

このように、フェンシングの審判は、意外とやらねばならないことが多いのです。
そのような大変さを解消するアプリを作りたい、と思っていました。

そんな折に、前述したとおりFlutterのことを知りました。
以下のような理由から、フェンシングの審判補助ツールアプリをFlutterで作成したい!と思いました。

  • 複数のOS(iPhone, Android, etc...)向けにビルドができる
  • 最近できたフレームワークにしては情報量がかなり多い
  • せっかくなら業務で使用していない、全く異なる技術にチャレンジしてみたい

そうして3週間ほどで作成したのが、「フェンシング審判機 カメラ付き」です。

個人開発の楽しさ

上記アプリの製作を通して、以下のような楽しさを感じました。

業務とは異なる技術に触れやすい

企業での開発は、基本的に複数人で行なうことになると思います。
複数人で開発する以上、自分1人の好みだけで技術スタックを変更しようとすると、トラブルになるのは目に見えています。

また、起業した場合を除いて、企業にはすでに特定の技術スタックで作られたサービスが存在している状態です。
受託開発などで新規開発をする機会が多い企業は、その限りでもないかもしれません。
しかし、特に弊社のような自社サービスを運営している企業では、既存のサービスに採用されている技術を変更するには、それなりの理由とコストが必要になってきます。

それならば、業務内で使用する便利ツールを好きな技術スタックで作ろう!と思うかもしれません。
しかし、企業によっては、そもそも既存の技術スタック以外を採用するのに、諸々の申請やワークフローの提出をしなければならないということは珍しくないでしょう。

以上のように、一介の会社員が、ただ単に興味があるからという理由だけで、普段と異なる技術に業務時間内で触れるのはかなり難しいと言えます。

一方、エンジニアたるもの、単なる興味本位で異なる技術に触れてみたいという気持ちを抱くのは当然だと思います。
そこで個人開発ならば、自分の興味本位という理由だけで技術を選定できますし、単に"Hellow World"を出力するだけにとどまらず、開発を通してその技術の深いところまで知ることができるのです。

開発フロー・設計方針を自分で決められる

複数人開発ではない以上、開発フロー・設計方針も自分で決められます。

例えば、「ユニットテストを導入してテスト駆動開発をしたい!」「この設計に統一した方が可読性が高まる!」などと思ったとします。
企業での開発の場合、上司が理解のある人だったり、自身がチームリーダーだったりした場合なら上手くいくかもしれません。
しかし、さまざまな要因で、実際にはそう上手くいかないことも多いでしょう。

一方で、個人開発ならば、組織のしがらみに囚われることなく、思うがままの開発フロー・設計方針で開発できます。
テスト駆動開発を実践してみる、gitブランチの管理方法を工夫してみるなど、自分の思い付きや興味本位でさまざまに試せます。

納期なしでじっくり取り組める

企業での開発には納期が付き物だと思います。
弊社のような自社開発の企業であっても、納期は当然存在しますし、受託開発の企業ならばなおさらでしょう。
納期のために、ある程度妥協できるところは妥協したり、妥協できないところは残業して間に合わせたりしなければなりません。

一方、個人開発は外部要因で定められた納期が存在しません。
自分のモチベーションのために、自発的な納期設定はできますが、それを過ぎたからと言って誰かに何かを報告する必要はありません。
そのため、自分が心行くまで開発できます。

個人開発の難しさ

一方で、以下のような個人開発の難しさや、企業での開発によるメリットも感じました。

やらないといけないことが多い

会社では、プログラマーとして採用された以上、基本的にそれ以外の役割は期待されていないでしょう。
しかし個人開発では、「個人開発」の名前とは裏腹に、実際は以下のように開発以外の役割を多々こなさなければなりません。

アプリをリリースするまでに必要な役割

作ったアプリを認知してもらうには、プラットフォームにアプリをリリースすることになると思います。
モバイルアプリの場合、AndroidアプリならGoogle PlayiOSアプリならApp Storeにリリースすることになるでしょう。
私は普段Androidを使っているので、ひとまずAndroidアプリとしてリリースしたいと思い、Google Playを利用しました。

ところが、プラットフォームにアプリをリリースするのは、個人でやるにしてはそれなりのハードルが存在します。
今回私が体験した中だと、Google Playにリリースするには以下のようなタスクをこなさなければなりませんでした。

それぞれ軽く説明します。

利用規約の作成・公開

そもそも何を書けば良いか、どこに公開すれば良いかを考える必要があり、何も事前知識がなかったので思ったより時間を食ってしまいました。
色々ググった結果、利用規約を生成してくれるサービスがあったので、それを用いて利用規約本文を作成し、本文をGitHub Pagesで公開する、という方式を採りました。
企業だったら、法務担当や顧問弁護士が主体となって、適切な利用規約を作成してくれるでしょう。

個人情報収集の有無の申告

私が使用していたプラグインが申告の対象だったのに気が付かず、差し戻しを食らいました。
企業によっては、セキュリティ担当が事前に確認してくれるかもしれませんが、個人開発では当然それも1人でこなす必要があります。

アプリアイコン/説明画像の作成

このような画像についても、自分で作成しなければなりません。
ライセンス的に問題のない素材を探してきて、GIMPで加工し、あーでもないこーでもないと試行錯誤するのは、楽しいと同時にかなり大変でした。

アプリアイコンについては、Androidのアプリアイコンの規定に従って複数のサイズを用意する必要がありました。

また、説明画像についても細かい規定が色々あって、何度もスクリーンショットを取り直す羽目になりました。

弊社にはデザイナー職がいるので、本来ならお任せできるところだったでしょう。

説明文の作成

このアプリの魅力を伝えるには、どのような説明文が良いか考えるのも、なかなか大変でした。
弊社には企画職がいるので、これも本来ならばお任せできるところだったでしょう。

アプリをリリースした後に必要な役割

ここまでは「アプリをリリースするまでに必要な役割」について書いてきました。
しかし当然ですが、アプリをリリースできたからと言って、直ちに認知されてダウンロードされるわけではありません。

企業でリリースしたサービスならば、元々の知名度があったり、潤沢な資金を用いて広告を打ったりできます。
一方で、個人開発の場合、基本的に誰からも認知されていないところからのスタートになります。
だからと言って、当たるかもわからないアプリに対して、いきなり有料広告を打って宣伝するのはリスクがあります。

私の場合も、普段通っているフェンシングクラブの人たちに宣伝はしたものの、日本全体の例に漏れずiPhoneユーザーが圧倒的に多いということもあり、現時点でダウンロード数はわずかな数字に留まっています。

マーケティングや営業部門など、売上を伸ばすために最前線で活躍している人たちや、経営陣への尊敬の念を新たにしました。

そして、日頃どれだけ多くの人たちに支えられながら仕事をしているか痛感しました。

会社の資産に頼れない

また、個人開発である以上、以下のような会社の資産に頼ることができなくなります。

社内ドキュメント

企業内で開発する場合は、ネット上の公式/非公式ドキュメントに加えて、社内の人たちが残してくれたドキュメントを利用できます。

公式ドキュメントは、翻訳がされていなかったり、意外とわかりにくいところがあったりして、読むのが難しいです。
一方で、非公式ドキュメントは内容が不正確だったり古かったりします。

そんな両者のいいとこどりをしたのが、社内ドキュメントだと思います。
同じ企業の人たちが書いているので、少なくとも悪意のある記事である可能性はほぼ排除して読めます。
また、ググっても中々ヒットしない内容についての記述があったり、ドメイン知識寄りの記述があったりします。
実際、私自身何度も社内ドキュメントに助けられてきました。

一方で、個人開発の場合、当然このような資産の活用はできません。
Flutterの公式ドキュメントはかなり充実していますが、すべて英語ですし、時にはわかりにくい箇所もあります。

会社の資産に日頃どれだけ支えられていたか痛感しました。

開発環境

秘密にすべきキーの管理方法、環境差異の吸収方法、デプロイ方法など、考えるのが面倒だけど重要な環境について、企業の場合はすでに整備されていることが多いでしょう。
当然ながら、個人開発の場合はこれらの環境整備を、すべて自分の手で行なわなければなりません。

モチベーションの維持が大変

もしかしたら、これが個人開発と企業開発の最も大きな違いかもしれません。

当然ですが、仕事として開発すれば給料が手に入ります。
今日は働きたくない!と思っても、振られたタスクが面倒であっても、給料が手に入る以上はそれがモチベーションとなります。

一方で、個人開発はあくまで趣味です。
やろうと思えばいつでもやれますし、止めようと思えばいつでも止められます。
それは個人開発のメリットでもありますが、途中で挫折する大きな要因でもあると思います。

個人開発は楽しい

ここまで、個人開発してみた感想を述べてきました。
何だかんだと書いてきましたが、私は個人開発ができてとても楽しかったです。

普段はWebアプリケーションしか触っていないので、モバイルアプリ特有の作法や挙動に最初は戸惑いつつも、上手く動かせたときの喜びは格別でした。

また、Flutterは後発のフレームワークなので、設計方針などのベストプラクティスやノウハウがまだ定まっていません。
この点も、普段ASP.NET MVCという安定してノウハウも蓄積されたフレームワークを使用している自分からすると、とても新鮮に感じました。

せっかくリリースしたアプリなので、これからも色々な機能を追加したり、マネタイズをどうするのか考えたりしていって、末永く楽しんでいこうと思います。

閑散期で残業がほとんどなくて暇している人、新しい趣味を探している人、技術力の向上も含めて色んなことをやってみたい人、ぜひ個人開発をはじめてみるのはいかがでしょうか?

カカクコムでは、ともにサービスをつくる仲間を募集しています!

以下のような理由から、弊社は趣味で個人開発を楽しむ時間を容易に確保できます。

  • 自社開発のため納期の調整が可能で、残業が発生しにくい
  • 有給を積極的に取得できる
    • 弊社の採用サイトでも紹介されているとおり、2023年3月末で年次有給取得率が82%
    • 半日休暇(午前休、午後休)も取得可能
  • フレックスタイム制コアタイムあり)を採用しているため、ちょっとした用事なら有給を使わずにこなせる

働きやすく、仕事でも趣味でも無理なく開発を続けることができる弊社の環境にご興味のある方は、ぜひこちらをご覧ください!

カカクコム採用サイト