2019/08/27
とある受託企業でiOS開発をしています。
個人開発のしくじり記事です。noteとqiitaで迷いましたが、Gitの共有もしたいのでこの場をお借りして書かせて頂きます。
業務である程度のことなら開発ができるようになってきたということもあり、個人開発にチャレンジしたいと思い立つ。
それと同時に最近ピーター・ドラッカーの"フィードバック分析"を紙ベースで行なっていたので、どうせならアプリ化しようと思い開発に取り掛かる。
フィードバック分析とは
自分の強みを知り、その強みを伸ばしていくためのメソッド。ピーター・ドラッカー自身も長年このメソッドを取り入れていた。
特に何もしていません。
思い立ったら即行動。
TwitterやFacebookのUIをみて、自前で全部作れるわとか思っていた頃。
また、フィードバック分析のアプリがなかったということもあり、市場のパイオニアのような感覚だった。
これがブルーオーシャンww
とか思っていた。とにかくイタすぎた。
妄想フェーズは終わって、現実的にデータベース設計とかアーキテクチャの学習とかやっていた。
市場のパイオニア感をモチベーションに難しい実装も幾度となく乗り越え、その度に達成感に包まれた。
この頃が一番精神的に豊かだった。
モチベーション大暴落。側から見たら情緒不安定。
なぜかアプリがSNS寄りになっていく。そして指が勝手に動く。気づいたらSNSになっていた。
この時に、機能定義などは開発前に着手するべきだと痛感した。
後半から気づき始めたが、初期フェーズの個人が出すアプリにしては規模がデカすぎる。
何も考えず開発を続けていると、あれもこれも必要なんじゃないか とか こんな機能がほしい と、つい目的から遠ざかってしまう。それが行き過ぎたのが俺だ。
これに関しても事前準備である程度は回避できたはずだ。
そして自分は一体なんのために戦っているのか、何と戦っているのかわからなくなってきた。しかし、一つだけ目的があった。
それが"リリース"。
自分で作ったアプリを市場に出せば何かが変わるんじゃないかという想いで無心で頑張った。
それはまるで仲間を失い生贄の烙印を押されながらも、グリフィスを倒すというただ一つの目的のために戦い続けるガッツのように。
今回の記事で一番主張したい。調子に乗るなと。一人のエンジニアのリソースで世の有名アプリと張り合えるアプリなど作り出せない。
誰でも最初はすごいものを作りたい。その気持ちはわかる。だが、"過ぎ去るは及ばざるが如し"というように、そんなことをするとコードの前に精神が破綻する。それが俺だ。
ざっくりとでもデータの流れや画面遷移の流れを書き起こすべきだった。自分の場合局所的に必要なデータや画面を都度書き起こしたりしていて時間と労力の無駄が多かった。
すでに世の中には沢山のしくじり先生がいる。
同じ失敗をする必要はなかった。
アプリで同じようなviewを使い回す場面が多かった。しかしそれはあらかじめ把握できたものだ。自分は愚策にもBaseViewなるものを作ってこの問題を解決してしまった。反省はしている
BaseViewControllerは作りたくない
最初は具体的な変数名をしっかりつけていたが、いつの間にか
・token
・documentID
などという抽象的な変数名をつけるようになった。一周回ってこんな変数名つける俺かっこいいとか思ってたけど後からコード全体見渡したら地獄絵図だった。
変数名は長くなってもわかりやすく。
リーダブルコード
どこにどういう目的で処理を書くかなど最初は何も考えなかった。
しかし、規模が大きくなるとそれらの負債は自分を襲ってくる。
やられる前に対策しよう。
ひどいコードをメンテしてきたからこそ実感する、良いコードや良い設計の大切さ
コーディング原則
デザインパターン
deinitとは
クラスインスタンス解放時に呼ばれる関数。この関数が呼ばれなければ、クラスのインスタンスがメモリ上にまだ残っていることを示唆している。メモリリークの原因になる。
ある時インスタンスが破棄されたタイミングで処理を走らせたい場面があった。
しかしdeinitが走らない(循環参照)、冷や汗をかいた、そしてLintの大切さをしみじみと感じた。
デバックは出来たもののその時間はもう帰ってこない。
それ以外にもLintを導入する理由は数えきれない。
(Lintを入れたらいいのではと思われるかもしれないが、入れた際の地獄絵図を想像するだけでも泣きそうになるから入れなかった。今回だけ許して)
ハマりがちな循環参照について
SwiftLint
私がLintを愛する3つの理由
一応完成はしたものの、リリースは見送る形にしました。
理由は以下です。
・フィードバック分析機能がもはや機能していない。と言うよりも存在にすら気づかない。
・結果SNSになり、それでもリリースしようと思ったが、同じようなアプリはかなりある。
・次に作りたいものがあるので、申請に時間を費やしたくない。
・etc..
しかし、そのままでは何かすごくモヤモヤした気持ちが残るので、せめてこれからiOSで個人開発に取り掛かろうと思っている方々にこれを活用してほしいと思い、Githubに公開しています。
*諸々修正はしましたので、ある程度参考にできるコードにはなっていると思います。
よかったらご覧ください。
以上しくじりでした。
しかし今回の開発で学んだことは計り知れす、ナレッジも沢山溜まりました。
今回の反省点を全て活かし、これからもめげずにアプリ開発を続けていきます!
その度に個人開発の開発・運用状況なども共有していきたいと思っているのでTwitterもフォローしていただければ嬉しいです。
YUKI_個人アプリ開発&MobileEngineer