20年間の個人アプリ/サービス開発で得られたもの

最初に個人で制作したフリーウェアがリリースされてから20年経ちました。その間色々な変化がありましたが、今も変わらず個人での開発を楽しんでいます。**[個人アプリ/サービス開発の進め方と運用、得た学び](https://qiita.com/advent-calendar/2020/lenovo_app_02)**というテーマのAdvent Calenderに参加させていただくにあたり、20年間の個人での開発がどう人生に影響してきたか、おじさんの過去の自慢話になってしまわないように注意しつつ振り返ってみようと思います。

長い自分語りとなってしまったので、お忙しい方は最後の「まとめ」まですっ飛んでいただければと思います。

# 小学生時代: プログラミングとの出会い
## 雑誌についていたVisual Basic 5.0 CCE
90年代、エンターブレイン社が発行するTECH Win!というPC雑誌をよく読んでいました。当時のPC雑誌には「付録CD-ROM」というものがついており、Macromedia Shockwaveで作られたインタラクティブな動画コンテンツや市販ソフトの体験版などが収録されていました。そして、ある月のTECH Win!の付録CD-ROMにVisual Basic 5.0 CCEが収録されていたことが、プログラミングをはじめるきっかけとなりました。

当時自分は親の仕事の都合で国外に住んでおり、日本語で楽しめる娯楽がかなり限られていたこと、日本に比べると治安が悪く家の中で遊ばなければいけない時間が長かったこと、今と違ってインターネットが普及/発達していなかったことなどが重なり、結果的にこのVisual Basic 5.0 CCEで長い時間遊ぶことになりました。もし治安の良い日本で、自由に友達と外で遊ぶことができ、インターネットも使えるような時代や環境であれば、プログラミングに時間を費やすことはなかったと思います。

# 中学〜高校: 雑誌がただで家に届くというシンプルなモチベーション
## フリーウェアを公開したら雑誌がただで送られてくるようになった

日本に帰国したタイミングでVisual Basic 6.0 Learning Editionを購入し、作ったWindowsアプリケーションをVectorで配布しました。これが私の個人でのアプリ/サービス開発の原点です。

ブロードバンド普及以前の2000年ごろまでは、インターネットからではなくPC雑誌の付録CD-ROMからアプリケーションをインストールする、という文化がありました。私のアプリケーションも、複数の雑誌に掲載/収録していただきました。プログラミングを始めるきっかけとなったTECH Win!にも掲載していただいた際はなかなか感慨深かったことを覚えています。

雑誌への掲載は、一部を除いて基本的には無報酬ですが、代わりに「見本誌」が自宅まで送られてきました。**毎月何冊も雑誌がただで送られてくる**という状況は、バイトをしていなかった中学生の自分にはとても嬉しいもので、**ソフトウェアを開発する大きなモチベーションの一つになっていました**。

## 掲載実績が受験で活きる

その後、ムック本でも取り上げていただけるようになりました。地元の図書館に収蔵された本もあり、少しずつ手応えを感じていくようになりました。

多数の雑誌・書籍に掲載、紹介されたことは、大学受験において非常に役に立ちました。それらを実績とすることで**AO入試に合格し、結果的に受験にかかる費用と時間はかなり削減できたと思います**。過去にやってきた実績が何かの役に立つ、という経験はこの時が初めてでしたが、その後様々な場面で実感していくようになります。

技術力が低くても、作ったものを公開すれば世の中の人が使ってくれるような時代だったから、ラッキーだっただけなのですが、何かを作って公開しなければ何も得られませんでした。このタイミングで、**「例え稚拙であったとしても作ったものを公開すると、色々とメリットがある」ということを身をもって学べた**のはなんともラッキーでした。

![spdia.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/14097/c043076d-7e10-88fd-6ee1-dedfe0a9373a.png)

↑当時開発していたソフト。Vectorの新着ソフトレビューでも紹介していただきました。


# 大学入学直後: はじめてのチームでの開発
## 仕事で学んだ技術が個人の開発にフィードバックされる

**個人でのWindowsアプリケーション開発経験がきっかけ**で、大学入学早々、学内のベンチャー企業でバイトをさせていただくことになりました。

当時一緒に仕事をしていた大学院修士課程の先輩エンジニアからは、かなり多くのことを学ばせていただきました。それまでの自分は完全に独学で、一人での開発しか経験していなかったため、知識量は乏しく、扱える技術にもかなり偏りがありました。

CVS、Struts、Hibernate、Velocity...今となっては既に他の技術にリプレイスされているものばかりですが、当時これらの技術に触れられたのは、エンジニアとしての成長という点で大きなターニングポイントでした。最初の学習はそれなりに大変でしたが、これらの技術の導入があったことで、2人のチームでもコードの品質と生産性を保つことができていたのではないかと思っています。この経験は、後述する「チームのアップデート」というものを考える上での重要な経験になりました。

当時は完全に**会社の方で学んだ技術や考え方が、自分の個人の開発に活かされる**という流れになっていました。**仕事としてプログラムを書いて報酬をもらい、さらにそこで習得した技術によって個人の開発が加速していく**という実に至れり尽くせりな状態が2-3年ほど続きました。

# 大学後半: チームでの開発経験を経ての個人開発
## チーム(会社)での開発の良さと個人での開発の良さの認識
ありがたいことに、スタートアップの方では十分すぎる額の報酬をいただいていたため、個人の開発の方は収入などを気にせず、素直にその時に作りたいものを作る、ということができました。

その時その時で面白そうだと思うものを色々と作っていたのですが、その中の一つにインターネット上で知り合った方と一緒に運用していた**DTM作曲コンテスト**というコミュニティサイトがありました。

![133701353_2719384785040753_4958646677877546907_n.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/14097/a1464e69-a242-9ab0-e759-e907453fed56.jpeg)


そのサービスは当初既成のCMSを使って運用されていたのですが、ユーザ規模の拡大に伴いゼロからフルスクラッチでサイトを作ることになりました。エンジニアはデザイン面含めて私一人だったのですが、既に会社の方でウェブサービスをいくつか開発した経験があったため、なんとかなるだろうと思い一人で開発とサーバー運用をやることになりました。

**実際にやってみると、一人での開発、サーバー運用はかなりハードでした**。Subversionレポジトリの設置、サーバーの設定やデプロイスクリプトの準備など、それまで会社での開発では先輩がやってくれていたような部分は、いざ自分でゼロからやるとなると非常に骨の折れる作業でした。また、うまくいかなかったときに相談できる相手がいない(実際には、聞けば助けてくれる人はいただろうが、迷惑を考えると気軽にはできませんでした)という状況は、かなり効率が悪くストレスを感じるものでした。

最終的に無事にシステムは完成し、大きなトラブルなく移行、運用を開始することができましたが、**一人で開発・運用することの大変さと、それまで無自覚であったチームで開発することによるメリットを認識することとなりました**。一方で、自分一人で全て決めることができたため**自由に使いたい技術を使って、好きなように設計することができました**。会社での開発の経験を経た上で個人開発をすることで、**個人の開発と会社での開発、それぞれの良さを身をもって実感することになりました**。

## 開発の楽しさと報酬を得ることのバランス

なお、そのサービスの開発は完全に趣味でやっていたため当初収入はなかったのですが、その後規模拡大に伴って[法人化](https://creofuga.net)され(その後2020年6月にサービス終了しました)、さらに助成金がおりたこともあり、結果的に途中から一定額の報酬をもらえるようになりました。生業としての開発であれば、いくら内容が面白そうでも収入の見込みがないものに生活を賭けるわけにはいきません。しかし、収入を目的としない個人開発は、**うまくいった場合には作りたいものを作って収入まで得られる**という一挙両得なケースもありえるのだということを学びました。

同時に、**作りたいものを作ってまとまった収益を得られるケースが稀である**ということもこの時期に学びました。この時期、上記サービス以外にも複数のソフトウェアやサービスを開発・公開してきましたが、その中でまとまった収益を得られたものはありません。

# 社会人1年目: 個人開発で得られた知見のフィードバック
## 知見のない技術を仕事でいきなり本番導入することへの抵抗

一人でのウェブサービス開発/運用で得られた経験は、仕事の方にもフィードバックできるものでした。この頃から少しずつ、個人での開発で得られた知見を仕事の方にフィードバックしていけるようになりました。

大学院卒業後、学生時代から手伝っていた会社のうちの一つに就職することになりました。既に会社の中でも古参の一人となっており、社内での開発の方向性決めや技術選定・導入などで裁量を与えられるようになりました。しかし、いざ自分が色々と決められる状況になってみると、新しい技術の導入という意思決定は簡単ではないということに気が付きます。**失敗すれば色々な人に迷惑がかかってしまうかもしれない状況で、メリットとリスクの評価が難しい新技術を導入するのには勇気がいるのです。**

世の中には便利なフレームワーク、ライブラリやツールが溢れています。それぞれ長所や短所があり、また相性もあります。ドキュメントや先人の投稿などを読むことで、実際に触れずとも大枠を把握することはできるかもしれませんが、大抵のプログラムには「落とし穴」があります。「愚者は経験に学び、賢者は歴史に学ぶ」という言葉がありますが、一方で新しい技術に関しては多少の経験とデータがなければ正しくメリット・リスクを評価するのが難しいという側面があります。プロトタイピングでわかる部分もありますが、例えばBaaSやサーバーレス技術など、実際にある程度ユーザがいる状態で運用してみないとわからない知見もあります。

まずは小さなアプリやサービスで試しに導入をしてみて、その経験やデータを評価した上で大きなサービスへの導入を検討するということができれば理想です。しかし、会社の看板を掲げて出すサービスでは、例え規模が小さかったとしても守らなければいけないラインというものが存在します。会社の規模が大きくなるほど、会社の名前が出る場面で実験をすることは難しくなっていきます。

## 個人で使ったことがある技術ならある程度自信を持って導入できる

そのような中でも、ある程度自信を持って導入できる技術があります。それが個人開発で使ったことがある技術です。前述のように、**失敗をしたら色々な人に迷惑をかけてしまうという状況では、自身の経験をもとに100%ではなかったとしても自信を持って仕事をできるという状況は、仕事のストレスを十分に減らしてくれます。**

この頃から、**個人での開発で得られた知見を仕事にフィードバックする**というケースがわかりやすく増えました。

# 社会人2年目ぐらい: 個人での開発による収益が増える
## 未知のマーケットへの進出
社会人2年目ぐらいの頃に、個人での開発の方で大きな出来事がありました。App StoreのMac版であるMac App Storeのオープンです。

App Store経由以外でアプリをインストールできないiOSと異なり、Macでどの程度ユーザがApp Storeを通じてアプリをインストールするかは未知の状態で、当時この市場に本格的に参入しようと考えるデベロッパーは少なかったように思います。(今でも少ないと思っています)

個人で片手間に作ったアプリをリリースする分には、仮に収益が得られなかったとしても失うものはありません。冬休みの時間を使ってアプリをいくつか完成させ、Mac App Storeのオープンと同時にアプリをリリースすることができました。オープン当初のMac App Storeは所謂ブルーオーシャン状態だったため、**個人開発の成果としては十分な額の収益を手にすることができました**。

## 収入の柱が増えることによって、楽しい会社/仕事を選べるようになった
個人でのiOS / Macアプリ開発は、現在でも続けています。ありがたいことに、そのうちのいくつかのアプリは多くのユーザにご利用いただいています。

* [Tunacan 〜画像の大きさを揃えて等間隔に並べるヤツ〜](https://apps.apple.com/jp/app/tunacan/id980577198?mt=12)
* [字幕スタジオ将軍](https://apps.apple.com/jp/app/字幕スタジオ将軍/id1491916135?mt=12)
* [VSSR 〜無音シーンをバッサリカット〜](https://apps.apple.com/jp/app/vssr/id1522193999?mt=12)

いずれも有料オプションを用意しており、継続的に若干ではありますが収益をもたらしてくれています。(ちゃんと確定申告して税金は納めております)

会社からの収入以外の収入源が生まれたことで、人生の選択肢にも幅がうまれるようになりました。給与の額はもちろん大事なのですが、相対的に重要度が下がりそれ以外の部分を大事にして仕事を選べるようになりました。

余談になってきてしまいますが、いざ個人でも本気で頑張れば収入を上げて食べていくことができそうだということが見えてきたとき、私の場合は会社に対して人間関係や社会的なものを期待するようになりました。結果として、今の職場ではその部分がとても満たされており、幸せに働くことができています。(コロナ禍でリモートになってしまいましたが)

そういう意味でも、個人アプリ開発で多少の収入を得られたことは、会社での働き方という点でも大きなプラスとなりました。

# まとめ
以上、長くなってしまいましたが20年にわたる個人での開発と人生/仕事への影響を振り返ってみました。

何気なく公開したフリーウェアが雑誌に掲載され、無料で雑誌を読める状況が生まれ、その実績をもとに大学に入学することができました。稚拙な内容であったとしても、世の中に公開し続けていれば色々なものが得られるのだということを学びました。

会社での仕事においては、はじめは仕事で得られた知識・技術を個人の開発に活かす一方でしたが、少しずつ個人の開発で得られた知識・技術を仕事にも活かすことができるようになりました。失敗すれば人に迷惑がかかるような状況で、新しい技術の導入を決定するのは難しいことですが、そういう場面で個人での開発によって得られた知見は助けになっています。

Mac App Storeのオープンによって、個人アプリの開発でも収益を上げることができるようになりました。会社以外の収入源が生まれたことで、人生の選択肢の幅が広がるとともに、どういうことをすればどの程度稼ぐことができるのかが見えてくるようになりました。会社に依存しなくても生きていく方法はあると学んだことで、「楽しさ」を基準に会社での仕事を選ぶことができるようになりました。

他以外にも20年間の間に色々なことがありましたが、長くなるので割愛させていただきます。20年間個人アプリ開発を続けてきましたが、私の場合は個人アプリ開発は経験的にも経済的にも多くのメリットをもたらしてくれました。

最後に、今はなきTECH Win!をはじめ、当時の雑誌の文化を支えてくださっていた出版社/編集社の皆様に最大限の敬意を払いつつ、このアドベントカレンダーの賞品ThinkPad X1 Foldが当たることで、「また一つ個人アプリ開発をしてて良かった」と思う日が訪れることを期待し、終わりとさせていただきます。