カテゴリ: Rails 更新日: 2025/12/06

Railsのよくあるエラーを解決!AbstractController::ActionNotFoundとInvalidAuthenticityTokenの原因と対処法

よくあるエラー解決集:AbstractController::ActionNotFound/InvalidAuthenticityToken
よくあるエラー解決集:AbstractController::ActionNotFound/InvalidAuthenticityToken

先生と生徒の会話形式で理解しよう

生徒

「Railsでボタンをクリックしたら、変なエラーが出ちゃいました。ActionNotFoundとかAuthenticityTokenって何なんですか?」

先生

「それはRailsでよくあるエラーですね。ちゃんと原因と対処法を知れば、怖くありませんよ。」

生徒

「どうやったら直せるんですか?初心者でもわかるように教えてください!」

先生

「もちろんです。ひとつひとつ丁寧に見ていきましょう。」

1. Railsでよく出るエラーとは?

1. Railsでよく出るエラーとは?
1. Railsでよく出るエラーとは?

Ruby on Rails(ルビーオンレイルズ)を使っていると、エラー画面に突然「ActionNotFound」や「InvalidAuthenticityToken」といった英語のエラーメッセージが表示されることがあります。

これらは初心者がつまずきやすいコントローラ関連のエラーで、原因を理解しておくと今後の開発がグッと楽になります。

2. AbstractController::ActionNotFoundとは?

2. AbstractController::ActionNotFoundとは?
2. AbstractController::ActionNotFoundとは?

「AbstractController::ActionNotFound(アブストラクト・コントローラ・アクション・ノットファウンド)」とは、指定されたアクションがコントローラに定義されていないときに表示されるエラーです。

アクションとは、コントローラの中で処理の内容を書く部分のことです。たとえば、showindexなどです。

このエラーが出るときは、次のようなコードが原因かもしれません。


# ルーティングでshowアクションを指定している
get '/posts/:id', to: 'posts#show'

# しかし、PostsControllerにshowアクションがない
class PostsController < ApplicationController
  def index
    # 一覧を表示する処理
  end
end

このように、ルーティングではshowアクションを呼び出そうとしているのに、そのアクションが存在しないとエラーになります。

3. ActionNotFoundの対処法

3. ActionNotFoundの対処法
3. ActionNotFoundの対処法

対処方法はとてもシンプルです。エラーに書かれているアクション名が、コントローラに存在するかを確認しましょう。


class PostsController < ApplicationController
  def show
    @post = Post.find(params[:id])
  end
end

これで、ルーティングとアクションの整合性がとれ、エラーが解消されます。

4. InvalidAuthenticityTokenとは?

4. InvalidAuthenticityTokenとは?
4. InvalidAuthenticityTokenとは?

「InvalidAuthenticityToken(インバリッド・オーセンティシティ・トークン)」は、フォームを送信したときにセキュリティチェックが通らなかったときに出るエラーです。

RailsではCSRF(クロスサイトリクエストフォージェリ)対策として、フォームに「正しいトークン」が含まれているかチェックしています。これは悪意のある攻撃からアプリケーションを守るための仕組みです。

ですが、以下のような場合にこのエラーが出ることがあります。

  • フォームタグにcsrf_meta_tagsが含まれていない
  • JavaScriptでAjax送信する際にトークンを含め忘れた
  • セッションが切れてしまっている(長時間放置など)

5. InvalidAuthenticityTokenの対処法

5. InvalidAuthenticityTokenの対処法
5. InvalidAuthenticityTokenの対処法

以下の対処法を確認してください。

① フォームにCSRFトークンを含める

Railsのform_withform_forを使えば、自動でトークンが挿入されます。


<%= form_with model: @post do |f| %>
  <%= f.text_field :title %>
  <%= f.submit %>
<% end %>

② HTMLにcsrf_meta_tagsを入れる

app/views/layouts/application.html.erbに次のように書かれているか確認しましょう。


<head>
  <%= csrf_meta_tags %>
</head>

③ JavaScriptで送信する場合

Ajaxなどで送信する場合は、トークンをヘッダーに含める必要があります。


const token = document.querySelector('meta[name="csrf-token"]').getAttribute('content');
fetch('/posts', {
  method: 'POST',
  headers: {
    'X-CSRF-Token': token,
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({ title: '新しい投稿' })
});

6. テスト環境やAPIモードでの注意点

6. テスト環境やAPIモードでの注意点
6. テスト環境やAPIモードでの注意点

RailsのAPIモードRSpecのテスト環境では、CSRFチェックが無効になっていることがあります。

そのため、開発環境では動いていたのに、本番環境ではInvalidAuthenticityTokenが出る…というケースも少なくありません。

本番と開発の挙動の違いにも注意しましょう。

7. それでも直らないときのチェックポイント

7. それでも直らないときのチェックポイント
7. それでも直らないときのチェックポイント

以下のチェックリストを活用して、エラー解消につなげましょう。

  • アクション名が正しく、ルーティングと一致しているか?
  • コントローラ名とアクション名のスペルミスはないか?
  • csrf_meta_tagsがHTMLに含まれているか?
  • セッションが切れていないか(時間経過)?
  • ブラウザのCookie設定が無効になっていないか?
関連記事:
カテゴリの一覧へ
新着記事
New1
データベース
SQLの処理が遅くなる原因とは?初心者向けにデータベースパフォーマンス最適化を完全解説
New2
Ruby
RubyのネストHash操作を徹底解説!digとtransformメソッドで複雑なデータも楽々
New3
Rails
Railsインデックス設計の極意!爆速サイトを作るためのスキーマ設計ガイド
New4
データベース
SQLのCOMMITとROLLBACKとは?トランザクション操作を初心者向けに完全解説
人気記事
No.1
Java&Spring記事人気No1
Ruby
PATHと環境変数の正しい設定!Windows・Mac・Linux別チェックリスト付き
No.2
Java&Spring記事人気No2
Rails
Railsで日本語と時刻の設定をしよう!初心者でも安心のlocale/zone初期設定チートシート
No.3
Java&Spring記事人気No3
Ruby
Rubyのハッシュを徹底比較!シンボルキーと文字列キーの違いと使い分け
No.4
Java&Spring記事人気No4
Rails
Railsマイグレーションの型選びを完全ガイド!初心者が迷わないカラム設計
No.5
Java&Spring記事人気No5
Ruby
WindowsでRubyをインストールする方法!RubyInstallerとMSYS2を使った完全ガイド
No.6
Java&Spring記事人気No6
Rails
RailsモデルとActive Record基礎|ID戦略を完全理解!AUTO INCREMENT・UUID・ULIDの比較と導入手順
No.7
Java&Spring記事人気No7
データベース
ACID特性とは?データベーストランザクションの信頼性を初心者向けに徹底解説
No.8
Java&Spring記事人気No8
Rails
RailsモデルとActive Record基礎|クエリログの読み方を理解してEXPLAIN・joins・includesの違いを学ぼう