編集前記

"まとまる前の文章" を "まとめる前" の文章

Androidアプリ制作を始めた話

経緯

ちょうど手が余ってたところを やってみんか? とお誘いいただいたので。

作ってるもの(の概要)

APIサーバを見に行って取得した情報を表示したり、App上で入力されたデータをもとにAPIサーバににリクエストを投げたりするアプリ(それはそう)

担当範囲

Androidの実装全部。 UIデザインや画面遷移表、エンドポイントの仕様書なんかの、実装以外のソフトなところとかはありがたいことにいただいているので、それを実現するために0から実装をやってみている。

ざっくり計算で、作らなきゃいけない画面遷移が30枚くらいある気がする。 初手でこのタスク量果たしてこなせるのか。

PJ参画時から今日までの歩み(ざっくり)

  1. AndroidAppの開発経験はほぼほぼ0 (AndroidStudioというのを使うっぽいということと、今はJavaではなくkotlinで書くとイケてるらしい くらいの認識しかなかった)
  2. PJに参加し、手持ちのWin機にAndroidStudioを入れてみるも、Emulatorがうまく起動しなくて詰む(HAXM/Hyper-Vあたりの話)*1
  3. なんとかエミュ立つように環境構築できて、backendのfunctionsとの疎通をしようにも認証回りが通らなくて1回休み*2
  4. ようやく一通り開発環境建てられていざTRY(Kotlin版Android開発の教科書!的なのを買ったけどあんまり読んでない。*3 )
  5. 後先考えずにぜーんぶ MainActivity.kt に書き込む暴挙→見通しが立たずこれ根本的に無理な奴だ、と暗に理解する*4
  6. DDDの本に出会い、これをやってみるしかねぇなの気持ちになる(この話はまた今度)
  7. 型いっぱい作ってKotlinに型制約させるのめっちゃ便利じゃね?に気づく(今まで型ゼロのPythonをメインに書いてたから最初めっちゃイラついた。今でも !!の意味とかあんまり分かってないけど、IDEが書けっていうから書いてるみたいなところある)
  8. レイアウトの作り方とattrの設定にも慣れてきたし、kotlinクラスもいっぱい分離できて見た目的にもそれなりに作れてるっぽいし、Android開発実は楽しいな?となり毎晩のように開発に着手する*5
  9. 作らなきゃいけないものが多すぎて(キャパに対して)、 これ、このままの方針で作り続けて完成するのか? とガウディの顔が見え隠れし始める
  10. そっか、そういえば一回もプロの技を見て学んでないな、と思い イケてるAndroidオープンソースアプリ集 - Qiita あたりを見に行った瞬間、その "なにもわからなさ" にクラッシュする
  11. イマココ→ちゃんと 何もわからない が来てある意味安心している

所感

これはまぁ最初からわかってたことだしとは思うが、独学チャレンジすると、何かに気づいていないことに気づけなくてつらい。

特に*6Androidの世界、Jetpackが入る前後でやれることがだいぶ様変わりしてるっぽいし、
例えば binding を使うのか findViewById() なのかとかも一例だし、
Javaだとこう書くけどKotlinだとこうだよね、もあるし、
そもそもKotlinの記述例がなかなかggって引っかからなかったり*7
そもそもそもそもAndroid今持ってないから、UIパーツとかも これいろんなとこで見るよね の感覚とかもないから じゃあキャンセルボタンって右に置くんだっけ?左? みたいなの肌感ないからいっつもggっちゃうし、
いろいろいろいろ考えなきゃいけないなぁと感じる。

しかも、考えなきゃいけないことに"後々"気づく。全部後手になる。もちろんしょうがないとは思うんだけどさ。

そもそも、ソフトウェア開発それ自体に慣れていない。
業務でやるのはSQLを自分向けに書くこととDBとテーブルを立ててBIに連携することと、Excelをいい感じに操ることと、Psで画像を作ることくらいだ。
そのどれもが、チームでソフトウェアを開発する、という段にない。

タイプじゃない、土俵の問題だ。自分はまだソフトウェア開発っていう土俵に上がっていないんだ、だから脳みそからひねり出した理論なんかでソフトウェア開発を測ろうとする。見当違いもいいところだ。*8

例えば、テストのことは何も考えてない。きっと後々テストやったほうがいいよね、の段になって なんでもっと早く考えとかなきゃいけないことに気づかなかったんだろう になる。そしてリファクタなんか進まない。 ここにこんな駄文を書いている時間で1行でも勉強をすればいいのにそれをやるつもりがない。意図的に負債をレガシーを積み上げてしまうのだ。

もちろん物ができていく過程はとても楽しい。エンジニアとしての才覚は多少なりとも持ち合わせているから、モノづくりそれ自体の魅力センサはいいほうだと思う。
でも根本的に要領があまりよくないので、同時並行でViewもロジックもドメインも考えながら作らなきゃいけないこの アプリ開発 という作業が途方もないサグラダ・ファミリアに感じてしまうのだ。

でもでも一方で、そんなんに打ちひしがれたそがれている余裕はない。こんな序盤も序盤で、背の立つ海にすら入っていないこの状態で、Android開発やってみたことあります なんて公言できないのだ。JustDoItというやつである。

そう、別に完璧を追い求める必要はないのだ。1円でももらえる仕事でもなければ、今後のキャリアのためにやってることでも基本ない。やってみたくて、やってみようと思って、チャンスが降ってきて、やってみているだけなのだ。

そう思うとAndroid開発、楽しくなってくる。ここからもっと。

*1:手元にあるマシンのうち、片方はハードウェアの制約でここら辺が根本的に設定できず。たまたま可能なハードを搭載したゲーミングPCを組んでたから助かったものの、これなかったらそもそも開発環境構築できなくてPJからグッバイしてた

*2:https://developers.google.com/android/guides/client-auth の話。そもそもこのゲーミングPC、WSLはいってないじゃん!みたいなところからコケた

*3:なんかわからんことが出たときに辞書的に使ってるから無駄にはなってない、はず

*4:実際"はじめての~"的ライトな本って、activity数枚+ちょっとした画面遷移でfragment~くらいのサイズのアプリを習作する内容が多く(今回手にしたのもだいたいそう)、初心者がこうなっちゃうのって必然じゃね?って思う

*5:俗にいう、"完全に理解した"ですね

*6:特になのかはわからん その他もそうだとは思う

*7:昔に比べたらだいぶあるんだろうなとは感じる

*8:闘牌伝説アカギ アカギvs偽アカギのシーン好き