まさ@ブログ書き込み中

まさ@ブログ書き込み中

まさの旅、英語、プログラミング、プライベートについて、色々記録しています。

今回のMINEプロジェクトから学んだこと

 

こんにちは、大学側が用意してくれた作業用ラボ室でMacをタタタターンしているまさです。

 

僕はSinatraでLINE風アプリ「MINE」をつくり、昨日で必要な機能やデザインなどに関する開発を終了しました。

 

コードはこち

github.com

 

 

というわけでこの記事では今回のMINEプロジェクトの振り返りをしたいと思っています。技術的な話もあるよ。

 

 

基本的な情報

かかった時間について

  • 振り返ってみれば開発期間は20日間
  • 開発をスタートした日は5月15日
  • 形にできた日は5月27日
  • 終了した日は6月6日
  • 大学・バイト・就活の合間の時間はほとんどコードを書いた

 

目的・理由

  • ワクワクするから
  • ISUCONに必要なSinatraRuby)やMySQLについて慣れておく必要があったから
  • フロントエンド(HTML&CSS&jQuery)とバックエンド(Sinatra/MySQL(ActiveRecord))についてアウトプットするいい機会だったから
  • プログラマーとしてモノを作れば作るほどそれが実績になるから

 

 

学んだこと

全部が学びだったと言っても過言ではないのですが、強いて挙げるとしたら、基礎的な面では

  • Sinatra( flash + content_for + layout.erb含む)に慣れることができた
  • セッションの使い方を学ぶことができた
  • MySQLの使い方を学ぶことができた
  • ActiveRecordの使い方を学ぶことができた

という点でしょうか。ドットインストールさんとProgateさんがある時代に生まれてよかった。

 

そしてMINEを1度作った後に学んだこと。それは

 

そもそも開発するにあたってデータベースや機能の設計がクソ大事。というか全て。

 

だということです。今回の記事ではこのことについて掘り下げていきたいと思います。

 

 

開発の設計次第でコーディングにかかる時間やコーダーのストレスは絶対変わる

何を当たり前のこと言ってるんだ、って思う人が多いと思いますし、僕もプログラミング始める前からそう思っていました。

 

設計書ないと「後からこれが必要だった」「これは要らなかった」って作るの右往左往するでしょ。ってね。

 

でも、僕はそこにどハマりしてしまったのでした。

 

全ユーザ一覧なんて要るはずがない

今回僕はMINEは大掛かりなアプリではないからとたかをくくって「まずログイン機能作って、その後トップページに移動して・・・」っていう感じで連想しながら作っていったんです。

 

そこで作ってしまったのが全ユーザ一覧。最初のMINEのデモ動画を覚えていますでしょうか。下の動画の「ユーザー」タブに対応する点です。

MINEデモ動画1

 

 

よく考えたら、あれ、要らないよね。

MINEは友達と話をするためのコミュニケーションツールを作っているのだから。

 

僕のコーディング力の甘さもあいまって、このユーザ一覧を表示するためのコードがMINEのコードの中で一番ややこしいものになっていました。

 

ドン引きでしょ。このコードにも、これが要らないという事実にも。 

 

 ここで初めて僕は本当の意味で設計の大切さを痛感したのでした。

 

データベースへのクエリが多すぎる

これはISUCONにも関係することであり、さぼさんから頂いたアドバイスに基づく考えなのですが、データベースからデータを引っ張ってくる回数は最小限にして、また、出来るだけ少ないデータを取ってくるようにしたほうがいいと思いました。

 

完全なる初心者(Complete Beginner(略してCB))である僕のコーディングして要る時の頭の中はこんな感じです。

 

「友達一覧を作ろう」→「友達のデータを全員引っ張ってくるぞ」→「よし、できた」→「トーク一覧を作ろう」→「友達のデータを全部引っ張ってきて、友達の持つトークルームと自分のトークルームをマッチングさせてアクティブなトークルームを見つけよう」 

 

こう書いたらわかりやすいのですが、二回友達のデータ引っ張ってきていますね。

 

これはCBである僕にとっては書いて要る最中に思いつくのは少し面倒だし、難しいことです。特に「とにかく動くものをつくりたい」と強く思っている間は。

 

アプリケーション(Model)側において、データベースどのようなクエリを発行するか。それはデータを取り過ぎていないか。何度も重複して取ってきていないか。これは設計段階で「何が必要か」を広い視野でイメージしているかどうかで防げると思います。

 

データベースの設計も考えていなかった

クエリを最小限に抑えることはできたとしても、そもそもデータベースの設計やクエリを効率的にする仕組み(Ruby on railsならActiveRecordなど)を利用することも考えなければなりません。

 

あるテーブルとその他のテーブルがなんらかの形で関連しているのであれば、データベースの関連付けをする方が良い。

 

そういう発想ができるのもまた「ただ必要になったら考えてつくる」という視点より一つ高い視座、つまり「設計を考える」ということにあるのではないでしょうか。

 

コーディングの一つ上の視座は設計だということですね。

 

 

設計できたらプログラミングは半分終わり、企画できたらソフトウェア設計は半分終わるのかも

「設計大事だなー」と思っていたら、ある記憶がパッとよみがえりました。

 

僕が6月の頭に訪問させていただいた企業のプログラマーの方と色々お話しさせて頂いた時のことです。

 

その方に色々使って居る言語についてお話ししたり、今自分がやっていることを熱弁していると、その人は「どっちかっていうとコーディング自体にはあまり価値を感じていない」と仰っていました。

 

ではその人は今何を夢中になってやっているのかというと、企業の目指す方向性からIT戦略へ落とし込み、その戦略から必要なソフトウェアを考え、設計までを行なっているのだと。

 

コーディングはなんのためにあるのか。設計書通りに作るため。設計書はなんのためにあるか。製品をしっかり作るため。製品はなんのためにあるのか。ある企画やプロジェクトを成功させるため。企画やプロジェクトはなんのためにあるか。社会に価値のあるものを提供するためにある。

 

そう考えると、設計がしっかりできることもまたプログラマーとして大切なことであり、設計する以前に企画やプロジェクトを考えて社会に価値を生み出すことを思いつくこともまた大切なことなのだと再確認したのでした。

 

 

まとめ

基本的にこのブログは学習や開発のまとめのために書いているので、とりとめもなかったり長ったらしい話になってしまいがちなので、今回もまとめます。

  • LINE風アプリ「MINE」を20日間で作りました。
  • たくさん学びに繋がりましたし、もっと色んなものを作りたいと思いました。
  • 特に学んだことは設計の大切さ。設計の大切さから企画やプロジェクトを作る大切さも再確認できました。

 

以上。

 

広告を非表示にする