ZAICOでは、Android・iOS・Rubyエンジニアを絶賛募集中です! 詳しくは、採用ページをご覧ください。
はじめに
こんにちは!
去年の秋頃からzaicoのAndroid開発を担当しているスナです!
(本名は斉藤なのですが、すでに同じ名前の方がいらっしゃったので僕はスナになりましたw)
(スナの理由はスナフキンが好きだからです。スナフキンかっこいいよスナフキン)
で、Android開発を担当しているというと、じゃあ昔からAndroid開発をやってきたのかな?と思うと思いますが、実際にはAndroid開発の経験は全くの0ですw
(Android開発経験0の人を採用していきなり担当にしちゃうZAICO人事、頭おかしい 最高ですね。)
(ちなみにweb開発の経験は3年くらいありました。)
そんな訳でAndroid開発経験0の自分がAndroid開発を初めてやってみて衝撃を受けた9つのことを書いてみます。
「Android開発?web開発とそんなに変わらんだろw」とか思ってる人(半年前の自分です)に何か刺さってくれれば嬉しいです。
その1 ライフサイクルの存在
Android開発といえば1にも2にもライフサイクルです。
全てを司る神的な存在です。
自動的に実行される関数です。
例えば画面が表示される時に`onCreate()`が実行されたり、終了する時に`onDestroy()`が実行されたりします。
何勝手に実行してんの?って思うかもしれませんがそういうものです、我々愚民は神の手の上で踊るしかないのです。
Android開発をやりたければ、まずはライフサイクルを学びましょう。
その2 ビルドが超遅い
びっくりしました。
ビルドが超遅いです。
コード1行修正するじゃないですか。
ビルドして変更後の挙動を確認したいじゃないですか。
その度にいちいち30秒くらいかかります。
web開発だとフレームワークにもよりますがせいぜい3秒くらいじゃないですか?
じゅ、10倍って、、
なんだか書いてて悲しくなってきたのでこの辺でやめておきます、、
その3 レイアウト調整が難しい
CSS使わせてくれ〜〜〜
xmlってなんやねん!
一応プレビュー画面をGUIで操作できる機能はあるんだけどちっともうまくいかんのよ
操作難しすぎ!
その4 アプリ間でデータ連携できる
これは結構衝撃だった。
なんとなくアプリ間ってすごい独立してるイメージないですか?
Androidではなんとデータの公開設定次第では他のアプリの持ってるデータを読み取れたりできるんですよね。
自由すぎるだろAndroid!
その5 nullエラー落ちた場所分からん
よし!修正完了したで!と意気揚々とビルドして画面起動したと思ったらいきなりホーム画面に戻される。あるあるですよね。
いわゆるアプリが落ちるって現象ですが、これどのコードで落ちたか分からんのが辛すぎる。
落ちる直前で気付いて教えてくれ〜!
もう無理っす!これ実行したら落ちるっす!ってさあ。
Android Studioくん頼むぜ〜。
その6 いちいち書くコード多い
例えば最近文字の一部にハイパーリンクを設定するコードを書いたのですが、できたコードがこれ。
/** * テキストにハイパーリンクを設定する */ TextView textView = root.findViewById(R.id.hoge); String link_text = "こちら"; String link_url = "https://hoge.com"; addHyperLink(textView, link_text, link_url, this); /** * テキストにハイパーリンクを設定する関数 */ public static void addHyperLink(TextView textView, String link_text, String link_url, Fragment fragment) { Map<String, String> map = new HashMap<>(); map.put(link_text, link_url); SpannableString ss = MiscUtils.createSpannableString(textView.getText().toString(), map, fragment); textView.setText(ss); textView.setMovementMethod(LinkMovementMethod.getInstance()); } /** * 内部関数 */ private static SpannableString createSpannableString(String message, Map<String, String> map, Fragment fragment) { SpannableString ss = new SpannableString(message); for (final Map.Entry<String, String> entry : map.entrySet()) { int start = 0; int end = 0; // リンク化対象の文字列の start, end を算出する Pattern pattern = Pattern.compile(entry.getKey()); Matcher matcher = pattern.matcher(message); while (matcher.find()) { start = matcher.start(); end = matcher.end(); break; } // SpannableString にクリックイベント、パラメータをセットする ss.setSpan(new ClickableSpan() { @Override public void onClick(View textView) { String url = entry.getValue(); Uri uri = Uri.parse(url); Intent intent = new Intent(Intent.ACTION_VIEW, uri); fragment.startActivity(intent); } }, start, end, Spanned.SPAN_INCLUSIVE_INCLUSIVE); } return ss; }
いや、どんだけコード書くの?
僕はただハイパーリンクにしたいだけなのに。。
もう許して。。ごめんなさい。。ごめんなさい。。
参考:TextView の一部のリンク化+クリックイベントの指定、をサクッと作る
その7 公式ドキュメント分かりにくい
公式ドキュメント、分かりにくくないですか?
情報量多くて助かるのですが、多すぎて逆に分かりにくいこともあり、、
ググって公式ドキュメントとqiitaが両方見つかったらついqiitaの方を開いちゃう。よくない。
その8 ググって出てくる情報が全部古い
あれ?ちゃんとqiitaの記事の通りにやったのに!とか思って記事の公開日見たら2016年とか。
この業界での5年前は通常世界の50年前ですよね。
はい、すみませんでした、大人しく公式ドキュメント見ます。。
その9 Android Studio便利
ここまで悪口みたいなことばかりになってしまったので最後に褒めておきます。
Android Studio便利です。
リファクタリング機能使って関数名変えたら利用してる箇所も一緒に修正してくれたり、デバッグ機能でブレークポイント設定して変数の中身見れたり、関数の中にジャンプしたり戻ったり。
コードの中を自由に泳ぎまわれる。
さらにビルドからリリースファイル作成まで全部お任せ!
これは嬉しい。
おわりに
はい、そういう訳で、web系エンジニアがAndroid開発をやってみて衝撃だった9つのことでした。
せっかくなのでもうひとつ追加して10にすれば切りが良いのでは?と思ったのですが、何も思いつきませんでした。
Android開発、大変なことも多いですが、「俺いまアプリ作ってるぜ〜!」感を感じれるので気分は良いです。
初心者がいきなりAndroid開発をやるのはオススメしませんが、web開発に飽きてきた人にはちょうど良いんじゃないでしょうか。
(web開発に比べて情報が全然ないので一緒に情報増やしましょう。。涙)
そんな訳で一生懸命開発しているzaicoアプリをこれからもよろしくお願いします!