アプリ開発をしてみた感想。
お久しぶりです、じゅぎのんです。気づけば更新が2月以降ストップしていたので、せっかく令和に切り替わったので記事を書きたいと思います。 このブログでも言った通り昨年の12月からインターンが始まり、現在も絶賛稼働中です。 1月から4月末までアプリを作成し、ひとまずのところひと段落したので、これまでの経験で得たことを書き連ねます。
インターンを始めた経緯おさらい
インターンに入る一番の動機になったのは、一番最初の記事に書いたと思いますが私が所属している電気通信大学のソフトウエア工学という3年後期に行われている講義で、先生が企業の人を呼んでIT企業で働くことの実態をディスカッション形式で話を聞いたことです。
それまではインターンはやってみたいけど正直自信ないとか、時間ないからとか言って逃げてたんですが、その講義を聞いてやらなきゃまずいと感じたことがきっかけでした。
その選択は間違っていなかったと振り返って思います。その講義の先生は電通大の中では賛否両論ある先生だったのですが、僕は割と好きです。
なにをしたのか
インターンの採用までは昔の記事をみてもらえばわかるのでここでは書きませんが、採用が決まると同時に、会社側から中長期的タスクとして何をやりたいのか聞かれました。
まず一つは画像認識です。AR.js, tensorflow.js, tracking.jsなどを理解し、自ら画像認識のプログラムを組むというものでした。
二つ目は3Dオブジェクト操作です。物理演算を使用したアニメーションロジックを実装するというものでした。
最後はフロントエンドを極めることです。ES6をベースとしてアプリの開発などをするというものでした。
前々からフロントエンドは興味があったのと、画像認識・3Dオブジェクトは明らかに難しそう(授業で3Dや画像処理はやったので)だったので、僕はフロントエンドを極めることを選択しました。
まずはアプリ開発をしてみようということで、少しReact.jsを触った後、JavaScript+React Nativeを使って開発を始めました。
React Nativeとは、JavaScriptを言語として用いるネイティブアプリのクロスプラットフォーム開発フレームワークです。
アプリとして開発するにはそれだけでは足りません。JavaScriptだけを用いてアプリ開発をするために、expo.ioというJSのみでiOS/Androidのアプリを作るビルド環境を使いました。expoはマジですごいのでおすすめです(???)
QRコードを読み込むだけで自分の端末上で開発画面を写すことができ、リアルタイムで更新してくれるという神環境です。Expo Snackってやつ使えばわざわざ自分のPC内に環境構築することなくWeb上でプログラミングすることもできます(簡単なものだけですが)
1月から4月末までは純粋にアプリ開発だけを行いました。その間にもいろいろ会社のプロジェクトについて話を聞いたり、LT(Lightning Talk)に参加したりもしました。僕はインターンとはいえ、かなり社員に近い扱いをしてもらって、いろいろと経験になることもさせていただいています。感謝です。
アプリは現在v1.0.0が完成し、あとはApp Storeに審査をかけるだけ、というところまで来ています。諸事情がありGW以降に審査をかけることになったので、今はバージョンアップ予定の機能を実装している途中です。
アプリ開発をする上で学んだこと
自分的に「あ、これはアプリ開発するのに必須の条件だな」と思ったことを書いていきます。といってもかなりアバウトで別にアプリ開発に限った話じゃない感じです。
英語から逃げない
まずはこれだと思います。アプリ開発をしている途中で思ったのは、「日本語の記事役にたたなさすぎでは…」でした。
基本的に開発中にネットで調べるのはエラーコードがでた時、新しいライブラリを入れる時、知らない単語が出てきた時とかですかね。
ライブラリに関しては、React nativeの公式ドキュメントが全部英語なので当たり前ですが、エラーが出た時は比較的日本語で記事を探そうとします。
具体的な検索をしたのといえば、「React native AsyncStorage 戻り値」とかですかね。AsyncStorageについてはガチで苦戦したのでいろいろ調べましたが、大抵の解決策は英語の記事に書いてありました。
結局知りたかったことはここにかいてあったんですが、日本語の記事はどれをみても「いやこれじゃないんだよなぁ…」って感じのばっかで。Qiitaとかも的外れな質問ばっかりでてきたので正直呆れたんですが、英語で調べた瞬間どんぴしゃで同じ問題を抱えている人が質問しているんです。
特にありがたかったのはStack Overflowです。
日本語版もありますがあまり役に立たないので英語版をおすすめします。
おそらくプログラミングをやっている人の大半は英語を比較的読むことはできる人種だと思いますが、「積極的に読む」ことを僕は勧めます。ネイティブ日本人なので英語の記事を読む時に労力を使うのが嫌、という気持ちはとてもよくわかります。
しかし、
英語の記事を読んで問題を解決するまでの労力 <<<<<< 日本語の関係ない記事ばっかりの中から頑張って解決策を探す労力
であることは経験上明らかなので、英語は読みましょう。読めないならひとまずGoogle翻訳にぶちこみましょう。プログラミングの記事は翻訳すると意味不明になりますが。
僕は比較的英語が好きなので読むのに抵抗は感じませんが、英語をみただけで拒否反応が出るような人はまずプログラミングをやる前に英語をやったほうがいいと思います。割とマジで。
興味をもってやる
プログラミングに限った話じゃないですね。一番最初の問題として興味がなかったら絶対続きません。
インターンに入ったばかりの時は最初はJavaScriptの入門書を読むだけだったので、時間がすぎるのがアホみたいに長かったです。でも、アプリ開発ができるようになってからは、どんどん体感時間が短くなっていきました。この前は初めて7時間連続勤務をしてみましたが、全然つかれませんでした(居酒屋の7時間勤務を思い出すと感謝でしかない)。
今では、アプリを作るのが楽しくなってきて自分でもなにか作ってみたいと、いろいろとアイデアを出しながら一人で陸部のマネさん用のストップウォッチのアプリを作ってみたりしてます。
環境を入れさえすればどの端末でも実行可能です。まだまだ開発途中ですが。
まだ実際に行動に移せてはいないのですが、技術系イベントに参加してみたいとも思っています。インターンを始める時に思っていた敷居の高さ(実際はそこまで高くなかった)を考えると、勉強会とかハッカソンなんて誰でも行けるわけで敷居とか関係ないよね。2019年の目標の一つです。
また、勉強すると、その知識を使って色々な人と話せるようになることも嬉しいことの一つです。
前まではインターン先の人と世間話くらいしかできなかったのに、今では割と仕事のことについて話すこともできるようになりました。部活と似たような感覚ですね。興味のあることが共通の人との会話はとても楽しいです。
エラーはアウトプットする
僕は今回の開発史上もっとも苦戦したのはAsyncStorageなのですが、エラーが出た時はなにかしら記憶に残るようにアウトプットすることは必須だと感じました。
前回の記事を書く時に一回苦戦して、記事を書いた後にもともとローカル変数として指定していたものをAsyncStorageに追加しなければいけないように仕様が変更されました。そのとき「うわ…またAsyncStorage触らなきゃいけないのか…ぶっ壊れそうで怖いなぁ」と思っていたんですが、結局仕様の変更があったその日に修正することができました。意外と簡単に修正できたのは、明らかに前のエラーがあったからだと思います。
比較的頻繁にそういうことは起きて、エラーが出るたびに「あれこれそういえば前もやったなぁ」となります。
Slackにエラーが出てわからない、ということ自体を書くのもありだと思うし、ブログにわからなかった問題の解決策を書くのもいいと思うし、自分だけのメモにまとめるのもいいと思います。とにかくアウトプットすることは後の役に立つので、やったほうがいいと思いました。
まとめ
まだ僕は開発といえる開発をはじめて5ヶ月程度しか経っていない超初心者ではありますが、学んだことはとても多いです。この記事をみているみなさんもぜひ上の学んだことを参考にしてみてください。やっぱり行動しないと人間変われないです。
そして4月末でプリパラのライブツアーが終わってしまいました。僕の生きる意味探しは4ヶ月後のキラッとプリチャン+アイパラオータムライブまで続きそうです。キンプリももう終わっちゃうし。僕はユキノジョウとアレクサンダーが好きです。
そういえばキラッとプリチャンは2年目が始まりましたね。新しいメンツが新しい風を運んできて面白くなりそうです。赤城あんなちゃんの帰国を心待ちにしております。
あと腰を負傷してます。早く治らねえかな。