話題になってる(?)某大学を中退した人がプログラミングがわからないので本をください(Amazonの欲しいものリストで)っていう記事を公開していて、その中で特にRubyとRuby on Railsの本がほしいと書いてました。

「RubyはともかくRuby on Railsってかなり丁寧なチュートリアルを記載してるWebサイトがあったよな~」というわけで、彼に変わってRuby on Railsのチュートリアルをやることにした。もしかしたら彼もやってるかもしれないですが…

まえがきとか


例によって、興味がコロコロ変わるマンなので明日以降はやらないかもしれない。
ちなみにチュートリアルはこちら。本記事記述時点のチュートリアルのRailsバージョンは4.2.2です。

また、以降にもくどいぐらい書いてますが、チュートリアルの3-3までやった感想なので、全部やったうえでの感想ではないです。
あくまで3-3までです。
あくまで3-3まで…
あくまで…..
あ…

とい激しい予防線を張ったうえで…

私のRubyとRuby on Railsに関する経験(というほどでもない)は下記のような感じ。前職の時の経験含む。

  • RedmineをBitnamiを使用せずに構築しようと試みた(Proxy周りで躓いて結局先輩に構築して頂いた)
  • Redmine本体のコードをいくらかカスタマイズした(できるかぎりやらないほうが好ましいと思う)
  • svnからgitに移行する際に諸事情で間に処理を挟む必要があり、その際のスクリプトをRubyで書いた
  • Codecademyという学習サイトで途中までRubyを勉強した(英語読むのがめんどくさくてやめた)

従って、どっちもさっぱりわからんマンですし、そもそもウェッブ開発も今の会社にはいってからPHP + Laravelで3か月くらいやっただけなので、ウェッブ開発自体ほとんどわからんマンです。

とりあえず、一昨日と今日の2日間で3-3までやってみました。(この記事書いてる間に日が変わってしまった…)今日は3章をやりきるつもりだったのですが、Cloud9の調子が悪いっぽいので(ブツブツ切れる)途中でやめました。

ちなみに、Cloud9はブラウザで開発できるIDEです。

Cloud9ですが、2段階認証したければGitHubでやってねというのと、ブツブツ切れる以外は満足です。開発環境構築するのってめんどくさいので他の言語もやる機会があれば使ってみたいです。なお、ワークスペースっちゅうのが割り当てられますが2つ以上作ろうとするとお金払わないとダメっぽいですね。

チュートリアルに沿ってない部分


話をRuby on Railsのチュートリアルに戻しますが、私は下記の3点はチュートリアルに沿ってないです。

  • BitBucketを使う(GitHubでやってます)
  • Herokuにデプロイする(めんどくさい & やる必要を感じないのでやってない)
  • チュートリアル(各章)ごとにリポジトリ作成する(GitHubのリポジトリが増えるので全部のチュートリアルを一つのリポジトリにコミット)

まず、BitBucketを使わない理由です。
BitBucketのアカウントは持ってますが、勉強のモチベーションの一つにGitHubに草を生やすというのがあるので、GitHubにpushしたくGitHubを使うことにしました。ちなみに、以前のチュートリアルはGitHubを使ってたそうです。使わなくなった理由はチュートリアルの1章を参照ください。

次に、Herokuにデプロイしない理由。
これは、Herokuを一応使ったことがある(このブログもものすごい初期はHerokuにデプロイしてた)というのと、チュートリアルの一環で最近のCI/CDを学ぶという目的がある(と思われる)のですが、CI/CDは大体理解してるので改めて学習する必要がないと感じたためです。

最後に、全部のチュートリアルを一つのリポジトリにコミットしている理由。
まず、デプロイしないのでリポジトリを分ける必要がないというのがあります。逆にチュートリアルごとにデプロイする必要があるのであれば分けた方がよいと思います。次に、箇条書きにも書いてますがGitHub上にリポジトリが乱立するのが嫌でした。GitHubのOrgnizationにそれぞれ作成して別のリポジトリにサブモジュールでまとめるというのも試しましたが、それだと草が生えないのと管理がめんどくさいのでやめました。

チュートリアルやってみた感想


で、チュートリアルやってみた感想。あくまで3-3までだけど。
まず、良い点から書きます。

良い点


丁寧

まず、メチャクチャ丁寧。ここまで丁寧に解説するかっていうくらい丁寧。どれくらい丁寧かっていうと、普通は前に実行したコマンドとかの記載ってないんですよね。でも、そのコマンドを実行する必要があるたびに、わざわざコマンドを書いてくださってる。従って、前の章に戻って見る必要がない。よくここまで書いてくださってるな~って感じ。原著者と翻訳者の方、ありがとうございます。

MVCパターンの解説がある

ウェッブ開発やり始めて3ヵ月くらいだし、前職だとグローバル変数でやり取りしまくるクソアンクソアンクソアンクソコードの保守(クラサバ)しか経験がなく、こういったパターンの経験がほとんどないので、MVCパターンについて解説があるのはありがたいです。また、私は会社ではLaravelを使用して開発を行っていますが、似通っている部分が多いので他のMVCフレームワークの勉強にもなると思います。(Laravel以外のMVCフレームワークを知らないので断言できませんが)

Railsスゴイ

コマンド一つでDBのテーブルまで作成してくれたり、それに紐づくModelも作ってくれたり、ルーティングも勝手に記述してくれるし、至れりつくせりで楽すぎ。
Laravelではここまでやってくれない(もしかしたら方法はあるかもしらないが知らない)

※2016/10/19追記
laravelでもできるようです。あとCakePHPとかFuelPHPでもできるらしい。いずれにしても使ってないけど…

gitの勉強にもなる

Cloud9でやってる場合は全てコマンドラインで操作する必要があるのですが、普段gitはGUIでやってる人間として(むしろわざわざコマンドラインでやってる人の方が珍しいと思う)はgitのコマンドの勉強になっていいです。私がgitのコマンドを使うのはGUIでできない操作(filter-branchとかgrepとかとかとかその他いろいろ)なので、改めてgitの(コマンド)学習になるので良いです。(各コマンドの解説もある)

また、ブランチを作成して作りましょう的なことも書いてあるので、gitを使った開発フローの勉強にもなると思う。(まあ、これも私の中では確立したフローがあるので参考程度にしかならないけど、まったく使ったことない人には参考になると思う)

Cloud9スゴイ

Cloud9スゴイ。DBも使えるしスゴイ。環境構築に関して何も考える必要がない。これのおかげでハードルがスゴイ低い。デフォルトでgit使えるしスゴイスゴイ。ああ、これはCloud9の感想か…

ビミョーな点


最後までやりきってないのでビミョーな点という書き方にしました。

Rubyの勉強になるのか?

少なくとも3-3までやった限りではRubyが学習できるというよりは完全にRuby on Railsに主眼が置かれてると感じました。もちろん、Ruby on Railsのチュートリアルなのでそうだといわれればそうですが、Rubyうんぬんに関する記述がほとんどない(あくまで3-3までですが…)

また、良い点に書いた通りフレームワークでかなり自動で生成してくれるので、よくわかんないけど動きましたみたいな感じになりかねないです。どこまでがフレームワークでどこまでがRubyなのかわかんなくならないかな…と。

PHPの話になりますが、私も現職でLaravel使いだしたときはどっからがフレームワークでどっからがサービスで実装された共通クラスでどっからがPHPの言語仕様もしくは関数なのかわからなかったので、特にプログラミング全くやったことない人には危ないのではないかと感じました。

この辺りの話については下記の記事で詳しく言及されてますし、私もその通りだと思いました。

今すぐ辞めて欲しい、「Ruby on Rails勉強してます」「CakePHP勉強してます」

RubyとRuby on Railsに関係ない感想


以下、RubyにもRuby on Railsにも関係ない点について書きます。
ここに書くにはおかしいかもしれないですが、チュートリアルには大いに関係してくるので書くことにしました。ツライ的内容しか書いてないです。

コマンドライン慣れてないとツライ

前述の通り、Cloud9ではコマンドラインで操作するので、コマンドラインに抵抗がある人はツライのではないかと思いました。幸い私は現職でLinuxを結構触ってるので抵抗がない&コマンドもわかりますが、これが前職のときのコマンドラインでほとんど使ったことない状態だったら抵抗感から挫折していたと思います。

これを機に慣れるのもアリだと思います。

git使ったことないとツライ

gitって何?って人には結構ツライのではないかと思います。gitの各コマンドで何ができるのかも理解しないといけないです。ちなみにgitはいきなり1章から出てきます。もっとも、gitを使わずともチュートリアルを完走することは(おそらく)可能だと思います。最後までやってないので定かではないですが…

また、後述のHerokuへのデプロイはgitが関係してくるのでgit解らない = Herokuへのデプロイもできないという状態になります。これを機にgitを勉強するのもアリだと思います。

デプロイって何?って人にはツライ

前述の通り、Herokuにデプロイするというのが1章からあるので、デプロイって何?って人にはツライ気がします。デプロイが何かわかってる人はHerokuが解らなくてもすんなり理解できると思います。少なくとも3-3までで、デプロイする必要はないのでデプロイやらない人はどうでもいいですが…

なお、デプロイしなくともCloud9上で動作確認できます。(少なくとも3-3までは…ですが)

まとめ


全く詰まるとこなく3-3までできたのですが、これは…

  • Cloud9で環境構築しなくて済んだ
  • コマンドラインでの操作に抵抗がなかった
  • gitの操作わかってた
  • CI/CDの知識があった
  • Laravelがかなり似通ってたのですんなり理解できた(他のMVCフレームワークは知らないけど)

のが大きいと感じました。

従って、これらの経験がない(あるいは開発環境をローカルで構築する)人は結構ハードル高く感じるのではないかと思いました。ただ、だからやらないのではなくて、一つ一つ順番にやればRails以外の勉強にもなると思うので、やってみたらいい経験になるのではないかと思います。

私が最後までやり切ったら(あるいは継続してやった場合)また別途記事にして書きたいと思います。