Category : shot idea

http://www.rokurofire.info/2013/04/10/webservice/ の続き
以下は、以前私がとても勇気づけられた記事(自分でWEBサービスを作りたいと思っている人へ)と同じように、時系列を追ってどんな勉強をしたかを書いておきます。

事の発端

8月

お腹痛い。病院行ったら急性虫垂炎。 → 手術の場合は大腸半分取るよん。

9月

いろいろ手をつくして一時退院。この時点でHTML、JS、CSSはできるが、サーバサイドの知識がゼロでした。Apacheでローカル環境構築はやったことあったくらい。
すぐにVPSを借りてサーバ周りをいじり始め、環境を作っては壊しの繰り返し。やっているうちに、Apache+PHP+MySQL+Git くらいはすぐに環境構築できるようになりました。

10月

これから始めるならRubyがいいよとアドバイスを受け、なぜかRailsの本を買い、1か月でとりあえず1冊やりました。
Ruby分からなくてもフレームワークだけやっときゃ平気でしょ。勘でどうにかなるっしょ、という甘い考えでした。サンプルコードは全部試しましたが、何故ちゃんと動いているのかは全く理解しておらず、Railsの環境構築にもかなり手間取りました。

11月、12月

会社の先輩にVMwareの存在を教えてもらい、すぐに購入し Ubuntu server を入れ、色々いじりました。スナップショットって本当に便利ですね。VPSで環境をぐちゃぐちゃしてたのがあほらしくなりました。
SSHでMacからUbuntuに繋ぐ方法があることを知りました。これでやっとこさ開発環境が整いました。
とにかくRailsの環境構築だけをひたすらやっていました。(初めて触るLinuxが面白くて、遊んだりもしてました)何でそんなにかかるんだアホと言われそうですが、Railsは初心者で完全に独学だと、ハードル高いと思いました。PHPはもっと簡単に動いたのに・・・

また、ここで再入院して手術しました。絶食してたこともあり、病室では一切勉強出来ませんでした。カテーテルが尿道にひぎゃああああ。

1月

いざ!自分の作りたいものを作り始めるぞ!とPCを開いたものの、Railsだけやっててもいざ処理を書くとなるとさっぱりなのです。当たり前ですが。Rubyをゼロからやらないとまずいと思い、元旦に本を2冊買って5日で終わらせました。
Railsを10月に一度かじっていたのも良かったです。Railsのあの部分は、Rubyで書くとこうなるんだなと、なんとなく理解出来ました。普通は逆なんでしょうね。

1月の上旬、やっとWEBサービス作成を開始しました。土俵に上がるまでに3ヶ月もかかってしまいました。
ここからひたすらサーバサイドのプログラムを作っていくことになります。平日会社から帰ってから4時間くらい、土日は6〜10時間くらいひたすらコードを書くようになりました。

2月

作りたいものは決まっていたので、サイトの設計をしてみました。が、そんなの初心者がやっても意味ないことがわかりました。作っていくうちにどんどん仕様が変わります。きっちりした設計をするのは諦めました。
ここらへんで、やっとGemの使い方がわかりだしました。定番とされるプラグインもいくつか入れました。

3月

ひたすら組んだ結果、サーバの方は普通のCRUD機能だけなので、何とかなりました。この時点でもう3月末。ここでサーバのストレージ容量が心許ないことに気づきました。
画像を投稿するサービスなので、容量たくさん欲しい。 → 画像の保存先としてAmazon s3を使うことにしました。
paperclipというネ申プラグインを使うと殆ど何も書いていないのにs3への保存が出来てしまいました。これがなかったら、あと1ヶ月は遅れていたような気がします。
デザインもここらへんで始めました。が、公開優先のため、そこまで根を詰めないようにしました。MySQLのコマンド操作にもここらへんでやっと慣れて来ました。

4月

とりあえずひと通り組めたので、いざVPSにデプロイしようと思ったら、VPSの環境はぶっ壊したままでした。/(^o^)\
上の方で、環境構築はすぐに出来るようになったと書きましたが、あれは嘘です。いえ、何となくはできるのですが、信頼性に疑問がありました。自分が自信を持てない環境でなんか、公開できません。

やばい、どうしようと思い、たどり着いたのがホスティングサービス。Herokuは英語なので理解するのに時間かかると思い、今回はSqaleを選択しました。Sqaleは分かりやすい。日本語ですし。マニュアルがきっちりしていて、ほとんど迷うことなくデプロイできました。

退院してから約半年、WEBサービスを組み始めてから3か月。公開までかかりました。

http://www.shot-idea.com/ (shot idea – 全てのアイディアをあなたの力に)

学習について

Rubyはとても覚えやすかった、気がする

本が優秀だったのかもしれませんが、ほとんど躓くことはありませんでした。文才がないのでうまく伝えられないのですが、書いたとおりに動いてくれる感覚でした。(JavaScriptよりは楽しく勉強できました)
私がお世話になったのは下記2冊。

・たのしいRuby 第3版
・作りながら学ぶRuby入門 第2版

「たのしいRuby」は、文法を細かく説明してくれる、超入門編の本でした。ただ本を開いた瞬間に「やばい、全然面白くない。これじゃモチベーションが保てない。」と感じたため、実践編である「作りながら学ぶRuby入門」からやることにしました。

Rubyをこれから始める方、この本は買いです。本当に楽しく学習できました。
1冊終わると、簡単なWEBサービスが1個できあがります。楽しすぎて1日で読み切り、2日でサンプルコードを全部試しました。

先に実践編から入った判断は正解だったと思います。モチベーションを高い状態で保つことができ、文法などの細かい部分を「たのしいRuby」でカバーしました。
高度なことはまだできませんが、スクレイピングしてDBにデータを入れるだとか、Twitterのbot作成くらいまではできるようになりました。

Railsは学習を始めるまでが苦痛だった

素人が独学だと敷居が高すぎるとおもいました。困ったときに手取り足取り教えてくれるチューターさんがいれば別ですが。
サーバを触るのも全くの初めてでしたので、環境構築だけで何度挫折しそうになったことか。

Railsを勉強したいだけなのに、Apache、MySQL(PostgreSQL)、Ruby、Rails、rbenv、Passenger、git。。。どんだけインストールさせるんですか。
参考書には詳しく書いてないよ、ちゃんと動かないよ。。。の繰り返しでした。

Apacheにやっと慣れたと思ったら、最近の流行りはnginx+unicornだとかなんとか。もうやだ。(読み方、んじんくすじゃないのですね。)
Macじゃ何故かPassengerが動かないし。スナップショットの撮れるVM環境は必須でした。

やっと勉強が開始できるようになってからはまず、ドットインストールさんの「Ruby on Rails入門」を全部やりました(2周くらいしました)。ひと通り学ぶと、簡単なブログ機能を作ることができるようになります。無料でこんなに詳しく学べるなんて。。。本当に素晴らしいサービスです。今思うと、新しい言語への嫌悪感をそんなに感じなかったのは、この学習方法がかなり楽しかったおかげだと思います。

「Ruby on Rails 3 アプリケーションプログラミング」という本にも大変お世話になりました。実際にアプリを作りながらRailsの大まかな機能を広く浅く学んでいくタイプの本です。データベースの設計方法などもこの本で分かるようになりました。

私が勉強したのは上記の2つです。単純なCRUD機能だけなら十分なのではないでしょうか。また、下記のような便利なプラグインもあるので、複雑な処理を書かなくても、欲しい機能が簡単に実装出来ました。

  • acts_as_taggable_on(タグ付け)
  • kaminari(ページャ)
  • paperclip(画像の保存、Amazon s3へのポスト)
  • better_errors(エラー画面を読みやすくしてくれる)
  • activeadmin(DBの管理画面を作ってくれる)

などなど。
実際に組み始めてしまえば楽しいんですけどね。そこにたどり着くまでの期間が辛すぎました。

データベースの設計とか

これもやったことが無いので途方に暮れました。どこかに似たような例が公開されてないかなーと検索していたら「dbpatterns」というサイトを見つけました。ここを参考にしていた気がします。
DBの設計パターンをみんなで共有しあうサービスのようです。

例)ブログのポストの設計パターン
http://dbpatterns.com/documents/5072065189cbad68b72d4b42/

ホスティングサービスに頼るという選択

今回はSqaleを使いましたが、超楽でした。Railsの一式を、gitでpushするだけで、本番にデプロイされます。なのでアプリの制作だけに集中出来ます。

サーバのことまでやりだしたら、もう1か月公開まで時間が必要だったと思います。最初のうちはこれで十分なのではないでしょうか。
ただサーバの知識をちゃんと付けたいので、自分の作った環境でも後ほど試してみたいと思います。

と、こんな感じです。
とりあえずサービスの公開はできましたが、しょぼいのでもう少しまともにしたいです。また、初心者ルビィストを抜け出したいですね。

もう1個作りたいものがあるので、引き続きがんばろうかなと。