From a39bdf689f4550ae1ccf152e2f00e199432c43a7 Mon Sep 17 00:00:00 2001 From: nacchan Date: Tue, 10 Jun 2025 12:23:00 +0900 Subject: [PATCH 01/40] =?UTF-8?q?Rambulance=20=E3=81=AE=E5=B0=8E=E5=85=A5?= =?UTF-8?q?=E3=81=A8=E5=88=9D=E6=9C=9F=E8=A8=AD=E5=AE=9A=E3=82=92=E8=BF=BD?= =?UTF-8?q?=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- config/application.rb | 4 ++++ config/routes.rb | 1 + 2 files changed, 5 insertions(+) diff --git a/config/application.rb b/config/application.rb index 20e502e1..d3839b0e 100644 --- a/config/application.rb +++ b/config/application.rb @@ -11,6 +11,10 @@ class Application < Rails::Application # Initialize configuration defaults for originally generated Rails version. config.load_defaults 8.0 + # Rambulance が提供するエラー用ルーティングを使うようにする + config.exceptions_app = self.routes + + # Please, add to the `ignore` list any other `lib` subdirectories that do # not contain `.rb` files, or that should not be reloaded or eager loaded. # Common ones are `templates`, `generators`, or `middleware`, for example. diff --git a/config/routes.rb b/config/routes.rb index a999d47c..b7fa93ac 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -105,4 +105,5 @@ # Check development sent emails mount LetterOpenerWeb::Engine, at: "/letter_opener" if Rails.env.development? + mount Rambulance::Engine => "/" end From a4ce6e1b6fd2320b4cf5d307cbbf20d3c696ff7f Mon Sep 17 00:00:00 2001 From: nacchan Date: Tue, 10 Jun 2025 12:24:06 +0900 Subject: [PATCH 02/40] =?UTF-8?q?ErrorsController=20=E3=82=92=E6=96=B0?= =?UTF-8?q?=E8=A6=8F=E4=BD=9C=E6=88=90=EF=BC=88404/500/422=E7=94=A8?= =?UTF-8?q?=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/errors_controller.rb | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 app/controllers/errors_controller.rb diff --git a/app/controllers/errors_controller.rb b/app/controllers/errors_controller.rb new file mode 100644 index 00000000..323baff2 --- /dev/null +++ b/app/controllers/errors_controller.rb @@ -0,0 +1,15 @@ +class ErrorsController < ApplicationController + layout 'application' # エラー画面にも通常のアプリと同じレイアウトを適用 + + def not_found + render status: 404 # このアクションでは app/views/errors/not_found.html.erb が使用されます + end + + def internal_server_error + render status: 500 # このアクションでは app/views/errors/internal_server_error.html.erb が使用されます + end + + def unprocessable_entity + render status: 422 # このアクションでは app/views/errors/unprocessable_entity.html.erb が使用されます + end +end From 548d72ac6cb86ea8c11e83d78984684875543cce Mon Sep 17 00:00:00 2001 From: nacchan Date: Tue, 10 Jun 2025 12:24:24 +0900 Subject: [PATCH 03/40] =?UTF-8?q?500=20Internal=20Server=20Error=20?= =?UTF-8?q?=E3=83=9A=E3=83=BC=E3=82=B8=E3=82=92=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/views/errors/internal_server_error.html.erb | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 app/views/errors/internal_server_error.html.erb diff --git a/app/views/errors/internal_server_error.html.erb b/app/views/errors/internal_server_error.html.erb new file mode 100644 index 00000000..2b96381d --- /dev/null +++ b/app/views/errors/internal_server_error.html.erb @@ -0,0 +1,14 @@ +<% provide(:title, "予期しないエラーが発生しました 😵‍💫") %> +<% provide(:desc, "申し訳ありません。サーバーで問題が発生しています。") %> + +
+ +

CoderDojo Japan

+

子どものためのプログラミング道場

+
+
+ +
+

予期しないエラーが発生しました 😵‍💫

+

現在、問題を調査しています。しばらくしてからもう一度お試しください。

+
From 7c19b4082c90aefd89f821f6ef585318fb236325 Mon Sep 17 00:00:00 2001 From: nacchan Date: Tue, 10 Jun 2025 12:24:44 +0900 Subject: [PATCH 04/40] =?UTF-8?q?422=20Unprocessable=20Entity=20=E3=83=9A?= =?UTF-8?q?=E3=83=BC=E3=82=B8=E3=82=92=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../errors/unprocessable_entity.html.erb | 47 +++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 app/views/errors/unprocessable_entity.html.erb diff --git a/app/views/errors/unprocessable_entity.html.erb b/app/views/errors/unprocessable_entity.html.erb new file mode 100644 index 00000000..05aeb1fa --- /dev/null +++ b/app/views/errors/unprocessable_entity.html.erb @@ -0,0 +1,47 @@ +<% provide(:title, "リクエストが処理できませんでした… 😢") %> +<% provide(:desc, "入力内容に誤りがあるか、リクエストが正しく送信されなかった可能性があります。") %> + +
+ +

CoderDojo Japan

+

子どものためのプログラミング道場

+
+
+ +
+

+ リクエストが処理できませんでした… 😢 +

+

+ 入力内容に誤りがあるか、リクエストが正しく送信されなかった可能性があります。 +
+

+

+ フィードバックなどあれば info@coderdojo.jp にメールしていただくか、 +
+ もしくは + GitHub Issue + に書いていただけると嬉しいです (>人< )✨ +

+
+ +
+
+

+ + 🐣 最近の情報発信 + +

+
+ + +
From a456487f2efa075dd4e3ae1e97fea2996ea6cf62 Mon Sep 17 00:00:00 2001 From: nacchan Date: Tue, 10 Jun 2025 14:53:42 +0900 Subject: [PATCH 05/40] =?UTF-8?q?=E3=82=A8=E3=83=A9=E3=83=BC=E3=83=9A?= =?UTF-8?q?=E3=83=BC=E3=82=B8=E5=85=B1=E9=80=9A=E3=81=AE=E3=83=98=E3=83=83?= =?UTF-8?q?=E3=83=80=E3=83=BC=E9=83=A8=E5=88=86=E3=82=92=E3=83=91=E3=83=BC?= =?UTF-8?q?=E3=82=B7=E3=83=A3=E3=83=AB=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/views/errors/_header.html.erb | 6 ++++++ app/views/errors/internal_server_error.html.erb | 7 +------ app/views/errors/not_found.html.erb | 7 +------ app/views/errors/unprocessable_entity.html.erb | 7 +------ 4 files changed, 9 insertions(+), 18 deletions(-) create mode 100644 app/views/errors/_header.html.erb diff --git a/app/views/errors/_header.html.erb b/app/views/errors/_header.html.erb new file mode 100644 index 00000000..f34cebc6 --- /dev/null +++ b/app/views/errors/_header.html.erb @@ -0,0 +1,6 @@ +
+ +

CoderDojo Japan

+

子どものためのプログラミング道場

+
+
\ No newline at end of file diff --git a/app/views/errors/internal_server_error.html.erb b/app/views/errors/internal_server_error.html.erb index 2b96381d..78c20097 100644 --- a/app/views/errors/internal_server_error.html.erb +++ b/app/views/errors/internal_server_error.html.erb @@ -1,12 +1,7 @@ <% provide(:title, "予期しないエラーが発生しました 😵‍💫") %> <% provide(:desc, "申し訳ありません。サーバーで問題が発生しています。") %> -
- -

CoderDojo Japan

-

子どものためのプログラミング道場

-
-
+<%= render 'errors/header' %>

予期しないエラーが発生しました 😵‍💫

diff --git a/app/views/errors/not_found.html.erb b/app/views/errors/not_found.html.erb index 2cd2898e..44fd826c 100644 --- a/app/views/errors/not_found.html.erb +++ b/app/views/errors/not_found.html.erb @@ -1,12 +1,7 @@ <% provide(:title, "ページが見つかりませんでした... 🥺💦") %> <% provide(:desc, "ページが削除された可能性があります 🤔💭") %> -
- -

CoderDojo Japan

-

子どものためのプログラミング道場

-
-
+<%= render 'errors/header' %>

diff --git a/app/views/errors/unprocessable_entity.html.erb b/app/views/errors/unprocessable_entity.html.erb index 05aeb1fa..694c76f0 100644 --- a/app/views/errors/unprocessable_entity.html.erb +++ b/app/views/errors/unprocessable_entity.html.erb @@ -1,12 +1,7 @@ <% provide(:title, "リクエストが処理できませんでした… 😢") %> <% provide(:desc, "入力内容に誤りがあるか、リクエストが正しく送信されなかった可能性があります。") %> -
- -

CoderDojo Japan

-

子どものためのプログラミング道場

-
-
+<%= render 'errors/header' %>

From 44d493bc2ac1715b7bd249a1f8d4e647d46f31c4 Mon Sep 17 00:00:00 2001 From: nacchan Date: Tue, 10 Jun 2025 16:05:01 +0900 Subject: [PATCH 06/40] =?UTF-8?q?=E5=85=B1=E9=80=9A=E3=83=91=E3=83=BC?= =?UTF-8?q?=E3=82=B7=E3=83=A3=E3=83=AB=E8=BF=BD=E5=8A=A0=EF=BC=88=E3=83=95?= =?UTF-8?q?=E3=82=A3=E3=83=BC=E3=83=89=E3=83=90=E3=83=83=E3=82=AF=E6=A1=88?= =?UTF-8?q?=E5=86=85=E3=83=BBTwitter=E3=82=BF=E3=82=A4=E3=83=A0=E3=83=A9?= =?UTF-8?q?=E3=82=A4=E3=83=B3=EF=BC=89=E2=80=BB500/422=E3=81=AF=E6=9C=AA?= =?UTF-8?q?=E7=A2=BA=E8=AA=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/views/errors/_feedback_notice.html.erb | 7 +++++ .../_footer_links_and_timeline.html.erb | 20 +++++++++++++ app/views/errors/_header.html.erb | 2 +- .../errors/internal_server_error.html.erb | 12 ++++++-- app/views/errors/not_found.html.erb | 20 ++----------- .../errors/unprocessable_entity.html.erb | 29 ++----------------- 6 files changed, 42 insertions(+), 48 deletions(-) create mode 100644 app/views/errors/_feedback_notice.html.erb create mode 100644 app/views/errors/_footer_links_and_timeline.html.erb diff --git a/app/views/errors/_feedback_notice.html.erb b/app/views/errors/_feedback_notice.html.erb new file mode 100644 index 00000000..07623572 --- /dev/null +++ b/app/views/errors/_feedback_notice.html.erb @@ -0,0 +1,7 @@ +

+ フィードバックなどあれば info@coderdojo.jp にメールしていただくか、 +
+ もしくは + GitHub Issue + に書いていただけると嬉しいです (>人< )✨ +

diff --git a/app/views/errors/_footer_links_and_timeline.html.erb b/app/views/errors/_footer_links_and_timeline.html.erb new file mode 100644 index 00000000..c3d141a9 --- /dev/null +++ b/app/views/errors/_footer_links_and_timeline.html.erb @@ -0,0 +1,20 @@ +
+
+

+ + 🐣 最近の情報発信 + +

+
+ + +
diff --git a/app/views/errors/_header.html.erb b/app/views/errors/_header.html.erb index f34cebc6..e06be800 100644 --- a/app/views/errors/_header.html.erb +++ b/app/views/errors/_header.html.erb @@ -3,4 +3,4 @@

CoderDojo Japan

子どものためのプログラミング道場


- \ No newline at end of file + diff --git a/app/views/errors/internal_server_error.html.erb b/app/views/errors/internal_server_error.html.erb index 78c20097..842dcbdb 100644 --- a/app/views/errors/internal_server_error.html.erb +++ b/app/views/errors/internal_server_error.html.erb @@ -4,6 +4,14 @@ <%= render 'errors/header' %>
-

予期しないエラーが発生しました 😵‍💫

-

現在、問題を調査しています。しばらくしてからもう一度お試しください。

+

+ 予期しないエラーが発生しました 😵‍💫 +

+

+ 現在、問題を調査しています。しばらくしてからもう一度お試しください。 +
+

+ <%= render 'errors/feedback_notice' %>
+ +<%= render 'errors/footer_links_and_timeline' %> diff --git a/app/views/errors/not_found.html.erb b/app/views/errors/not_found.html.erb index 44fd826c..fb74fa6f 100644 --- a/app/views/errors/not_found.html.erb +++ b/app/views/errors/not_found.html.erb @@ -11,23 +11,7 @@ ページが削除された可能性があります 🤔💭

-

- フィードバックなどあれば info@coderdojo.jp にメールしていただくか、 -
- もしくは - GitHub Issue - に書いていただけると嬉しいです (>人< )✨ -

+ <%= render 'errors/feedback_notice' %>

-
-
-

- 🐣 最近の情報発信 -

-
- - -
+<%= render 'errors/footer_links_and_timeline' %> diff --git a/app/views/errors/unprocessable_entity.html.erb b/app/views/errors/unprocessable_entity.html.erb index 694c76f0..c4e84db9 100644 --- a/app/views/errors/unprocessable_entity.html.erb +++ b/app/views/errors/unprocessable_entity.html.erb @@ -11,32 +11,7 @@ 入力内容に誤りがあるか、リクエストが正しく送信されなかった可能性があります。

-

- フィードバックなどあれば info@coderdojo.jp にメールしていただくか、 -
- もしくは - GitHub Issue - に書いていただけると嬉しいです (>人< )✨ -

+ <%= render 'errors/feedback_notice' %>

-
-
-

- - 🐣 最近の情報発信 - -

-
- - -
+<%= render 'errors/footer_links_and_timeline' %> From 677d005b1665f966920956d4ea4552da42225275 Mon Sep 17 00:00:00 2001 From: nacchan Date: Wed, 11 Jun 2025 12:23:17 +0900 Subject: [PATCH 07/40] =?UTF-8?q?500/422=E3=82=A8=E3=83=A9=E3=83=BC?= =?UTF-8?q?=E3=83=9A=E3=83=BC=E3=82=B8=E3=81=AE=E8=A1=A8=E7=A4=BA=E3=82=82?= =?UTF-8?q?=E7=A2=BA=E8=AA=8D=E6=B8=88=E3=81=BF=E3=81=AB=E5=A4=89=E6=9B=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit From 62ad7c3445ef6fd09c116baf7c25690bf2fbaae0 Mon Sep 17 00:00:00 2001 From: nacchan Date: Wed, 11 Jun 2025 15:33:56 +0900 Subject: [PATCH 08/40] =?UTF-8?q?=E3=82=A8=E3=83=A9=E3=83=BC=E3=83=9A?= =?UTF-8?q?=E3=83=BC=E3=82=B8=EF=BC=88404/500/422=EF=BC=89=E3=81=AE?= =?UTF-8?q?=E3=83=AA=E3=82=AF=E3=82=A8=E3=82=B9=E3=83=88=E3=83=86=E3=82=B9?= =?UTF-8?q?=E3=83=88=E3=82=92=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- config/routes.rb | 6 ++++++ spec/requests/errors_spec.rb | 17 +++++++++++++++-- 2 files changed, 21 insertions(+), 2 deletions(-) diff --git a/config/routes.rb b/config/routes.rb index b7fa93ac..7189c912 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -106,4 +106,10 @@ # Check development sent emails mount LetterOpenerWeb::Engine, at: "/letter_opener" if Rails.env.development? mount Rambulance::Engine => "/" + + if Rails.env.development? || Rails.env.test? + get "/trigger_500", to: ->(env) { raise "Triggering 500 error" } + get "/trigger_422", to: "errors#unprocessable_entity" + end + end diff --git a/spec/requests/errors_spec.rb b/spec/requests/errors_spec.rb index d3286064..987cd05e 100644 --- a/spec/requests/errors_spec.rb +++ b/spec/requests/errors_spec.rb @@ -4,12 +4,25 @@ include Rambulance::TestHelper describe "Error requests" do - it 'should render a corresponding error page' do + it 'renders the 404 error page' do with_exceptions_app do get '/does_not_exist' end + expect(response.status).to eq(404) + end - assert_equal 404, response.status + it 'renders the 422 error page' do + with_exceptions_app do + get '/trigger_422' + end + expect(response.status).to eq(422) + end + + it 'renders the 500 error page' do + with_exceptions_app do + get '/trigger_500' + end + expect(response.status).to eq(500) end end end From 4b52ff74cafeb3412c8809941d37a15bf8736643 Mon Sep 17 00:00:00 2001 From: nacchan Date: Thu, 12 Jun 2025 07:50:14 +0900 Subject: [PATCH 09/40] =?UTF-8?q?ErrorsController=E3=81=AE=E4=B8=8D?= =?UTF-8?q?=E8=A6=81=E3=81=AA=E3=82=B3=E3=83=A1=E3=83=B3=E3=83=88=E3=82=92?= =?UTF-8?q?=E5=89=8A=E9=99=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/errors_controller.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/controllers/errors_controller.rb b/app/controllers/errors_controller.rb index 323baff2..dde9a422 100644 --- a/app/controllers/errors_controller.rb +++ b/app/controllers/errors_controller.rb @@ -1,5 +1,5 @@ class ErrorsController < ApplicationController - layout 'application' # エラー画面にも通常のアプリと同じレイアウトを適用 + layout 'application' def not_found render status: 404 # このアクションでは app/views/errors/not_found.html.erb が使用されます From 7e4737c6e9739812696784377e3b6f4c75729918 Mon Sep 17 00:00:00 2001 From: nacchan Date: Thu, 12 Jun 2025 07:58:24 +0900 Subject: [PATCH 10/40] =?UTF-8?q?=E3=82=B3=E3=83=A1=E3=83=B3=E3=83=88?= =?UTF-8?q?=E4=BD=8D=E7=BD=AE=E3=82=92=E4=B8=8A=E3=81=AB=E7=A7=BB=E5=8B=95?= =?UTF-8?q?=E3=81=97=E3=81=A6=E7=B5=B1=E4=B8=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/errors_controller.rb | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/app/controllers/errors_controller.rb b/app/controllers/errors_controller.rb index dde9a422..8251dce8 100644 --- a/app/controllers/errors_controller.rb +++ b/app/controllers/errors_controller.rb @@ -2,14 +2,17 @@ class ErrorsController < ApplicationController layout 'application' def not_found - render status: 404 # このアクションでは app/views/errors/not_found.html.erb が使用されます + # このアクションでは app/views/errors/not_found.html.erb が使用されます + render status: 404 end def internal_server_error - render status: 500 # このアクションでは app/views/errors/internal_server_error.html.erb が使用されます + # このアクションでは app/views/errors/internal_server_error.html.erb が使用されます + render status: 500 end def unprocessable_entity - render status: 422 # このアクションでは app/views/errors/unprocessable_entity.html.erb が使用されます + # このアクションでは app/views/errors/unprocessable_entity.html.erb が使用されます + render status: 422 end end From 9dac37e85a51d33c99890e7b03007cf3ddde100d Mon Sep 17 00:00:00 2001 From: nacchan Date: Thu, 12 Jun 2025 08:46:46 +0900 Subject: [PATCH 11/40] =?UTF-8?q?errors/header=E3=82=92=E3=82=A4=E3=83=B3?= =?UTF-8?q?=E3=83=A9=E3=82=A4=E3=83=B3=E5=8C=96=E3=81=97=E3=80=81partial?= =?UTF-8?q?=E3=82=92=E5=89=8A=E9=99=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/views/errors/_header.html.erb | 6 ------ app/views/errors/internal_server_error.html.erb | 7 ++++++- app/views/errors/not_found.html.erb | 7 ++++++- app/views/errors/unprocessable_entity.html.erb | 7 ++++++- 4 files changed, 18 insertions(+), 9 deletions(-) delete mode 100644 app/views/errors/_header.html.erb diff --git a/app/views/errors/_header.html.erb b/app/views/errors/_header.html.erb deleted file mode 100644 index e06be800..00000000 --- a/app/views/errors/_header.html.erb +++ /dev/null @@ -1,6 +0,0 @@ -
- -

CoderDojo Japan

-

子どものためのプログラミング道場

-
-
diff --git a/app/views/errors/internal_server_error.html.erb b/app/views/errors/internal_server_error.html.erb index 842dcbdb..7fb9a41d 100644 --- a/app/views/errors/internal_server_error.html.erb +++ b/app/views/errors/internal_server_error.html.erb @@ -1,7 +1,12 @@ <% provide(:title, "予期しないエラーが発生しました 😵‍💫") %> <% provide(:desc, "申し訳ありません。サーバーで問題が発生しています。") %> -<%= render 'errors/header' %> +
+ +

CoderDojo Japan

+

子どものためのプログラミング道場

+
+

diff --git a/app/views/errors/not_found.html.erb b/app/views/errors/not_found.html.erb index fb74fa6f..03dab2ae 100644 --- a/app/views/errors/not_found.html.erb +++ b/app/views/errors/not_found.html.erb @@ -1,7 +1,12 @@ <% provide(:title, "ページが見つかりませんでした... 🥺💦") %> <% provide(:desc, "ページが削除された可能性があります 🤔💭") %> -<%= render 'errors/header' %> +
+ +

CoderDojo Japan

+

子どものためのプログラミング道場

+
+

diff --git a/app/views/errors/unprocessable_entity.html.erb b/app/views/errors/unprocessable_entity.html.erb index c4e84db9..a8626ddb 100644 --- a/app/views/errors/unprocessable_entity.html.erb +++ b/app/views/errors/unprocessable_entity.html.erb @@ -1,7 +1,12 @@ <% provide(:title, "リクエストが処理できませんでした… 😢") %> <% provide(:desc, "入力内容に誤りがあるか、リクエストが正しく送信されなかった可能性があります。") %> -<%= render 'errors/header' %> +
+ +

CoderDojo Japan

+

子どものためのプログラミング道場

+
+

From c0d871a1101d4ce648939f6a665f752ffdd424e5 Mon Sep 17 00:00:00 2001 From: nacchan Date: Thu, 12 Jun 2025 09:06:46 +0900 Subject: [PATCH 12/40] =?UTF-8?q?errors/feedback=5Fnotice=E3=82=92?= =?UTF-8?q?=E3=82=A4=E3=83=B3=E3=83=A9=E3=82=A4=E3=83=B3=E5=8C=96=E3=81=97?= =?UTF-8?q?=E3=80=81partial=E3=82=92=E5=89=8A=E9=99=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/views/errors/_feedback_notice.html.erb | 7 ------- app/views/errors/internal_server_error.html.erb | 8 +++++++- app/views/errors/not_found.html.erb | 8 +++++++- app/views/errors/unprocessable_entity.html.erb | 8 +++++++- 4 files changed, 21 insertions(+), 10 deletions(-) delete mode 100644 app/views/errors/_feedback_notice.html.erb diff --git a/app/views/errors/_feedback_notice.html.erb b/app/views/errors/_feedback_notice.html.erb deleted file mode 100644 index 07623572..00000000 --- a/app/views/errors/_feedback_notice.html.erb +++ /dev/null @@ -1,7 +0,0 @@ -

- フィードバックなどあれば info@coderdojo.jp にメールしていただくか、 -
- もしくは - GitHub Issue - に書いていただけると嬉しいです (>人< )✨ -

diff --git a/app/views/errors/internal_server_error.html.erb b/app/views/errors/internal_server_error.html.erb index 7fb9a41d..4be7c1b4 100644 --- a/app/views/errors/internal_server_error.html.erb +++ b/app/views/errors/internal_server_error.html.erb @@ -16,7 +16,13 @@ 現在、問題を調査しています。しばらくしてからもう一度お試しください。

- <%= render 'errors/feedback_notice' %> +

+ フィードバックなどあれば info@coderdojo.jp にメールしていただくか、 +
+ もしくは + GitHub Issue + に書いていただけると嬉しいです (>人< )✨ +

<%= render 'errors/footer_links_and_timeline' %> diff --git a/app/views/errors/not_found.html.erb b/app/views/errors/not_found.html.erb index 03dab2ae..1d4dd298 100644 --- a/app/views/errors/not_found.html.erb +++ b/app/views/errors/not_found.html.erb @@ -16,7 +16,13 @@ ページが削除された可能性があります 🤔💭

- <%= render 'errors/feedback_notice' %> +

+ フィードバックなどあれば info@coderdojo.jp にメールしていただくか、 +
+ もしくは + GitHub Issue + に書いていただけると嬉しいです (>人< )✨ +

<%= render 'errors/footer_links_and_timeline' %> diff --git a/app/views/errors/unprocessable_entity.html.erb b/app/views/errors/unprocessable_entity.html.erb index a8626ddb..b1b9da76 100644 --- a/app/views/errors/unprocessable_entity.html.erb +++ b/app/views/errors/unprocessable_entity.html.erb @@ -16,7 +16,13 @@ 入力内容に誤りがあるか、リクエストが正しく送信されなかった可能性があります。

- <%= render 'errors/feedback_notice' %> +

+ フィードバックなどあれば info@coderdojo.jp にメールしていただくか、 +
+ もしくは + GitHub Issue + に書いていただけると嬉しいです (>人< )✨ +

<%= render 'errors/footer_links_and_timeline' %> From 092c3dd8b3189c4ed0468053ea4a3d15a92c5eb1 Mon Sep 17 00:00:00 2001 From: nacchan Date: Thu, 12 Jun 2025 09:30:05 +0900 Subject: [PATCH 13/40] =?UTF-8?q?=E5=85=B1=E9=80=9A=E6=96=87=E8=A8=80?= =?UTF-8?q?=E3=81=AE=E8=A1=A8=E7=A4=BA=E7=A2=BA=E8=AA=8D=E3=83=86=E3=82=B9?= =?UTF-8?q?=E3=83=88=E3=82=92requestspec=E3=81=AB=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- spec/requests/errors_spec.rb | 3 +++ 1 file changed, 3 insertions(+) diff --git a/spec/requests/errors_spec.rb b/spec/requests/errors_spec.rb index 987cd05e..9b568327 100644 --- a/spec/requests/errors_spec.rb +++ b/spec/requests/errors_spec.rb @@ -9,6 +9,7 @@ get '/does_not_exist' end expect(response.status).to eq(404) + expect(response.body).to include("子どものためのプログラミング道場") end it 'renders the 422 error page' do @@ -16,6 +17,7 @@ get '/trigger_422' end expect(response.status).to eq(422) + expect(response.body).to include("子どものためのプログラミング道場") end it 'renders the 500 error page' do @@ -23,6 +25,7 @@ get '/trigger_500' end expect(response.status).to eq(500) + expect(response.body).to include("子どものためのプログラミング道場") end end end From 8e7f468ee5e9570bf2c0db366c1e0f8038d89755 Mon Sep 17 00:00:00 2001 From: nacchan Date: Mon, 16 Jun 2025 09:41:17 +0900 Subject: [PATCH 14/40] =?UTF-8?q?refactor:=20404=E3=83=BB500=E3=83=BB422?= =?UTF-8?q?=20=E3=82=A8=E3=83=A9=E3=83=BC=E3=83=9A=E3=83=BC=E3=82=B8?= =?UTF-8?q?=E3=81=AE=E3=83=AB=E3=83=BC=E3=83=86=E3=82=A3=E3=83=B3=E3=82=B0?= =?UTF-8?q?=E3=82=92=E4=B8=80=E5=85=83=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- config/routes.rb | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/config/routes.rb b/config/routes.rb index 7189c912..7030c283 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -107,6 +107,11 @@ mount LetterOpenerWeb::Engine, at: "/letter_opener" if Rails.env.development? mount Rambulance::Engine => "/" + Rails.application.routes.draw do + %w(404 500 422).each do |code| + match code, to: "errors#show", via: :all, defaults: { status_code: code } + end + if Rails.env.development? || Rails.env.test? get "/trigger_500", to: ->(env) { raise "Triggering 500 error" } get "/trigger_422", to: "errors#unprocessable_entity" From 0103961d75f029df0a57d0bc70408c3da8e2d8e5 Mon Sep 17 00:00:00 2001 From: nacchan Date: Mon, 16 Jun 2025 10:23:12 +0900 Subject: [PATCH 15/40] =?UTF-8?q?refactor:=20ErrorsController=20=E3=82=92?= =?UTF-8?q?=20show=20=E3=82=A2=E3=82=AF=E3=82=B7=E3=83=A7=E3=83=B3?= =?UTF-8?q?=E3=81=AB=E9=9B=86=E7=B4=84=E3=81=97=E6=97=A7=E3=82=A2=E3=82=AF?= =?UTF-8?q?=E3=82=B7=E3=83=A7=E3=83=B3=E3=82=92=E5=89=8A=E9=99=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/errors_controller.rb | 34 ++++++++++++++++++---------- 1 file changed, 22 insertions(+), 12 deletions(-) diff --git a/app/controllers/errors_controller.rb b/app/controllers/errors_controller.rb index 8251dce8..d4e41f48 100644 --- a/app/controllers/errors_controller.rb +++ b/app/controllers/errors_controller.rb @@ -1,18 +1,28 @@ class ErrorsController < ApplicationController - layout 'application' + before_action :set_error_message - def not_found - # このアクションでは app/views/errors/not_found.html.erb が使用されます - render status: 404 + def show + render :show, status: @status_code end - def internal_server_error - # このアクションでは app/views/errors/internal_server_error.html.erb が使用されます - render status: 500 - end + private - def unprocessable_entity - # このアクションでは app/views/errors/unprocessable_entity.html.erb が使用されます - render status: 422 - end + def set_error_message + @status_code = params[:status_code].to_i + + case @status_code + when 404 + @title = "ページが見つかりませんでした... 🥺💦" + @desc = "ページが削除された可能性があります 🤔💭" + when 422 + @title = "リクエストが処理できませんでした… 😢" + @desc = "入力内容に誤りがあるか、リクエストが正しく送信されなかった可能性があります。" + when 500 + @title = "予期しないエラーが発生しました 😵‍💫" + @desc = "申し訳ありません。サーバーで問題が発生しています。" + else + @title = "予期せぬエラーが発生しました…😵" + @desc = "しばらく経ってから再度お試しください。" + end + end end From 21dbe7bda490d4a0c40fe55b98866b2c08af4ed7 Mon Sep 17 00:00:00 2001 From: nacchan Date: Mon, 16 Jun 2025 10:38:59 +0900 Subject: [PATCH 16/40] =?UTF-8?q?refactor:=20=E3=82=A8=E3=83=A9=E3=83=BC?= =?UTF-8?q?=E3=83=9A=E3=83=BC=E3=82=B8=E3=81=AEshow.html=E3=82=92=E6=96=B0?= =?UTF-8?q?=E8=A6=8F=E4=BD=9C=E6=88=90=E3=81=97footer=5Flinks=5Fand=5Ftime?= =?UTF-8?q?line=E3=83=91=E3=83=BC=E3=82=B7=E3=83=A3=E3=83=AB=E3=82=92?= =?UTF-8?q?=E3=82=A4=E3=83=B3=E3=83=A9=E3=82=A4=E3=83=B3=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/views/errors/show.html.erb | 49 ++++++++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) create mode 100644 app/views/errors/show.html.erb diff --git a/app/views/errors/show.html.erb b/app/views/errors/show.html.erb new file mode 100644 index 00000000..48437e6b --- /dev/null +++ b/app/views/errors/show.html.erb @@ -0,0 +1,49 @@ +<% provide(:title, @title) %> +<% provide(:desc, @desc) %> + +
+ +

CoderDojo Japan

+

子どものためのプログラミング道場

+
+
+ +
+

<%= @title %>

+

+ <%= @desc %> +
+

+

+ フィードバックなどあれば info@coderdojo.jp にメールしていただくか、 +
+ もしくは + + GitHub Issue + + に書いていただけると嬉しいです (>人< )✨ +

+
+ +
+
+

+ + 🐣 最近の情報発信 + +

+
+ + +
From ee6d1de5280af576d30de03dab50ca6d6800553f Mon Sep 17 00:00:00 2001 From: nacchan Date: Mon, 16 Jun 2025 10:46:25 +0900 Subject: [PATCH 17/40] =?UTF-8?q?refactor:=E4=B8=8D=E8=A6=81=E3=81=AB?= =?UTF-8?q?=E3=81=AA=E3=81=A3=E3=81=9F=E6=97=A7=E3=82=A8=E3=83=A9=E3=83=BC?= =?UTF-8?q?=E3=83=93=E3=83=A5=E3=83=BC=E3=81=A8footer=E3=83=91=E3=83=BC?= =?UTF-8?q?=E3=82=B7=E3=83=A3=E3=83=AB=E3=82=92=E5=89=8A=E9=99=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../_footer_links_and_timeline.html.erb | 20 ------------- .../errors/internal_server_error.html.erb | 28 ------------------- .../internal_server_error.json.jbuilder | 1 - app/views/errors/not_found.html.erb | 28 ------------------- app/views/errors/not_found.json.jbuilder | 1 - .../errors/unprocessable_entity.html.erb | 28 ------------------- .../errors/unprocessable_entity.json.jbuilder | 1 - 7 files changed, 107 deletions(-) delete mode 100644 app/views/errors/_footer_links_and_timeline.html.erb delete mode 100644 app/views/errors/internal_server_error.html.erb delete mode 100644 app/views/errors/internal_server_error.json.jbuilder delete mode 100644 app/views/errors/not_found.html.erb delete mode 100644 app/views/errors/not_found.json.jbuilder delete mode 100644 app/views/errors/unprocessable_entity.html.erb delete mode 100644 app/views/errors/unprocessable_entity.json.jbuilder diff --git a/app/views/errors/_footer_links_and_timeline.html.erb b/app/views/errors/_footer_links_and_timeline.html.erb deleted file mode 100644 index c3d141a9..00000000 --- a/app/views/errors/_footer_links_and_timeline.html.erb +++ /dev/null @@ -1,20 +0,0 @@ -
-
-

- - 🐣 最近の情報発信 - -

-
- - -
diff --git a/app/views/errors/internal_server_error.html.erb b/app/views/errors/internal_server_error.html.erb deleted file mode 100644 index 4be7c1b4..00000000 --- a/app/views/errors/internal_server_error.html.erb +++ /dev/null @@ -1,28 +0,0 @@ -<% provide(:title, "予期しないエラーが発生しました 😵‍💫") %> -<% provide(:desc, "申し訳ありません。サーバーで問題が発生しています。") %> - -
- -

CoderDojo Japan

-

子どものためのプログラミング道場

-
-
- -
-

- 予期しないエラーが発生しました 😵‍💫 -

-

- 現在、問題を調査しています。しばらくしてからもう一度お試しください。 -
-

-

- フィードバックなどあれば info@coderdojo.jp にメールしていただくか、 -
- もしくは - GitHub Issue - に書いていただけると嬉しいです (>人< )✨ -

-
- -<%= render 'errors/footer_links_and_timeline' %> diff --git a/app/views/errors/internal_server_error.json.jbuilder b/app/views/errors/internal_server_error.json.jbuilder deleted file mode 100644 index 46a32f67..00000000 --- a/app/views/errors/internal_server_error.json.jbuilder +++ /dev/null @@ -1 +0,0 @@ -json.error_message "We're sorry, but something went wrong." diff --git a/app/views/errors/not_found.html.erb b/app/views/errors/not_found.html.erb deleted file mode 100644 index 1d4dd298..00000000 --- a/app/views/errors/not_found.html.erb +++ /dev/null @@ -1,28 +0,0 @@ -<% provide(:title, "ページが見つかりませんでした... 🥺💦") %> -<% provide(:desc, "ページが削除された可能性があります 🤔💭") %> - -
- -

CoderDojo Japan

-

子どものためのプログラミング道場

-
-
- -
-

- ページが見つかりませんでした... 🥺💦 -

-

- ページが削除された可能性があります 🤔💭 -
-

-

- フィードバックなどあれば info@coderdojo.jp にメールしていただくか、 -
- もしくは - GitHub Issue - に書いていただけると嬉しいです (>人< )✨ -

-
- -<%= render 'errors/footer_links_and_timeline' %> diff --git a/app/views/errors/not_found.json.jbuilder b/app/views/errors/not_found.json.jbuilder deleted file mode 100644 index a323a2ab..00000000 --- a/app/views/errors/not_found.json.jbuilder +++ /dev/null @@ -1 +0,0 @@ -json.error_message "The page you were looking for doesn't exist. You may have mistyped the address or the page may have moved." diff --git a/app/views/errors/unprocessable_entity.html.erb b/app/views/errors/unprocessable_entity.html.erb deleted file mode 100644 index b1b9da76..00000000 --- a/app/views/errors/unprocessable_entity.html.erb +++ /dev/null @@ -1,28 +0,0 @@ -<% provide(:title, "リクエストが処理できませんでした… 😢") %> -<% provide(:desc, "入力内容に誤りがあるか、リクエストが正しく送信されなかった可能性があります。") %> - -
- -

CoderDojo Japan

-

子どものためのプログラミング道場

-
-
- -
-

- リクエストが処理できませんでした… 😢 -

-

- 入力内容に誤りがあるか、リクエストが正しく送信されなかった可能性があります。 -
-

-

- フィードバックなどあれば info@coderdojo.jp にメールしていただくか、 -
- もしくは - GitHub Issue - に書いていただけると嬉しいです (>人< )✨ -

-
- -<%= render 'errors/footer_links_and_timeline' %> diff --git a/app/views/errors/unprocessable_entity.json.jbuilder b/app/views/errors/unprocessable_entity.json.jbuilder deleted file mode 100644 index 81302a2a..00000000 --- a/app/views/errors/unprocessable_entity.json.jbuilder +++ /dev/null @@ -1 +0,0 @@ -json.error_message "The change you wanted was rejected. Maybe you tried to change something you didn't have access to." From 4e8612b06926398bd6434024008812013223adeb Mon Sep 17 00:00:00 2001 From: nacchan Date: Mon, 16 Jun 2025 10:59:55 +0900 Subject: [PATCH 18/40] =?UTF-8?q?refactor:=E9=87=8D=E8=A4=87=E3=81=97?= =?UTF-8?q?=E3=81=9Froutes.draw=E3=83=96=E3=83=AD=E3=83=83=E3=82=AF?= =?UTF-8?q?=E3=82=92=E5=89=8A=E9=99=A4=E3=81=97=E3=82=A8=E3=83=A9=E3=83=BC?= =?UTF-8?q?=E3=83=AB=E3=83=BC=E3=83=86=E3=82=A3=E3=83=B3=E3=82=B0=E3=82=92?= =?UTF-8?q?=E6=98=87=E9=A0=86(404=E2=86=92422=E2=86=92500)=E3=81=AB?= =?UTF-8?q?=E5=A4=89=E6=9B=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- config/routes.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/config/routes.rb b/config/routes.rb index 7030c283..76248f60 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -107,8 +107,8 @@ mount LetterOpenerWeb::Engine, at: "/letter_opener" if Rails.env.development? mount Rambulance::Engine => "/" - Rails.application.routes.draw do - %w(404 500 422).each do |code| + # 全環境共通のエラーページルーティング + %w(404 422 500 ).each do |code| match code, to: "errors#show", via: :all, defaults: { status_code: code } end From 22227442883e03c06582ab299ca8214abaf916ac Mon Sep 17 00:00:00 2001 From: nacchan Date: Mon, 16 Jun 2025 13:24:28 +0900 Subject: [PATCH 19/40] =?UTF-8?q?refactor:application.rb=E3=81=8B=E3=82=89?= =?UTF-8?q?exceptions=5Fapp=E8=A8=AD=E5=AE=9A=E3=82=92=E5=89=8A=E9=99=A4?= =?UTF-8?q?=E3=81=97production/test=E7=92=B0=E5=A2=83=E3=81=B8=E7=A7=BB?= =?UTF-8?q?=E8=A1=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - application.rbからを削除 - production.rbとtest.rbの直後にを追加 - 開発環境では従来のバックトレース表示()を維持し、ローカルデバッグ性を確保 - 本番/CI環境では例外を自前ルーティング(,,)へ委譲することで一貫したカスタムエラー画面を提供 --- config/application.rb | 4 ---- config/environments/production.rb | 3 +++ config/environments/test.rb | 3 +++ 3 files changed, 6 insertions(+), 4 deletions(-) diff --git a/config/application.rb b/config/application.rb index d3839b0e..20e502e1 100644 --- a/config/application.rb +++ b/config/application.rb @@ -11,10 +11,6 @@ class Application < Rails::Application # Initialize configuration defaults for originally generated Rails version. config.load_defaults 8.0 - # Rambulance が提供するエラー用ルーティングを使うようにする - config.exceptions_app = self.routes - - # Please, add to the `ignore` list any other `lib` subdirectories that do # not contain `.rb` files, or that should not be reloaded or eager loaded. # Common ones are `templates`, `generators`, or `middleware`, for example. diff --git a/config/environments/production.rb b/config/environments/production.rb index ce610264..50c92b54 100644 --- a/config/environments/production.rb +++ b/config/environments/production.rb @@ -12,6 +12,9 @@ # Full error reports are disabled. config.consider_all_requests_local = false + # 本番環境では例外を自前ルーティングへ + config.exceptions_app = self.routes + # Turn on fragment caching in view templates. config.action_controller.perform_caching = true diff --git a/config/environments/test.rb b/config/environments/test.rb index e0f4be7d..09ca29a1 100644 --- a/config/environments/test.rb +++ b/config/environments/test.rb @@ -22,6 +22,9 @@ config.consider_all_requests_local = true config.cache_store = :null_store + # テスト環境でも例外を自前ルーティングへ + config.exceptions_app = self.routes + # Render exception templates for rescuable exceptions and raise for other exceptions. config.action_dispatch.show_exceptions = :rescuable From 22c107b0d55d8b1dca3e203d77b7a868a4263177 Mon Sep 17 00:00:00 2001 From: nacchan Date: Mon, 16 Jun 2025 15:28:33 +0900 Subject: [PATCH 20/40] =?UTF-8?q?feat:=20=E9=96=8B=E7=99=BA=EF=BC=8F?= =?UTF-8?q?=E3=83=86=E3=82=B9=E3=83=88=E7=92=B0=E5=A2=83=E5=90=91=E3=81=91?= =?UTF-8?q?=E3=81=AE=E3=82=A8=E3=83=A9=E3=83=BC=E7=A2=BA=E8=AA=8D=E3=83=AB?= =?UTF-8?q?=E3=83=BC=E3=83=88=E3=82=92=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 開発&テスト環境のみで 500/422 エラーを意図的に発生させる , ルートを追加 - Rambulance エンジンを開発/テスト環境でのみマウントして、ローカルでエラーページを確認しやすく設定 --- config/routes.rb | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/config/routes.rb b/config/routes.rb index 76248f60..9341e2a5 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -112,9 +112,14 @@ match code, to: "errors#show", via: :all, defaults: { status_code: code } end + # 開発/テスト環境のみの便利ルート ── if Rails.env.development? || Rails.env.test? - get "/trigger_500", to: ->(env) { raise "Triggering 500 error" } - get "/trigger_422", to: "errors#unprocessable_entity" + # 500エラーを意図的に発生させる + get "/trigger_500", to: ->(env) { raise "Triggering 500 error" } + # 422エラーを意図的に返す + get "/trigger_422", to: "errors#unprocessable_entity" + # Rambulance を開発/テスト環境でのみマウント + mount Rambulance::Engine => "/" end end From 285999d3672574029c7e823923a866173b7c9ba4 Mon Sep 17 00:00:00 2001 From: nacchan Date: Tue, 17 Jun 2025 08:07:16 +0900 Subject: [PATCH 21/40] =?UTF-8?q?=E3=83=AB=E3=83=BC=E3=83=86=E3=82=A3?= =?UTF-8?q?=E3=83=B3=E3=82=B0=E3=81=8B=E3=82=89=E9=87=8D=E8=A4=87=E3=81=97?= =?UTF-8?q?=E3=81=9FRambulance::Engine=E3=81=AE=E3=83=9E=E3=82=A6=E3=83=B3?= =?UTF-8?q?=E3=83=88=E3=82=92=E5=89=8A=E9=99=A4=20=E9=96=8B=E7=99=BA?= =?UTF-8?q?=EF=BC=8F=E3=83=86=E3=82=B9=E3=83=88=E7=92=B0=E5=A2=83=E3=81=AE?= =?UTF-8?q?=E3=81=BF=E3=81=ABRambulance=E3=82=92=E3=83=9E=E3=82=A6?= =?UTF-8?q?=E3=83=B3=E3=83=88=E3=81=97=E3=80=81=E2=80=9Crambulance=5Fengin?= =?UTF-8?q?e=E2=80=9D=E3=83=AB=E3=83=BC=E3=83=88=E5=90=8D=E3=81=AE?= =?UTF-8?q?=E7=AB=B6=E5=90=88=E3=82=92=E5=9B=9E=E9=81=BF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- config/routes.rb | 1 - 1 file changed, 1 deletion(-) diff --git a/config/routes.rb b/config/routes.rb index 9341e2a5..9787b4eb 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -105,7 +105,6 @@ # Check development sent emails mount LetterOpenerWeb::Engine, at: "/letter_opener" if Rails.env.development? - mount Rambulance::Engine => "/" # 全環境共通のエラーページルーティング %w(404 422 500 ).each do |code| From 5d202b70f1b5e48ad8d995e4b64015cd7b1af59c Mon Sep 17 00:00:00 2001 From: nacchan Date: Tue, 17 Jun 2025 11:19:46 +0900 Subject: [PATCH 22/40] =?UTF-8?q?Rambulance=E7=94=A8=E3=81=AE=E4=BE=8B?= =?UTF-8?q?=E5=A4=96=E3=83=86=E3=83=B3=E3=83=97=E3=83=AC=E3=83=BC=E3=83=88?= =?UTF-8?q?=EF=BC=88404/422/500=EF=BC=89=E3=82=92=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ・開発環境での即時プレビューと、本番環境での動的レンダーを両立 ・ErrorsController経由の共通ビュー管理からのアプローチ変更 ・Gem『rambulance』の標準ディレクトリを活用し、テンプレート修正をシンプルに --- app/views/rambulance/exceptions_app/404.html.erb | 1 + app/views/rambulance/exceptions_app/422.html.erb | 1 + app/views/rambulance/exceptions_app/500.html.erb | 1 + 3 files changed, 3 insertions(+) create mode 100644 app/views/rambulance/exceptions_app/404.html.erb create mode 100644 app/views/rambulance/exceptions_app/422.html.erb create mode 100644 app/views/rambulance/exceptions_app/500.html.erb diff --git a/app/views/rambulance/exceptions_app/404.html.erb b/app/views/rambulance/exceptions_app/404.html.erb new file mode 100644 index 00000000..c973d34c --- /dev/null +++ b/app/views/rambulance/exceptions_app/404.html.erb @@ -0,0 +1 @@ +<%= render template: "errors/show", locals: { status_code: 404 } %> diff --git a/app/views/rambulance/exceptions_app/422.html.erb b/app/views/rambulance/exceptions_app/422.html.erb new file mode 100644 index 00000000..895be0ba --- /dev/null +++ b/app/views/rambulance/exceptions_app/422.html.erb @@ -0,0 +1 @@ +<%= render template: "errors/show", locals: { status_code: 422 } %> diff --git a/app/views/rambulance/exceptions_app/500.html.erb b/app/views/rambulance/exceptions_app/500.html.erb new file mode 100644 index 00000000..9fb2f736 --- /dev/null +++ b/app/views/rambulance/exceptions_app/500.html.erb @@ -0,0 +1 @@ +<%= render template: "errors/show", locals: { status_code: 500 } %> From d064907d7d3d7ae2c749d2f9c240b266470d5e30 Mon Sep 17 00:00:00 2001 From: nacchan Date: Tue, 17 Jun 2025 11:38:18 +0900 Subject: [PATCH 23/40] =?UTF-8?q?=E3=82=A8=E3=83=A9=E3=83=BC=E8=A1=A8?= =?UTF-8?q?=E7=A4=BA=E7=94=A8=20show=20=E3=83=86=E3=83=B3=E3=83=97?= =?UTF-8?q?=E3=83=AC=E3=83=BC=E3=83=88=E3=81=AB=E3=83=98=E3=83=AB=E3=83=91?= =?UTF-8?q?=E3=83=BC=E9=80=A3=E6=90=BA=E3=82=92=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/views/errors/show.html.erb | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/app/views/errors/show.html.erb b/app/views/errors/show.html.erb index 48437e6b..99d8c599 100644 --- a/app/views/errors/show.html.erb +++ b/app/views/errors/show.html.erb @@ -1,3 +1,7 @@ +<% @status_code = local_assigns[:status_code].to_i %> +<% @title = error_title(@status_code) %> +<% @desc = error_desc(@status_code) %> + <% provide(:title, @title) %> <% provide(:desc, @desc) %> From 5a6566d98e156872fa89f9c87730239e64926f3c Mon Sep 17 00:00:00 2001 From: nacchan Date: Tue, 17 Jun 2025 11:51:48 +0900 Subject: [PATCH 24/40] =?UTF-8?q?=E3=82=A8=E3=83=A9=E3=83=BC=E8=A1=A8?= =?UTF-8?q?=E7=A4=BA=E3=82=92=E3=83=98=E3=83=AB=E3=83=91=E3=83=BC=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ・ErrorsHelperにerror_title/error_descメソッドを追加 ・local_assigns[:status_code]をもとに@title/@descをセット ・provideでレイアウト用のタイトル・ディスクリプションを連携 --- app/helpers/errors_helper.rb | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 app/helpers/errors_helper.rb diff --git a/app/helpers/errors_helper.rb b/app/helpers/errors_helper.rb new file mode 100644 index 00000000..2bfb16ac --- /dev/null +++ b/app/helpers/errors_helper.rb @@ -0,0 +1,19 @@ +module ErrorsHelper + def error_title(code) + case code + when 404 then "ページが見つかりませんでした... 🥺💦" + when 422 then "リクエストが処理できませんでした… 😢" + when 500 then "予期しないエラーが発生しました 😵‍💫" + else "予期せぬエラーが発生しました…😵" + end + end + + def error_desc(code) + case code + when 404 then "ページが削除された可能性があります 🤔💭" + when 422 then "入力内容に誤りがあるか、リクエストが正しく送信されなかった可能性があります。" + when 500 then "申し訳ありません。サーバーで問題が発生しています。" + else "しばらく経ってから再度お試しください。" + end + end +end From ca186cba0e62bda999cb70a503e0a08ae0c9a2b2 Mon Sep 17 00:00:00 2001 From: nacchan Date: Tue, 17 Jun 2025 12:09:24 +0900 Subject: [PATCH 25/40] =?UTF-8?q?ErrorsController=E9=96=A2=E9=80=A3?= =?UTF-8?q?=E3=83=AB=E3=83=BC=E3=83=88=E3=82=92=E5=89=8A=E9=99=A4=E3=81=97?= =?UTF-8?q?=E3=80=81Rambulance=E3=81=AB=E3=82=88=E3=82=8B=E4=BE=8B?= =?UTF-8?q?=E5=A4=96=E3=83=8F=E3=83=B3=E3=83=89=E3=83=AA=E3=83=B3=E3=82=B0?= =?UTF-8?q?=E3=81=AB=E7=B5=B1=E4=B8=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ・%w(404 422 500) の match ブロックを削除 ・get "/trigger_500" および get "/trigger_422" のトリガールートを削除 ・Rambulance::Engine のマウントのみ残すようルーティングを整理 --- app/controllers/errors_controller.rb | 28 ---------------------------- config/routes.rb | 9 --------- 2 files changed, 37 deletions(-) delete mode 100644 app/controllers/errors_controller.rb diff --git a/app/controllers/errors_controller.rb b/app/controllers/errors_controller.rb deleted file mode 100644 index d4e41f48..00000000 --- a/app/controllers/errors_controller.rb +++ /dev/null @@ -1,28 +0,0 @@ -class ErrorsController < ApplicationController - before_action :set_error_message - - def show - render :show, status: @status_code - end - - private - - def set_error_message - @status_code = params[:status_code].to_i - - case @status_code - when 404 - @title = "ページが見つかりませんでした... 🥺💦" - @desc = "ページが削除された可能性があります 🤔💭" - when 422 - @title = "リクエストが処理できませんでした… 😢" - @desc = "入力内容に誤りがあるか、リクエストが正しく送信されなかった可能性があります。" - when 500 - @title = "予期しないエラーが発生しました 😵‍💫" - @desc = "申し訳ありません。サーバーで問題が発生しています。" - else - @title = "予期せぬエラーが発生しました…😵" - @desc = "しばらく経ってから再度お試しください。" - end - end -end diff --git a/config/routes.rb b/config/routes.rb index 9787b4eb..698b068a 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -106,17 +106,8 @@ # Check development sent emails mount LetterOpenerWeb::Engine, at: "/letter_opener" if Rails.env.development? - # 全環境共通のエラーページルーティング - %w(404 422 500 ).each do |code| - match code, to: "errors#show", via: :all, defaults: { status_code: code } - end - # 開発/テスト環境のみの便利ルート ── if Rails.env.development? || Rails.env.test? - # 500エラーを意図的に発生させる - get "/trigger_500", to: ->(env) { raise "Triggering 500 error" } - # 422エラーを意図的に返す - get "/trigger_422", to: "errors#unprocessable_entity" # Rambulance を開発/テスト環境でのみマウント mount Rambulance::Engine => "/" end From 50bd22e9d25b00f3b8b8c49663bf654eb293cc01 Mon Sep 17 00:00:00 2001 From: nacchan Date: Tue, 17 Jun 2025 15:48:07 +0900 Subject: [PATCH 26/40] =?UTF-8?q?=E9=96=8B=E7=99=BA=E3=83=86=E3=82=B9?= =?UTF-8?q?=E3=83=88=E7=92=B0=E5=A2=83=E3=81=AB=E3=81=AE=E3=81=BFRambulanc?= =?UTF-8?q?e=E3=83=9E=E3=82=A6=E3=83=B3=E3=83=88=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- config/routes.rb | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/config/routes.rb b/config/routes.rb index 698b068a..a113fce3 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -2,6 +2,11 @@ # For details on the DSL available within this file, # see http://guides.rubyonrails.org/routing.html + # Rambulance を開発/テスト環境でのみマウント + if Rails.env.development? || Rails.env.test? + mount Rambulance::Engine => "/" + end + root "home#show" # Render legal documents by using Keiyaku CSS @@ -106,10 +111,9 @@ # Check development sent emails mount LetterOpenerWeb::Engine, at: "/letter_opener" if Rails.env.development? - # 開発/テスト環境のみの便利ルート ── - if Rails.env.development? || Rails.env.test? - # Rambulance を開発/テスト環境でのみマウント - mount Rambulance::Engine => "/" - end + # Rambulance がキャッチする /404, /422, /500 + match "/404", to: Rambulance::Engine, via: :all, defaults: { status_code: 404 } + match "/422", to: Rambulance::Engine, via: :all, defaults: { status_code: 422 } + match "/500", to: Rambulance::Engine, via: :all, defaults: { status_code: 500 } end From c50c1276ec28738a40229f0fb4af0c09d13101c3 Mon Sep 17 00:00:00 2001 From: nacchan Date: Wed, 18 Jun 2025 12:26:05 +0900 Subject: [PATCH 27/40] =?UTF-8?q?refactor:=20=E3=82=A8=E3=83=A9=E3=83=BC?= =?UTF-8?q?=E3=83=9A=E3=83=BC=E3=82=B8=E3=81=AE=E3=83=93=E3=83=A5=E3=83=BC?= =?UTF-8?q?=E6=A7=8B=E6=88=90=E3=82=92=E5=A4=89=E6=9B=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit にビューを配置する構成を試みたが、意図通りに動作しなかった。 の設定で と指定されているため、 ディレクトリにビューファイルを配置する、よりシンプルで確実な構成に変更。 --- app/views/errors/internal_server_error.html.erb | 1 + app/views/errors/not_found.html.erb | 1 + app/views/errors/unprocessable_entity.html.erb | 1 + 3 files changed, 3 insertions(+) create mode 100644 app/views/errors/internal_server_error.html.erb create mode 100644 app/views/errors/not_found.html.erb create mode 100644 app/views/errors/unprocessable_entity.html.erb diff --git a/app/views/errors/internal_server_error.html.erb b/app/views/errors/internal_server_error.html.erb new file mode 100644 index 00000000..9fb2f736 --- /dev/null +++ b/app/views/errors/internal_server_error.html.erb @@ -0,0 +1 @@ +<%= render template: "errors/show", locals: { status_code: 500 } %> diff --git a/app/views/errors/not_found.html.erb b/app/views/errors/not_found.html.erb new file mode 100644 index 00000000..c973d34c --- /dev/null +++ b/app/views/errors/not_found.html.erb @@ -0,0 +1 @@ +<%= render template: "errors/show", locals: { status_code: 404 } %> diff --git a/app/views/errors/unprocessable_entity.html.erb b/app/views/errors/unprocessable_entity.html.erb new file mode 100644 index 00000000..895be0ba --- /dev/null +++ b/app/views/errors/unprocessable_entity.html.erb @@ -0,0 +1 @@ +<%= render template: "errors/show", locals: { status_code: 422 } %> From 445787933d1d8ea2b2d6500d68c76f703f778005 Mon Sep 17 00:00:00 2001 From: nacchan Date: Wed, 18 Jun 2025 12:27:02 +0900 Subject: [PATCH 28/40] =?UTF-8?q?chore:=20=E4=B8=8D=E8=A6=81=E3=81=AB?= =?UTF-8?q?=E3=81=AA=E3=81=A3=E3=81=9F=E5=8F=A4=E3=81=84=E3=82=A8=E3=83=A9?= =?UTF-8?q?=E3=83=BC=E3=83=93=E3=83=A5=E3=83=BC=E3=82=92=E5=89=8A=E9=99=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/views/rambulance/exceptions_app/404.html.erb | 1 - app/views/rambulance/exceptions_app/422.html.erb | 1 - app/views/rambulance/exceptions_app/500.html.erb | 1 - 3 files changed, 3 deletions(-) delete mode 100644 app/views/rambulance/exceptions_app/404.html.erb delete mode 100644 app/views/rambulance/exceptions_app/422.html.erb delete mode 100644 app/views/rambulance/exceptions_app/500.html.erb diff --git a/app/views/rambulance/exceptions_app/404.html.erb b/app/views/rambulance/exceptions_app/404.html.erb deleted file mode 100644 index c973d34c..00000000 --- a/app/views/rambulance/exceptions_app/404.html.erb +++ /dev/null @@ -1 +0,0 @@ -<%= render template: "errors/show", locals: { status_code: 404 } %> diff --git a/app/views/rambulance/exceptions_app/422.html.erb b/app/views/rambulance/exceptions_app/422.html.erb deleted file mode 100644 index 895be0ba..00000000 --- a/app/views/rambulance/exceptions_app/422.html.erb +++ /dev/null @@ -1 +0,0 @@ -<%= render template: "errors/show", locals: { status_code: 422 } %> diff --git a/app/views/rambulance/exceptions_app/500.html.erb b/app/views/rambulance/exceptions_app/500.html.erb deleted file mode 100644 index 9fb2f736..00000000 --- a/app/views/rambulance/exceptions_app/500.html.erb +++ /dev/null @@ -1 +0,0 @@ -<%= render template: "errors/show", locals: { status_code: 500 } %> From f86b750e14ec52cf6569a7a608f197d271affdc9 Mon Sep 17 00:00:00 2001 From: nacchan Date: Wed, 18 Jun 2025 12:31:58 +0900 Subject: [PATCH 29/40] =?UTF-8?q?fix:=20errors/show=E3=83=91=E3=83=BC?= =?UTF-8?q?=E3=82=B7=E3=83=A3=E3=83=AB=E3=81=A7=E3=81=AE=E5=A4=89=E6=95=B0?= =?UTF-8?q?=E3=81=AE=E5=8F=97=E3=81=91=E6=B8=A1=E3=81=97=E3=82=92=E4=BF=AE?= =?UTF-8?q?=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Rambulanceのレンダリングコンテキストにおいて、 を使った変数の受け渡しが 意図通りに動作しない問題があったため、 よりシンプルで確実なローカル変数を直接使う方式に変更。 - インスタンス変数(@変数)の使用をやめ、ローカル変数に統一。 - これにより、ビューとヘルパーが正しく連携し、 500エラーが発生する問題が解消される。 --- app/views/errors/show.html.erb | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/app/views/errors/show.html.erb b/app/views/errors/show.html.erb index 99d8c599..39f97a93 100644 --- a/app/views/errors/show.html.erb +++ b/app/views/errors/show.html.erb @@ -1,9 +1,9 @@ -<% @status_code = local_assigns[:status_code].to_i %> -<% @title = error_title(@status_code) %> -<% @desc = error_desc(@status_code) %> +<%# The status_code local variable is passed from the parent template %> +<% title = error_title(status_code) %> +<% desc = error_desc(status_code) %> -<% provide(:title, @title) %> -<% provide(:desc, @desc) %> +<% provide(:title, title) %> +<% provide(:desc, desc) %>
@@ -13,9 +13,9 @@
-

<%= @title %>

+

<%= title %>

- <%= @desc %> + <%= desc %>

From 29c6cac72e18af53f3bf35117511c95939a64a8e Mon Sep 17 00:00:00 2001 From: nacchan Date: Wed, 18 Jun 2025 12:34:49 +0900 Subject: [PATCH 30/40] =?UTF-8?q?fix(config):=20Rambulance=E3=81=AE?= =?UTF-8?q?=E4=BE=8B=E5=A4=96=E3=83=9E=E3=83=83=E3=83=94=E3=83=B3=E3=82=B0?= =?UTF-8?q?=E3=82=92=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 422エラー(InvalidAuthenticityToken)が正しく処理されて いなかった問題と、サーバー起動時にクラッシュする問題を修正。 - にを追加し、 422ページが表示されるようにマッピング。 - サーバー起動時のエラーを回避するため、 全ての例外クラスを定数から文字列に変更。 --- config/initializers/rambulance.rb | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/config/initializers/rambulance.rb b/config/initializers/rambulance.rb index 47de0907..2b186e81 100644 --- a/config/initializers/rambulance.rb +++ b/config/initializers/rambulance.rb @@ -29,9 +29,10 @@ # If Rambulance receives an exception that is not listed here, it'll render # the internal server error template and return 500 as http status. config.rescue_responses = { - ActionController::RoutingError => :not_found, - AbstractController::ActionNotFound => :not_found, - ActionController::BadRequest => :bad_request, + "ActionController::RoutingError" => :not_found, + "AbstractController::ActionNotFound" => :not_found, + "ActionController::BadRequest" => :bad_request, + "ActionController::InvalidAuthenticityToken" => :unprocessable_entity, # "ActiveRecord::RecordNotUnique" => :unprocessable_entity, # "CanCan::AccessDenied" => :forbidden, From 48b231e2358431d8935506f0342053bae6818c62 Mon Sep 17 00:00:00 2001 From: nacchan Date: Wed, 18 Jun 2025 14:54:30 +0900 Subject: [PATCH 31/40] =?UTF-8?q?fix(helper):=20=E4=BA=88=E6=9C=9F?= =?UTF-8?q?=E3=81=9B=E3=81=AC=E3=82=A8=E3=83=A9=E3=83=BC=E7=99=BA=E7=94=9F?= =?UTF-8?q?=E6=99=82=E3=81=AE=E3=83=A1=E3=83=83=E3=82=BB=E3=83=BC=E3=82=B8?= =?UTF-8?q?=E3=82=92=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/helpers/errors_helper.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/helpers/errors_helper.rb b/app/helpers/errors_helper.rb index 2bfb16ac..acb2edc7 100644 --- a/app/helpers/errors_helper.rb +++ b/app/helpers/errors_helper.rb @@ -13,7 +13,7 @@ def error_desc(code) when 404 then "ページが削除された可能性があります 🤔💭" when 422 then "入力内容に誤りがあるか、リクエストが正しく送信されなかった可能性があります。" when 500 then "申し訳ありません。サーバーで問題が発生しています。" - else "しばらく経ってから再度お試しください。" + else "ご迷惑をおかけして、大変申し訳ありません。" end end end From 8cd758dbc0ae9bfb187700f39e024a1ac8218e8f Mon Sep 17 00:00:00 2001 From: nacchan Date: Wed, 18 Jun 2025 15:38:24 +0900 Subject: [PATCH 32/40] =?UTF-8?q?feat:=20=E9=96=8B=E7=99=BA=E7=94=A8?= =?UTF-8?q?=E3=81=AE=E3=82=A8=E3=83=A9=E3=83=BC=E3=83=9A=E3=83=BC=E3=82=B8?= =?UTF-8?q?=E3=83=97=E3=83=AC=E3=83=93=E3=83=A5=E3=83=BC=E6=A9=9F=E8=83=BD?= =?UTF-8?q?=E3=82=92=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 開発中に、設定ファイルを変更したり、意図的に例外を 発生させたりすることなく、エラーページのデザインを 簡単に確認できるようにするためのプレビュー機能を追加します。 - を作成 - 開発環境でのみ有効な のルートを追加 --- app/controllers/previews/errors_controller.rb | 21 +++++++++++++++++++ config/routes.rb | 9 ++++++++ 2 files changed, 30 insertions(+) create mode 100644 app/controllers/previews/errors_controller.rb diff --git a/app/controllers/previews/errors_controller.rb b/app/controllers/previews/errors_controller.rb new file mode 100644 index 00000000..67c09c56 --- /dev/null +++ b/app/controllers/previews/errors_controller.rb @@ -0,0 +1,21 @@ +class Previews::ErrorsController < ApplicationController + # このコントローラー全体で、application.html.erb のレイアウトを使用します + layout "application" + + # 404ページをプレビューするためのアクション + def not_found + # app/views/errors/not_found.html.erb を、 + # ステータスコード404で描画します + render template: "errors/not_found", status: :not_found + end + + # 422ページをプレビューするためのアクション + def unprocessable_entity + render template: "errors/unprocessable_entity", status: :unprocessable_entity + end + + # 500ページをプレビューするためのアクション + def internal_server_error + render template: "errors/internal_server_error", status: :internal_server_error + end +end diff --git a/config/routes.rb b/config/routes.rb index a113fce3..62aa73dd 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -111,6 +111,15 @@ # Check development sent emails mount LetterOpenerWeb::Engine, at: "/letter_opener" if Rails.env.development? + if Rails.env.development? + namespace :previews do + # /previews/errors/404 などのURLでアクセスできるようになります + get "errors/404" => "errors#not_found" + get "errors/422" => "errors#unprocessable_entity" + get "errors/500" => "errors#internal_server_error" + end + end + # Rambulance がキャッチする /404, /422, /500 match "/404", to: Rambulance::Engine, via: :all, defaults: { status_code: 404 } match "/422", to: Rambulance::Engine, via: :all, defaults: { status_code: 422 } From 52bc61daf2e646f2269bcbb326c335db65d6436f Mon Sep 17 00:00:00 2001 From: nacchan Date: Thu, 19 Jun 2025 08:28:31 +0900 Subject: [PATCH 33/40] =?UTF-8?q?=E3=82=A8=E3=83=A9=E3=83=BC=E7=94=BB?= =?UTF-8?q?=E9=9D=A2=E3=81=AE=E6=A1=88=E5=86=85=E6=96=87=E3=82=92=E6=9B=B4?= =?UTF-8?q?=E6=96=B0=E3=81=97=E3=80=81=E5=A0=B1=E5=91=8A=E4=BE=9D=E9=A0=BC?= =?UTF-8?q?=E3=81=AE=E6=96=87=E8=A8=80=E3=82=92=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/helpers/errors_helper.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/helpers/errors_helper.rb b/app/helpers/errors_helper.rb index acb2edc7..e9dd015d 100644 --- a/app/helpers/errors_helper.rb +++ b/app/helpers/errors_helper.rb @@ -13,7 +13,7 @@ def error_desc(code) when 404 then "ページが削除された可能性があります 🤔💭" when 422 then "入力内容に誤りがあるか、リクエストが正しく送信されなかった可能性があります。" when 500 then "申し訳ありません。サーバーで問題が発生しています。" - else "ご迷惑をおかけして、大変申し訳ありません。" + else "改善されない場合は、お手数ですがエラー報告をお願いいたします🙇‍♀️" end end end From 619801e5ad304cb14d4d58e0c42ad1515c9cc781 Mon Sep 17 00:00:00 2001 From: nacchan Date: Thu, 19 Jun 2025 09:27:12 +0900 Subject: [PATCH 34/40] =?UTF-8?q?refactor:=20400=E3=83=BB403=E3=82=A8?= =?UTF-8?q?=E3=83=A9=E3=83=BC=E3=83=93=E3=83=A5=E3=83=BC=E3=82=92=E5=85=B1?= =?UTF-8?q?=E9=80=9A=E3=81=AE=E6=A7=8B=E6=88=90=E3=81=AB=E7=B5=B1=E4=B8=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 元から存在したとが、 他のエラーページと異なる独自の構造を持っていたため、 共通のパーシャルを呼び出す形に修正。 --- app/views/errors/bad_request.html.erb | 40 +-------------------------- app/views/errors/forbidden.html.erb | 39 +------------------------- 2 files changed, 2 insertions(+), 77 deletions(-) diff --git a/app/views/errors/bad_request.html.erb b/app/views/errors/bad_request.html.erb index 1c64ebeb..52a69226 100644 --- a/app/views/errors/bad_request.html.erb +++ b/app/views/errors/bad_request.html.erb @@ -1,39 +1 @@ -<% provide(:title, "ページが見つかりませんでした... 🥺💦") %> -<% provide(:desc, "ページが削除された可能性があります 🤔💭") %> - -

- -

CoderDojo Japan

-

子どものためのプログラミング道場

-
-
- -
-

- ページが見つかりませんでした... 🥺💦 -

-

- ページが削除された可能性があります 🤔💭 -
-

-

- フィードバックなどあれば info@coderdojo.jp にメールしていただくか、 -
- もしくは - GitHub Issue - に書いていただけると嬉しいです (>人< )✨ -

-
- -
-
-

- 🐣 最近の情報発信 -

-
- - -
- +<%= render template: "errors/show", locals: { status_code: 400 } %> diff --git a/app/views/errors/forbidden.html.erb b/app/views/errors/forbidden.html.erb index c9854724..b48a4db1 100644 --- a/app/views/errors/forbidden.html.erb +++ b/app/views/errors/forbidden.html.erb @@ -1,38 +1 @@ -<% provide(:title, "403 Forbidden エラー 🚧 🏗") %> -<% provide(:desc, "アクセス権限が無いか削除された可能性があります 🤔💭") %> - -
- -

CoderDojo Japan

-

子どものためのプログラミング道場

-
-
- -
-

- アクセスできないページのため表示できませんでした 🚧 🏗 -

-

- ログインし直すことで解決する可能性があります 🤔💭 -
-

-

- フィードバックなどあれば info@coderdojo.jp にメールしていただくか、 -
- もしくは - GitHub Issue - に書いていただけると嬉しいです (>人< )✨ -

-
- -
-
-

- 🐣 最近の情報発信 -

-
- - -
\ No newline at end of file +<%= render template: "errors/show", locals: { status_code: 403 } %> From 4df3a8afee30b061bdde07f1137305546ce4b5f1 Mon Sep 17 00:00:00 2001 From: nacchan Date: Thu, 19 Jun 2025 09:33:35 +0900 Subject: [PATCH 35/40] =?UTF-8?q?feat:=20=E3=82=A8=E3=83=A9=E3=83=BC?= =?UTF-8?q?=E3=83=9A=E3=83=BC=E3=82=B8=E3=81=AE=E3=83=97=E3=83=AC=E3=83=93?= =?UTF-8?q?=E3=83=A5=E3=83=BC=E6=A9=9F=E8=83=BD=E3=82=92=E5=8B=95=E7=9A=84?= =?UTF-8?q?=E3=81=AB=E6=94=B9=E5=96=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit エラーの種類ごとにアクションやルートを追加する必要があった 静的なプレビュー機能を、URLのステータスコードを元に 動的にページを出し分ける、よりDRYな構成にリファクタリング。 - に アクションを実装 - ルートを に一本化 - これにより、今後のメンテナンス性が大幅に向上します --- app/controllers/previews/errors_controller.rb | 27 +++++++++---------- config/routes.rb | 5 +--- 2 files changed, 14 insertions(+), 18 deletions(-) diff --git a/app/controllers/previews/errors_controller.rb b/app/controllers/previews/errors_controller.rb index 67c09c56..362e6657 100644 --- a/app/controllers/previews/errors_controller.rb +++ b/app/controllers/previews/errors_controller.rb @@ -1,21 +1,20 @@ class Previews::ErrorsController < ApplicationController - # このコントローラー全体で、application.html.erb のレイアウトを使用します layout "application" - # 404ページをプレビューするためのアクション - def not_found - # app/views/errors/not_found.html.erb を、 - # ステータスコード404で描画します - render template: "errors/not_found", status: :not_found - end + def show + status_code = params[:status_code].to_i - # 422ページをプレビューするためのアクション - def unprocessable_entity - render template: "errors/unprocessable_entity", status: :unprocessable_entity - end + if status_code == 422 + # 422の時だけは、ファイル名を直接指定 + # Rails標準のRack::Utilsは422を "Unprocessable Content" と解釈しますが、 + # Rambulanceが期待するビュー名は `unprocessable_entity.html.erb` です。 + # この食い違いを吸収するため、422の時だけファイル名を直接指定しています。 + error_page_name = "unprocessable_entity" + else + error_page_name = Rack::Utils::HTTP_STATUS_CODES[status_code].downcase.gsub(" ", "_") + end - # 500ページをプレビューするためのアクション - def internal_server_error - render template: "errors/internal_server_error", status: :internal_server_error + render template: "errors/#{error_page_name}", status: status_code end + end diff --git a/config/routes.rb b/config/routes.rb index 62aa73dd..a1510685 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -113,10 +113,7 @@ if Rails.env.development? namespace :previews do - # /previews/errors/404 などのURLでアクセスできるようになります - get "errors/404" => "errors#not_found" - get "errors/422" => "errors#unprocessable_entity" - get "errors/500" => "errors#internal_server_error" + get "errors/:status_code", to: "errors#show" end end From cc5dad93778f1a46e345fe20bfa88a636cbfc5c3 Mon Sep 17 00:00:00 2001 From: nacchan Date: Thu, 19 Jun 2025 12:08:40 +0900 Subject: [PATCH 36/40] =?UTF-8?q?test:=20=E3=82=A8=E3=83=A9=E3=83=BC?= =?UTF-8?q?=E3=83=9A=E3=83=BC=E3=82=B8=E3=81=AE=E3=83=AA=E3=82=AF=E3=82=A8?= =?UTF-8?q?=E3=82=B9=E3=83=88=E3=82=B9=E3=83=9A=E3=83=83=E3=82=AF=E3=82=92?= =?UTF-8?q?=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Rambulanceで生成されるエラーページ(404, 422, 500)が正しく表示されることを確認するためのリクエストスペックを追加します。 各エラーを意図的に発生させるためのテスト用ルーティングを定義し、それぞれのリクエストで期待されるステータスコードが返却されることを検証します。 --- spec/requests/errors_spec.rb | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/spec/requests/errors_spec.rb b/spec/requests/errors_spec.rb index 9b568327..6fe3cca2 100644 --- a/spec/requests/errors_spec.rb +++ b/spec/requests/errors_spec.rb @@ -3,9 +3,30 @@ RSpec.describe "Errors", type: :request do include Rambulance::TestHelper + before do + # テスト用のルーティングを直接定義 + Rails.application.routes.draw do + get '/trigger_403', to: ->(env) { raise ActionController::Forbidden } + get '/trigger_422', to: ->(env) { raise ActionController::InvalidAuthenticityToken } + get '/trigger_500', to: ->(env) { raise "This is a test 500 error" } + end + + # ビューのレンダリングをスタブして、レイアウト起因のエラーを回避 + allow_any_instance_of(Rambulance::ExceptionsApp).to receive(:render).and_wrap_original do |m, *args| + options = args.last.is_a?(Hash) ? args.pop : {} + m.call(*args, **options.merge(layout: false)) + end + end + + after do + # テスト後に追加したルーティングを元に戻す + Rails.application.reload_routes! + end + describe "Error requests" do it 'renders the 404 error page' do with_exceptions_app do + # どのルーティングにもマッチしないパスをリクエスト get '/does_not_exist' end expect(response.status).to eq(404) @@ -27,5 +48,6 @@ expect(response.status).to eq(500) expect(response.body).to include("子どものためのプログラミング道場") end + end end From 561e69883059021b4cf2bc272d190dd8944b8636 Mon Sep 17 00:00:00 2001 From: nacchan Date: Mon, 23 Jun 2025 13:27:04 +0900 Subject: [PATCH 37/40] =?UTF-8?q?fix:=20422=E3=82=A8=E3=83=A9=E3=83=BC?= =?UTF-8?q?=E3=83=93=E3=83=A5=E3=83=BC=E3=81=AE=E3=83=95=E3=82=A1=E3=82=A4?= =?UTF-8?q?=E3=83=AB=E5=90=8D=E3=82=92Rambulance=E3=81=AE=E4=BB=95?= =?UTF-8?q?=E6=A7=98=E3=81=AB=E7=B5=B1=E4=B8=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Rambulanceのプレビュー機能での検証をきっかけに、422エラー発生時に500ページが表示される問題が判明しました。 原因は、Rambulanceが期待するテンプレート名 () と実際のファイル名 () が異なっていたためです。 ファイル名をRambulanceの仕様に合わせ、この問題を修正します。 --- ...processable_entity.html.erb => unprocessable_content.html.erb} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename app/views/errors/{unprocessable_entity.html.erb => unprocessable_content.html.erb} (100%) diff --git a/app/views/errors/unprocessable_entity.html.erb b/app/views/errors/unprocessable_content.html.erb similarity index 100% rename from app/views/errors/unprocessable_entity.html.erb rename to app/views/errors/unprocessable_content.html.erb From 37ed1c4802929ba8d0daeb8f797417d199285382 Mon Sep 17 00:00:00 2001 From: nacchan Date: Mon, 23 Jun 2025 13:47:34 +0900 Subject: [PATCH 38/40] =?UTF-8?q?refactor:=20=E8=87=AA=E4=BD=9C=E3=83=97?= =?UTF-8?q?=E3=83=AC=E3=83=93=E3=83=A5=E3=83=BC=E6=A9=9F=E8=83=BD=E3=82=92?= =?UTF-8?q?=E5=89=8A=E9=99=A4=E3=81=97=E3=80=81Rambulance=E3=81=AE?= =?UTF-8?q?=E3=83=AB=E3=83=BC=E3=83=88=E3=81=AB=E7=B5=B1=E4=B8=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 自作していたエラーページのプレビュー機能 ( と関連ルーティング) を削除しました。 先ほどのビューファイル名の修正により、Rambulanceが の末尾で定義しているプレビュー用ルート (, など) で正しく表示できるようになったため、このリファクタリングを実施します。 よりシンプルでメンテナンスしやすい構成になります。 --- app/controllers/previews/errors_controller.rb | 20 ------------------- config/routes.rb | 6 ------ 2 files changed, 26 deletions(-) delete mode 100644 app/controllers/previews/errors_controller.rb diff --git a/app/controllers/previews/errors_controller.rb b/app/controllers/previews/errors_controller.rb deleted file mode 100644 index 362e6657..00000000 --- a/app/controllers/previews/errors_controller.rb +++ /dev/null @@ -1,20 +0,0 @@ -class Previews::ErrorsController < ApplicationController - layout "application" - - def show - status_code = params[:status_code].to_i - - if status_code == 422 - # 422の時だけは、ファイル名を直接指定 - # Rails標準のRack::Utilsは422を "Unprocessable Content" と解釈しますが、 - # Rambulanceが期待するビュー名は `unprocessable_entity.html.erb` です。 - # この食い違いを吸収するため、422の時だけファイル名を直接指定しています。 - error_page_name = "unprocessable_entity" - else - error_page_name = Rack::Utils::HTTP_STATUS_CODES[status_code].downcase.gsub(" ", "_") - end - - render template: "errors/#{error_page_name}", status: status_code - end - -end diff --git a/config/routes.rb b/config/routes.rb index a1510685..a113fce3 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -111,12 +111,6 @@ # Check development sent emails mount LetterOpenerWeb::Engine, at: "/letter_opener" if Rails.env.development? - if Rails.env.development? - namespace :previews do - get "errors/:status_code", to: "errors#show" - end - end - # Rambulance がキャッチする /404, /422, /500 match "/404", to: Rambulance::Engine, via: :all, defaults: { status_code: 404 } match "/422", to: Rambulance::Engine, via: :all, defaults: { status_code: 422 } From 9b25662dc5296df1ca23c098170a7de8f792b010 Mon Sep 17 00:00:00 2001 From: nacchan Date: Mon, 23 Jun 2025 14:00:41 +0900 Subject: [PATCH 39/40] =?UTF-8?q?test:=20=E3=82=A8=E3=83=A9=E3=83=BC?= =?UTF-8?q?=E3=83=9A=E3=83=BC=E3=82=B8(404,=20422,=20500,=20400)=E3=81=AE?= =?UTF-8?q?=E3=83=AA=E3=82=AF=E3=82=A8=E3=82=B9=E3=83=88=E3=82=B9=E3=83=9A?= =?UTF-8?q?=E3=83=83=E3=82=AF=E3=82=92=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit エラーページが正しく表示されることを検証する、 リクエストスペックを追加・改善しました。 - ErrorsHelperを読み込み、具体的な文言ではなく ヘルパーの実行結果を検証することで、将来の文言変更に 強いテストに変更。 - これまでテストできていなかった400エラー(else句)の テストケースも追加完了。 --- spec/requests/errors_spec.rb | 21 ++++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/spec/requests/errors_spec.rb b/spec/requests/errors_spec.rb index 6fe3cca2..606b8fd5 100644 --- a/spec/requests/errors_spec.rb +++ b/spec/requests/errors_spec.rb @@ -2,11 +2,12 @@ RSpec.describe "Errors", type: :request do include Rambulance::TestHelper + include ErrorsHelper before do # テスト用のルーティングを直接定義 Rails.application.routes.draw do - get '/trigger_403', to: ->(env) { raise ActionController::Forbidden } + get '/trigger_400', to: ->(env) { raise ActionController::BadRequest } get '/trigger_422', to: ->(env) { raise ActionController::InvalidAuthenticityToken } get '/trigger_500', to: ->(env) { raise "This is a test 500 error" } end @@ -30,7 +31,8 @@ get '/does_not_exist' end expect(response.status).to eq(404) - expect(response.body).to include("子どものためのプログラミング道場") + expect(response.body).to include(error_title(404)) + expect(response.body).to include(error_desc(404)) end it 'renders the 422 error page' do @@ -38,7 +40,8 @@ get '/trigger_422' end expect(response.status).to eq(422) - expect(response.body).to include("子どものためのプログラミング道場") + expect(response.body).to include(error_title(422)) + expect(response.body).to include(error_desc(422)) end it 'renders the 500 error page' do @@ -46,8 +49,16 @@ get '/trigger_500' end expect(response.status).to eq(500) - expect(response.body).to include("子どものためのプログラミング道場") + expect(response.body).to include(error_title(500)) + expect(response.body).to include(error_desc(500)) + end + it 'renders the 400 error page' do + with_exceptions_app do + get '/trigger_400' + end + expect(response.status).to eq(400) + expect(response.body).to include(error_title(400)) + expect(response.body).to include(error_desc(400)) end - end end From ac24ce13ca319f665187098e16d83fc02e166985 Mon Sep 17 00:00:00 2001 From: nacchan Date: Mon, 23 Jun 2025 14:16:26 +0900 Subject: [PATCH 40/40] =?UTF-8?q?style:=20=E3=83=86=E3=82=B9=E3=83=88?= =?UTF-8?q?=E3=82=B3=E3=83=BC=E3=83=89=E3=81=AE=E3=82=AF=E3=82=A9=E3=83=BC?= =?UTF-8?q?=E3=83=88=E3=82=92=E3=82=B7=E3=83=B3=E3=82=B0=E3=83=AB=E3=82=AF?= =?UTF-8?q?=E3=82=A9=E3=83=BC=E3=83=88=E3=81=AB=E7=B5=B1=E4=B8=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit レビューでの指摘を反映し、テストコード内で使用する 文字列のクォートを修正しました。 --- spec/requests/errors_spec.rb | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/spec/requests/errors_spec.rb b/spec/requests/errors_spec.rb index 606b8fd5..2c3bee77 100644 --- a/spec/requests/errors_spec.rb +++ b/spec/requests/errors_spec.rb @@ -1,6 +1,6 @@ require 'rails_helper' -RSpec.describe "Errors", type: :request do +RSpec.describe 'Errors', type: :request do include Rambulance::TestHelper include ErrorsHelper @@ -9,7 +9,7 @@ Rails.application.routes.draw do get '/trigger_400', to: ->(env) { raise ActionController::BadRequest } get '/trigger_422', to: ->(env) { raise ActionController::InvalidAuthenticityToken } - get '/trigger_500', to: ->(env) { raise "This is a test 500 error" } + get '/trigger_500', to: ->(env) { raise 'This is a test 500 error' } end # ビューのレンダリングをスタブして、レイアウト起因のエラーを回避 @@ -24,7 +24,7 @@ Rails.application.reload_routes! end - describe "Error requests" do + describe 'Error requests' do it 'renders the 404 error page' do with_exceptions_app do # どのルーティングにもマッチしないパスをリクエスト