おつかれさまです、みやもとです。
最近Ruby on Railsの本を買ってみました。
以前からなんとなく興味がありつつなかなか手を出せなかったのですが、うだうだしている間に関西Ruby会議という素敵なイベントを発見。
衝動的に申し込んでしまったので、せめて参加までに少しぐらいはやっておきたいなーという泥縄式の勉強です。
ところでみやもとはRuby自体超初心者。
いきなりRailsに行くのはちょっと無茶かなー、と思わなくもありません。
どこからともなく「まずRubyやれよ」というお言葉が聞こえてきそう。
ごもっともです。
ただ、自分の性格的に理論からきっちりやるより動くものを触る方がモチベーションが続きそうと判断したので無謀を承知でRailsの本を買いました。
一応Ruby自体もExercismでちょこちょこ触っています。
そしていざ挑戦してみたのですが…
ちゃんと本があっても結構あっちこっちにつまづきポイントがあるな?と感じたので、私の失敗が誰かのお役に立つかもしれないと思って記事にしている次第です。
買った本に原因を求めているわけではなく、あくまで気楽に考えて突っ走ったみやもとの考慮不足が引き起こした失敗というスタンスです。
「Rubyの勉強するのに本は役に立たない!」ということではありません。
ここまで失敗すると思ってなかったので、作業中のエラーログその他ろくに残していませんでした。
記憶違いがあったらすみません。
失敗いろいろ
その1:rails newでつまづく
多くのプログラミング言語学習本と同様、まずはプログラムを書いて動かすための環境構築から始まりました。
コマンドを入力して実行して、だいたいのところは上手くいったのですがいざ最初の練習アプリを作ってみようとした時点でエラーが発生。
メッセージを見たところ「SQLiteのファイルが無いよ」ということのようでしたが、出力されたパスを見るとちゃんと同じ名前のファイルがある。
まあそういうこともあるかと思って検索するとやっぱり似た事象がよくある模様。
dllファイルをダウンロードして云々とかいろいろ方法は出てきました。
しかしながら書かれている内容を試してみてもやっぱりエラーが変わらない。
AIにもあれこれ聞いて、どうもRailsのバージョンとSQLiteのバージョンが合ってないらしいということが判明しました。
コマンドをそのまま実行した結果として私のPCにはRailsその他の最新バージョンがインストールされていて、本で想定されていたバージョンからだいぶ進んでしまっていたために起こった事象のようです。
「そのうちSQLiteも追い付くと思う」というようなことも書かれていましたが、さすがに対応までどれだけかかるかわからないバージョンアップを待つのはちょっと。
ということで本に記載のバージョンに近いRailsをインストールして、そちらのバージョンでrails newすることによって一応この問題は解決。
初歩のプロジェクトをどうにか作り終わって次に進みます。
その2:サンプルのセットアップでつまづく
私が買った本は出版社のサイトからサンプルをダウンロードできるようになっていて、サンプルを使う前提で手順が作られていました。
サンプルフォルダをコピーして、bundle installでライブラリをインストール。
そしてまたエラー。
うすうすそんな気配はしてたけども。
このへんでだいぶ面倒になってきて、一度環境を作り直すことに。
その3:環境構築でつまづく
私は何かしらプログラミング言語を勉強する時「最新のバージョンで入れとけばなんとかなるやろ」というアバウトな感覚で臨むところがあります。
Rubyまわりはバージョンアップが早いとは聞いていたので、なるべく最新の状況で書かれたものをと思って出版日が一番最近の本を買ったのですが、それでも最新バージョンで作業するにはちょっと古めだったようです。
ともあれ、本に記載のバージョンは今でもインストール可能。
これに合わせて環境構築すれば大丈夫なはずです。
もうおわかりですね?
早くもエラーが出ました。
make: *** [Makefile:248: websocket_mask.o] エラー 1
make failed, exit code 2
調べたところ、websocket-driverのコンパイルに失敗している模様。
RubyやRailsのバージョンを下げても、関連してインストールするドライバーその他のバージョンまで合わせてくれるわけではないようです。
Geminiに聞いてみるとバージョン下げてみ?とか提案してくれるのでいろいろ試してはみました。
みましたが、私がいまいちピンときてないせいなのかどうにも上手くいかない。
ここでようやく「本の通りの構成でやるの諦めよう」と決意します。
その4:やっぱりサンプルのセットアップでつまづく
結局最新のバージョンを入れ直し、SQLiteを諦めてPostgreSQLをインストールして最初の練習プログラムを突破。
そしてサンプルのセットアップ!SQLite前提で書かれてるからDBを変更するようにGemfileを編集!
bundle install 実行!
エラー!
An error occurred while installing nokogiri (1.16.7), and Bundler cannot
continue.
今度はnokogiriのインストールでダメだったようです。
解決策?
ここまででかなり疲れ果てたみやもと。
やけくそ気味にサンプルを使うのを諦めて全部それっぽく作ることを決意します。
多分無理とは思うのですが、フォルダおよびファイルの構成を合わせて本に記載の内容通りにファイルを修正すればもしかしたらいけるかもしれない。
とはいえ、ほぼ初心者にはハードルの高い作業なのは目に見えているので、AIの力を借りることに。
まずコマンドプロンプトでサンプルプロジェクトのフォルダに移動し、ツリーをテキスト出力します。
tree project_name /F >project_tree.txt
そしてClaudeにテキストを添付してプロンプトを送信。
以下はrailsのサンプルプロジェクトです
このプロジェクトのフォルダ構成およびファイル構成を一からrailsのコマンドで作る手順を作成してください。
なんとなくですが、この手の手順作成はClaudeが良い感じです。
Markdownファイルにしてくれるので地の文に埋もれず、作業時に見やすい。
Modelの項目名等でちょこちょこ修正はしましたが、ほぼそのまま実行できる手順を作ってくれたのには驚きました。
Claude賢いな…。
ともあれ、ひととおり実行してそれっぽいプロジェクトができました。
果たしてここからどうにかなるのか。
なんか無理そうな気がするな…。
本を選ぶポイント(個人的な反省)
この記事のまとめとして、今後Railsの勉強で本を買う時のポイントを挙げておきたいと思います。
せめて今回の悲しみを教訓にしたい。
1.「プログラミング初心者向け」を選ぶ
正直なところ、言語が違うとはいえ20年ぐらいプログラム組んだりしているわけですからまるきり初心者向けだと物足りないかもしれないな、という驕りがありました。
初めての言語、初めてのフレームワークに挑むときは簡単すぎるかも、と思うぐらい基礎の基礎からじっくりやらないと、ちょっとしたエラーにも慌てふためき手が止まることになります。
プログラミングを始めたころの謙虚な気持ちで向き合うことを忘れてはいけません。
2.ひとつひとつ作る手順が書かれたものを選ぶ
先述の通り、今回選んだ本は序盤を除いて出版社から提供されているサンプルプログラムを使う前提で書かれていました。
この場合、サンプルプログラムを使えないとなった瞬間にそこから進めなくなります。
エラーをひとつひとつ解決しようにも、これから勉強しようという人間には「何に起因するエラーなのか」「どうやったら解決できるのか」を突き止めるところから始めるのはだいぶハードルが高い。
プログラムを最初から作るのにひとつひとつ手順をこなすのが前提なら、少なくとも手順のどこが原因のエラーなのかというのはわかります。
原因が特定できるだけでも心理的な負担は少なくなります。
3.なるべく新しいバージョンで書かれたものを選ぶ
今回つまづいた原因として、本が前提としていたバージョンと最新バージョンがかなり違っていたことが挙げられます。
Railsのバージョン番号は「メジャー番号.マイナー番号.パッチ番号」の形式で表されますが、本と最新ではメジャー番号から違っていました。
「去年出た本やったらまぁ大丈夫かなー」という安易な考えで本を選んだ結果がこの有様です。
本を買う前にメジャー番号だけでも確認しましょう。
できれば必要なもののバージョンを全部確認して、エラーなくインストールできるかを先に試した上で買った方が良いです。
2025/6/22 追記
記事のコメントで「WSLを使っては?」と教えていただいたサイトの手順を試してみたところインストールできました!
Ubuntuのインストールをしようと思ったらすでに何かでインストールしていたり、じゃあすぐ進められるなと思ったらパスワードを忘れていて結局インストールし直したり、アンインストールをWindowsメニューのアプリケーション削除からやったせいで再インストール後にうまく起動しなかったりしましたが、どうにか手順を完了できました。
Ubuntu再インストール前にwsl --unregisterの実行が必要だった模様。
まだインストールが済んだだけではありますが、すべて最新版を使う前提で手順が書かれているのとアプリ作成についてもいろいろ種類があるので、今やっている本が終わったらじっくり試してみようと思います。