1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Rails入門】`_path`って何?`method: :post`ってなぜ必要?リンクの裏側、徹底解剖!

Posted at

はじめに

こんにちは!Railsで開発を進めていると、link_toヘルパーで当たり前のように出てくる hoge_pathmethod: :post という記述。 「チュートリアルに書いてあるから、とりあえずこう書いているけど、正直意味はよく分かっていない…」という方も多いのではないでしょうか?

実はこの2つ、Railsのルーティング(URLのルール)とセキュリティを支える、非常に重要な概念なんです。 この記事では、この「リンクの裏側」で何が起きているのかを、一つずつ徹底的に解説します!


1. _pathとは? - URLにつけられた便利な「あだ名」

user_github_omniauth_authorize_path のような、末尾に _path がつく記述。これはパスヘルパーと呼ばれ、一言で言うと 特定のURLへのパスに対する、Railsが自動で生成したあだ名です。

なぜ「あだ名」を使うの?

例えば、ログインページへのリンクを書きたい時、HTMLでは以下のようにURLを直接書きますよね。

<a href="/users/sign_in">ログイン</a>

しかし、このURLを直接コードに書き込む(ハードコーディング)のは、保守性の観点から良くありません。もし将来、/login のようにURLを変更したくなったら、プロジェクト内の全ファイルから /users/sign_in という文字列を探し、一つずつ手作業で修正する必要があります。これは大変ですし、修正漏れのリスクも高まります。

そこでRailsは、link_toでこの「あだ名」(パスヘルパー)を使うことを推奨しています。

# Viewファイルでの書き方
= link_to 'ログイン', new_user_session_path

こう書けば、Railsが自動的に正しいURL (/users/sign_in) に変換してくれます。 将来URLを変更したくなった時も、config/routes.rbという設計図ファイルを修正するだけで、この「あだ名」が指し示すURLも自動で更新されるのです。

「あだ名」はどうやって知るの?

ターミナルで、あなたのアプリのディレクトリに移動し、以下のコマンドを叩いてみましょう。

rails routes

すると、アプリに存在する全てのURLと、それに対応する「あだ名」(Prefix列)の一覧が表示されます。ここから、使いたいページの「あだ名」を探すことができます。


2. method: :postとは? - Webの基本ルールと安全装置

これは、**「このリンクをクリックした時のリクエスト方法をPOSTにしてください」**という、大事な指定です。

Webの基本的なリクエスト方法にはGETPOSTがあります。

  • GET 📖: **情報を「もらう」**ためのリクエスト。「このページを見せて」というお願い。

  • POST 📝: **情報を「送って何かしてもらう」**ためのリクエスト。「この内容で登録して」というお願い。

link_to は、通常はGETリクエストを送信するリンクを生成します。しかし、ログイン、ログアウト、削除といったサーバー上のデータを変更する可能性のあるアクションには、GETを使うべきではありません。

なぜGETではダメなのか?

もし、ログアウト機能 (/logout) がGETリクエストで動くリンクだったとしましょう。 すると、Googleの検索エンジンや、ブラウザの「ページの先読み機能」が、良かれと思ってそのリンクを勝手に巡回してしまう可能性があります。 その結果、ユーザーは何もしていないのに、意図せずログアウトさせられてしまうという最悪のユーザー体験に繋がります。

このような事故やセキュリティ上の問題を防ぐため、サーバーの状態を変更するアクションには、必ずPOSTリクエストを使うのがWeb開発の鉄則です。

link_tomethod: :post を添えることで、RailsはJavaScriptの力を借りて、そのリンクがクリックされた時に**POSTリクエストを送信する**ように、裏側で賢く処理してくれるのです。これは、私たちのアプリを守るための重要な 安全装置 の役割を果たしています。

まとめ

  • _path(パスヘルパー): 保守性を高めるための、URLの便利な「あだ名」

  • method: :post: 意図しない動作を防ぐための、重要な「安全装置」

一見するとただのおまじないに見える記述も、その裏にはWeb開発をより安全で、効率的にするための深い理由があります。この「裏側」を理解することで、あなたのRails開発はもっと楽しく、確実なものになるはずです!

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?