大学生が未経験から2か月でアプリ開発をしてみたお話

#**はじめに**

大学三年、就職活動の業界研究の一環としてiPhoneアプリ開発に手を出しました。


開発に至るまでのプログラミングの基礎知識をスクールに通い、制作するアプリに必要な箇所のみ履修し一か月のインプット。アプリの制作時間は、およそ一か月。合計二か月でアップルストアにリリースする運びとなりました。


今回の記事ではこれから初めてプログラミングを始める方へ心許ないアドバイスと共に制作過程を振り返ります。

##**本当に私は未経験だったのか？**

はい。未経験です。

大学の学部は国際系に所属しており、これまでスワヒリ語、中国語、英語に力を入れて大学生活を過ごしていました。

サークル活動では洞窟調査など全くプログラミングとは無縁の生活をしていました。

##**なぜプログラミングに手を出したのか。**
これには２つ理由があります。
まず一つ目にIT業界を知る為です。

私は２年生の三月から就職活動を始め、夏休みまでは業界・業種を絞らずに様々な業界に挑戦していました。
人材、コンサル、教育、食品、出版、金融、不動産、家具

この中で、IT業界だけ少し毛色が違いました。

一言でいうと上流工程と下流工程があり、どちらの工程に携わりたいか真剣に吟味して会社を選ばなければならないということです。

会社によっては上流工程と下流工程、大きくどちらかに依存している企業様もあります。
入社前にはっきりと自分が何を行いたいのか明確にしなければならないと深く感じました。

その為に一度どちらの工程も体験してみる事にしました。

二つ目に私の性に合った習慣化アプリが欲しかったからです。

私の趣味は語学学習です。
語学は一日してならず。

一日話さないだけで口は訛り、耳から聞こえてくる音声もだんだん曖昧なただの音に
なります。

その為、私の語学勉強が歯を磨く習慣と同じくらい当たり前なものにする必要がありました。
しかし、従来の習慣化アプリでは、私の「多忙さ」と「こころの弱さ」から継続する事は
困難でした。

しかし大学卒業までにTOEIC900点以上、HSK６級取得などを目標にしているため早急に私が語学勉強を習慣化することが必要だったのです。
待っていても、私の性格に合わせた習慣化アプリはリリースしてくれません。
だから私は開発する事にしました。



心許ないアドバイス➀
-----
もし初めてプログラミングをするならば、先に「プログラミング言語を決める」のではなく、「何を一番制作してみたい」かを決めるといいと思います。

そして制作物に適しているプログラミング言語を選び、開発するための技術を学ぶのが最短でスキルを会得する秘訣です。

制作過程で使わない技術は学習しても知識の定着が遅く、初学者では一つ一つ理解する事に大変な労力を使います。
プロダクト作成後にも学ぶことはできるので一度後回しにしましょう。



挫折予防にもつながります。

ロードマップとして
➀制作物を決める
　　　↓
➁プログラミング言語を決める
　　　↓
➂師を決める（教本、プログラミングスクール、WEB）
　　　↓
➃制作物の内容・機能を決める（製作に必要なプログラミング技術を把握する）
　　　↓
➄インプット（1か月）
　　　↓
➅制作（1か月）


****


##**どんなアプリ**

リスク型習慣化アプリを作りました。
「頑張れ」「あと少し」などの言葉で頑張れない人に向けたリスク型習慣化アプリです。
継続未達成時には、辛辣な言葉でリマインドします。



作ったアプリ[Black Sheep](https://apps.apple.com/jp/app/black-sheep/id1585189136)

##「アプリ背景と機能」

このアプリを開発する上で工夫した点はリスクをベースとした日常に気付くための機能を付ける事です。

この機能を付けるに至った理由は２つあります。

一つ目に私がどのようなシチュエーションで継続、目標を達成する事ができたのか自己分析を行いました。私が目標を達成したときは、失敗時のリスクを常に念頭に置いていた時であると上記の分析から発見いたしました。

二つ目に従来のアプリで達成できなかった原因として継続できなかった時にアプリ内で発生するイベントが心に響かなかったことだと考えました。従来の他習慣化アプリでは未達成時でも「あと少し」「明日頑張ろう」など比較的ポジティブなお声がけのリマインドがされます。その画面をみて次の日には頑張ろうと思えてもまた、数日後には同じ画面を見る事になっていました。

つまり、その画面に対して継続的に見ないようにする効果は私には薄かったということです。ですので、私のアプリでは失敗時にしっかり「心に残る」ような、改めて達成できていないことに「焦り」を覚える事ができるような設計を目指しました。

これらの経験から、私のアプリではリスクを念頭にアプリの設計を行いました。具体的な機能としてタスク未達成時の「今日できなければ明日できるわけない」等の厳しい言葉のリマインドやユーザーがあらかじめ設定した21日間継続できなかった時に起こりうる出来事をアラームする機能を導入しました。


##開発環境

私はWindowsユーザーです。
これから、iPhoneのアプリを制作する時に「もしかして、マックのパソコンじゃないと開発できないの？！」と思われ開発を断念する方が友人にいたので補足致しますと、Windowsのパソコンでも制作可能です。但し、簡単にいうと、WindowsのパソコンからMacのパソコンを遠隔操作し、そこで作業を行う必要があるというだけです。

私はMacIncloudを用いて環境を整えました。MacIncloudはお持ちのパソコンでMACのパソコンが使えるというどこでもドアです。
MacIncloudは学生の内は学割で安く月に約３０００円ほどで利用ができるのでお勧めです。
また、MacIncloudは突然操作が重くなったり、ログインできなくなったりします。
私もアプリ発表当日に、ログインできなくなるトラブルが発生しました。

その時は根気強くメールでやり取りする必要があります。
（urgent感を出すと対応が速いです。急ぎではないメールはおよそ１日～３日で返信されます。）


Macincloud 
Xコード8.1
使用言語Swift

##苦労したこと

１　エラーの解決

当たり前じゃないかと思われるかもしれませんが、エラーメッセージがでて大変困ります。
エラーメッセージの解決方法として、出力して原因箇所を突き止める　or ネットで検索する
の２パターンがあります。
エラーメッセージを検索して解決方法が記されている記事を読んでもどんどん知らない単語が増えていくばかりで大変理解に苦しみました。

心許ないアドバイス➁
-----
日本語で解決するのをあきらめること

私が使用したSwiftも世界で使われています。
その為、外国の方も似たようなエラーメッセージで苦しんでいる現状があります。
一見日本語の記事やサイトで難しく書かれているように見えても、英語で書かれた解決サイトを見ると、率直な英単語で明瞭に書かれていたことが多々ありました。

恐れず海外のサイトもチェックしましょう。

心許ないアドバイス➂
-----
検索しても分からない事は積極的に聞こう！

私は考えて、検索して、３日分からなかったら人に質問するようにしていました。
案外、簡単な問題だったり、知識不足だったりします。

私が開発中に三日悩んだ一番馬鹿なことは画像が透過で表せないことです。

私はpngの形式で保存された画像でないと、透過できない事を知りませんでした。
透過できない原因を３日探していましたが見つからず、画像制作したアプリの説明書をくまなく読み返すまでしました。

しかし自身のメンターさんに質問したところ、上記の原因が一瞬で解決されました。
解決策は身近な場所にあります。

開発途中に参考にしたアプリ開発の本でも、制作中にわからないことがあったら作者のTwitterに連絡下さい。と大変親切なメッセージがついている書籍をよく見かけました。

もし、何かの教本に添ってアプリを開発してみるのならば、利用してみるのもいい方法だと思います。







２機能の名前が分からないこと

学びたい機能があってもその正式な名前が分からず、検索しても想像していた物とは違う結果が表示されもやもやした経験が幾度もありました。

例えばアプリを使っていると横からにゅっと出てくるたくさんのメニュー。
これを「ハンバーガーメニュー」といいます。


解決策としては、たくさん検索するか、想像している物を絵にかいて有識者に相談する事です。

私はハンバーガーメニューという名前にたどり着くまで２日かかりました。


##努力したこと


私が、アプリ開発の中で最も時間を費やしたのはアプリの要件定義決めです。
格好良くいってしまいましたが、要するにどういった方向性のアプリを作るのかです。

このアプリの機能や雰囲気を決めるまでに20冊ほどの習慣化、独学、行動心理学に関する本などを読みました。
そして、効率よく習慣を手に入れてる為に必要な機能を考えました。

また、過去にも使用したことがある類似性のある高評価のアプリを三つほどインストールして使用感を確かめました。

私が最悪なクレーマーになりきってこの優秀なアプリたちに物申したいことを考えた結果が今のアプリの機能です。

お勧めの本です
[習慣超大全]（https://www.diamond.co.jp/book/9784478106310.html）


##役に立ったこと

１キャリアプラン

上流工程、下流工程どちらもおもしろいと感じたこと。
どんな機能が必要かと考える工程も実際にプログラミングを組んで動くことを確認する事も大変面白かったです。
また、頭の中で考えた機能を言葉で表現する事は大変難しいという事が分かりました。

制作過程において、メンターさんとどのようなアプリを作るのか話し合うことがありました。
私が作りたい機能をお話したら、～を勉強したらいいよみたいなアドバイスを頂けるミーティングです。その際、私が考えている機能とメンターさんが考えている機能を一致させることが少しばかり難しい場面がありました。

私とメンターさん2人だけの認識の中でもこの齟齬がみられるのですから、第三者がここに介入して伝達役になったら、より複雑な環境になると思いました。

その為、私は下流だけ、上流だけにこだわらず、両方の工程を受け持つ会社に就職する事を決める事ができました。

２　イベント参加
初学者歓迎のハッカソンイベントに参加しやすくなったことです。
イベントによっては選考があり、制作したプロダクトを事前に提出する事もありました。
初学者向けのイベントは、事前に教材なども配布される事もあり、イベントによってはメンターが付き、質問する事が可能です。
勿論参加は無料であることが多く、自身の技術向上に大変役に立ちました。

##これからの私がする事と

アプリのUIと機能を改善する事です。

実は制作期間２か月と設定した背景として株式会社サポーターズ様のプロダクトコンテストに出品予定だったからです。

選考で敗退したため、一般にお披露目する機会はありませんでしたが、このコンテストに出場する事を目標に制作期間を決めたため、至らない機能が多々あります。

１つ目にＵＩです。当時、モダンなＵＩのイロハも分からなかった為、大変ダサいＵＩをしています。また、リリースしてから気が付きましたが、オートレイアウトに不備があり、現在最初の画面から動けないという報告をいただいております。

オートレイアウトを修正する際にどうせならスタイリッシュな画面に直してからオートレイアウトを施そうと思い、現在sketchというアプリを用いてアプリのUIを作成しています。

2つ目に機能面です。
二か月で制作可能な機能を選定したので、当初の予定より大幅に機能を削りリリースしました。生活が落ち着き次第、順次機能を追加する予定です。







##プログラミング未経験者に伝いたいこと

環境の準備をする前にすぐに相談できる相手を見つけることです。

私の周りには情報系の方や、身近な社会人の方にプログラミングをしている人はいなかったので、スクールに通い、メンターさんをゲットしました。

スクールに賛否両論はありますが、メンターさんをゲットできるための費用だと考えたら、私は惜しくありませんでした。

もちろん現代にはYouTubeやネットでプログラミングを学べたり、本などからでも学ぶことは可能ですし、投稿者に直接質問できる方なら、それらを利用して独学で勉強していく姿勢はありだと思います。
私は、小さなことでも悩んでしまう質なので、気兼ね無く質問できる環境を手に入れる必要がありました。

もしこれからプログラミングを学んでいくのならば、本当に困ったときに誰に相談するのか明確にしてから望むといいと思います。

こちらは現在一番参考にしている独学の本です。
もしよかったら
[ムダな努力を一切しない最速独学術](https://www.amazon.co.jp/%E3%83%A0%E3%83%80%E3%81%AA%E5%8A%AA%E5%8A%9B%E3%82%92%E4%B8%80%E5%88%87%E3%81%97%E3%81%AA%E3%81%84%E6%9C%80%E9%80%9F%E7%8B%AC%E5%AD%A6%E8%A1%93-%E4%B8%89%E6%9C%A8-%E9%9B%84%E4%BF%A1/dp/45698501896)