卒業試験がひとまず全て終了したので、アプリ開発に挑戦してみることにしました。
最終的には行動変容支援アプリのようなものを作ってみようと思っています。
自分の行動や習慣を改善したいと思っている人を支援するアプリです。
禁煙支援アプリが保険適用になったのが話題になっていますが、あれも行動変容支援アプリの一つといえます。
しかし私は、アプリ開発の知識なんて全く無いし、そこまで興味もありませんでした。
フロントエンド?なんか飾り付けとかするやつだよね?
というレベルで、むしろ軽視していたところもあります。
今回は、そんな私がどうしてアプリ開発をしようと思ったのか、ということを書いてみようと思います。
高度な技術があるだけでは便利なソフトウェアは作れない
プログラミングの勉強はしたけど、あまりできることが広がらない。
プログラミングである程度いろいろなものが作れるようになった人でも、こういった悩みを持つことがあると思います。
私はまさにそのタイプで、大学でAIの研究をしたり、最先端のITを学んだりしていたのにもかかわらず、できることが非常に限られてました。
何万次元という複雑なデータを処理し、分析したり可視化したりということはできます。
また、今流行りのAI・Deep Learningを使って画像認識をするソフトをつくることもできます。
しかし、それで自分の人生を豊かにできるかというと、なかなかそうはならなかったんです。
別にアプリ開発でお金を稼いだりとかはできなくてもいいけど、自分の暮らしをちょっとだけ豊かにするようなものを作りたい。
なんだか逆説的ですが、この悩みの答えがアプリ開発でした。
一言でいうと、フロントエンドを整えるノウハウを学ぶためにアプリ開発をしてみる、というようなことを考えたのです。
役に立たないソフトウェアにはフロントエンドがなかった
そこそこ高度な技術を学んだはずなのに、どうしてできることが広がらないのか。
これを考えるために、私がいままで作ったものを振り返ってみました。
- 大学で研究していた最先端のベイズ学習のソフト
- 画像を認識して分類する、今流行りのAIを使ったソフト
- 株価データを毎日自動で収集してきて、グラフを生成するソフト
- ちょっとしたジェネラティブアート
こまかいことは端折りますが、これらは(ジェネラティブアートは別にして)一見役に立ちそうなものばかりです。
しかし、これらには共通して問題がありました。
それは、ソフトに情報を入力するにも、出力を受け取るのにも、自宅のデスクトップPCでコマンドプロンプトを開かないといけない、というもの。
フロントエンドが貧弱だったんです。
フロントエンドとはユーザーが直接触れる部分のこと
ソフトウェアは大きく2つの部分に分けることができます。
フロントエンドとバックエンドです。
フロントエンドとは、ソフトウェアのうちユーザーに直接触れる部分です。
ユーザーからの注文を、実際に仕事をするバックエンドに伝え、またバックエンドが仕上げた仕事をユーザーに返す役割を持っています。
バックエンドとは、ソフトウェアのコアとして裏で動いてくれている部分です。
フロントエンドからの注文を受けて仕事をし、出来上がったものをフロントエンドへと引き渡します。
要はフロントエンドとは、「実際に仕事をするソフトウェアとユーザーとの間に挟まるもの」のことです。
なんでそんなものを挟むのかというと、そうした方が使いやすくなるからなんです。
ソフトウェアをレストランで例えると、フロントエンドはホールに、バックエンドはキッチンに当たります。
フロントエンド:ウェイターさんや、客席・おしゃれな内装などのホール部分
バックエンド:実際に料理をするキッチン部分
キッチンとお客さんの間にホールが挟まっているおかげで、レストランはより快適に利用できるようになっています。
同じことがソフトウェアにも言えるわけです。
スマホアプリでいうと、ホーム画面に浮かんでいるアイコンや、タップで操作できるボタンなどがフロントエンドになります。
フロントエンドのないアプリは、真っ黒な画面にキーボードでコマンドを打ち込み、味気ない出力を受け取るだけのものになってしまいます。
私がいままで作ってきたソフトウェアはまさにそういう感じでした。フロントエンドが貧弱で、すべてキッチンオンリーのもの。
たとえば画像を認識するAIソフト。これを使うには、このソフトがあるディレクトリでコマンドプロンプトを開き、コマンド入力で命令を伝える必要があります。
出力もただ表示されるだけです。
レストランでいうと、注文を伝えるために直接キッチンへおもむき、コックさんに通じる言葉を使う必要があったんです。すごく不便です。
さらに出来上がった料理も、配膳はおろか盛り付けも満足にされていないようなものでした。
私が作ったソフトウェアが役に立たないのは、フロントエンドが貧弱だからなのでは?
私は最近やっとそのことに気づいたんです。
フロントエンドは見栄えだけでなく利便性にも関わってくる
実は、私がフロントエンドの重要性に気づけなかったのには理由があります。
フロントエンドなんて見た目をいじるだけの本質的でない技術だ、と思っていたんです。
これは大学で情報系の研究をしていた人にはありがちなんじゃないでしょうか。
「フロントエンドというのは実際に仕事をする部分ではない飾り付けの部分。良いアルゴリズムを作れば飾り付けなんか必要ない。」
私の周りには、なんとなくこういった硬派な(?)意見が多かったように思います。
そして私自身も、自分だけが使うソフトウェアを作る分には、フロントエンドは必要ないと思って避けてきたんです。
しかし、フロントエンドとバックエンドは車の両輪です。
フロントエンドはただ見栄えを良くするだけではなく、ソフトウェアの利便性にも関わってきます。
再びレストランの例を使うと、フロントエンドの中には確かに見栄えだけのものもあります。看板やおしゃれな内装などがそうでしょう。
しかし、このレストランに出前やウーバーイーツなどの新たな機能を追加するとどうでしょうか。
これらはユーザーと直に接する部分なのでフロントエンドです。
この新たな機能のおかげで、ユーザーには家でプロの料理を楽しむという選択肢が生まれます。
フロントエンドを工夫することで、ユーザーはより便利にサービスを使うことができるようになるんです。
これをソフトウェアの話に戻すと、デスクトップPCでしか実行できなかったソフトウェアを、スマホでも使えるようにしたりということになります。とっても便利そうですね。
逆も然りで、フロントエンドが貧弱なソフトウェアは、仕事は充分にできたとしても、仕事をさせるまでが大変なので不便なものになってしまいます。
私はフロントエンドを改善すること無く、不便なソフトウェアを作り続けていたのです。
アプリ開発をしながらフロントエンドを学ぼうということ
こういったフロントエンド部分をつくるのには、実際にサービスを動かしているコアの部分とは別のスキルが必要になります。
そしてアプリ開発という分野には、フロントエンドエンジニアリングのノウハウが蓄積されています。
そこで私はアプリ開発をしてみることにしたわけです。
そうすれば、DIYで家具を作る感覚で自分のほしいソフトウェアを生み出せるんじゃないかな、と。
もし売れるアプリが作れたら収入にもなりますしね。
とりあえずは先日購入したこの本にしたがって、iOSアプリ開発をやってみようと思います。
おしまい
コメント