密着5〜6カ月の様子をお届けします

「大喜利アプリを作ってるんですけど…」寺田有希さんのプログラミングチャレンジ、いよいよ最終章へ

PR

株式会社div

仕事
プログラミングスクール「テックキャンプ」を、ホリエモンチャンネルMCの寺田有希さんがチャレンジ!
第4回となる今回は、カリキュラムを全て終え、企画から実装までを完全に1人で行う「オリジナルアプリ制作」に着手した寺田さんの様子をお届けします

長らくお送りしてきた寺田さんのプログラミングチャレンジもいよいよ残り1カ月。寺田さんは一体、どんなアプリを作ろうとしているのでしょうか…?

※密着1カ月目〜4カ月目の様子は記事の最後で見ることができます。

〈聞き手=宮内麻希(新R25編集部)〉

「寺田有希 プログラミングチャレンジ」リアル密着:オリジナルアプリ制作開始の5カ月〜6カ月目

テックキャンプ開始160日:2021年9月14日(火)いよいよオリジナルアプリ制作に移ったという連絡が…

寺田さん

寺田さん

8月の末に最終課題(フリマアプリ制作)を終えまして、今は最終発表会に向けてオリジナルアプリ制作に移っています

発表会では最終課題で制作したフリマアプリをアップデートするか、自分でオリジナルアプリを作るか選べるんですが、私は後者にしました。
宮内

宮内

寺田さんはどんなアプリを作ることにしたんですか?
寺田さん

寺田さん

えっと…

大喜利アプリを
え?
宮内

宮内

どうしてまた、大喜利を選んだんですか…?
寺田さん

寺田さん

最初はなにか演劇に関するアプリを作ろうと思ったんですよ。

でも、どんな演劇アプリを作れば私が感じている問題を解決できるのかがなかなか思い浮かばなくて。

そしたら堀江さんが「大喜利アプリでも作ればいいじゃん」ってふら〜っと言ってきたんです(笑)。
宮内

宮内

そうだったんですね(笑)。
寺田さん

寺田さん

“投稿する”とか“保存する”という機能を構築するサーバーサイドの基本機能に関しては2、3日で書き終えることができたんじゃないかな?

私、自分でプログラミング書けてるじゃん!」ってちょっとうれしかったですね(笑)。
宮内

宮内

すごい。そんな早く終えてたんですか!
寺田さん

寺田さん

今、結構本気で堀江さんが「プログラミングは簡単」と言った本当の意味がわかった気がするんです

私、2カ月前に「プログラミングは“努力すれば”簡単」って言ったじゃないですか。
ただ、“簡単なこと”と“ラクなこと”は違うんですよ。

「簡単だよ」と言われると、多くの人が「すぐ習得できる」「ラクにエンジニアになれる」と変換しちゃってると思うんです。

“ロジックを理解したら簡単”ということと、“理解できるようになるまでに膨大な努力が必要だ”ということはまったく次元の違う話なので、そこもあわせて伝えるべきだなと感じてます。

実際、全然ラクじゃないんで(笑)。

出典https://r25.jp

寺田さん

寺田さん

でも今はあのときとちょっと感覚が違うんです。

なんていうか…プログラミングって「クックドゥを使って料理をする」みたいな感じなんですよ。
!? お家でプロ仕様の中華を堪能できるあの…
寺田さん

寺田さん

たとえば、0から自分で調味料を仕入れて麻婆豆腐をつくるのって相当難しいですよね。

でもクックドゥという道具を使えば、豆腐を切るだけでおいしい麻婆豆腐ができてしまう。

プログラミングもそれと同じなんですよ
宮内

宮内

…どういうことですか?
寺田さん

寺田さん

私がテックキャンプで学習してきたRuby on Railsは、たとえるならRubyという言語を動かすためのクックドゥなんです。

コードを0から自分で書くのではなくて、「データを保存する」「データを送信する」と実装したい動作ごとにメソッドを使うことで、PCは「この動作がしたいのね」と察知して動いてくれる。

だから今は、やったことのない動作を実装するときも「なんかメソッドがあるんだろうな〜」と思えます。

一見難しそうでも、「調べればできるだろう」と思えるようになったんです
※メソッドとは
オブジェクトの属性として参照される関数のこと。メソッドを有効に活用することで、 何度も同じコードを記述する必要がなくなります。
宮内

宮内

つまり、プログラミングを自分で0から書くことは、実はほとんどないんですね。
寺田さん

寺田さん

そうなんです。ただ、昔は0から自分でコードを書く必要があったと思うんですよ。

だから堀江さんは調味料からなにまで自分で手配して麻婆豆腐を作ってたんだな〜と思って(笑)。

そう考えると、堀江さんが「プログラミングは簡単」って言うのもわかりますよね。だって今はクックドゥを使えばいいから。
寺田さん

寺田さん

プログラミング言語自体もバージョンが常に更新されつづけているので、どんどん便利に、簡単になっていくんだと思います
宮内

宮内

なんだか、今のところ順調そうで安心しました!
寺田さん

寺田さん

いや…順調なのはサーバーサイドの話で、今つまずいてるのはHTMLやCSS、いわゆるアプリケーションの“見た目”部分を構築するフロントサイドです。

最終課題のときは、HTMLもCSSもファイルがすでに用意されていたんですが、オリジナルアプリはレイアウトや配色まで全部自分でやらないといけなくて…

だから今、すっごいダサい大喜利アプリなんです(笑)。

…ちょっと見ます?
宮内

宮内

あっ、これは…(笑)。
寺田さん

寺田さん

10月2日が最終発表会なんですけど…大丈夫ですかね?(笑)
およそ6カ月にわたって密着してきた本企画もいよいよ最終章へ突入。

そして次回の記事では、寺田さんプログラミングチャレンジの発起人(?)でもある堀江さんに、寺田さんがオリジナルアプリをプレゼンする様子をお届けします

はたして、寺田さんは発表日までにアプリを仕上げきることができるのか?

ここまで見守ってきてくれたみなさん、ぜひ寺田さんに最後のエールを! そしてラストまで乞うご期待ください!

寺田さんのテックキャンプ挑戦の様子はこちらから!

チャンネル寺田有希

チャンネル寺田有希

寺田さんのYouTubeはこちらから!
寺田有希 Twitter

寺田有希 Twitter

プログラミング学習専用のTwitterアカウントも開設!
寺田有希|STAGE|オンラインコミュニティ

寺田有希|STAGE|オンラインコミュニティ

プログラミング学習の進捗も報告しているという、寺田さんのオンラインコミュニティ「STAGE」もチェック!
〜ここから下は前回までのあらすじとなります〜

「寺田有希 プログラミングチャレンジ」リアル密着:発展編と最終課題に突入する3カ月〜4カ月目

テックキャンプ開始80日:2021年6月25日(金)ついに半年間のカリキュラムの残りが100日を切ったという連絡が…

寺田さん

寺田さん

テックキャンプのマイページに「(カリキュラムが)残り○日」と表示されるんですけど、これを見てください!

ついに…残り100日を切りました!
こちらが証拠画面。右上の赤枠部分に「99」との記載が…!
宮内

宮内

ようやく…!

今は何を学習されてるんですか?
寺田さん

寺田さん

JavaScriptの学習が終わり、今は実装課題に取り組んでいます。
宮内

宮内

寺田さんの中で「プログラミングスキルがついてきたな」と感じる瞬間ってあるんですか?
寺田さん

寺田さん

テックキャンプをはじめてから開設したプログラミング学習用のTwitterアカウントでエンジニアさんのTwitterをフォローしてるんですね。

今まで専門用語やコードの記述に関することが流れてきても意味がわからなかったんですけど、最近は自分が学習している言語と違う時、完全な理解はできなくても「こういうことを言いたいんだろうな」と、想像できるようになった気がするんです。
寺田さん

寺田さん

大阪弁や名古屋弁を喋れなくても、会話の文脈や雰囲気から何を言っているのか予測することはできますよね。

プログラミング言語も同じで、言語によってクセや書き方の違いはあるんですけど、ある程度ベースとなる知識があれば「こういうことを言ってるんだろうな」とわかるのかもしれないなって。
宮内

宮内

なるほど。
寺田さん

寺田さん

一歩ずつですけど、プログラミングに対して理解の解像度が上がってきた感覚はありますね。

テックキャンプ開始90日:2021年7月8日(木)ここから、本格的な実装が始まる「最終課題」へ突入します

取材日の前日、発展カリキュラムの実装課題がすべて終了し、“最終課題”に入ったとのことで久々にお伺いしてみることに。
宮内

宮内

最終課題って具体的にどんなことをするんですか?
寺田さん

寺田さん

これはテックキャンプの伝統らしいんですけど、フリマアプリを作ります。
こちらを作るそうです
寺田さん

寺田さん

ユーザー登録や決済機能、出品や購入機能など、サーバーサイドの実装を0から自分で書いていく課題になってます。

今はデータベース設計をしてるんですが、これがまた大変で…
宮内

宮内

データベース設計…?
寺田さん

寺田さん

どの情報をどの部屋に保存するのか、そしてその部屋はいくつ必要かなど、設計図を書く作業です。

たとえば自分の部屋を片付けようと思ったとき、洋服も本も雑貨も、同じクローゼットの中に適当に詰め込んでしまうと、中もぐちゃぐちゃになるし、取り出すときに何がどこに入ってるかわからなくなりますよね。

データベースも同じで、“ユーザー情報はここ”、“商品情報はここ”というように、部屋を分けて、収納する棚を決めておく必要がある。あらかじめ、設計図を書いてわかりやすくしておくんです。
なるほど
寺田さん

寺田さん

先日終了した発展カリキュラムの実装課題は、すでに部屋の名前や数が指定されている状態からのスタートだったんですけど、最終課題は一から考えるところから始まるんです。

設計図を0から自分で書くようなものなので、正直かなり時間がかかってますね。
宮内

宮内

これまでと比較して、どんな点が難しいんですか?
寺田さん

寺田さん

一番は、物事を因数分解して考えないといけないところです。

「この商品情報を保存してください」と言われたら、“ただ保存をすればいいんだ”と思えますよね?
宮内

宮内

そうですね。
寺田さん

寺田さん

でも実装するには、“保存する”ために必要な要素を因数分解して、どこにどんなコードを書いていくのか、そのために何が必要かを想像しないといけないんです。

保存する場所や、データが行き来できるようにするようにしたりと、いくつもの工程が発生するんですよ。それが文字なのか数字なのか画像なのか、中身でもだいぶ変わりますし。

つまり、目的に対してどんな要素が必要で、どのコードを使えば最短距離でいけるかを考えることが重要なんです。
宮内

宮内

目標を細分化して実現方法を考えることは、どんな仕事でも必要とされる力ですよね。

エンジニア経験のある堀江(貴文)さんやひろゆきさんが合理的な判断をする理由がわかる気がします(笑)。
寺田さん

寺田さん

わかりますよね(笑)。

プログラミングは常に合理的に考えて「今はこれが必要だから、これだけをやるべき」というポイントを見極めていく作業の繰り返しなので、思考の訓練になるんですよ。
寺田さん

寺田さん

だけど、合理的なことって“頑張ってる感”を出すには効率が悪いと思ってしまうこともあるじゃないですか

目標を達成するにはAとBをやればいいだけなのに、AからGまでやった方が“頑張ってる”認定される気がして、いらない努力をしてしまうときがある。
宮内

宮内

わかります…
寺田さん

寺田さん

だけどその考えのまま実装してしまうと、このPCは永遠に動いてくれないので(笑)。
「すぐエラーになりますから」
寺田さん

寺田さん

プログラミング学習が、あらゆる物事を合理的に捉えられるようになるためのいいきっかけになってますね。

テックキャンプ開始120日:2021年8月5日(木)取材前日、遅くまでエラーに苦しんでいる寺田さんのツイートを発見しました

最終課題の佳境を迎えたということで、約1カ月ぶりに取材することになったのですが、取材日の前日深夜にこんなツイートが…
寺田さん、大丈夫でしょうか…?
寺田さん

寺田さん

購入機能の実装がキツくて、全っ然先に進まないんです

昨日も3時間かけたんですけど、結局エラーの原因がわからなくて。
「赤い部分の中にエラーが隠れてるんです」
寺田さん

寺田さん

んあーー!!」ってひとりでのたうち回ってました。

これだけで、もう2、3日悩んでて…
大変だ…
寺田さん

寺田さん

ただ、自分で実装を始めると考え方が変わりますね。

プログラミング、だんだん楽しくなってきたんですよ
宮内

宮内

え、そうなんですか?
寺田さん

寺田さん

数学のテストにたとえると、これまでの学習は最初の計算問題、実装課題は後半に出てくる記述問題みたいなものなんです。

数学が苦手な文系の私でも、計算問題なら解き方さえ忘れなければ解けちゃうんですね。

でも記述問題は、問題を噛み砕いて、どの公式を使ったら解けるかまで自分で考えなきゃいけないじゃないですか。まさに実装課題はそんな感じで、これまでのやり方では解決できなくなったんですよ。
宮内

宮内

どうやって対処してるんですか?
寺田さん

寺田さん

メンターさんに聞くこともできるんですが、何日もかかってでも自分で原因を考えるようにしてます。

そしたら、だんだん「このメソッドを使えばいいんだ」と自分だけで答えを出すことができるようになってきて…これが超楽しいんです。

ここにきてはじめて、「答えは“覚える”ものではなく、“導き出す”ものなんだ」と実感できたんですよ。
寺田さん

寺田さん

自分は数学が苦手だったのではなく、「“答えを導く”という頭の使い方に慣れてこなかっただけ」ということに気がついたんです。

堀江さんに「(プログラミングに対して)まだ心理的ハードルを越えられてない」と言われたのも、こういうことなのかもしれませんね。
そこで「自分には向いてない」と思い込んでたら、俺はダンスができないままだったと思う。

みんなが“できない”と思ってることって、大体は精神的なハードルを越えられてないだけなんですよ。

出典https://r25.jp

寺田さん

寺田さん

それに、プログラミングを経験することで、これからの時代に必要とされる考え方が身につけられるんじゃないかと思うんです
宮内

宮内

どういうことですか?
寺田さん

寺田さん

デジタル化によって未来が常に変化していく社会で必要なのは、「答えのない問いに向き合い続ける力」ですよね。

“答えは自分で導ける”ということに気づき、その力を鍛える訓練こそがプログラミングなんだと思うんです。
宮内

宮内

なるほど。

いきなりプログラミングはハードルが高いですけど、ちょっと数学の問題を解きたくなってきました…(笑)。
寺田さん

寺田さん

“覚える”という勉強法を否定するわけではないですが、自分が“覚える”頭の使い方しかしてこなかった事実は認めるべきだなと思って。

そして、この考え方の違いを理解できるかが、プログラミングに挫折するかしないかの分かれ道なんだと思います。

…って、まだ最終課題も終わってないんですけど(笑)。
締めのようになってますが、まだまだ続きますよ
寺田さん

寺田さん

最終課題のあとはオリジナルアプリの制作がはじまるので、またそのタイミングで挫折してないか報告させてください!

「寺田有希 プログラミングチャレンジ」リアル密着:応用編がスタートの2カ月目

テックキャンプ開始30日:2021年5月11日(火)ついに応用編を学習しはじめた寺田さん

宮内

宮内

先日から、学習カリキュラムが基礎から応用に入ったんですよね?
寺田さん

寺田さん

はい。応用が始まって2週間ちょっとなんですけど、こんなにメモが増えました。
「もう4、50枚あるんじゃないですかね」
宮内

宮内

すごい量だ…。今は何を学習されてるんですか?
寺田さん

寺田さん

今やってるのがテストコードですね。こんな感じです。
もう会話についていけなくなりそうです…
宮内

宮内

テストコード…
寺田さん

寺田さん

アプリが想定した通りに動いてくれるか、動作を「指示するコード」とは別に、動作を「確認するためのコード」を書いて、それを実行することで確認するんです。

よく“エラー”って聞くと思うんですけど、それが出てしまわないように、一旦コードが書き終わったら、テストコードを書いてチェックする必要があるらしいんですよ。
宮内

宮内

そういうのって、自動的にやってくれるんじゃないんですね。
寺田さん

寺田さん

私もそう思ってました(笑)。

こんな感じで、学習することが応用に入ってからどんどん重くなってるので、心が折れはじめてるんですけど…
寺田さん

寺田さん

でも最近、やっと目標ができたんです
宮内

宮内

お! なんでしょう?
寺田さん

寺田さん

4月からはじめたオンラインコミュニティ「STAGE」でもプログラミングについて発信してるんですけど、

参加者から「STAGE内でアプリを作ったら楽しいと思うんですよね」と言われて、「たしかに!!」と。

STAGE発のアプリを作る」というのが目標です
寺田さん

寺田さん

…自分で言うのもあれですけど、私、めちゃくちゃ真面目にこの企画やってません?(笑)
宮内

宮内

正直驚いてます(笑)。
寺田さん

寺田さん

せっかくここまで自分の時間を使ってるんだから、プログラミングできるようにならないともったいないですもんね。

テックキャンプさんと新R25さんをとことん使い倒す気持ちで頑張ります(笑)。

テックキャンプ開始60日:2021年6月4日(金)

というわけで、早速お伺いすることにしました。
宮内

宮内

ついに応用編が終わったんですね!
寺田さん

寺田さん

そうなんですよ!!

正直、めっちゃつらかったです。基礎とは雲泥の差です
宮内

宮内

でも寺田さん、Twitterもいい感じで更新してて、応用も変わらず順調なイメージでした。
寺田さん

寺田さん

順調…ではなかったですね(笑)。

なんとか続いてますが、昨日まで沼に苦しんでいて…挫折寸前だったんですよ
宮内

宮内

沼…。なんの沼に…?
寺田さん

寺田さん

パラメーターっていう。
宮内

宮内

なんですかそれ…?
寺田さん

寺田さん

情報を行き来させるために入れる箱みたいなものです。

たとえば、このワイヤレスイヤフォンをネットショッピングで購入したとします。そうすると、これ自体も商品の箱に入っていて、さらにこの商品が段ボール箱に入って自宅に届くじゃないですか。パラメーターは、商品を届けるための段ボール箱みたいなものです

情報もそうやって、マトリョーシカのように入れ子構造になって管理されていて、たくさんの箱に入って行き来しているんです。
宮内

宮内

(やばい全然わからない)
寺田さん

寺田さん

段ボールに入っていることを想像しているからか、最近はアプリがAmazonの工場に見えてしょうがないんですよ

Ruby on Railsでは、MVC構造を想像しながらプログラミングを学習するといいと言われてるんですが、この流れも工場みたいで余計に。
宮内

宮内

…どういうことですか?
「実際の画面を見せながら説明しますね!」
寺田先生による初心者でもわかるプログラミング授業が開講です
寺田さん

寺田さん

この図がMVC構造と呼ばれるもので、「アプリケーションはこんな流れで動いてる」と考えるとわかりやすいです。

クライアント、ルーティング、コントローラー、ビュー、モデル、テーブル、役割が細かく分かれてるんです。
クライアント:ユーザーのこと
ルーティング:道筋を決める役割
コントローラー:どこで何をするか、何が必要か、指示する役割
ビュー:見た目(HTML/CSS)を整える役割
モデル:データベースを管理する役割
テーブル:データの保管場所
寺田さん

寺田さん

プログラミングを始めるときは、最初にターミナルと呼ばれる場所でアプリの骨組みを作ります。
上の白い部分がターミナル。指示すると、左側に部屋ができます
寺田さん

寺田さん

骨組みができたら、プログラムを書きます。

ルーティングはみんなで向かう方向を決める社長、コントローラーは敏腕秘書だと思ってください。そのほかは、倉庫や工場で働く頼もしい社員たちです。
宮内

宮内

ほう…
わからなくなるので、もう一度こちらの図を
寺田さん

寺田さん

たとえば、「ツイートを保存したい」とします。進むべき道をルーティングに書いて、それに必要なアクションや情報(投稿内容やユーザー情報など)をコントローラーにまとめておきます。

その指示通りに、モデルは情報管理倉庫テーブルの扉を開けて商品を準備し、ビューが各家庭に送っても恥ずかしくないように見た目を整えながら、情報を段ボールにパッキング。

最後に完了報告を敏腕秘書コントローラーにすると、画面上に「ツイートが完了しました」と表示される…と、ざっくりこんな流れになっているんです。