RubyのActiveRecord単体使用でDB(MySQL)のデータ読込み・追加・更新・削除する方法

Ruby on Railsに組み込まれているモデル操作用(DB操作用)のライブラリといえばActiveRecordですが、これをRailsを使わずにRubyとActiveRecord単体の組み合わせで使ってみたいと思います。

phpMyAdminでダミーのデータベースを作成する。

早速ダミーのデータベースとテーブル作成でつまづいた。よく考えると、チュートリアルや本の写経でテーブル作成したことはあったが、自分で一から作るのは初めてでした。

なので、テーブル作成の時に以下のような初歩的っぽいエラーがたくさん出ました(T_T)

  • エラー#1063:「id」にauto incrementをつけた状態では、型をINT系にしなければいけない。(最初VARCHARにしてた。) <参考>
  • エラー#1293:テーブル内でデフォルト値がCURRENT_TIMESTAMPにできるのは1つだけらしい。createdとmodifed両方にCURRENT_TIMESTAMPを付けていたのを、createdのみにした。<参考>

作成したダミーのDBはこんな感じ。一応、あとからスクレイピングしたデータを挿入できるような構造にしてみます。

ActiveRecordを使うための環境構築

まずは環境構築。ActiveRecordはRailsの中で使われていたりするが、Ruby単体でも使用することができます。その場合、gemを使ってActiveRecordをインストールする必要がある。それと、mysqlに接続するためのアダプタもgemインストールが必要とのこと。とりあえずActiveRecordを単体で使うにはというそのものズバリのサイトを参考にしました。以下のようにGemfileに’activerecord’と’mysql2’を追記して、

Gemfile

bundleでインストールすると

mysql2のインストールのところで滝のようなエラーメッセージが表示されました。怖すぎる(T_T)

とのありがたい教えが含まれていたので、どうもmysqlが入って無いじゃんということのようです。そうか、今までMAMPのMySQLに頼りっぱなしで、自家製のMySQLはインストールすらしていませんでした。

良い機会ですし、MAMPを使ってインストールするのは結構たいへんそうなので、brewでローカルのMySQLをインストールしてみます。

これでMySQLが入りました。338MB!結構時間がかかったわけだ。。再度、bundle installを実行します。

mysql2のインストールができました!

ちなみにローカルのMySQLの起動方法、ログイン方法は、blewでMySQLした際に表示されますが、以下の手順になります。手順ではmysql -urootで行けるはずなのですが、エラーが出てしまいました。が、sudoで実行してみるとログインすることができました。うーん。

これでMAMPではなくローカルのMySQLを読みに行くようになったので、MAMPで作ったテスト用のDBとテーブルを、ローカルの新MySQLの方に移してきます。移行方法はDBをダンプ・リストアする方法もありますが、せっかくの勉強なので、手打ちで移行するのもよいかなと思いました。

phpMyAdminのGUIでテーブル作成しましたが、実はGUI操作しても内部で実行されたSQL文を確認することができます。phpMyAdminのこちらのページにアクセスして、「SQL履歴」というところを確認してください。

これでActiveRecordが使えるようになっているはずです。

ActiveRecordを簡単なサンプルで試す

ActiveRecordを使ったプログラミング方法は、先ほどのActiveRecordを単体で使うにはというサイトのサンプルを使って動かしてみます。いろいろトラブリましたが(後述します)最終的には以下のようにCRUD(登録・読み込み・更新・削除)の動作確認することができました。ActiveRecordの使い方はここを参考にしました
(テーブルは超簡単な別のテーブルを作って、そちらで動作確認しています。)

テーブル構造

ActiveRecordを使ったプログラム

実行結果

単体でActiveRecord実行する時のトラブルシューティング

ActiveRecordを使ったコードを書き上げて、普通に動くかと思いきや、以下のようなエラーが出ることがあります。箇条書きしますので、参考になればと思います。

mysql2のバージョンが最新指定だと、GemのLoadErrorが出る

原因はよくわからないですが、応急的な対応方法としてはmysql2アダプターのバージョンを最新版から0.3.20まで落とすという方法があります。以下のようにGemfileを書き換え、再度bundle installしてください。

プログラムのdatabase指定が間違っている場合のエラー

プログラムのTable指定が間違っている場合のエラー

ActiveRecordで指定するデータベースには、主キーが必要

主キーを入れないDBにActiveRecordで接続する場合、以下のようにNoMethodErrorのエラーが出ます。

対応方法は主キーを追加することでした。SQLでテーブルに主キーを追加する方法はこちらです

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です