こんにちは! フリーエンジニアの長瀬です。
みなさんはconsoleを使っていますか?
consoleを使いこなせるようになれば、たくさんの便利な機能があるので、開発効率を上げてくれること間違いなしです。
この記事では、consoleの使い方について
・consoleとは
・consoleで簡単な計算をしてみよう
・環境を指定して起動する方法
・名前付きルートのURLを確認する
・logの出力をカスタマイズする方法
という基本的な内容から、
・データベースを操作する方法
・pryのインストール方法
・pryの便利なコマンドまとめ
といった応用的な内容についても解説していきます。
consoleとは
consoleを使えばrubyのプログラムを実行できたり、データベースを直接的に操作できたりとさまざまな便利なことができます。
また標準のconsoleのツールであるirbからpryに変更すれば、高速にルーティングや、モデルの内容を確認できるようになったりと機能が拡張できるのでとても使い勝手が良くなります。(pryの導入については後半に説明します)
このようにconsoleには様々なメリットがあるので、使いこなすことはRailsで開発していく上で必須のスキルです。
なので、この記事を読んでしっかりと使い方をマスターしておきましょう。
consoleで簡単な計算をしてみよう
では、consoleを使って簡単な計算をしてみましょう。
コマンドプロンプトに以下のコードを入力してください。
rails console
このようにrails consoleと入力するとコンソールを起動できます。
また、終了するときは quitまたはexitでコンソールを閉じることができます。
そして、rails consoleはrails cと省略できるので、特別な理由がない限りはrails cと入力するようにしてください。
それでは、コンソールを開いた上で以下のコードを入力してみてください。
for i in 1...11 do print "#{i} " end
10までの数字を羅列するコードです。
[実行結果]
1 2 3 4 5 6 7 8 9 10 => 1...11
このように基本的な計算ができました。
この例に限らず、他の計算ももちろんできるので色々と試してみてください。
logの出力をカスタマイズする方法
Railsでは、ログのフォーマットを変更することができます。
詳しくはこちらの記事を参考にしてみてください。
名前付きルートのURLを確認する
さて、consoleでは名前付きのルートのURLを確認することができます。
まずは名前付きのルートを作成するためにscaffoldを使って、テンプレートのアプリを作成しましょう。
scaffoldについてわからない人こちらの記事を確認してください。
こちらのコードをコマンドプロンプトに入力してください。
rails g scaffold Tomato name:string rails db:migrate
[実行結果]
create db/migrate/20170815062341_create_tomatoes.rb create app/models/tomato.rb invoke test_unit create test/models/tomato_test.rb create test/fixtures/tomatoes.yml invoke resource_route route resources :tomatoes invoke scaffold_controller create app/controllers/tomatoes_controller.rb invoke erb create app/views/tomatoes create app/views/tomatoes/index.html.erb create app/views/tomatoes/edit.html.erb create app/views/tomatoes/show.html.erb create app/views/tomatoes/new.html.erb create app/views/tomatoes/_form.html.erb invoke test_unit create test/controllers/tomatoes_controller_test.rb invoke helper create app/helpers/tomatoes_helper.rb invoke test_unit invoke jbuilder create app/views/tomatoes/index.json.jbuilder create app/views/tomatoes/show.json.jbuilder create app/views/tomatoes/_tomato.json.jbuilder invoke assets invoke coffee create app/assets/javascripts/tomatoes.coffee invoke scss create app/assets/stylesheets/tomatoes.scss invoke scss identical app/assets/stylesheets/scaffolds.scss == 20170815062341 CreateTomatoes: migrating =================================== -- create_table(:tomatoes) -> 0.0065s == 20170815062341 CreateTomatoes: migrated (0.0066s) ==========================
今回の説明に必要なファイルを作成することができました。
tomatoes_pathという名前つきルートが作成されているので、rails cでコンソールを開いた後に以下のコードを入力してください。
app.tomatoes_path
[実行結果]
=> "/tomatoes"
このようにルーティングを確認できました。
また、以下のようにURLを求めることもできます。
#名前付きルートからURLを求める app.tomatoes_url #コントローラーとアクションからURLを求める app.url_for(controller: 'tomatoes', action: 'new')
[実行結果]
=> "http://www.example.com/tomatoes" => "http://www.example.com/tomatoes/new"
環境を指定して起動する方法
consoleでは実行環境を選択することができます。
デフォルトでは開発環境(development)になっています。
確認してみましょう。
コマンドプロンプトに以下のコードを入力してください。
Rails.env
[実行結果]
=> "development"
本番環境とテスト環境でconsoleを開く方法は以下の通りです。
rails c test #テスト環境 rails c production #本番環境
また、sandboxを使えば、consoleを使用してもデータベースを最後に元の状態に戻すことができます。
なので、データベースを変更したくないときにはconsoleにsamdboxを指定してください。
sandboxを指定するには以下のようにします。
rails c --sandbox
ためしに、さきほど作成したTomatoにデータを追加してみましょう。
rails c –sandboxを入力した後に以下のコードを入力してください。
Tomato.create(name:"吉田松陰")
そして、quitかexitでconsoleを終了してください。
すると、
(0.7ms) rollback transaction
のように出力され、データベースの変更がなかったことになったことがわかります。
(rollbackは巻き戻す、transactionはデータの変更の意味です。)
rollbackについて、理解を深めたい方はこちらの記事も参考にしてみてください。
データベースを操作する方法
レコードを追加する
コンソールからデータを追加するには、createコマンドを使うと便利です。
先ほどscaffoldで作成したTomatoモデルに値を追加してみましょう。
rails cでコンソールを起動した後以下のコードを入力してください。
Tomato.create(name:"吉田松陰") Tomato.create(name:"織田信長") Tomato.create(name:"千利休")
これで、3件の新しいデータを追加できました。
レコードを削除する
先ほど追加したデータを削除してみましょう。
rails cでコンソールを起動した後以下のコードを入力してください。
Tomato.find(3).destroy
find(idの数字)では、idによってレコードを取得できます。
それにdestroyをチェーンさせることで、任意のデータを削除できます。
この場合は3番目の”千利休”が削除されました。
ちなみに関連テーブルを含めずにすべて削除する場合は
Tomato.delete_all
で、関連テーブルごとすべて削除する場合は
Tomato.destroy_all
を使用してください。
テーブルの内容を確認する
consoleでは、データベースのテーブルの中身を確認できます。
Tomato.all #すべてのレコードを取得する Tomato.find(1) #idが1のレコードを取得 Tomato.where('id< ?',3) #idが3より小さいレコードを取得
このように、whereメソッドなども使用できます。
whereと,findはこちらの記事で、丁重に説明してありますので、参考にしてください。
pryを導入する
pryとは
pryとは、標準のirbよりも機能的にすぐれた対話型ツールです。
なので、よほどの理由がない限り標準のirbでconsoleを使用するよりもpryを使用するようにしてください
pryを使えば、デバックがしやすくなったり(pry-byebug)、細かい動きを確認できるコマンドがたくさん使えるようになって、開発に超便利です。
pryのインストール方法
railsでpryを使用するにはpry-railsというgemをインストールする必要があります。
なので、Gemfileに以下のように追加してください。
group :development,:test do #(中略) gem 'pry-rails' gem 'pry-doc' gem 'pry-stack_explorer' gem 'pry-byebug' end
追加できたら、bundle installを入力してgemを有効にしてください。
完了したら、rails cでコンソールを起動してpryと表示されるのを確認してください。
(今回はpry-stack_explorerやpry-byebugの使い方を紹介しませんが,それぞれpryを使う際には重宝するgemなのでついでに記載しました。)
pryの基本的なコマンドまとめ
show-model
show-modelは特定のモデルのカラム、データタイプを返します。
show-model Tomato
[実行結果]
Tomato id: integer nama: string created_at: datetime updated_at: datetime
show-models
すべてのモデルとそのカラム、データタイプを返します。
show-routes
rails routesよりも高速にルーティングを確認できる
show-middleware
アプリケーションで使用しているミドルウェアの一覧を表示
reload!
Rails環境全体をリロードする
いちいちconsoleをquitやexitする必要がなくなるので便利です。
recognize-path
ルーティングを確認できる(コントロールとアクションを出力する)
recognize-path '/tomatoes'
[実行結果]
{:controller=>"tomatoes", :action=>"index"}
find-method
find-methodではキーワードによって、メソッドを検索してくれます。
find-method form_
このように入力すると”form_”を含むメソッドが検索結果として返されます。
関連したメソッドを調べるときなどにも重宝します。
help
helpで、pryのメソッドを確認できる
かなり詳細に説明があるので、役に立ちます。
ドキュメントを参照する
pry-docをインストールしていれば、ri (定義されたもの) でドキュメントを参照できます。
ls cd
cdでオブジェクトに移動できて、lsでオブジェクトのメソットや変数を確認できる
特別なローカル情報
_で一つ前の結果を利用する
[1] pry(main)> 6*6 => 36 [2] pry(main)> _+_ => 72
この場合_には36が代入されています。
_ex_
一つ前に発生した例外を返します。
_in_ ・_out_
pryの実行番号によって入力値と出力を再利用します。
[9] pry(main)> 33 + 23 => 56 [10] pry(main)> 31 + 22 => 53 [11] pry(main)> _in_[9] => "33 + 23\n" [12] pry(main)> _out_[9]-_out_[10] => 3
tabでのコード補完
たとえば、cだけ入力してtabキーを押すと以下のように候補一覧が表示されます。
pry(main)> c caller case catch change-inspector class clipit cohen-poem console caller_locations cat cd change-prompt class_eval clone concern controller
pryでHirbを自動化する
こちらの記事ではpryを使って、Hirbという表形式でconsoleにデータを追加できるgemを有効にするためのコードを自動化する方法を紹介しています。
まだの方はHirbの設定をしておくことをオススメします。
まとめ
いかがでしたでしょうか?
この記事では、consoleの使い方を解説しました。
consoleを使えば、rubyのコードが直接実行できたり、データベースを操作できたりと便利なことを理解いただけたと思います。
また、pryを導入すれば標準のconsoleを拡張してさらに便利な機能を加えられるので、Railsを使用する際には必ずインストールしておいてください。
pryのメソッドには今回紹介した以外にも、自分でメソッドを作成する機能など紹介しきれなかったものもありますので、気になる方はpryについて調べてみてください。
もしconsoleの使い方について忘れてしまったらこの記事を確認してくださいね!