Railsの学習メモこんにちは。Tomoyuki(@tomoyuki65)です。Railsと呼ばれるフレームワークを使えば比較的簡単にWebサイトを作れるんです。今じゃ結構メジャーな部類なので、Rubyと合わせて使い方を覚えるのがおすすめですよ。Railsについて学習メモを残しておきます。Rails(略してRails)とは、Webアプリケーション開発の「フレームワーク」のことであり、このフレームワークを利用することで開発に必要な作業を減らすことが可能です。そんなRailsをマスターすれば、自由自在に好きなWebアプリケーションを創れるようになります。アプリケーション名」というコマンドをターミナル(Macの場合)で実行します。tweet_appコマンド実行後、入力したアプリケーション名と同名のフォルダが作成され、その中に開発に必要なフォルダやファイルが用意されます。server」コマンドを使います。serverサーバー起動後にブラウザで「localhost:3000」というURLにアクセスすると、初期画面が表示されて確認できます。controller」コマンドを使います。controllerでも可)例えば「home」コントローラーとそれに対応する「top」アクションによるファイルを作成するには次の通りです。top※だだし、同じ名前のコントローラがすでにある場合は、このコマンドは使えないコマンド実行後、ルーティングが追加され、コントローラー(controller)とビュー(View)のファイルが自動生成されてページを表示できるようになります。ルーティングファイル(/config/routes.rb)「routes.rb」ファイルにルーティングが追加され、上図の例では「home/top」のURLにアクセスした時に「home#top」(homeコントローラーのtopアクション)が処理されることを表します。“/”」に変更すれはURL「localhost:3000」で表示できるようになります。コントローラー(app/controllers/home_controller.rb)作成された「home_controller.rb」ファイルには、「top」メソッドが記述されています。「top」メソッドが実行されると、コントローラと同じ名前のビューフォルダから、アクションと同じ名前のHTMLファイルを探してブラウザに返します。※コントローラー内のメソッドをアクションと呼びます。(app/views/home/top.html.erb)viewsフォルダにコントローラーと同じ名前のフォルダが作成され、その中にビューファイル「top.html.erb」が作成されます。ビューに対応するCSSファイルとして、app/assets/stylesheets直下に「home.scss」ファイルが作成されているので、これによりレイアウトの修正が可能です。画像ファイルを表示したい場合は、「public」フォルダの中に画像ファイルを格納すれば、ビューやCSSで表示可能です。ルーティングと同じURLで簡単にリンクを作るHTMLでリンクを作るには<a>タグを使いますが、ルーティングのURL部分と同じにすることで、簡単にリンク先を指定できます。%>で囲むことでHTMLファイルの中にRubyのコードを記述できます。Ruby(埋め込みRuby)」の略です。%>はRubyコードの中身が表示されるため変数の値などを実際にページ内に表示するのに使います。配列とeach文で複数の値を表示ページに複数の値を表示したい場合は、配列に値をまとめてeach文を使うことで簡単に表示できます。%>また、配列などを定義する場合は、コントローラーファイルのアクション内で定義するのが一般的です。し、アクション内で定義した変数をビューで使うには、頭に「@」をつけた変数名を定義します。model」コマンドを使用します。コマンドを実行するとマイグレーションファイルと呼ばれる、データベースに変更を指示するためのファイルが作成されます。text型(長い文字列)のカラムを持つpostsテーブルを作成するには以下の通りです。db:migrate」コマンドでデータベースに変更を反映します。db:migrateコマンドを実行するとマイグレーションファイルに書いてある指示通りにテーブルを作成しますが、「id」、「created_at」、「updated_at」というカラムも自動生成される仕様になっています。Postモデルが定義されたファイル「post.rb」が、app/modelsフォルダの中に作成され、このようにApplicationRecordを継承したクラスをモデルと呼びます。Railsではデータベースに反映されていないマイグレーションファイルが存在すると、マイグレーションエラーが発生します。db:migrate」コマンドを実行する必要があります。console」コマンドを使うと、コンソールを起動してRubyコードを手軽に実行できます。1」を実行するとその結果が表示され、「quit」を実行するとコンソールを終了できます。変数を定義すると次のようになります。consoleを使えばテーブルにデータを作成できます。World”」のデータを作成するには、newメソッドでインスタンスを作成した後、saveメソッドを使います。post.save※PostモデルはApplicationRecordを継承しているため、saveメソッドが使えますテーブルに保存されているデータを取得するまた、テーブルに保存されているデータを取得することもできます。consoleを使ってpostsテーブルの最初のデータを取得したい場合は、firstメソッドを使います。World"そして、全てのデータを取得するにはallメソッドを使い、配列で取得できます。World"このようにテーブルからデータを取得できるため、取得したデータをビューに表示したい場合は、コントローラーのアクション内でデータを取得して使用します。endendまた、特定のデータを取得したい場合は、find_byメソッドを使います。idが1のデータを取得する場合は次の通りです。Railsの共通レイアウト例えばWebサイトのヘッダー部分など、全てのページで共通の部分がある場合は、views/layoutsフォルダにある「application.html.erb」に書きます。初期状態で<head>タグや<body>タグなどの共通部分が書かれているため、<header>タグや<footer>タグなどの共通部分はこのファイルに書きましょう。%>」のyieldに代入されて表示されます。RailsのリンクRailsでは、link_toメソッドを使えば、リンクに使う<a>タグを作成できます。link_toメソッドでは、第一引数に表示する文字、第二引数にURLを書きます。%>上記の例では、以下のような<a>タグに変換されることを表します。RailsでURLにテーブルのidを持たせる例えば「localhost:3000/posts/1」、「localhost:3000/posts/2」というように、URLにidを含めてそのidを持つデータをビューに表示したい場合は、ルーティングのURL部分で「:id」を使います。"posts#show"end上記のようにルーティングを指定すれば、「/posts/1」でも「/posts/2」でも同じアクションが処理されます。ルーティングは合致するURLを上から順に探すため、上記の例では「posts/index」より下に書く必要があるので注意が必要です。ルーティングで設定したURLの「:id」の値を取得するコントローラのアクション内では、ルーティングで設定したURLの「:id」の値を取得できますが、取得するには「params」を使います。params[:id]endこれを使ってテーブルからデータを取得するには、find_byメソッドと合わせて使います。params[:id])endまた、ビューでidを含むリンクを作成するには次の通りです。Railsで入力フォームのデータを保存する<textarea>タグや<input>タグを用いることで入力フォームを作成(送信ボタンにはtype=”submit”と、value=”投稿”を指定した場合)できますが、入力されたデータをデーターベースに保存するには、ルーティングとアクションを追加し、ビューでform_tagメソッドを使います。"posts#create"end※formの値を受け取るには、getでなく「post」を使うビューではform_tagを使い、doとendの間にフォームを作ります。...>のボタンを押したときに指定されたURLにデータが送信されます。%>※name属性の値をキーとしたハッシュがRails側に送られます。フォームに入力されたデータを受け取って保存するには、paramsを使って処理します。@post.saveendリダイレクト尚、フォームのボタンを押した後に他のURLに転送する(表示したいビューに遷移させる)には、redirect_toメソッドを使ってリダイレクトさせます。Railsでテーブルのデータを並び替えて取得するテーブルのデータを並び替えて取得したい場合は、orderメソッドを使います。並び替えの順序)」のように使い、並び替えの順序は昇順(:asc)と降順(:desc)のどちらかを指定します。Railsでデータの編集と削除データベースのデータを編集するには、対象データを取得後、値を上書きしてsaveメソッドを使う。"データを編集"post.saveそして、データを削除する場合は、対象データを取得後、destroyメソッドを使う。1)post.destroyまた、データベースの変更を伴う際のルーティングでは、getではなく「post」を使う。"posts#destroy"フォームの初期値<textarea>タグなどの初期値を設定したい場合、ルーティングに「:id」を含めてアクションで対象データを検索し、取得データを使うことができます。%></textarea>また、<input>タグの場合は、value属性の値が初期値になります。“post”}」を追加する。Railsのバリデーションバリデーションとは、不正なデータがデータベースに保存されないようにデータをチェックする仕組みのことです。バリデーションはモデルに設定し、「validates」を用いてカラム名と内容を指定します。true}」を使います。数値}を使い、最大文字数を設定できます。140}}saveメソッドの戻り値と表示するページ切り替えデータ更新時にsaveメソッドで保存できた場合は「true」、保存できなかった場合は「false」を返します。この戻り値を利用すれば、表示するページの切り替えの判定が可能です。endendrenderメソッドデータ更新に失敗してリダイレクトすると、フォームに入力していた値が消えてしまうが、renderメソッドを使えば別のアクションを経由せずに直接ビューの表示が可能です。render(“ビューのフォルダ名/ファイル名”)で指定し、redirect_toメソッドと違ってそのアクション内で定義した@変数をビューでそのまま使えます。ビューのフォルダ名が「posts」、ファイル名が「edit.html.erb」の場合は次の通りです。endendエラーメッセージsaveメソッドでバリデーションに失敗した場合は、Railsでは自動的にエラーメセージが生成され、errors.full_messagesメソッドの中にエラー内容が配列で入ります。ビューで表示するには、eachメソッドを合わせて使えば可能です。%>フラッシュページに1度だけ表示されるメッセージをフラッシュと言い、ページの更新や別のページに移動するとフラッシュは表示されなくなります。Railsでは特殊な変数「flash[:notice]」を使うとフラッシュを表示できますが、色々な箇所で共通で使うため、基本的にapplication.html.erbで表示します。%>※flash[:notice]は、1度表示された後に自動で削除されるrender先で変数を使う場合renderメソッドを使えば別のアクションを経由せずに直接ビューの表示が可能ですが、ビューのアクションで変数を定義していないとエラーが出る場合があります。そんな場合は、newメソッドを使って変数を定義すれば、エラーを回避できる可能性があります。true」を指定します。あるテーブルに変更を加える場合は、マイグレーションファイルを作成後、ファイルに変更内容を記述し、ファイル内容を反映させます。migration」コマンドを使います。ファイル名「add_image_name_to_users」(変更内容がわかるファイル名が望ましい)のマイグレーションファイルを作成するには次の通りです。add_image_name_to_usersコマンド実行後、db/migrateフォルダの中に「更新日時_add_image_name_to_users.rb」というマイグレーションファイルが作成されるので、変更内容を記述します。テーブルにカラムを追加したい場合は「add_column」を使い、usersテーブルにstring型のimage_nameカラムを追加するには次の通りです。db:migrate」コマンドで反映されます。Railsで画像を表示ビューで画像を表示するには、publicフォルダの中に画像ファイルを保存し、それをビューで呼び出します。ビューに表示する場合は、<img>タグを使います。publicフォルダの直下に画像ファイルがある場合は次の通りです。%>">入力フォームから画像データを受け取る入力フォームから画像データを受け取り、publicフォルダに保存する方法を説明します。入力フォームに画像選択ボタン(typeがfile)を配置します。true}を指定する必要があります。%>送信先のアクションで画像データを受け取り、Fileクラスのbinwriteメソッドを使って画像ファイルを保存します。endend※画像ではなく通常のテキストファイルの保存する場合は、File.writeを使います。ユーザーテーブルにメールアドレスやパスワードのカラムを持たせ、フォームからログインする機能が作れます。パスワードを入力するフォームでは、<input>タグのtypeをpasswordにします。type="password">ログイン処理ログイン処理では、ページを移動してもユーザー情報を保持し続けるために、特殊な変数「session」を使います。値)sessionに代入された値はブラウザ(GoogleChrome等)に保存され、ブラウザはそれ以降のアクセスでsessionの値をRailsに送信します。ログインユーザーの情報を保持するには、ユーザーのidを代入します。endendログアウト機能ログアウト機能を作るには、逆にsessionの値を削除します。"ログアウトしました。redirect_to("/login")endsessionの値を変更する場合のルーティングloginやlogoutではデータベースの変更はしませんが、sessionの値を変更するため、ルーティングではgetではなく「post」を使います。"users#logout"※上記の例では”login”は二つありますが、getとpostで異なるルーティングとして扱われます。各コントローラーの全アクションで共通の処理がある場合は、before_actionを使います。これによりアクションが呼び出された際に必ずbefore_actionの処理が実行され、全アクションで共通する処理を1箇所にまとめることが可能です。現在のログインユーザを取得するような処理なら次の通りです。endendアクセス制限URLを直接入力すると誰でもアクセスできるため、ログインしている場合、していない場合でそれぞれ適切なアクセス制限が必要です。アクセス制限をするには、applicationコントローラとbefore_actionを使って処理を共通化させます。ログインしている場合としていない場合のアクセス制限に関する処理を、applicationコントローラに書きます。endend※@変数で定義した変数は、同じクラスの異なるメソッド間で共通して使用可能そして、各コントローラーでbefore_actionを使いますが、特定のアクションのみで実行する場合はonlyを使います。:login]}end※各コントローラはapplicationコントローラを継承しているため、継承元のメソッドを使えます。編集を制限するデータを編集する機能がある場合は、他人のデータを勝手に編集できないようにする制限も必要になります。正しいユーザーか確かめる処理を追加し、before_actionでチェックします。Railsでモデルにインスタンスメソッドを追加Railsではモデル内にインスタンスメソッドを定義でき、モデルのインスタンスに対して使えます。endendwhereメソッドテーブルから対象データを取得する際に、find_byメソッドでは1件だけ取得できますが、複数のデータを取得するにはwhereメソッドを使います。Railsでいいね機能いいね機能を実装するには、「どのユーザー」が「どの投稿」をいいねしたかを記録するため、「user_id」と「post_id」2つのカラムを持つlikesテーブルを用意する。ビューで表示する場合は、user_idとpost_idが合致するデータがlikesテーブルに存在するかをfind_byメソッドでチェックする。controller」コマンドでコントローラーファイルを作る場合、一緒にビューファイルも自動生成されるが、ビューファイルが不要な場合は手動で作ることができます。Awesome」とは、様々なアイコンをフォントとして利用できるようにしたもので、application.html.erbの<head>タグ内で読み込み用の<link>タグを追加する。%>の間にHTML要素を書く必要があります。%>countメソッド対象データの件数を取得するには、countメソッドを使います。Railsでパスワードの暗号化パスワードをテーブルに持たせる場合は、安全性のために暗号化をすべきですが、gem(ジェム)を使うことで簡単に実装可能です。gemとはRubyやRailsでプログラミングをする際に「よく使う機能」をパッケージ化したもので、「検索機能を作るgem」や「暗号化するためのgem」など様々なgemが存在します。「bcrypt」という暗号化のためのgemをRailsにインストールすれば、パスワードを暗号化ができます。install」コマンドを実行します。bcryptの使い方bcryptをインストール後、例えばパスワードを扱うUserモデルにhas_secure_passwordを追加すれば、ユーザーを保存する際に自動的にパスワードを暗号化してくれます。endendまた、has_secure_passwordメソッドで暗号化したパスワードは、password_digestカラムに保存することになっているため、Userモデルのpasswordカラムは削除し、password_digestカラムを追加します。(カラムの削除はマイグレーションファイルで「remove_column」を使う)ただし、パスワードを保存するのはpassword_digestではなく、passwordなので注意が必要です。"pas123"user.save尚、暗号化されたパスワードでログイン処理をするには、authenticateメソッドを使います。authenticateメソッドは渡された引数を暗号化し、password_digestの値と一致するかどうかを判定します。endend最後にWebアプリケーションを簡単に作るなら、フレームワークの知識が必須になります。Railsが一般的なので、Rubyを学んだ後はRailsの使い方もマスターしましょう。最新の記事Tomoyuki元SE。30歳を目前に仕事や将来に悩み、Web業界へ転職を目指すも失敗。ブログでは大好きなパソコン情報をはじめ、様々な役立つ情報を発信中。次はプロゲーマーとしても活動するため、ゲーム練習と合わせて攻略記事を書いたり、YouTubeでも活動中。RailsプログラミングシェアはこちらからツイートシェアはてブLINEPocketfeedlyゲーミングPCならBTO最近はゲーミングPCを購入する人も増えましたが、「どう選べばいいの?」という人も多いですよね。初心者が失敗しない選び方はこちら資産運用始めなくて大丈夫ですか?日本ではお金の教育が一切無いので、資産運用している人はまだ少ないです。資産運用で結果を出すには膨大な時間が必要で、早く始めないと損なんです。ウェルスナビなら誰でも簡単に資産運用が始められるので、一度検討してみてはいかがでしょうか。コメントをキャンセルメールアドレスが公開されることはありません。*サイト次回のコメントで使用するためブラウザーに自分の名前、メールアドレス、サイトを保存する。MacのQuickTimeで動画キャプチャ(画面収録)してiMoveでMP4に変換する方法Progate(プロゲート)でコマンドラインとGitの学習メモRECOMMENDこちらの記事も人気です。Chrome検証ツールの学習メモプログラミング2019.1.7Progate(プロゲート)でコマンドラインとGitの学習メモRuby2018.12.3Progate(プロゲート)でRubyプログラミングやってみた!プログラミング2019.1.6Progate(プロゲート)でデータベースとSQLの学習メモプログラミング2018.12.6Progate(プロゲート)でHTML&CSSの学習メモRuby2018.2.7Ruby関連の記事がレバテックフリーランスさんで紹介されました!(祝)プログラミング2018.12.22Progate(プロゲート)でSass(サース)の学習メモ管理人:Tomoyukiこんにちは。Tomoyukiです。当ブログはプログラミングやパソコン関連情報をはじめ、自分の好きなことや、得意なことを仕事にして生きていくための方法に関する情報を発信していきます。