個人開発の話
この記事は「ホシハウス Advent Calendar 2021 - Adventar」10日目の記事です。
9日目はろめろが「今年見た映画10選」を書いてくれました(メンバー向け公開記事です)。見た映画が275本とのことなので、多分僕の300倍ぐらい映画見てるんじゃないかな、すごいね。シンエヴァだけ見ましたが、すごくよかったのでエヴァを見たことのある皆さんにはとてもおススメです。
今日は僕がプライベートで開発している話をしたいと思います。期間としてはまだ1年ぐらいだから大した量を書けている訳じゃないけど、何かの足しになればいいなって感じ。
個人開発の目的
始めたきっかけ
会社の同期が技術サークル的なものを作りたいんだけどメンバーになってくれない?っていう誘いでした。元々勉強しないと死ぬ環境にいると思っていた僕は、良い環境かもしれないなと参加するようになりました。会社の同僚や後輩と作ったものを見せあったり、業務で得た知見の共有なんかを持ち回りで発表してたりしています。
また、業務で書いているコードで大したことしていないのも始めたきっかけの1つです。今僕が業務で弄っているアプリはもう既によく使うCRUDを司るような基本メソッドとして共通化されて実装されてしまっています。そのため、基本改修しか行わず、要件に合わせてそれらのメソッドを上手に呼び出すだけの実装が多い感じです。これは非常に退屈です。まぁそもそも開発部署なんてそんなものな気もしますが。
現状そんな感じの業務が多くて、正直ゼロベースからネイティブアプリを作る知識なんてほぼ付かないのでじゃあ自分で作ろうとなった訳です。まぁあとは、コーティングへの心理的なハードルを下げるために普段から触っておきたいというのもあります。こんなことを言っている時点でエンジニア向いてない説もありますが、他に食い扶持が無いので頑張りますと言ったところです。
出来るようになりたいこと
とりあえずアプリを一から作れるようになっておきたいなーというのがざっくりとした目標です。汎用性の高いスキルが欲しい、AndroidやiOSへの理解を深めたいみたいなところで、とりあえず下に書いたような「今時のアプリならこれぐらいの機能あるでしょ」って感じで思いつくものは、やってみたいなと思っています。これぐらい抑えておこうな的なものが他にもあれば教えて欲しいな〜〜〜〜(大声)
- データバインディングの仕組みの理解
- 各種権限の許可周りの扱い
- 非同期処理のアレコレ
- バックグラウンド処理
- アプリ証明書
- Push通知
- アプリ内ストアレビュー
使っている言語・フレームワーク
使っている言語はC#でXamarin.Formsを使っています。一時期Kotlinを使っていたけど、気持ちの面で続きませんでした。XamarinはXamarinで辛いところも多い(後述)けど仕事に直結してるからモチベーションとしては大分マシです。
他案件に参加した時とか転職とかした時にXamarin使う機会があるかは謎だけど。そもそもまだ転職する気はないし。
作ったもの
とりあえず作ったものを紹介します。
スーパーモンキーボールもどき
赤い球をスマホを傾けて転がして、画面一番上まで行ったらゴールというアプリです。加速度センサとかジャイロセンサとか、リアルに干渉できそうなアプリが作りたくて作りました。当時スーパーモンキーボール2のRTAを見るのにハマっていたので作ってみたというところが大きいです。マップの見た目は完全にカイジの鉄骨渡りですが…。
マップを複数用意していかないといけなくなった辺りで、多分これはKotlinで作るものじゃないなと思ってやめてしまいました。いつかUnityを触った時に作ろうと思っています(こういうゲームチックなものを作るのはUnityの方が向いていると思ってる、Unity触ったことないから分からんけど)。
こういうセンサを使うアプリは他にもアイデアだけはあって、大の大人が全力でスマホを振る絵面が見た目的に面白そうだなと思ったので、ボタン連打の代わりにスマホを振ってスコアを競うシュウォッチ的な奴が作りたいな〜と思っています(思っているだけ)。
音声系のアプリ
動機は、レゲエホーンの音とかVの叫び声の切り抜きとかにハマってていつでもそれが簡単に聞けるといいなって思ってワンポチで特定の音源を流せるものを作ろうとしました。とりあえず音源埋め込みで作ってみたけど、その辺で「これ再生したい音源をスマホ内で用意するのがクソ面倒くさいな」と思って、悩んだ結果録音機能があればとりあえずいいかという結論に達しました。
録音機能を作るにあたって「そういえば自分の声を録音して遊ぶのは楽しい(絶対人前でやらないようなカスみたいな物真似とかね)」ということを思い出し、そういう遊び方がしやすいものがあれば嬉しいなと思ってそれを今作っている最中です。とりあえず録音して再生するところまでは出来ているので、あとは画面UIと保存の処理どうしよう問題をなんとかすれば最低限はいけるような気がしています。
その辺にある録音アプリも適当にDLして使ったことはありますが、いちいち名前つけて保存してからじゃないと再生出来なかったりするので使うテンポが悪いなとは常々思ってたのでいい機会かなと。気に入った音声だけ保存できる感じにすると使用感がいいんじゃないかと仮説を持っているところです。
技術の話
タイトル通り技術的な話をします。
Xamarin
この辺は愚痴ですが、Xamarinはマジでユーザーが少ないっぽいです。クロスプラットフォームの対抗馬としてはFlutterとReact Nativeがあって、下の記事を見て貰えば分かりますがGithubのスター数が文字通り桁違いです。
ユーザーが少ないということはネットに転がってる記事も書籍もリポジトリも少ないということで分からないことを調べるのが大変です。Microsoftの公式リファレンスも日本語ページがクソすぎるので見ていられません(英語で読むとちゃんと書いてある)。
下に貼った海外兄貴のYoutubeチャンネルが一番参考になってるような状況です。基本的にXamarinを扱うということは英語と向き合わざるを得ません(Google翻訳を開きながら)。英語読むより説明されてるコードを読んだ方が早いまである。
AndroidとiOS
てっきりXamarinくんがOS間の差異を埋めてくれるもんだと思ってたけど、意外とそんな万能なものではないっぽい。端末依存の機能実装のところが多い印象だけど、インターフェースを定義した上でAndroidとiOSそれぞれの挙動を実装しないといけない。録音については上に貼った動画のようにプラグインがなんとかしてくれるけど、人口が少ない分プラグインも少ないのでなければ自分で作るしかない。
そんな感じなので、Xamarinがどこまで出来て、僕がどれぐらいAndroidとiOSのこと分かってないといけないかの理解から勉強していかないといけない気がしています。どこまで踏み込むべきかもあんまり分からん。でも分かるとドヤれそう。
モチベーションの維持
個人開発のモチベーション維持が難しいという話をします。
やりたいことが多すぎる
そもそも世の中に面白いコンテンツ多すぎ問題がついて離れません。故に僕の時間が足りない問題が常時発生しています。
FF14暁月フィナーレ面白すぎだし、筋肉痛しんどすぎて動けない日もあるし、ぼんやりしているとTwitterとYoutubeに時間を吸い取られてしまいます。正直その辺の影響が大きくて個人開発の進捗が牛歩になっています。本当はもっと本読んで勉強したいんだけど上手くいっていない。読書が出来なかった話は後日また書く予定です。
開発へ気持ちを向ける種
会社の同僚や後輩と進捗を見せ合いっこするとモチベは上がります。ただみんな忙しそうで進捗が生まれてる人が少なめなので刺激もその分減っているのが最近の感じ。
あとは、この前のDroidKaigi見て一瞬意識が高くなって開発が進んだってのがあります。技術的な勉強が好きな人に囲まれるのが一番手っ取り早そうな気がします。そうすると自分の無能さに苛まれて辛そうではありますが。
まとめ
大したものは出来ないと思いつつも、今後も自分のためにちびちびやっていきます。
以上、終わり。
明日はいんげんが「仲良くなったアイドルの話」を書いてくれます。乞うご期待。