ダメなアプリを作るための10の優れたルール パート1:技術編
素晴らしいアプリのアイデアが浮かんで、フィードバックを集めて、なんとかチームすらも作って、app storeを席巻するために全力を注ぐ・・・というのは誰でも経験があるだろう。で、君が最高にイケてると思ってるエッグタイマーアプリの開発に取り掛かる1秒前に、君がこれから何をしようとしているのか、少し考えてみる価値はあると思う。
Chet Haase氏のすごく面白い投稿、「ダメAPIのための10のルール」を受けて、僕はダメアプリを作る方法についてのリストをまとめてみることにした。でも、いくつか最初に断っておきたいことがある:
- 世の中にはダメアプリがごまんとあって、それぞれダメなところがあるので10個にまとめるのは本当に難しい。最悪のパターンをまとめられるように最善を尽くしたけれど、ここに書いたよりはるかにダメなアプリを君たちが作り続けてくれると信じている。
- アプリを作成する上で素晴らしい点は、製品のあらゆる面で間違った方向に行くことができるのと、それによって各チームメンバーが君のアプリを台無しにする可能性をもたらしてくれることだ。だから僕はこのブログを技術面、UI/UX、製品という3つに分けた。
- 良いアプリでも悪いところの1個や2個は持ち合わせているものだし、完全に良いか悪いかというわけではない。
- これらの悪い習慣は、現時点での悪い習慣だ。なぜなら、Googleはすでに、習慣をいつでも変えられると証明しているからだ(例えばボトムナビゲーションが今来てるって?なんてこった!)。
- アプリの良し悪しについて、僕なんかが言えた義理じゃない。だってここに書いてあることをほとんどやってきた挙句、それがいかにダメだと分かったんだから。
- リストは優先順位別に分かれているわけではない。なぜなら君のアプリをストアリストから葬り去ったものが何だったかを比べるのは難しいから。
- 僕はChet Haase氏じゃないので、彼のブログ記事の半分も面白くないし為にもならないけど、ごめん。
よし、もう十分かな。リストを始めよう。
1.可能な限りの許可を求めよう
君のアプリに値打ちがあることは君がよく知っているから、ユーザプライバシーみたいな小さなことにまごついていてはだめだ。ユーザはシステム起動時に送信する重大な分析を切に求めているんだから、BOOT_COMPLETEDの権限を求めよう!もし君がこの素晴らしいURLを友達にシェアする必要があるなら、そいつの携帯からコンタクトリストを引っ張り出して君のサーバに送って、そいつら全員にスパムを送っちゃおう!データは権力で、他人のデータは金だということをお忘れなく!
ボーナスポイント:Android Mの権限を実装するときは、君の許可を得るまでユーザには何もさせちゃいけない。たとえいくつか承諾してくれていたとしても、負けちゃだめだ。
2.ロード中はUIスレッドをロックしよう
なあ、今ロード中なんだ。くだらないUIイベントで僕たちを邪魔したりしないで、ロードに集中させてくれると本当に幸いだ。おとなしく座って3.4Mのconfig.xmlファイルの処理が全部終わるのを待ってろ!分かったか!?
3.永遠に再試行しよう
ええ、僕らはまだconfigファイルを待ってますが、こんな接続環境のくそ悪い地域に住んでるのはお宅のせいですよ。データプランとバッテリーを食うのを僕らのせいにしないでくれます!?
4.Activity や Fragment の状態を保存するな
ぼんやりしてると痛い目見るぜ。画面を回転させただろ?ブーン…あなたのフォームは失われました。これはアプリから絶対に離れちゃだめだとユーザに分からせるには、もってこいのやり方だ。単に電話がかかってきただけの時でさえも。
5.AlarmManager に setExact と RTC_WAKEUP を使おう
AlarmManagerは未来のある時点でコードを実行させることができる、Android のGet ツールだ。どういうことかというと、まずタイミングがすべてだということと、次にAlarmManagerには選択肢がいくつかあって、携帯の状況、バッテリー、ネットワークやその他ピギーバックできるタスクに応じてコードを賢く走らせたり、リスケしたりすることができる。でもおそらく君にはこんなにしゃれた機能なんていらないかな。「アプリをアップデートしてください」っていう通知が朝の6時に起こしてくれるに越したことはないからね。
ボーナスポイント:全ユーザ向けにsetExactとRTC_WAKEUPを同時に組み合わせれば、サーバへのネットワーク要求で君のロードバランサをギリギリまで追い込むことができるぜ。
6.アプリケーションコンテクストをところかまわず使おう
だってやらない理由がないでしょ?アプリケーションコンテクストをonStartのアプリケーションクラス内に静的メンバーとして保存して、それをところかまわず使うんだ。超簡単、超単純、超モジュラーっぽくない。テーマエラーをデバッグしたいときに最悪にしてくれるし、テストを悪夢にしてくれる。まさにWin-Winだね!
7.エラーはできる限り専門用語にしよう
そうすれば、ユーザ側で何か不具合があったときにすごくラクになる。だからユーザは君にメッセージを送ってくるだろうね。あと、そうすることで君のアプリが開発者に優しいものにもなるね。だから、僕みたいな人にとっては、https接続への証明書がなくて、そのせいでアプリが写真をシェアするときに機能停止したままなんだな~っていうことが容易に理解できる。
8.自分で全部実装しよう
サードパーティのライブラリ用スペースをほとんど残してくれないサポートライブラリとGoogle Playをインポートしてからというもの、Androidには65kという非常に厳しいメソッド制限がある。とにかく、Jsonのパースを扱うのはどのくらい難しいんだ?Gsonライブラリはいらない。若手の開発者にとっても、就職面接でへたくそな文字列照合の実装を練習する素晴らしい機会になる
9.時期尚早な最適化
よかった、ソートを自分で実装したんだろ?おそらく、バケットソートで…。だって均等に分散されるデータを君は知ってるから。多分そう思ってるね…。Romain Guy氏とChet Haase氏(また彼?)のトークも見て、全てのenum型を定数int型に切り替えて、オブジェクトをところかまわず引っ張り出すのに使う。たとえそれが一時的な機能だったとしても。だって何が起こるかやってみなきゃわかんないもん。
よく言うでしょ、早まった最適化は全ての悪の根源だが、ある偉大な女性はこうとも言った。「善と悪なんてない。あるのは権力と、それを探し求められない弱い者だけだ」。だから、こうしたグラフアルゴリズムの実装の際はN(変数)の威力を知ってほしいと思う。
10.静的ユーティリティクラスに全て展開しよう
全部移そう。Android 特有の機能、ネットワーク命令、権限チェック、入力チェック、“オブジェクト指向じゃなくて絶対にテストできないコード”がすべてここに行く。
ボーナスポイント: 、1つ以上のユーティリティクラスを持っておくと、1つじゃ足りない上に複雑になってさらにいいぞ!
以上、次回UIとUXについて少し話す前に、もっと悪いコードにする方法を知りたい?ぜひ君の考えをコメントで聞かせてほしい!
原文:https://hackernoon.com/10-good-rules-for-bad-app-part-1-technical-4ca18609b13c#.lsd2bhbj3 (2016-8-23)
※元記事の筆者には直接翻訳の許可を頂いて、翻訳・公開しております。
関連記事
-
-
Criteoにおける大規模機械学習の仕組み
Criteoの事業の核を担うのは、機械学習です。当社は、広告を表示させたいときの選択や、個別の製品レ
-
-
パフォーマンスの悪さがeコマースの売上に与える影響とは
休暇期間になると、ECサイトが遅いせいでショッピングカートの18%が破棄されるという。そんな恐ろしい
-
-
1家に1人!旦那がエンジニアだと便利な5つのこと
よく便利なものに対して「1家に1台」とか言いますよね。 まさしくエンジニアはその「1家に1人」の便利
-
-
Linux OSのジッタを体系的に削減する黒魔術
低遅延性の求められるトレードシステムにおいて、ジッタの原因をどのように体系的に発見してひとつずつ削除
-
-
Appknoxアーキテクチャ – AWSからGoogle Cloudへの切り替え
この記事はAppknox社のフルスタック&DevOpsエンジニアであるdhilipsiva氏による寄
-
-
エンジニアがもっと働きやすい環境に!エンジニアに嬉しい福利厚生と導入企業まとめ
IT関連企業を筆頭に、今やどこの企業の求人を見ても「エンジニア募集中」の文字。優秀なエンジニアを獲得
-
-
IT系妻によるライフハック術11選!
さっそくですが、あなたに質問です。 洗濯を洗濯板でやってますか? 掃除をほうきとちりとりでやってます
-
-
エンジニア向け!!新しいプログラミング言語を学ぶ時のサイト一覧
最近ではプログラミングスキルが世界で注目されており、就職や転職においても十分なスキルの一つとなってい
-
-
【比較表あり】非エンジニアの人にも知ってほしい。エンジニアに優しいチャット・コミュニケーションツールまとめ
エンジニアに合ったコミュニケーションツール プロジェクトを円滑に進行させるためにも、チームでのコミュ
-
-
Dockerコンテナのためのテスト戦略
おめでとう!あなたはDockerイメージの作り方を知っていて、わかりやすいアプリケーションで複数のコ