プログラミングスクールに50万溶かしたリーマンがエッッサイトを作った話

<p><br />どうも29歳中小企業営業マンです。</p>
<p> </p>
<p>プログラミングスクールに50万を費やして挫折→復活→挫折→その後5ヶ月でサイトをイチから完成させました。ここまで本当に長くて長くて大変だったよ・・・。サイトを完成させて本当に泣きそうなほど嬉しいよ・・・。辛かった・・・。本当にお兄さん辛かったよぉッッ</p>
<p><br />実は、ここまで来るのにプログラミング学習で50万使いました・・・。</p>
<p><br />著者歴<br />年齢: 29歳<br />仕事: 営業職（B to C）<br />学歴: 国公立大学 文系（経済学部）<br />プログラミング歴: 10ヶ月<br />開発期間: 5ヶ月（1日2時間くらい）<br />はじめてPCを使ったのは？ :高校生、Windows95のメイプルストーリーがやりたくてはじめて触れました。</p>
<p><br />♡うそです、中学3年生のyourfilehostで動画鑑賞しますた♡</p>
<p><br />そこで作りました。</p>
http://shiko-tsuma.club
<p> </p>
<h3>シコい人妻のコンセプト</h3>
<br />ひとことで表すと人妻サイトです。<br />機能は極力シンプルにして、ユーザーが見やすいようなデザインを第一優先にしました。（もちろん管理人も日々
シコい人妻http://shiko-tsuma.club
をシコシコ使ってカイゼンしています。）
<p><br />すべて、と人気（PV数で並び替え）のメニューがあります。<br />さらに、投稿時に付与したタグをクリックすると同じタグの付いた動画が一覧表示されます。</p>
<p> </p>
<h3>サイトデザインについて</h3>
<p>動画サイトのキングをインスパイアしました。そのサイトはとてもシコりやすいデザインなので別の意味でもいつもお世話になってます。<br />フォントはGoogle Fontを使用しています。また色合いはごちゃごちゃしないようにメインカラー（黒）、ベースカラー（白）、アクセントカラー（ピンク）以外の色は使用していません。<br />あともちろんスマホレイアウトを最優先しました。そしてタブレットのデザインは省きました。</p>
<h3><br />開発までの経緯</h3>
<p>実は、一回プログラミングに挫折しております。<br />動画で学べるプログラミング学習サイトをすべて学んだらHサイトを作れるんじゃね？って思った時期がありました。<br />ちょうどこの記事も参考にしていましたし→https://anond.hatelabo.jp/20101203150748<br />動画サイトでHTML, CSS, PHP, JavaScriptのメニューを3ヶ月位でこなしました。もちろん有料会員。（3ヶ月で3000円を費やす）<br />しかし、PHPのどうしても解決できないエラーにハマりました。<br />「クソッ、なんで動かねぇーんだ、チクショウ」そうやって机を叩いたことがたくさんあります。<br />「もうやめよう、無理だ、いや、まだ続けよう、いや、やめよう、無理だ、いや、まだ続けよう」そうやって何度も悩み続けました。</p>
<p><br />どうしてもプログラミングでサイトを作りたい！<br />けど、どうしようもない！<br />どうすればいいのか悩んだ挙げ句、Google先生に頼みました。</p>
<h3><br />プログラミング教材、プログラミングオンラインスクールについて</h3>
<p>プログラミング Web開発 などで調べると魅力的なページに辿り着きました。プログラミングを教えていて、サロンなどもやっている○○○さんという方のBlogでした。<br />そのBlogでは</p>
<h5><br />プログラミングで自由な生き方ができる！<br />プログラミングって魔法なんだ！<br />こんな夢のようなキャッチフレーズに心打たれました。</h5>
<p><br />本気になった私は教材の購入ボタンを押しました。</p>
<h3><br />某○○○さんの教材</h3>
<p><br />ものすごく期待して届いた教材を進めたところ・・・</p>
<p><br />「なんだこれ、本で読んだのと全く同じやん・・・」<br />「こんな基礎中の基礎なんて」</p>
<p><br />基礎中の基礎しか学べませんでした。<br />HTML、Ruby、Railsの基礎中の基礎なのでプログラミングを初めてする人にはいいかもしれないです。けど自分が実現したいWeb開発には直接は役に立ちません。もはや悲しみに近い怒りですがこの人は自分でWebアプリなどを本番環境やサーバを立てて自分で運営したことがあるのだろうか？と怒りを禁じえませんでした。<br />（後にエンジニアのメンターさんは20年前からまるで成長していない（安西先生風）Webアプリケーションを作らせている、と言っていました・・・。）<br />（ここまでで10万円を費やす）</p>
<p><br />「ん～、基礎ばっかりやってもまだ掲示板しか作れないし、作りたい機能や動かないコードの質問をしても調べろ、って言われるだけだったしな・・・」<br />「本当にプロのエンジニアに教わったら早いかもしれない」<br />そう思いました。</p>
<p><br />そして、「プログラミング 実践 開発」 「プログラミング エンジニア 講師」で調べると現役のエンジニアがメンターとして週に何回か見てくれるプログラミングスクールにたどり着きました。</p>
<p> </p>
<h3>オンラインスクールで学ぶ</h3>
<p><br />そこで行われるカリキュラムというのは、オンラインスクール自身が作成した教材を進めながら、エンジニアのメンタリングを週に何回か受けるというもの。<br />他のスクールも検討しながら、1ヶ月近く悩み続けました。しかしプログラミングは投資だ、と思い<br />「えい、40万円入金ッッ」（ここまでで50万円・・・勇気がいりました）を実行しました。</p>
<p><br />最初は休日の朝にメンターとのコンタクトがあったのですが、起きられないことが多々ありました（連日深夜まで残業だったからとても眠かった）。出された課題も1日2時間もかかるので仕事で神経を減らして疲れた体には辛かったです。<br />「正直仕事が忙しいし、プログラミング勉強してる暇ないから、また挫折か・・・」と思いました。めちゃくちゃダメ人間なのです。</p>
<p><br />「また何も成し遂げられないのか・・・」</p>
<p><br />実は私、大学受験で第一志望に落ちて、理系に行くはずだったのに文系で絶望しました。だから理系のプログラマーに憧れます！<br />やりたかった仕事の就職も失敗しました。<br />高校も不登校だったし、昔うつ病も発症しています。</p>
<h4><br />「もともとダメ人間でクズな自分が継続などできないのか・・・」</h4>
<p><br />しかし、縁があって担当してもらったメンターさんの話が自分にとって刺激的で面白かったのです。</p>
<p> </p>
<h5>「Webサイトを大企業に売却して3000万稼いだ話」<br />「ベンチャー企業に誘われて手取り100万稼いだ話」<br />「どこどこのサイトのデータベースの裏話」<br />「自分の開発したサイトアプリケーションの話」</h5>
<p><br />「すげぇ」そう思いました。<br />また、自分が仕事で使用しているツールがどうやって作られているのかも説明してくれてすごいリアルで面白かった。こちらの質問にも具体的に答えてくれて「すげぇ」って感じでした。<br />あと、オンラインスクールの推奨フレームワークがRubyだったのですが、Rubyが直感的で書いていて気持ちが良かったのです。</p>
<p><br />今まで動画サイトや本でフワッと学んだ知識がつながるのを実感しました。<br />気づいたら仕事から帰ってスーツのままプログラミングを学習していました。すごく楽しくなってきたのです。</p>
<p><br />しかし、シコい人妻http://shiko-tsuma.club を公開した今だからわかるのですが、プログラミングスクールの教材はRailsガイドのマネごとでした・・・。</p>
<p><br />この気持わかる人いますか？</p>
<p><br />ぶっちゃけ今だったら最初から</p>
<p>RubyとRailsの学習ガイド2019年版<br />https://magazine.rubyist.net/articles/0059/0059-Ruby-Rails-Beginners-Guide.html</p>
<p><br />の通りやったほうが良かった。</p>
<p><br />また、教材以外にもこれらを学びました。<br />https://www.sbcr.jp/product/4797386295/</p>
<p>https://gihyo.jp/book/2017/978-4-7741-9397-7</p>
<p>http://gihyo.jp/magazine/wdpress/plus/978-4-7741-4204-3</p>
<p>https://saruwakakun.com/html-css/basic</p>
<p><br />あとgitも公式チュートリアルで学びました<br />https://try.github.io/</p>
<p><br />いやー、オンラインスクールはgitの実践的なエラー解決は教えてくれなかったｗ<br />基本git -f はしてはいけないとか知らなかった。<br />おかげでgitミスって書いたコードが消し飛んだことが多々あります。</p>
<p>結局のところ、プログラミングの基礎的な内容については高額な教材（1万円以上）を買う必要はないかと思います。3000円の本を2,3周すれば十分です。高額な教材と3000円の本の内容は一緒です。（経験者は語る）1人では続かなくて誰かにサポートしてほしい場合は買ってもいいんじゃないでしょうか。<br />つまり、オンラインのプログラミング学習は教材にあまり価値はありません。そのサポートに数万円の価値があります。（人件費だから高いのは当たり前）</p>
<p><br />プログラミング学習が流行っていますが、プログラミングは手段です。何を目的にするかが重要かなと思いますね。私の場合はWeb開発でした。そして、Web開発において、大事なのは継続できるモチベーションづくりです。もし何度も挫折するのならば、良質な本で学びながらプログラミングを仕事にしているメンターに週何回か見てもらえばいいのではないでしょうか。</p>
<p><br />ぶっちゃけ、自分でサービスを開発していない人やレベルの低いエンジニアにわざわざ教わる価値はない、ですね。</p>
<h3><br />シコい人妻ができるまで</h3>
<p>プログラミング業務未経験の初心者がシコい人妻http://shiko-tsuma.club<br />みたいなサイトを作る場合、勉強したリストは以下の通り。<br />実際、私はこれらを10ヶ月くらいで開発しながらこなしました。<br />（途中別のWebアプリを作ろうとしたが続かず失敗、その後シコ妻に変更して5ヶ月後で完成して今に至る）</p>
<h3><br />HTML / CSS</h3>
<p>「HTML / CSSなんて常識だろ、パパっと学んどけばいいんだ」そう思ってあとで苦労しました。<br />これらの知識が中途半端だったので、いざゼロから書けってなったときに困りました。<br />たとえばRailsでリンクを生成するメソッドでタグの位置を微妙に間違えたりして表示されないことなどがありました。</p>
<h3><br />Linuxのターミナル</h3>
<p>基礎的なコマンドを動画で学びました。<br />https://dotinstall.com/lessons/basic_unix_v2</p>
<h3><br />HTTPのしくみ</h3>
<p>本でサラッと学びました。この本です。<br />https://www.amazon.co.jp/Webを支える技術-HTTP、URI、HTML、そしてREST-WEB-PRESS-plus/dp/4774142042/ref=sr_1_1?__mk_ja_JP=カタカナ&amp;keywords=http&amp;qid=1569577311&amp;s=books&amp;sr=1-1</p>
<p>とりあえずCRUDということを学びました（小並感）</p>
<h3>Ruby</h3>
<p>each, ifなどの文法を学びました。この本です。<br />https://www.amazon.co.jp/プロを目指す人のためのRuby入門-言語仕様からテスト駆動開発・デバッグ技法まで-Software-Design-plusシリーズ/dp/4774193976/ref=sr_1_1?__mk_ja_JP=カタカナ&amp;keywords=ruby&amp;qid=1569577335&amp;s=books&amp;sr=1-1</p>
<p><br />本当はオブジェクト指向とかできればいいのでけれどまだそのレベルではないです。Rubyは$とか書かなくていいので書いていて気持ちがいいです。でもプログラミング強い人からするとRubyは型が曖昧で気持ち悪いらしい・・・。本当でしょうか？</p>
<h3><br />Railsについて</h3>
<p>最初はフレームワークの何がいいのかわかりませんでした。ですが、Railsで開発したり、Railsの記事を読んだりするうちに、そもそもフレームワークとはWeb作りなどで使う定番のコードをあらかじめ用意しておいたもので、フレームワークをそのルール通りに使うと開発の時間が削減できる、ということを知りました。<br />今、オンラインスクールとかネット上で教えている内容の多くはRailsです。全くのプログラミング素人にRailsを教えているわけです。<br />しかし、初心者がいきなりフレームワークを使用してコピペで書いたツギハギ開発をすると「わけのわからないエラー」が量産します。<br />かくいう私がまさにそうでした。</p>
<p><br />参考<br />今すぐ辞めて欲しい、「Ruby on Rails勉強してます」「CakePHP勉強してます」<br />https://blog.sumyapp.com/2013/07/no-recommend-rails/</p>
<p><br />Railsは基礎的な文法を覚えるだけで簡単な機能を作れますが、一歩ルールから外れたことをすると途端にどうしていいかわからなくなり混乱します。<br />これからはサーバ、データベース、コンピュータサイエンスの基礎を学ぼうと思いました。</p>
<p> </p>
<h3>データベース</h3>
<p>基本的なSQL文法などは動画サイトなどで学びました。あとは適宜ググりながらやりました。<br />また、1対多や多対多の使用例を開発して身にしみてわかりました。データベースは正規化、N+1問題、高速化などなかなか奥が深い分野です。ちなみにオンラインスクールはSQL文しか教えてくれませんでした。</p>
<p> </p>
<h3>サイトのコンセプトを考える</h3>
<p>「ここまで来たらいよいよサイトづくりだ！」そう思い、興奮しながらサイト案を練りました。</p>
<h3><br />ER図、サイトマップを作成する</h3>
<p>「いーあーる図！？なんじゃそれは！」<br />ググるとどうやらデータベースの概要図とのことでした。そもそもデータベースに格納するデータはどのようなものか？そのカラムにどんな値を持たせるのか？関連は？ということを図にするのです。<br />参考 https://qiita.com/inexp_eng4432/items/817db9ba18829e0f6d57<br />（いつもQiitaさんお世話になってヤース）</p>
<p><br />あと、サイトURLからどのような構造をしているか、というサイトマップも作成しました。</p>
<h3><span style="text-decoration: line-through;">trelloでタスクを並べる</span></h3>
<p>「なにをやれないいのか、イマイチわかりづらいな・・・どうしよう」<br />https://trello.com<br />ここでタスクを書き並べました。付箋みたいで便利。</p>
<h3>rails new rails migration</h3>
<p>「rails new shikoi_hitozuma てぇぇーい！」<br />ER図で作成したデータベース構造を見ながら実際のデータベースにテーブルを構築していきました。</p>
<h3>modelを書いていく</h3>
<p>「まずはModelからだ、と習ったぜぃ」<br />リソースを人気順にしたり、新しい順にしたり、ということを書いていきました。</p>
<h3>routingを書く</h3>
<p>「index show だったな、これらをそれぞれのModelに関して設計していくぜぃ」<br />どういうURL階層にするか、というサイトマップを参考にして書きました。</p>
<h3>controllerを書く</h3>
<p>「次はControllerだな、Modelから渡されたものを加工するぜぃ」<br />index showなどのアクションごとにインスタンス変数を書いていきます。</p>
<h3>viewを書く</h3>
<p>「よし、今度は表示させていくぜぃ HTMLてててーいッッ」<br />実際に見る画面を構築していきます。</p>
<h3>activeadminで投稿する</h3>
<p>rails のgem にactiveadminという、管理画面を一瞬で作るものがあります。それを導入して投稿を管理しました。<br />「だけど、公式情報が少なすぎてわからねぇーーーーーーひぃいいいいい」<br />activeadminはものすごい苦労しました・・・。</p>
<h3>サイトデザインをする</h3>
<p>「CSSぅー？こんなんぱぱっと終わらすぜぇ」<br />はじめはCSSをバカにしていましたが、本気でやりました。パッと見のデザインで印象は大きく変わりますから。1日2時間で1ヶ月位かけました。<br />ちなみにエンジニアの人は「CSSなんて鼻くそほじりながら書けるでしょ」って思っているようですが、違いますよ。確かに思考はあまりいらないかもしれないけれど、最優先事項の一つだと思います。</p>
<h3><br />本番サーバーを構築する</h3>
<p>「くそーーーーーーー！クソクソクソ！！！動かない！どうしてうごかねーんだ、なんでだ馬鹿野郎！！」<br />ってめちゃくちゃ思いながら行った、本番サーバー構築。<br />今回は開発環境をバーチャル環境のUbuntuで構築しました。オンラインスクールでは某エディタを使用するのですが、メンターから「本当はこんなクソエディタの開発環境じゃなくて、ローカル環境でDockerとかを用いて開発できればいいんですけど」と言っていたのでローカル環境で開発しました。※クソエディタはCloud9です。</p>
<p>まぁ、開発環境の構築は問題ないとして、本番環境が色々難しかったです。VPSとかAWSとかそこらへんです。<br />※ちなみに今はDockerを勉強しています。環境構築がもう少し楽になるといいんですが・・・仮想環境とDockerの違いがわからない、なんであんなにDockerなんて流行っているの？？疑問だ。</p>
<p>あと、そもそも開発環境で作ったものを本番環境にあげるなんてやったことなかったのですよ。だから開発環境と本番環境でgemを分けたりということを初めて学びました。<br />ここ、めっちゃ重要だと思うのです。Herokuで済ましている場合ではないです。<br />ちなみにオンラインスクールなどの教材はそのことについて触れてすらいないのです。本当の本番環境構築は初心者には難しすぎる、と認識しているのでしょうか？</p>
<p> </p>
<h3>使用技術について</h3>
<h4>Ruby<br />Rails</h4>
<h4>CSS</h4>
<p><br />オンラインスクールではbootstrapを推奨していましたが、ちゃんとしたデザインで開発するならばbootstrapは使ってはいけないとのこと。だからFlexboxでイチからデザインしました。</p>
<p> </p>
<h4>gem</h4>
<p>activeadmin<br />オシャレな管理画面。<br />これで記事を投稿しています。<br />投稿しやすいようにUIを変えるのに非常に苦労しました。情報が少ないのですｗ<br />苦労した点を書いていきます。</p>
<p><br />サムネイル画像をradioボタンで表示するには<br />動画を投稿する際に画像を見ながら選びたいですよね。<br />ラジオボックスのボタンを画像にする</p>
<p><br />activeadminのformのところをこんな風にします。<br />f.input :movie_thumbnail, as:<br />:radio,collection:Model.find(params[:id]).movie_thumbnail.select(:movie_thumbnail_url, :id).map { |c| ["&lt;img src='#{c.movie_thumbnail_url}'&gt;".html_safe, c.id] }</p>
<p>collectionのところでまずサムネイルを一覧表示させます。<br />そしてhtml_safeでHTMLタグとして認識すると画像が表示されます。</p>
<p>[Rails]ERBのエスケープを自在に扱おうぜ<br />https://qiita.com/satoken0417/items/7bcdb59eae82776375f9</p>
<h4><br />kaminari</h4>
<p>オシャレなページング（まだ入れてなかった）</p>
<p> </p>
<h4>pry</h4>
<p><br />irbのオシャレなやつ<br />デバッグするときにbinding.pryするとirbよりオサレです。</p>
<p> </p>
<h4>サーバ</h4>
<p><br />Nginx<br />unicorn<br />「nginx unicorn 早い、すごいお」<br />オンラインスクールの教材では一切教えてくれなかったですが、ここも超大事です。Webアプリケーションエンジニアのプロは高速なサーバーを構築するのが当たり前だそうですね。<br />これらは設定をググって書けばいいだけでしたが最初はハマって大変でした。<br />これらの記事でなんとか解決しました。<br />nginx + unicorn + Railsの設定方法<br />https://qiita.com/akito1986/items/56198edcafc222b320a8</p>
<h4>STI</h4>
<p>シコい人妻http://shiko-tsuma.club/には tagテーブルがあるのですが、そこから派生する妻ラベル（人妻の分類）や体型などのテーブルは内容が重複するのでSTIという設計を用いました。</p>
<p>参考記事<br />[Rails] STI（単一テーブル継承）とメタプログラミングでDRY<br />https://qiita.com/kidach1/items/789c2e7aebbcfbd2583e</p>
<p>これからは以下の機能を作っていきます。昼間はブラック企業で働いている関係上、作業は深夜になりそうですが、えっちい人妻のためにがんばります。<br />みんな、はてブコメントでコメントどしどしくれよな！</p>
<h3>追加したい機能</h3>
<p> </p>
<h4>セッションを利用した履歴表示</h4>
<p>多分セッションを期間で区切ってやればできると思います。</p>
<h4>ユーザーが投稿できるForm</h4>
<p>ユーザーがこれを共有したいと思う動画のURLを貼り付ければ投稿できる、というやつ。activeadminでできますね。</p>
<h4>コメント機能</h4>
<p>commentというテーブルを作って、記事にリレーションさせればいいと思います。</p>
<h4>ユーザーのお気に入り登録</h4>
<p>これもfavoriteというテーブルを作ってuserにリレーションさせます。</p>
<h4>日毎、週毎、月ごとのランキング</h4>
<p>今は直接記事にPVを加算していますが、別テーブルから期間ごとのランキングや上昇度を測ってYoutubeの急上昇みたいな機能もほしいですね。</p>
<h3><br />参考にしたところ</h3>
<p> </p>
<h4>本番環境構築について</h4>
<p>そもそもデプロイの経験が初めてだったのでdevelopment / production の棲み分けがわかってませんでした。<br />そのときに参考にした記事がこちら<br />(初心者向け）vpsを契約して、capistrano3でRailsアプリをデプロイするまで [その1 サーバー設定編]</p>
<h4><a href="https://qiita.com/ryo2132/items/f62690f0b16ec11270fe">https://qiita.com/ryo2132/items/f62690f0b16ec11270fe</a><br /><br />Rails</h4>
<p>Modelを簡素化するscope<br />Railsでよく利用する、Scopeの使い方。<br />https://qiita.com/ngron/items/14a39ce62c9d30bf3ac3</p>
<p>本番環境でbundlerがエラー起こしたときに参照しました。<br />BUNDLED WITH で Gemfile.lock が更新されてしまう件<br />https://qiita.com/suu_g/items/2b1630b8015d51c5292e</p>
<p> </p>
<h4>CSS</h4>
<p>Flexboxについて<br />日本語対応！CSS Flexboxのチートシートを作ったので配布します<br />https://www.webcreatorbox.com/tech/css-flexbox-cheat-sheet</p>
<p> </p>
<h3>まとめ</h3>
<p><br />初心者がサイトを開発したい場合は</p>
<p>・フレームワーク<br />・サーバーサイド言語<br />を軽く学んだ上で</p>
<p>・作りたいサイトのコンセプト<br />・作りたいサイトの機能<br />を紙に起こして</p>
<p>・サイトマップ<br />・データベースのER図</p>
<p>を元にして開発するのがいいです。<br />その際に「こうしたい」という機能がたくさんあると思いますが、それを大胆に1つか2つまで削ぎ落として、シンプルなものを完成させるのがいいです。できることよりできないことのほうが多いですから。</p>
<p>また、<br />・サーバーサイド言語<br />・フレームワークとデータベース<br />・デザイン<br />がWebアプリでは大事かな、と思います。</p>
<p>この記事も参考にするといいです。<br />（兎に角）早くプロトタイプを作る技術（初心者向け）<br />https://qiita.com/teradonburi/items/1d629a751ed42e923d7d</p>
<p>プログラミング初心者ゆえ、みなさんのアドバイス待ってます。</p>
<p>それではみなさん、よきシコい人妻http://shiko-tsuma.clubライフを。</p>
<p>PS<br />あとよくプログラミングスクールで謳われている「3ヶ月でフリーランスになる」ことは不可能だと思います。<br />開発してみて身にしみましたが、一口にプログラミングと言ってもやることが多すぎるので3ヶ月程度では仕事にするのはほぼ不可能だと思います。</p>
<p>現役エンジニアの人はどう思いますか？</p>
<p>また、メンターさんはプログラミング歴20年だし、知り合いのRubyプログラマは仕事ができるまで死ぬほど働いて3,4年かかったと言っていました。そんな人達がゴロゴロいるなかで勝てると思いますか？</p>
<p>知り合いの東大卒がこう言っていました。「俺は小学生から12年間、週に4回以上塾通い＆一貫中高＆自学自習（1日5時間以上）でギリギリ東大入れた。だから1年やそこらの努力で東大とか言っている有名人がムカつく。」と。<br />「じゃあ、100万払えば偏差値30でも3ヶ月で東大合格できる塾ってどう思う？」<br />「100％うそ、ありえない。受かる人は元々素地がある人。そもそも予備校の東大合格者の数だって、元々模試でA判定の人を無料で通わせたのをカウントしただけ。」</p>
<p><br />100万払えば3ヶ月で東大に合格させる塾なんてないのと同じように、50万払って3ヶ月でスーパープログラマーになれると思いますか？</p>
<p><br />みなさん、いいシコ妻ライフを。http://shiko-tsuma.club