{"id":21749,"date":"2025-11-01T01:01:35","date_gmt":"2025-11-01T01:01:35","guid":{"rendered":"https:\/\/pokecon.jp\/job\/?p=21749"},"modified":"2025-11-01T01:01:35","modified_gmt":"2025-11-01T01:01:35","slug":"sentry-logs%e3%81%a7%e5%ae%9f%e7%8f%be%e3%81%99%e3%82%8brails%e3%82%a2%e3%83%97%e3%83%aa%e3%81%ae%e6%a7%8b%e9%80%a0%e5%8c%96%e3%83%ad%e3%82%ae%e3%83%b3%e3%82%b0","status":"publish","type":"post","link":"https:\/\/pokecon.jp\/job\/21749\/","title":{"rendered":"Sentry Logs\u3067\u5b9f\u73fe\u3059\u308bRails\u30a2\u30d7\u30ea\u306e\u69cb\u9020\u5316\u30ed\u30ae\u30f3\u30b0"},"content":{"rendered":"\n<\/p>\n<div>\n<h2 id=\"%E3%81%AF%E3%81%98%E3%82%81%E3%81%AB\" data-line=\"1\" class=\"code-line\">\n \u306f\u3058\u3081\u306b<\/h2>\n<p data-line=\"3\" class=\"code-line\">Rails\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u904b\u7528\u306b\u304a\u3044\u3066\u3001\u30ed\u30b0\u306e\u7ba1\u7406\u306f\u554f\u984c\u767a\u751f\u6642\u306e\u30c7\u30d0\u30c3\u30b0\u3084\u30b5\u30fc\u30d3\u30b9\u76e3\u8996\u306e\u305f\u3081\u306b\u91cd\u8981\u306a\u69cb\u6210\u8981\u7d20\u3067\u3059\u3002\u3057\u304b\u3057\u3001\u5f93\u6765\u306e\u30c6\u30ad\u30b9\u30c8\u30d9\u30fc\u30b9\u306e\u30ed\u30b0\u3067\u306f\u3001\u30a8\u30e9\u30fc\u767a\u751f\u6642\u306b\u8907\u6570\u306e\u30c4\u30fc\u30eb\u3092\u884c\u304d\u6765\u3057\u306a\u304c\u3089\u30ed\u30b0\u3092\u691c\u7d22\u3057\u3001\u539f\u56e0\u3092\u7279\u5b9a\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3057\u305f\u3002<\/p>\n<p data-line=\"5\" class=\"code-line\">\u3053\u306e\u8a18\u4e8b\u3067\u306f\u3001Sentry Logs \u3068 ActiveSupport::Notifications \u3092\u7d44\u307f\u5408\u308f\u305b\u3066\u3001\u69cb\u9020\u5316\u30ed\u30ae\u30f3\u30b0\u3092\u5b9f\u73fe\u3059\u308b\u65b9\u6cd5\u3092\u89e3\u8aac\u3057\u307e\u3059\u3002\u5b9f\u969b\u306e\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3067\u5c0e\u5165\u3057\u305f\u5b9f\u88c5\u30d1\u30bf\u30fc\u30f3\u3092\u7d39\u4ecb\u3057\u3001\u30cf\u30de\u3063\u305f\u30dd\u30a4\u30f3\u30c8\u3068\u89e3\u6c7a\u7b56\u3082\u5171\u6709\u3057\u307e\u3059\u3002<\/p>\n<h3 id=\"%E3%81%93%E3%81%AE%E8%A8%98%E4%BA%8B%E3%81%A7%E5%BE%97%E3%82%89%E3%82%8C%E3%82%8B%E3%81%93%E3%81%A8\" data-line=\"7\" class=\"code-line\">\n \u3053\u306e\u8a18\u4e8b\u3067\u5f97\u3089\u308c\u308b\u3053\u3068<\/h3>\n<ul data-line=\"9\" class=\"code-line\">\n<li data-line=\"9\" class=\"code-line\">Sentry Logs\u306e\u57fa\u672c\u7684\u306a\u4f7f\u3044\u65b9<\/li>\n<li data-line=\"10\" class=\"code-line\">ActiveSupport::Notifications\u3092\u6d3b\u7528\u3057\u305f\u69cb\u9020\u5316\u30ed\u30ae\u30f3\u30b0\u306e\u5b9f\u88c5\u65b9\u6cd5<\/li>\n<li data-line=\"11\" class=\"code-line\">Service\u30af\u30e9\u30b9\u306b\u304a\u3051\u308bLogSubscriber\u306e\u5b9f\u88c5\u30d1\u30bf\u30fc\u30f3<\/li>\n<li data-line=\"12\" class=\"code-line\">\u5b9f\u904b\u7528\u3067\u906d\u9047\u3057\u305f\u554f\u984c\u3068\u89e3\u6c7a\u7b56<\/li>\n<\/ul>\n<h3 id=\"%E5%89%8D%E6%8F%90%E6%9D%A1%E4%BB%B6\" data-line=\"14\" class=\"code-line\">\n \u524d\u63d0\u6761\u4ef6<\/h3>\n<ul data-line=\"16\" class=\"code-line\">\n<li data-line=\"16\" class=\"code-line\">Ruby on Rails 8.0<\/li>\n<li data-line=\"17\" class=\"code-line\">ActiveSupport::Notifications\u306e\u57fa\u672c\u7684\u306a\u77e5\u8b58<\/li>\n<\/ul>\n<h2 id=\"sentry-logs%E3%81%A8%E3%81%AF\" data-line=\"19\" class=\"code-line\">\n Sentry Logs\u3068\u306f<\/h2>\n<p data-line=\"21\" class=\"code-line\">Sentry Logs\u306f\u3001\u5f93\u6765\u306e\u30ed\u30b0\u7ba1\u7406\u30c4\u30fc\u30eb\u3068\u306f\u7570\u306a\u308a\u3001\u30a8\u30e9\u30fc\u3001\u30c8\u30ec\u30fc\u30b9\u3001\u30ea\u30d7\u30ec\u30a4\u306a\u3069\u4ed6\u306e\u30c6\u30ec\u30e1\u30c8\u30ea\u30fc\u3068\u7d71\u5408\u3055\u308c\u305f\u30ed\u30b0\u7ba1\u7406\u6a5f\u80fd\u3067\u3059\u3002<\/p>\n<p data-line=\"23\" class=\"code-line\"><span class=\"embed-block zenn-embedded zenn-embedded-card\"><iframe id=\"zenn-embedded__922db8b97a8c1\" src=\"https:\/\/embed.zenn.studio\/card#zenn-embedded__922db8b97a8c1\" data-content=\"https%3A%2F%2Fsentry.ichizoku.io%2Fblog%2Flogs-generally-available%2F\" frameborder=\"0\" scrolling=\"no\" loading=\"lazy\"><\/iframe><\/span><a target=\"_blank\" href=\"https:\/\/sentry.ichizoku.io\/blog\/logs-generally-available\/\" style=\"display:none\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">https:\/\/sentry.ichizoku.io\/blog\/logs-generally-available\/<\/a><\/p>\n<h3 id=\"%E4%B8%BB%E8%A6%81%E6%A9%9F%E8%83%BD\" data-line=\"25\" class=\"code-line\">\n \u4e3b\u8981\u6a5f\u80fd<\/h3>\n<p data-line=\"27\" class=\"code-line\"><strong>\u30e9\u30a4\u30d6\u30c6\u30fc\u30ea\u30f3\u30b0<\/strong><br \/>\u30ed\u30b0\u3092\u30ea\u30a2\u30eb\u30bf\u30a4\u30e0\u306b\u30b9\u30c8\u30ea\u30fc\u30df\u30f3\u30b0\u3057\u3001\u30c7\u30d7\u30ed\u30a4\u5f8c\u306e\u52d5\u4f5c\u78ba\u8a8d\u3084\u9577\u6642\u9593\u5b9f\u884c\u3055\u308c\u308b\u30b8\u30e7\u30d6\u306e\u76e3\u8996\u304c\u3067\u304d\u307e\u3059\u3002<\/p>\n<p data-line=\"30\" class=\"code-line\"><strong>\u30a2\u30e9\u30fc\u30c8\u6a5f\u80fd<\/strong><br \/>\u7279\u5b9a\u306e\u30d1\u30bf\u30fc\u30f3\uff08\u652f\u6255\u3044\u5931\u6557\u3001\u7570\u5e38\u306a\u51e6\u7406\u6642\u9593\u306a\u3069\uff09\u306b\u57fa\u3065\u3044\u3066\u30a2\u30e9\u30fc\u30c8\u3092\u767a\u706b\u3057\u3001\u30e6\u30fc\u30b6\u30fc\u304b\u3089\u306e\u5831\u544a\u524d\u306b\u554f\u984c\u3092\u691c\u77e5\u3067\u304d\u307e\u3059\u3002<\/p>\n<p data-line=\"33\" class=\"code-line\"><strong>\u30c0\u30c3\u30b7\u30e5\u30dc\u30fc\u30c9<\/strong><br \/>\u30ed\u30b0\u306e\u50be\u5411\u3092\u6642\u7cfb\u5217\u3067\u53ef\u8996\u5316\u3057\u3001\u7279\u5b9a\u306e\u6761\u4ef6\u4e0b\u3067\u306e\u30a8\u30e9\u30fc\u7387\u4e0a\u6607\u3084\u65b0\u6a5f\u80fd\u306b\u95a2\u9023\u3059\u308b\u30b9\u30d1\u30a4\u30af\u3092\u78ba\u8a8d\u3067\u304d\u307e\u3059\u3002<\/p>\n<h3 id=\"%E6%9C%80%E5%A4%A7%E3%81%AE%E7%89%B9%E5%BE%B4\" data-line=\"36\" class=\"code-line\">\n \u6700\u5927\u306e\u7279\u5fb4<\/h3>\n<p data-line=\"38\" class=\"code-line\">Sentry Logs\u306e\u6700\u5927\u306e\u7279\u5fb4\u306f\u3001\u30ed\u30b0\u304c\u4ed6\u306e\u30c6\u30ec\u30e1\u30c8\u30ea\u30fc\u3068\u7d71\u5408\u3055\u308c\u308b\u3053\u3068\u3067\u3059\u3002\u30a8\u30e9\u30fc\u767a\u751f\u6642\u306b\u3001\u305d\u306e\u30a8\u30e9\u30fc\u306b\u95a2\u9023\u3059\u308b\u30ed\u30b0\u3092\u540c\u3058\u753b\u9762\u3067\u78ba\u8a8d\u3067\u304d\u3001\u8907\u6570\u30c4\u30fc\u30eb\u9593\u306e\u30bf\u30d6\u5207\u308a\u66ff\u3048\u304c\u4e0d\u8981\u306b\u306a\u308a\u307e\u3059\u3002<\/p>\n<h3 id=\"%E5%88%A9%E7%94%A8%E6%9D%A1%E4%BB%B6%E3%81%A8%E6%96%99%E9%87%91\" data-line=\"41\" class=\"code-line\">\n \u5229\u7528\u6761\u4ef6\u3068\u6599\u91d1<\/h3>\n<p data-line=\"43\" class=\"code-line\">\u3059\u3079\u3066\u306eSentry\u30e6\u30fc\u30b6\u30fc\u306f\u67085GB\u3092\u7121\u6599\u3067\u5229\u7528\u3067\u304d\u3001\u8ffd\u52a0\u5206\u306f1GB\u3042\u305f\u308a$0.50\u3067\u3059\u300230\u65e5\u9593\u306e\u30ed\u30b0\u4fdd\u6301\u671f\u9593\u304c\u542b\u307e\u308c\u307e\u3059\u3002<\/p>\n<p data-line=\"45\" class=\"code-line\">\u307e\u305f\u3001Business\u30d7\u30e9\u30f3\u3067\u306f\u8ffd\u52a0\u306713\u30f6\u6708\u306e\u30b5\u30f3\u30d7\u30ea\u30f3\u30b0\u4fdd\u6301\u3082\u3042\u308a\u307e\u3059\u3002<\/p>\n<blockquote data-line=\"47\" class=\"code-line\">\n<p data-line=\"47\" class=\"code-line\">\u53c2\u8003:<\/p>\n<\/blockquote>\n<h4 id=\"aws-cloudwatch-logs%EF%BC%88%E6%9D%B1%E4%BA%AC%E3%83%AA%E3%83%BC%E3%82%B8%E3%83%A7%E3%83%B3%EF%BC%89%E3%81%A8%E3%81%AE%E6%AF%94%E8%BC%83\" data-line=\"53\" class=\"code-line\">\n AWS CloudWatch Logs\uff08\u6771\u4eac\u30ea\u30fc\u30b8\u30e7\u30f3\uff09\u3068\u306e\u6bd4\u8f03<\/h4>\n<p data-line=\"55\" class=\"code-line\">\u53c2\u8003\u3068\u3057\u3066\u3001AWS CloudWatch Logs\u306e\u6771\u4eac\u30ea\u30fc\u30b8\u30e7\u30f3\u3068\u306e\u6599\u91d1\u6bd4\u8f03\u3092\u793a\u3057\u307e\u3059\uff1a<\/p>\n<div class=\"s_table\"><table data-line=\"57\" class=\"code-line\">\n<thead data-line=\"57\" class=\"code-line\">\n<tr data-line=\"57\" class=\"code-line\">\n<th>\u30b5\u30fc\u30d3\u30b9<\/th>\n<th>\u7121\u6599\u67a0<\/th>\n<th>\u6599\u91d1<\/th>\n<th>\u5099\u8003<\/th>\n<\/tr>\n<\/thead>\n<tbody data-line=\"59\" class=\"code-line\">\n<tr data-line=\"59\" class=\"code-line\">\n<td><strong>Sentry Logs<\/strong><\/td>\n<td>\u67085GB<\/td>\n<td>$0.50\/GB<\/td>\n<td>30\u65e5\u4fdd\u6301\u542b\u3080<\/td>\n<\/tr>\n<tr data-line=\"60\" class=\"code-line\">\n<td><strong>CloudWatch Logs\uff08\u6a19\u6e96\uff09<\/strong><\/td>\n<td>\u67085GB<\/td>\n<td>\u53d6\u8fbc: $0.76\/GB<br \/>\u4fdd\u5b58: $0.033\/GB<\/td>\n<td>&#8211;<\/td>\n<\/tr>\n<tr data-line=\"61\" class=\"code-line\">\n<td><strong>CloudWatch Logs\uff08\u4f4e\u983b\u5ea6\uff09<\/strong><\/td>\n<td>\u67085GB<\/td>\n<td>\u53d6\u8fbc: $0.38\/GB<br \/>\u4fdd\u5b58: $0.033\/GB<\/td>\n<td>&#8211;<\/td>\n<\/tr>\n<\/tbody>\n<\/table><\/div>\n<aside class=\"msg message\"><span class=\"msg-symbol\">!<\/span><\/p>\n<div class=\"msg-content\">\n<p data-line=\"64\" class=\"code-line\"><strong>\u6599\u91d1\u4f53\u7cfb\u306e\u9055\u3044<\/strong><\/p>\n<p data-line=\"66\" class=\"code-line\">Sentry Logs\u306f1GB\u3042\u305f\u308a$0.50\u306e\u30b7\u30f3\u30d7\u30eb\u306a\u6599\u91d1\u4f53\u7cfb\u3067\u300130\u65e5\u9593\u306e\u4fdd\u6301\u671f\u9593\u304c\u542b\u307e\u308c\u307e\u3059\u3002CloudWatch Logs\u306f\u53d6\u308a\u8fbc\u307f\u3068\u4fdd\u5b58\u304c\u5225\u6599\u91d1\u3067\u3059\u304c\u3001\u9577\u671f\u4fdd\u5b58\u304c\u5fc5\u8981\u306a\u5834\u5408\u306b\u67d4\u8edf\u306b\u5bfe\u5fdc\u3067\u304d\u307e\u3059\u3002<\/p>\n<p data-line=\"68\" class=\"code-line\">Sentry Logs\u306e\u4e3b\u306a\u5229\u70b9\u306f\u3001\u30a8\u30e9\u30fc\u3001\u30c8\u30ec\u30fc\u30b9\u3001\u30ea\u30d7\u30ec\u30a4\u3068\u306e\u7d71\u5408\u3067\u3059\u3002\u3053\u308c\u306b\u3088\u308a\u3001\u8907\u6570\u306e\u30c4\u30fc\u30eb\u3092\u7d44\u307f\u5408\u308f\u305b\u308b\u30b3\u30b9\u30c8\u304c\u4e0d\u8981\u306b\u306a\u308a\u307e\u3059\u3002\u4e00\u65b9\u3001CloudWatch Logs\u306fAWS\u30a8\u30b3\u30b7\u30b9\u30c6\u30e0\u3068\u306e\u6df1\u3044\u7d71\u5408\u304c\u5f37\u307f\u3067\u3059\u3002<\/p>\n<p data-line=\"70\" class=\"code-line\">\u7528\u9014\u3068\u30b3\u30b9\u30c8\u8981\u4ef6\u306b\u5fdc\u3058\u3066\u9078\u629e\u3059\u308b\u3053\u3068\u304c\u91cd\u8981\u3067\u3059\u3002<\/p>\n<\/div>\n<\/aside>\n<blockquote data-line=\"73\" class=\"code-line\">\n<p data-line=\"73\" class=\"code-line\">\u53c2\u8003: <a target=\"_blank\" href=\"https:\/\/aws.amazon.com\/jp\/cloudwatch\/pricing\/\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">\u6599\u91d1 &#8211; Amazon CloudWatch | AWS<\/a><\/p>\n<\/blockquote>\n<blockquote data-line=\"75\" class=\"code-line\">\n<p data-line=\"75\" class=\"code-line\">\u95a2\u9023\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8:<\/p>\n<\/blockquote>\n<h2 id=\"rails%E3%81%A7%E3%81%AE%E5%9F%BA%E6%9C%AC%E7%9A%84%E3%81%AA%E4%BD%BF%E3%81%84%E6%96%B9\" data-line=\"79\" class=\"code-line\">\n Rails\u3067\u306e\u57fa\u672c\u7684\u306a\u4f7f\u3044\u65b9<\/h2>\n<h3 id=\"%E3%82%BB%E3%83%83%E3%83%88%E3%82%A2%E3%83%83%E3%83%97\" data-line=\"81\" class=\"code-line\">\n \u30bb\u30c3\u30c8\u30a2\u30c3\u30d7<\/h3>\n<p data-line=\"83\" class=\"code-line\">Gemfile\u306b\u8ffd\u52a0\u3057\u3066\u3001\u521d\u671f\u5316\u6642\u306b<code>enable_logs<\/code>\u3092<code>true<\/code>\u306b\u8a2d\u5b9a\u3057\u307e\u3059\u3002<\/p>\n<div class=\"code-block-container\">\n<pre class=\"language-ruby\"><code class=\"language-ruby code-line\" data-line=\"85\">\ngem <span class=\"token string-literal\"><span class=\"token string\">'sentry-ruby'<\/span><\/span>\ngem <span class=\"token string-literal\"><span class=\"token string\">'sentry-rails'<\/span><\/span>\n<\/code><\/pre>\n<\/div>\n<div class=\"code-block-container\">\n<pre class=\"language-ruby\"><code class=\"language-ruby code-line\" data-line=\"91\">\nSentry<span class=\"token punctuation\">.<\/span>init <span class=\"token keyword\">do<\/span> <span class=\"token operator\">|<\/span>config<span class=\"token operator\">|<\/span>\n  config<span class=\"token punctuation\">.<\/span>dsn <span class=\"token operator\">=<\/span> <span class=\"token constant\">ENV<\/span><span class=\"token punctuation\">[<\/span><span class=\"token string-literal\"><span class=\"token string\">'SENTRY_DSN'<\/span><\/span><span class=\"token punctuation\">]<\/span>\n  \n  config<span class=\"token punctuation\">.<\/span>enable_logs <span class=\"token operator\">=<\/span> <span class=\"token boolean\">true<\/span>\n  config<span class=\"token punctuation\">.<\/span>rails<span class=\"token punctuation\">.<\/span>structured_logging<span class=\"token punctuation\">.<\/span>enabled <span class=\"token operator\">=<\/span> <span class=\"token boolean\">true<\/span>\n\n  \n<span class=\"token keyword\">end<\/span>\n<\/code><\/pre>\n<\/div>\n<h3 id=\"%E5%9F%BA%E6%9C%AC%E7%9A%84%E3%81%AAapi\" data-line=\"103\" class=\"code-line\">\n \u57fa\u672c\u7684\u306aAPI<\/h3>\n<p data-line=\"105\" class=\"code-line\">\u660e\u793a\u7684\u306b\u30ed\u30b0\u3092\u9001\u4fe1\u3059\u308b\u5834\u5408\u306f\u3001<code>Sentry.logger<\/code> API\u3092\u4f7f\u7528\u3057\u307e\u3059\u3002<\/p>\n<div class=\"code-block-container\">\n<pre class=\"language-ruby\"><code class=\"language-ruby code-line\" data-line=\"107\">\nSentry<span class=\"token punctuation\">.<\/span>logger<span class=\"token punctuation\">.<\/span>info<span class=\"token punctuation\">(<\/span><span class=\"token string-literal\"><span class=\"token string\">\"\u30e6\u30fc\u30b6\u30fc\u304c\u30ed\u30b0\u30a4\u30f3\"<\/span><\/span><span class=\"token punctuation\">)<\/span>\nSentry<span class=\"token punctuation\">.<\/span>logger<span class=\"token punctuation\">.<\/span>error<span class=\"token punctuation\">(<\/span><span class=\"token string-literal\"><span class=\"token string\">\"\u652f\u6255\u3044\u51e6\u7406\u5931\u6557\"<\/span><\/span><span class=\"token punctuation\">,<\/span> <span class=\"token symbol\">order_id<\/span><span class=\"token operator\">:<\/span> <span class=\"token string-literal\"><span class=\"token string\">\"or_2342\"<\/span><\/span><span class=\"token punctuation\">)<\/span>\n\n\nSentry<span class=\"token punctuation\">.<\/span>logger<span class=\"token punctuation\">.<\/span>info<span class=\"token punctuation\">(<\/span>\n  <span class=\"token string-literal\"><span class=\"token string\">\"\u30a4\u30f3\u30dd\u30fc\u30c8\u51e6\u7406\u5b8c\u4e86\"<\/span><\/span><span class=\"token punctuation\">,<\/span>\n  <span class=\"token punctuation\">{<\/span>\n    <span class=\"token symbol\">supply_area_id<\/span><span class=\"token operator\">:<\/span> <span class=\"token number\">1<\/span><span class=\"token punctuation\">,<\/span>\n    <span class=\"token symbol\">processed_count<\/span><span class=\"token operator\">:<\/span> <span class=\"token number\">1000<\/span><span class=\"token punctuation\">,<\/span>\n    <span class=\"token symbol\">duration_ms<\/span><span class=\"token operator\">:<\/span> <span class=\"token number\">3500<\/span>\n  <span class=\"token punctuation\">}<\/span>\n<span class=\"token punctuation\">)<\/span>\n<\/code><\/pre>\n<\/div>\n<p data-line=\"123\" class=\"code-line\">\u4ee5\u4e0b\u306e\u3088\u3046\u306b\u8a18\u9332\u3055\u308c\u307e\u3059\u3002<\/p>\n<p data-line=\"125\" class=\"code-line\"><img decoding=\"async\" src=\"https:\/\/storage.googleapis.com\/zenn-user-upload\/1fcd4968bec2-20251031.png\" alt=\"Logs\" class=\"md-img\" loading=\"lazy\"\/><\/p>\n<p data-line=\"127\" class=\"code-line\">\u6e21\u3057\u305f\u5c5e\u6027\u3067\u30d5\u30a3\u30eb\u30bf\u30ea\u30f3\u30b0\u3067\u304d\u307e\u3059\u3002<\/p>\n<p data-line=\"129\" class=\"code-line\"><img decoding=\"async\" src=\"https:\/\/storage.googleapis.com\/zenn-user-upload\/0ea86f3f20a2-20251031.png\" alt=\"\u30d5\u30a3\u30eb\u30bf\u30ea\u30f3\u30b0\" class=\"md-img\" loading=\"lazy\"\/><\/p>\n<h3 id=\"%E8%87%AA%E5%8B%95%E3%82%AD%E3%83%A3%E3%83%97%E3%83%81%E3%83%A3\" data-line=\"131\" class=\"code-line\">\n \u81ea\u52d5\u30ad\u30e3\u30d7\u30c1\u30e3<\/h3>\n<p data-line=\"133\" class=\"code-line\">Rails\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u30a4\u30d9\u30f3\u30c8\uff08ActiveRecord\u30af\u30a8\u30ea\u3001\u30b3\u30f3\u30c8\u30ed\u30fc\u30e9\u30a2\u30af\u30b7\u30e7\u30f3\u306a\u3069\uff09\u3082\u81ea\u52d5\u7684\u306b\u30ad\u30e3\u30d7\u30c1\u30e3\u3055\u308c\u307e\u3059\u3002\u305f\u3060\u3057\u3001<a target=\"_blank\" href=\"https:\/\/docs.sentry.io\/platforms\/ruby\/guides\/rails\/logs\/#structured-logging-subscribers\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">\u30c7\u30d5\u30a9\u30eb\u30c8\u3067\u306fActiveRecord\u3068ActionController\u306e\u307f\u304c\u6709\u52b9\u3067\u3059\u3002<\/a><\/p>\n<div class=\"code-block-container\">\n<p><span class=\"code-block-filename\">config\/initializers\/sentry.rb<\/span><\/p>\n<pre class=\"language-ruby\"><code class=\"language-ruby code-line\" data-line=\"135\">Sentry<span class=\"token punctuation\">.<\/span>init <span class=\"token keyword\">do<\/span> <span class=\"token operator\">|<\/span>config<span class=\"token operator\">|<\/span>\n  \n\n  config<span class=\"token punctuation\">.<\/span>enable_logs <span class=\"token operator\">=<\/span> <span class=\"token boolean\">true<\/span>\n  config<span class=\"token punctuation\">.<\/span>rails<span class=\"token punctuation\">.<\/span>structured_logging<span class=\"token punctuation\">.<\/span>enabled <span class=\"token operator\">=<\/span> <span class=\"token boolean\">true<\/span>\n  config<span class=\"token punctuation\">.<\/span>rails<span class=\"token punctuation\">.<\/span>structured_logging<span class=\"token punctuation\">.<\/span>subscribers <span class=\"token operator\">=<\/span> <span class=\"token punctuation\">{<\/span>\n    <span class=\"token symbol\">active_record<\/span><span class=\"token operator\">:<\/span> Sentry<span class=\"token double-colon punctuation\">::<\/span>Rails<span class=\"token double-colon punctuation\">::<\/span>LogSubscribers<span class=\"token double-colon punctuation\">::<\/span>ActiveRecordSubscriber<span class=\"token punctuation\">,<\/span>\n    <span class=\"token symbol\">action_controller<\/span><span class=\"token operator\">:<\/span> Sentry<span class=\"token double-colon punctuation\">::<\/span>Rails<span class=\"token double-colon punctuation\">::<\/span>LogSubscribers<span class=\"token double-colon punctuation\">::<\/span>ActionControllerSubscriber<span class=\"token punctuation\">,<\/span>\n    <span class=\"token symbol\">active_job<\/span><span class=\"token operator\">:<\/span> Sentry<span class=\"token double-colon punctuation\">::<\/span>Rails<span class=\"token double-colon punctuation\">::<\/span>LogSubscribers<span class=\"token double-colon punctuation\">::<\/span>ActiveJobSubscriber<span class=\"token punctuation\">,<\/span>       \n    <span class=\"token symbol\">action_mailer<\/span><span class=\"token operator\">:<\/span> Sentry<span class=\"token double-colon punctuation\">::<\/span>Rails<span class=\"token double-colon punctuation\">::<\/span>LogSubscribers<span class=\"token double-colon punctuation\">::<\/span>ActionMailerSubscriber  \n  <span class=\"token punctuation\">}<\/span>\n<span class=\"token keyword\">end<\/span>\n<\/code><\/pre>\n<\/div>\n<p data-line=\"150\" class=\"code-line\">ActionController\u306e\u307f\u6709\u52b9\u306b\u3059\u308b\u306a\u3089<\/p>\n<div class=\"code-block-container\">\n<p><span class=\"code-block-filename\">config\/initializers\/sentry.rb<\/span><\/p>\n<pre class=\"language-ruby\"><code class=\"language-ruby code-line\" data-line=\"152\">Sentry<span class=\"token punctuation\">.<\/span>init <span class=\"token keyword\">do<\/span> <span class=\"token operator\">|<\/span>config<span class=\"token operator\">|<\/span>\n  \n\n  config<span class=\"token punctuation\">.<\/span>enable_logs <span class=\"token operator\">=<\/span> <span class=\"token boolean\">true<\/span>\n  config<span class=\"token punctuation\">.<\/span>rails<span class=\"token punctuation\">.<\/span>structured_logging<span class=\"token punctuation\">.<\/span>enabled <span class=\"token operator\">=<\/span> <span class=\"token boolean\">true<\/span>\n  config<span class=\"token punctuation\">.<\/span>rails<span class=\"token punctuation\">.<\/span>structured_logging<span class=\"token punctuation\">.<\/span>subscribers <span class=\"token operator\">=<\/span> <span class=\"token punctuation\">{<\/span>\n    <span class=\"token symbol\">action_controller<\/span><span class=\"token operator\">:<\/span> Sentry<span class=\"token double-colon punctuation\">::<\/span>Rails<span class=\"token double-colon punctuation\">::<\/span>LogSubscribers<span class=\"token double-colon punctuation\">::<\/span>ActionControllerSubscriber<span class=\"token punctuation\">,<\/span>\n  <span class=\"token punctuation\">}<\/span>\n<span class=\"token keyword\">end<\/span>\n<\/code><\/pre>\n<\/div>\n<h3 id=\"%E3%83%87%E3%83%BC%E3%82%BF%E4%BF%9D%E8%AD%B7\" data-line=\"164\" class=\"code-line\">\n \u30c7\u30fc\u30bf\u4fdd\u8b77<\/h3>\n<p data-line=\"166\" class=\"code-line\">Rails\u306e<code>filter_parameters<\/code>\u8a2d\u5b9a\u304c\u81ea\u52d5\u7684\u306b\u9069\u7528\u3055\u308c\u3001\u30d1\u30b9\u30ef\u30fc\u30c9\u3084\u30af\u30ec\u30b8\u30c3\u30c8\u30ab\u30fc\u30c9\u756a\u53f7\u306a\u3069\u306e\u6a5f\u5bc6\u30c7\u30fc\u30bf\u304c\u30d5\u30a3\u30eb\u30bf\u30ea\u30f3\u30b0\u3055\u308c\u307e\u3059\u3002<\/p>\n<div class=\"code-block-container\">\n<p><span class=\"code-block-filename\">config\/initializers\/filter_parameter_logging.rb<\/span><\/p>\n<pre class=\"language-ruby\"><code class=\"language-ruby code-line\" data-line=\"168\">Rails<span class=\"token punctuation\">.<\/span>application<span class=\"token punctuation\">.<\/span>config<span class=\"token punctuation\">.<\/span>filter_parameters <span class=\"token operator\">+=<\/span> <span class=\"token punctuation\">[<\/span>\n  <span class=\"token symbol\">:passw<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token symbol\">:email<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token symbol\">:secret<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token symbol\">:token<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token symbol\">:_key<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token symbol\">:crypt<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token symbol\">:salt<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token symbol\">:certificate<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token symbol\">:otp<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token symbol\">:ssn<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token symbol\">:cvv<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token symbol\">:cvc<\/span>\n<span class=\"token punctuation\">]<\/span>\n<\/code><\/pre>\n<\/div>\n<h2 id=\"%E5%AE%9F%E8%B7%B5%3A-applicationservice%E3%81%A7%E3%81%AE%E6%A7%8B%E9%80%A0%E5%8C%96%E3%83%AD%E3%82%AE%E3%83%B3%E3%82%B0%E5%AE%9F%E8%A3%85\" data-line=\"174\" class=\"code-line\">\n \u5b9f\u8df5: ApplicationService\u3067\u306e\u69cb\u9020\u5316\u30ed\u30ae\u30f3\u30b0\u5b9f\u88c5<\/h2>\n<p data-line=\"176\" class=\"code-line\">\u3053\u3053\u304b\u3089\u306f\u3001\u5b9f\u969b\u306e\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3067Service\u30af\u30e9\u30b9\u306b\u69cb\u9020\u5316\u30ed\u30ae\u30f3\u30b0\u3092\u5c0e\u5165\u3057\u305f\u5b9f\u88c5\u30d1\u30bf\u30fc\u30f3\u3092\u7d39\u4ecb\u3057\u307e\u3059\u3002<\/p>\n<h3 id=\"%E8%A8%AD%E8%A8%88%E6%96%B9%E9%87%9D\" data-line=\"178\" class=\"code-line\">\n \u8a2d\u8a08\u65b9\u91dd<\/h3>\n<p data-line=\"180\" class=\"code-line\">Service\u30af\u30e9\u30b9\u306e\u5b9f\u884c\u72b6\u6cc1\u3092Sentry Logs\u3067\u8a18\u9332\u3059\u308b\u969b\u3001\u4ee5\u4e0b\u306e\u65b9\u91dd\u3067\u8a2d\u8a08\u3057\u307e\u3057\u305f\uff1a<\/p>\n<ol data-line=\"182\" class=\"code-line\">\n<li data-line=\"182\" class=\"code-line\">\n<p data-line=\"182\" class=\"code-line\"><strong>\u8a18\u9332\u3059\u3079\u304d\u60c5\u5831\u3092\u660e\u78ba\u306b\u3059\u308b<\/strong><\/p>\n<ul data-line=\"183\" class=\"code-line\">\n<li data-line=\"183\" class=\"code-line\">\u30b5\u30fc\u30d3\u30b9\u306e\u5b9f\u884c\u958b\u59cb\uff08perform\uff09<\/li>\n<li data-line=\"184\" class=\"code-line\">\u30b5\u30fc\u30d3\u30b9\u306e\u6210\u529f\uff08success\uff09<\/li>\n<li data-line=\"185\" class=\"code-line\">\u30b5\u30fc\u30d3\u30b9\u306e\u5931\u6557\uff08failure\uff09<\/li>\n<li data-line=\"186\" class=\"code-line\">\u30b5\u30fc\u30d3\u30b9\u306e\u9032\u6357\u5831\u544a\uff08report\uff09<\/li>\n<\/ul>\n<\/li>\n<li data-line=\"188\" class=\"code-line\">\n<p data-line=\"188\" class=\"code-line\"><strong>ActiveSupport::Notifications\u306e\u6d3b\u7528<\/strong><\/p>\n<p data-line=\"190\" class=\"code-line\">Sentry Logs\u306e\u30b5\u30d6\u30b9\u30af\u30e9\u30a4\u30d0 <code>Sentry::Rails::LogSubscriber<\/code> \u306fRails\u6a19\u6e96\u306e<code>ActiveSupport::LogSubscriber<\/code>\u3092\u7d99\u627f\u3057\u3066\u4f5c\u3089\u308c\u3066\u3044\u307e\u3059\u3002<code>ActiveSupport::LogSubscriber<\/code> \u306f <code>ActiveSupport::Notifications<\/code> \u3092\u5229\u7528\u3057\u3066\u30ed\u30b0\u51fa\u529b\u3059\u308b\u305f\u3081\u306e\u4ed5\u7d44\u307f\u3067\u3001\u901a\u77e5\u30a4\u30d9\u30f3\u30c8\u304c\u767a\u884c\u3055\u308c\u308b\u3068\u81ea\u52d5\u7684\u306b\u5bfe\u5fdc\u3059\u308b\u30e1\u30bd\u30c3\u30c9\u304c\u547c\u3073\u51fa\u3055\u308c\u307e\u3059\u3002<\/p>\n<p data-line=\"192\" class=\"code-line\">\u3053\u306e\u6a19\u6e96\u7684\u306a\u4ed5\u7d44\u307f\u3092\u4f7f\u7528\u3059\u308b\u3053\u3068\u3067\u3001\u4ee5\u4e0b\u306e\u5229\u70b9\u304c\u3042\u308a\u307e\u3059\uff1a<\/p>\n<ul data-line=\"193\" class=\"code-line\">\n<li data-line=\"193\" class=\"code-line\">Rails\u306e\u6a19\u6e96\u30d1\u30bf\u30fc\u30f3\u306b\u5f93\u3063\u305f\u5b9f\u88c5<\/li>\n<li data-line=\"194\" class=\"code-line\">\u30ed\u30ae\u30f3\u30b0\u30ed\u30b8\u30c3\u30af\u3068\u30d3\u30b8\u30cd\u30b9\u30ed\u30b8\u30c3\u30af\u306e\u5206\u96e2<\/li>\n<li data-line=\"195\" class=\"code-line\">\n<code>Sentry::Rails::LogSubscriber<\/code>\u3068\u306e\u81ea\u7136\u306a\u7d71\u5408<\/li>\n<\/ul>\n<blockquote data-line=\"197\" class=\"code-line\">\n<p data-line=\"197\" class=\"code-line\">\u53c2\u8003: <a target=\"_blank\" href=\"https:\/\/api.rubyonrails.org\/classes\/ActiveSupport\/LogSubscriber.html\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">ActiveSupport::LogSubscriber &#8211; Rails API<\/a><\/p>\n<\/blockquote>\n<\/li>\n<li data-line=\"199\" class=\"code-line\">\n<p data-line=\"199\" class=\"code-line\"><strong>\u6a5f\u5bc6\u60c5\u5831\u306e\u30d5\u30a3\u30eb\u30bf\u30ea\u30f3\u30b0<\/strong><\/p>\n<ul data-line=\"200\" class=\"code-line\">\n<li data-line=\"200\" class=\"code-line\">\n<code>Sentry::Rails::LogSubscribers::ParameterFilter<\/code>\u3092\u4f7f\u7528<\/li>\n<li data-line=\"201\" class=\"code-line\">Rails\u306e<code>filter_parameters<\/code>\u8a2d\u5b9a\u3092\u81ea\u52d5\u9069\u7528<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n<h3 id=\"applicationservice%E3%81%AE%E6%8B%A1%E5%BC%B5\" data-line=\"203\" class=\"code-line\">\n ApplicationService\u306e\u62e1\u5f35<\/h3>\n<p data-line=\"205\" class=\"code-line\">\u307e\u305a\u3001\u57fa\u5e95\u30af\u30e9\u30b9\u306e<code>ApplicationService<\/code>\u3067\u3001ActiveSupport::Notifications\u3067\u30a4\u30d9\u30f3\u30c8\u3092\u767a\u884c\u3059\u308b\u3088\u3046\u306b\u3057\u307e\u3059\u3002<\/p>\n<div class=\"code-block-container\">\n<p><span class=\"code-block-filename\">app\/services\/application_service.rb<\/span><\/p>\n<pre class=\"language-ruby\"><code class=\"language-ruby code-line\" data-line=\"207\"><span class=\"token keyword\">class<\/span> <span class=\"token class-name\">ApplicationService<\/span>\n  <span class=\"token keyword\">include<\/span> ActiveModel<span class=\"token double-colon punctuation\">::<\/span>Model\n  <span class=\"token keyword\">include<\/span> ActiveModel<span class=\"token double-colon punctuation\">::<\/span>Attributes\n  <span class=\"token keyword\">include<\/span> ActiveModel<span class=\"token double-colon punctuation\">::<\/span>Validations\n\n  Result <span class=\"token operator\">=<\/span> Data<span class=\"token punctuation\">.<\/span>define<span class=\"token punctuation\">(<\/span><span class=\"token symbol\">:success<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token symbol\">:data<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token symbol\">:errors<\/span><span class=\"token punctuation\">)<\/span>\n\n  <span class=\"token keyword\">class<\/span> <span class=\"token operator\"> <span class=\"token keyword\">self<\/span>\n    <span class=\"token keyword\">def<\/span> <span class=\"token method-definition\"><span class=\"token function\">perform<\/span><\/span><span class=\"token punctuation\">(<\/span><span class=\"token operator\">**<\/span>attributes<span class=\"token punctuation\">,<\/span> <span class=\"token operator\">&amp;<\/span>block<span class=\"token punctuation\">)<\/span>\n      payload <span class=\"token operator\">=<\/span> <span class=\"token punctuation\">{<\/span>\n        <span class=\"token symbol\">service_class<\/span><span class=\"token operator\">:<\/span> <span class=\"token keyword\">self<\/span><span class=\"token punctuation\">,<\/span>\n        <span class=\"token symbol\">attributes<\/span><span class=\"token operator\">:<\/span> attributes\n      <span class=\"token punctuation\">}<\/span>\n      service <span class=\"token operator\">=<\/span> <span class=\"token keyword\">new<\/span><span class=\"token punctuation\">(<\/span><span class=\"token operator\">**<\/span>attributes<span class=\"token punctuation\">)<\/span>\n      ActiveSupport<span class=\"token double-colon punctuation\">::<\/span>Notifications<span class=\"token punctuation\">.<\/span>instrument<span class=\"token punctuation\">(<\/span><span class=\"token string-literal\"><span class=\"token string\">\"perform.application_service\"<\/span><\/span><span class=\"token punctuation\">,<\/span> payload<span class=\"token punctuation\">)<\/span> <span class=\"token keyword\">do<\/span> <span class=\"token operator\">|<\/span>payload<span class=\"token operator\">|<\/span>\n        <span class=\"token keyword\">if<\/span> service<span class=\"token punctuation\">.<\/span>valid<span class=\"token operator\">?<\/span>\n          service<span class=\"token punctuation\">.<\/span>perform<span class=\"token punctuation\">(<\/span><span class=\"token operator\">&amp;<\/span>block<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">.<\/span>tap <span class=\"token keyword\">do<\/span> <span class=\"token operator\">|<\/span>result<span class=\"token operator\">|<\/span>\n            payload<span class=\"token punctuation\">[<\/span><span class=\"token symbol\">:result<\/span><span class=\"token punctuation\">]<\/span> <span class=\"token operator\">=<\/span> result\n          <span class=\"token keyword\">end<\/span>\n        <span class=\"token keyword\">else<\/span>\n          payload<span class=\"token punctuation\">[<\/span><span class=\"token symbol\">:result<\/span><span class=\"token punctuation\">]<\/span> <span class=\"token operator\">=<\/span> <span class=\"token class-name\">Result<\/span><span class=\"token punctuation\">.<\/span><span class=\"token keyword\">new<\/span><span class=\"token punctuation\">(<\/span><span class=\"token symbol\">success<\/span><span class=\"token operator\">:<\/span> <span class=\"token boolean\">false<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token symbol\">data<\/span><span class=\"token operator\">:<\/span> <span class=\"token keyword\">nil<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token symbol\">errors<\/span><span class=\"token operator\">:<\/span> service<span class=\"token punctuation\">.<\/span>errors<span class=\"token punctuation\">)<\/span>\n        <span class=\"token keyword\">end<\/span>\n      <span class=\"token keyword\">end<\/span>\n    <span class=\"token keyword\">end<\/span>\n\n    <span class=\"token keyword\">protected<\/span> <span class=\"token symbol\">:new<\/span>\n  <span class=\"token keyword\">end<\/span>\n\n  <span class=\"token keyword\">protected<\/span>\n\n  <span class=\"token keyword\">def<\/span> <span class=\"token method-definition\"><span class=\"token function\">perform<\/span><\/span><span class=\"token punctuation\">(<\/span><span class=\"token operator\">&amp;<\/span>block<span class=\"token punctuation\">)<\/span>\n    <span class=\"token keyword\">raise<\/span> NoMethodError<span class=\"token punctuation\">,<\/span> <span class=\"token string-literal\"><span class=\"token string\">\"The `call` method must be implemented in <\/span><span class=\"token interpolation\"><span class=\"token delimiter punctuation\">#{<\/span><span class=\"token content\"><span class=\"token keyword\">self<\/span><span class=\"token punctuation\">.<\/span><span class=\"token keyword\">class<\/span><span class=\"token punctuation\">.<\/span>name<\/span><span class=\"token delimiter punctuation\">}<\/span><\/span><span class=\"token string\">\"<\/span><\/span>\n  <span class=\"token keyword\">end<\/span>\n\n  <span class=\"token keyword\">private<\/span>\n\n  <span class=\"token keyword\">def<\/span> <span class=\"token method-definition\"><span class=\"token function\">success<\/span><\/span><span class=\"token operator\">!<\/span><span class=\"token punctuation\">(<\/span><span class=\"token operator\">**<\/span>data<span class=\"token punctuation\">)<\/span>\n    <span class=\"token class-name\">Result<\/span><span class=\"token punctuation\">.<\/span><span class=\"token keyword\">new<\/span><span class=\"token punctuation\">(<\/span><span class=\"token symbol\">success<\/span><span class=\"token operator\">:<\/span> <span class=\"token boolean\">true<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token symbol\">data<\/span><span class=\"token operator\">:<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token symbol\">errors<\/span><span class=\"token operator\">:<\/span><span class=\"token punctuation\">)<\/span>\n  <span class=\"token keyword\">end<\/span>\n\n  <span class=\"token keyword\">def<\/span> <span class=\"token method-definition\"><span class=\"token function\">fail<\/span><\/span><span class=\"token operator\">!<\/span><span class=\"token punctuation\">(<\/span><span class=\"token operator\">**<\/span>data<span class=\"token punctuation\">)<\/span>\n    <span class=\"token class-name\">Result<\/span><span class=\"token punctuation\">.<\/span><span class=\"token keyword\">new<\/span><span class=\"token punctuation\">(<\/span><span class=\"token symbol\">success<\/span><span class=\"token operator\">:<\/span> <span class=\"token boolean\">false<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token symbol\">data<\/span><span class=\"token operator\">:<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token symbol\">errors<\/span><span class=\"token operator\">:<\/span><span class=\"token punctuation\">)<\/span>\n  <span class=\"token keyword\">end<\/span>\n\n  <span class=\"token keyword\">def<\/span> <span class=\"token method-definition\"><span class=\"token function\">info<\/span><\/span><span class=\"token punctuation\">(<\/span><span class=\"token operator\">**<\/span>data<span class=\"token punctuation\">)<\/span>\n    ActiveSupport<span class=\"token double-colon punctuation\">::<\/span>Notifications<span class=\"token punctuation\">.<\/span>instrument<span class=\"token punctuation\">(<\/span>\n      <span class=\"token string-literal\"><span class=\"token string\">\"info.application_service\"<\/span><\/span><span class=\"token punctuation\">,<\/span>\n      <span class=\"token symbol\">service_class<\/span><span class=\"token operator\">:<\/span> <span class=\"token keyword\">self<\/span><span class=\"token punctuation\">.<\/span><span class=\"token keyword\">class<\/span><span class=\"token punctuation\">,<\/span>\n      <span class=\"token symbol\">attributes<\/span><span class=\"token operator\">:<\/span> attributes<span class=\"token punctuation\">,<\/span>\n      <span class=\"token symbol\">data<\/span><span class=\"token operator\">:<\/span> data\n    <span class=\"token punctuation\">)<\/span>\n  <span class=\"token keyword\">end<\/span>\n<span class=\"token keyword\">end<\/span>\n<\/span><\/code><\/pre>\n<\/div>\n<aside class=\"msg message\"><span class=\"msg-symbol\">!<\/span><\/p>\n<div class=\"msg-content\">\n<p data-line=\"264\" class=\"code-line\"><strong>\u30dd\u30a4\u30f3\u30c8: call\u3068perform\u306e\u5206\u96e2<\/strong><\/p>\n<p data-line=\"266\" class=\"code-line\">\u30af\u30e9\u30b9\u30e1\u30bd\u30c3\u30c9<code>perform<\/code>\u304c\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u30e1\u30bd\u30c3\u30c9<code>perform<\/code>\u3092\u30e9\u30c3\u30d7\u3059\u308b\u3053\u3068\u3067\u3001\u30ed\u30ae\u30f3\u30b0\u30ed\u30b8\u30c3\u30af\u3068\u30d3\u30b8\u30cd\u30b9\u30ed\u30b8\u30c3\u30af\u3092\u5206\u96e2\u3057\u3066\u3044\u307e\u3059\u3002\u30b5\u30d6\u30af\u30e9\u30b9\u306f\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u30e1\u30bd\u30c3\u30c9<code>perform<\/code>\u3092\u30aa\u30fc\u30d0\u30fc\u30e9\u30a4\u30c9\u3059\u308b\u3060\u3051\u3067\u3001\u81ea\u52d5\u7684\u306b\u30ed\u30ae\u30f3\u30b0\u304c\u9069\u7528\u3055\u308c\u307e\u3059\u3002<\/p>\n<\/div>\n<\/aside>\n<h3 id=\"%E3%82%B5%E3%83%BC%E3%83%93%E3%82%B9%E3%82%AF%E3%83%A9%E3%82%B9%E3%81%AE%E5%AE%9F%E8%A3%85%E4%BE%8B\" data-line=\"269\" class=\"code-line\">\n \u30b5\u30fc\u30d3\u30b9\u30af\u30e9\u30b9\u306e\u5b9f\u88c5\u4f8b<\/h3>\n<p data-line=\"271\" class=\"code-line\">\u57fa\u5e95\u30af\u30e9\u30b9\u306b\u30ed\u30ae\u30f3\u30b0\u7528\u306e\u30ed\u30b8\u30c3\u30af\u3092\u5b9f\u88c5\u3057\u305f\u306e\u3067\u3001\u3044\u304f\u3064\u304b\u306e\u30eb\u30fc\u30eb\u306b\u5247\u3063\u3066\u30b5\u30d6\u30af\u30e9\u30b9\u3092\u5b9f\u88c5\u3059\u308b\u3053\u3068\u3067\u3001\u30ed\u30ae\u30f3\u30b0\u306b\u3064\u3044\u3066\u610f\u8b58\u3059\u308b\u5fc5\u8981\u306f\u306a\u304f\u306a\u308a\u307e\u3059\u3002<\/p>\n<ul data-line=\"273\" class=\"code-line\">\n<li data-line=\"273\" class=\"code-line\">\u30ed\u30b8\u30c3\u30af\u3092 <code>perform<\/code> \u30e1\u30bd\u30c3\u30c9\u306b\u7f6e\u304f<\/li>\n<li data-line=\"274\" class=\"code-line\">\u9014\u4e2d\u7d4c\u904e\u3092 <code>info<\/code> \u30e1\u30bd\u30c3\u30c9\u3067\u4f1d\u3048\u308b<\/li>\n<li data-line=\"275\" class=\"code-line\">\u6210\u529f\u307e\u305f\u306f\u5931\u6557\u6642\u306b <code>success!<\/code> \u307e\u305f\u306f <code>fail!<\/code> \u3067\u7d50\u679c\u3092\u8fd4\u3059<\/li>\n<\/ul>\n<div class=\"code-block-container\">\n<p><span class=\"code-block-filename\">app\/services\/net_position\/calculation_service.rb<\/span><\/p>\n<pre class=\"language-ruby\"><code class=\"language-ruby code-line\" data-line=\"277\"><span class=\"token keyword\">class<\/span> <span class=\"token class-name\">NetPosition<\/span><span class=\"token double-colon punctuation\">::<\/span>CalculationService <span class=\"token operator\"> ApplicationService\n  attribute <span class=\"token symbol\">:supply_area_id<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token symbol\">:integer<\/span>\n  attribute <span class=\"token symbol\">:target_month<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token symbol\">:date<\/span>\n\n  <span class=\"token keyword\">def<\/span> <span class=\"token method-definition\"><span class=\"token function\">perform<\/span><\/span>\n    ApplicationRecord<span class=\"token punctuation\">.<\/span>transaction <span class=\"token keyword\">do<\/span>\n      demand_amount <span class=\"token operator\">=<\/span> <span class=\"token class-name\">DemandCalculator<\/span><span class=\"token punctuation\">.<\/span><span class=\"token keyword\">new<\/span><span class=\"token punctuation\">(<\/span>supply_area_id<span class=\"token punctuation\">,<\/span> target_month<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">.<\/span>calculate\n      info<span class=\"token punctuation\">(<\/span><span class=\"token symbol\">message<\/span><span class=\"token operator\">:<\/span> <span class=\"token string-literal\"><span class=\"token string\">\"\u9700\u8981\u91cf\u3092\u53d6\u5f97\"<\/span><\/span><span class=\"token punctuation\">,<\/span> <span class=\"token symbol\">demand_amount<\/span><span class=\"token operator\">:<\/span><span class=\"token punctuation\">)<\/span>\n      trade_amount <span class=\"token operator\">=<\/span> <span class=\"token class-name\">TradeCalculator<\/span><span class=\"token punctuation\">.<\/span><span class=\"token keyword\">new<\/span><span class=\"token punctuation\">(<\/span>supply_area_id<span class=\"token punctuation\">,<\/span> target_month<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">.<\/span>calculate\n      info<span class=\"token punctuation\">(<\/span><span class=\"token symbol\">message<\/span><span class=\"token operator\">:<\/span> <span class=\"token string-literal\"><span class=\"token string\">\"\u53d6\u5f15\u91cf\u3092\u53d6\u5f97\"<\/span><\/span><span class=\"token punctuation\">,<\/span> <span class=\"token symbol\">trade_amount<\/span><span class=\"token operator\">:<\/span><span class=\"token punctuation\">)<\/span>\n      futures_amount <span class=\"token operator\">=<\/span> FuturesCalculator<span class=\"token punctuation\">.<\/span>nwe<span class=\"token punctuation\">(<\/span>supply_area_id<span class=\"token punctuation\">,<\/span> target_month<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">.<\/span>calculate\n      info<span class=\"token punctuation\">(<\/span><span class=\"token symbol\">message<\/span><span class=\"token operator\">:<\/span> <span class=\"token string-literal\"><span class=\"token string\">\"\u5efa\u7389\u91cf\u3092\u53d6\u5f97\"<\/span><\/span><span class=\"token punctuation\">,<\/span> <span class=\"token symbol\">futures_amount<\/span><span class=\"token operator\">:<\/span><span class=\"token punctuation\">)<\/span>\n\n      net_amount <span class=\"token operator\">=<\/span> demand_amount <span class=\"token operator\">-<\/span> trade_amount <span class=\"token operator\">-<\/span> futures_amount\n\n      save_calculation_history<span class=\"token punctuation\">(<\/span>\n        <span class=\"token symbol\">demand_amount<\/span><span class=\"token operator\">:<\/span> demand_amount<span class=\"token punctuation\">,<\/span>\n        <span class=\"token symbol\">trade_amount<\/span><span class=\"token operator\">:<\/span> trade_amount<span class=\"token punctuation\">,<\/span>\n        <span class=\"token symbol\">futures_amount<\/span><span class=\"token operator\">:<\/span> futures_amount<span class=\"token punctuation\">,<\/span>\n        <span class=\"token symbol\">net_amount<\/span><span class=\"token operator\">:<\/span> net_amount\n      <span class=\"token punctuation\">)<\/span>\n\n      success<span class=\"token operator\">!<\/span><span class=\"token punctuation\">(<\/span><span class=\"token symbol\">net_amount<\/span><span class=\"token operator\">:<\/span> net_amount<span class=\"token punctuation\">)<\/span>\n    <span class=\"token keyword\">end<\/span>\n  <span class=\"token keyword\">rescue<\/span> <span class=\"token operator\">=&gt;<\/span> e\n    errors<span class=\"token punctuation\">.<\/span>add <span class=\"token symbol\">:base<\/span><span class=\"token punctuation\">,<\/span> e<span class=\"token punctuation\">.<\/span>message\n    Sentry<span class=\"token punctuation\">.<\/span>capture_exception<span class=\"token punctuation\">(<\/span>e<span class=\"token punctuation\">)<\/span>\n    fail<span class=\"token operator\">!<\/span>\n  <span class=\"token keyword\">end<\/span>\n\n  \n<span class=\"token keyword\">end<\/span>\n<\/span><\/code><\/pre>\n<\/div>\n<h3 id=\"logsubscriber%E3%81%AE%E5%AE%9F%E8%A3%85\" data-line=\"312\" class=\"code-line\">\n LogSubscriber\u306e\u5b9f\u88c5<\/h3>\n<p data-line=\"314\" class=\"code-line\">\u6b21\u306b\u3001ActiveSupport::Notifications\u306e\u30a4\u30d9\u30f3\u30c8\u3092\u8cfc\u8aad\u3057\u3066\u3001Sentry Logs\u306b\u9001\u4fe1\u3059\u308b<code>LogSubscriber<\/code>\u3092\u5b9f\u88c5\u3057\u307e\u3059\u3002<\/p>\n<div class=\"code-block-container\">\n<p><span class=\"code-block-filename\">lib\/log_subscribers\/application_service_subscriber.rb<\/span><\/p>\n<pre class=\"language-ruby\"><code class=\"language-ruby code-line\" data-line=\"316\"><span class=\"token keyword\">require<\/span> <span class=\"token string-literal\"><span class=\"token string\">\"sentry\/rails\/log_subscriber\"<\/span><\/span>\n<span class=\"token keyword\">require<\/span> <span class=\"token string-literal\"><span class=\"token string\">\"sentry\/rails\/log_subscribers\/parameter_filter\"<\/span><\/span>\n\n<span class=\"token keyword\">module<\/span> <span class=\"token class-name\">LogSubscribers<\/span>\n  <span class=\"token keyword\">class<\/span> <span class=\"token class-name\">ApplicationServiceSubscriber<\/span> <span class=\"token operator\"> Sentry<span class=\"token double-colon punctuation\">::<\/span>Rails<span class=\"token double-colon punctuation\">::<\/span>LogSubscriber\n    <span class=\"token keyword\">include<\/span> Sentry<span class=\"token double-colon punctuation\">::<\/span>Rails<span class=\"token double-colon punctuation\">::<\/span>LogSubscribers<span class=\"token double-colon punctuation\">::<\/span>ParameterFilter \n\n    \n    <span class=\"token keyword\">def<\/span> <span class=\"token method-definition\"><span class=\"token function\">perform<\/span><\/span><span class=\"token punctuation\">(<\/span>event<span class=\"token punctuation\">)<\/span>\n      service_class <span class=\"token operator\">=<\/span> event<span class=\"token punctuation\">.<\/span>payload<span class=\"token punctuation\">[<\/span><span class=\"token symbol\">:service_class<\/span><span class=\"token punctuation\">]<\/span>\n      <span class=\"token keyword\">return<\/span> <span class=\"token keyword\">unless<\/span> service_class\n      <span class=\"token keyword\">return<\/span> <span class=\"token keyword\">unless<\/span> service_class <span class=\"token operator\"> ApplicationService\n\n      message <span class=\"token operator\">=<\/span> <span class=\"token string-literal\"><span class=\"token string\">\"Service performed: <\/span><span class=\"token interpolation\"><span class=\"token delimiter punctuation\">#{<\/span><span class=\"token content\">service_class<span class=\"token punctuation\">.<\/span>name<\/span><span class=\"token delimiter punctuation\">}<\/span><\/span><span class=\"token string\">\"<\/span><\/span>\n      duration <span class=\"token operator\">=<\/span> duration_ms<span class=\"token punctuation\">(<\/span>event<span class=\"token punctuation\">)<\/span>\n      attributes <span class=\"token operator\">=<\/span> event<span class=\"token punctuation\">.<\/span>payload<span class=\"token punctuation\">[<\/span><span class=\"token symbol\">:attributes<\/span><span class=\"token punctuation\">]<\/span>\n      result <span class=\"token operator\">=<\/span> event<span class=\"token punctuation\">.<\/span>payload<span class=\"token punctuation\">[<\/span><span class=\"token symbol\">:result<\/span><span class=\"token punctuation\">]<\/span>\n\n      attributes <span class=\"token operator\">=<\/span> <span class=\"token punctuation\">{<\/span>\n        <span class=\"token symbol\">duration_ms<\/span><span class=\"token operator\">:<\/span> duration<span class=\"token punctuation\">,<\/span>\n        <span class=\"token symbol\">service_class<\/span><span class=\"token operator\">:<\/span> service_class<span class=\"token punctuation\">.<\/span>name<span class=\"token punctuation\">,<\/span>\n        \n        <span class=\"token symbol\">arguments<\/span><span class=\"token operator\">:<\/span> filter_sensitive_params<span class=\"token punctuation\">(<\/span>attributes<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">.<\/span>to_json<span class=\"token punctuation\">,<\/span>\n        <span class=\"token symbol\">success<\/span><span class=\"token operator\">:<\/span> result<span class=\"token punctuation\">.<\/span>success<span class=\"token punctuation\">,<\/span>\n        <span class=\"token symbol\">result<\/span><span class=\"token operator\">:<\/span> filter_sensitive_params<span class=\"token punctuation\">(<\/span>result<span class=\"token punctuation\">.<\/span>data<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">.<\/span>to_json<span class=\"token punctuation\">,<\/span>\n        <span class=\"token symbol\">errors<\/span><span class=\"token operator\">:<\/span> result<span class=\"token punctuation\">.<\/span>errors<span class=\"token punctuation\">.<\/span>full_messages<span class=\"token punctuation\">.<\/span>join<span class=\"token punctuation\">(<\/span><span class=\"token string-literal\"><span class=\"token string\">\"\\n\"<\/span><\/span><span class=\"token punctuation\">)<\/span>\n      <span class=\"token punctuation\">}<\/span>\n\n      log_structured_event<span class=\"token punctuation\">(<\/span>\n        <span class=\"token symbol\">message<\/span><span class=\"token operator\">:<\/span> message<span class=\"token punctuation\">,<\/span>\n        <span class=\"token symbol\">level<\/span><span class=\"token operator\">:<\/span> <span class=\"token symbol\">:info<\/span><span class=\"token punctuation\">,<\/span>\n        <span class=\"token symbol\">attributes<\/span><span class=\"token operator\">:<\/span> attributes\n      <span class=\"token punctuation\">)<\/span>\n    <span class=\"token keyword\">end<\/span>\n\n    \n    <span class=\"token keyword\">def<\/span> <span class=\"token method-definition\"><span class=\"token function\">info<\/span><\/span><span class=\"token punctuation\">(<\/span>event<span class=\"token punctuation\">)<\/span>\n      service_class <span class=\"token operator\">=<\/span> event<span class=\"token punctuation\">.<\/span>payload<span class=\"token punctuation\">[<\/span><span class=\"token symbol\">:service_class<\/span><span class=\"token punctuation\">]<\/span>\n      <span class=\"token keyword\">return<\/span> <span class=\"token keyword\">unless<\/span> service_class\n      <span class=\"token keyword\">return<\/span> <span class=\"token keyword\">unless<\/span> service_class <span class=\"token operator\"> ApplicationService\n\n      attributes <span class=\"token operator\">=<\/span> event<span class=\"token punctuation\">.<\/span>payload<span class=\"token punctuation\">[<\/span><span class=\"token symbol\">:attributes<\/span><span class=\"token punctuation\">]<\/span>\n      data <span class=\"token operator\">=<\/span> event<span class=\"token punctuation\">.<\/span>payload<span class=\"token punctuation\">[<\/span><span class=\"token symbol\">:data<\/span><span class=\"token punctuation\">]<\/span>\n\n      message <span class=\"token operator\">=<\/span> <span class=\"token string-literal\"><span class=\"token string\">\"Service performed: <\/span><span class=\"token interpolation\"><span class=\"token delimiter punctuation\">#{<\/span><span class=\"token content\">service_class<span class=\"token punctuation\">.<\/span>name<\/span><span class=\"token delimiter punctuation\">}<\/span><\/span><span class=\"token string\">\"<\/span><\/span>\n      attributes <span class=\"token operator\">=<\/span> <span class=\"token punctuation\">{<\/span>\n        <span class=\"token symbol\">service_class<\/span><span class=\"token operator\">:<\/span> service_class<span class=\"token punctuation\">.<\/span>name<span class=\"token punctuation\">,<\/span>\n        <span class=\"token symbol\">arguments<\/span><span class=\"token operator\">:<\/span> filter_sensitive_params<span class=\"token punctuation\">(<\/span>attributes<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">.<\/span>to_json<span class=\"token punctuation\">,<\/span>\n        <span class=\"token symbol\">data<\/span><span class=\"token operator\">:<\/span> filter_sensitive_params<span class=\"token punctuation\">(<\/span>data<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">.<\/span>to_json\n      <span class=\"token punctuation\">}<\/span>\n\n      log_structured_event<span class=\"token punctuation\">(<\/span>\n        <span class=\"token symbol\">message<\/span><span class=\"token operator\">:<\/span> message<span class=\"token punctuation\">,<\/span>\n        <span class=\"token symbol\">level<\/span><span class=\"token operator\">:<\/span> <span class=\"token symbol\">:info<\/span><span class=\"token punctuation\">,<\/span>\n        <span class=\"token symbol\">attributes<\/span><span class=\"token operator\">:<\/span> attributes\n      <span class=\"token punctuation\">)<\/span>\n    <span class=\"token keyword\">end<\/span>\n  <span class=\"token keyword\">end<\/span>\n<span class=\"token keyword\">end<\/span>\n<\/span><\/span><\/span><\/code><\/pre>\n<\/div>\n<aside class=\"msg message\"><span class=\"msg-symbol\">!<\/span><\/p>\n<div class=\"msg-content\">\n<p data-line=\"379\" class=\"code-line\"><strong>\u30dd\u30a4\u30f3\u30c8: Sentry::Rails::LogSubscriber\u306e\u7d99\u627f<\/strong><\/p>\n<p data-line=\"381\" class=\"code-line\"><code>Sentry::Rails::LogSubscriber<\/code>\u3092\u7d99\u627f\u3059\u308b\u3053\u3068\u3067\u3001\u4ee5\u4e0b\u306e\u30e1\u30bd\u30c3\u30c9\u304c\u5229\u7528\u3067\u304d\u307e\u3059\uff1a<\/p>\n<ul data-line=\"382\" class=\"code-line\">\n<li data-line=\"382\" class=\"code-line\">\n<code>log_structured_event<\/code>: \u69cb\u9020\u5316\u30ed\u30b0\u3092Sentry\u306b\u9001\u4fe1<\/li>\n<li data-line=\"383\" class=\"code-line\">\n<code>duration_ms<\/code>: <code>instrument<\/code> \u30e1\u30bd\u30c3\u30c9\u306e\u30d6\u30ed\u30c3\u30af\u306e\u5b9f\u884c\u6642\u9593\u3092\u53d6\u5f97<\/li>\n<li data-line=\"384\" class=\"code-line\">\n<code>ParameterFilter<\/code>: Rails\u306e<code>filter_parameters<\/code>\u3092\u9069\u7528\uff08<a target=\"_blank\" href=\"https:\/\/github.com\/getsentry\/sentry-ruby\/blob\/d643fcd510be9fa467d993e81e62d90751b81b36\/sentry-rails\/lib\/sentry\/rails\/log_subscribers\/parameter_filter.rb\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">github<\/a>\uff09<\/li>\n<\/ul>\n<\/div>\n<\/aside>\n<h3 id=\"subscriber%E3%81%AE%E7%99%BB%E9%8C%B2\" data-line=\"387\" class=\"code-line\">\n Subscriber\u306e\u767b\u9332<\/h3>\n<p data-line=\"389\" class=\"code-line\"><code>LogSubscriber<\/code>\u3092\u767b\u9332\u3057\u307e\u3059\u3002<\/p>\n<p data-line=\"391\" class=\"code-line\">\u65b9\u6cd5\u306f\u3044\u304f\u3064\u304b\u3042\u308a\u307e\u3059\u304c\u3001\u4eca\u56de\u306f Sentry SDK \u306e\u8a2d\u5b9a\u3067\u767b\u9332\u3057\u307e\u3059\u3002<\/p>\n<div class=\"code-block-container\">\n<p><span class=\"code-block-filename\">config\/sentry.rb<\/span><\/p>\n<pre class=\"language-ruby\"><code class=\"language-ruby code-line\" data-line=\"393\"><span class=\"token keyword\">require<\/span> <span class=\"token string-literal\"><span class=\"token string\">\"log_subscribers\/application_service_subscriber\"<\/span><\/span>\n\nSentry<span class=\"token punctuation\">.<\/span>init <span class=\"token keyword\">do<\/span> <span class=\"token operator\">|<\/span>config<span class=\"token operator\">|<\/span>\n  \n\n  config<span class=\"token punctuation\">.<\/span>enable_logs <span class=\"token operator\">=<\/span> <span class=\"token boolean\">true<\/span>\n  config<span class=\"token punctuation\">.<\/span>rails<span class=\"token punctuation\">.<\/span>structured_logging<span class=\"token punctuation\">.<\/span>enabled <span class=\"token operator\">=<\/span> <span class=\"token boolean\">true<\/span>\n  config<span class=\"token punctuation\">.<\/span>rails<span class=\"token punctuation\">.<\/span>structured_logging<span class=\"token punctuation\">.<\/span>subscribers <span class=\"token operator\">=<\/span> <span class=\"token punctuation\">{<\/span>\n    <span class=\"token symbol\">active_record<\/span><span class=\"token operator\">:<\/span> Sentry<span class=\"token double-colon punctuation\">::<\/span>Rails<span class=\"token double-colon punctuation\">::<\/span>LogSubscribers<span class=\"token double-colon punctuation\">::<\/span>ActiveRecordSubscriber<span class=\"token punctuation\">,<\/span>\n    <span class=\"token symbol\">action_controller<\/span><span class=\"token operator\">:<\/span> Sentry<span class=\"token double-colon punctuation\">::<\/span>Rails<span class=\"token double-colon punctuation\">::<\/span>LogSubscribers<span class=\"token double-colon punctuation\">::<\/span>ActionControllerSubscriber<span class=\"token punctuation\">,<\/span>\n    <span class=\"token symbol\">active_job<\/span><span class=\"token operator\">:<\/span> Sentry<span class=\"token double-colon punctuation\">::<\/span>Rails<span class=\"token double-colon punctuation\">::<\/span>LogSubscribers<span class=\"token double-colon punctuation\">::<\/span>ActiveJobSubscriber<span class=\"token punctuation\">,<\/span>\n    <span class=\"token symbol\">action_mailer<\/span><span class=\"token operator\">:<\/span> Sentry<span class=\"token double-colon punctuation\">::<\/span>Rails<span class=\"token double-colon punctuation\">::<\/span>LogSubscribers<span class=\"token double-colon punctuation\">::<\/span>ActionMailerSubscriber<span class=\"token punctuation\">,<\/span>\n    \n    <span class=\"token symbol\">application_service<\/span><span class=\"token operator\">:<\/span> <span class=\"token double-colon punctuation\">::<\/span>LogSubscribers<span class=\"token double-colon punctuation\">::<\/span>ApplicationServiceSubscriber\n  <span class=\"token punctuation\">}<\/span>\n<\/code><\/pre>\n<\/div>\n<p data-line=\"411\" class=\"code-line\"><code>subscribers<\/code> \u30cf\u30c3\u30b7\u30e5\u306b\u8ffd\u52a0\u3059\u308b\u3053\u3068\u3067\u3001 <a target=\"_blank\" href=\"https:\/\/github.com\/getsentry\/sentry-ruby\/blob\/d643fcd510be9fa467d993e81e62d90751b81b36\/sentry-rails\/lib\/sentry\/rails\/structured_logging.rb#L15\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">Sentry::Rails::StructuredLogging<\/a> \u306b\u3088\u3063\u3066\u9069\u5207\u306a\u30bf\u30a4\u30df\u30f3\u30b0\u3067 <code>attach_to<\/code> \u3055\u308c\u307e\u3059\u3002<\/p>\n<h3 id=\"%E5%AE%9F%E9%9A%9B%E3%81%AB%E8%A8%98%E9%8C%B2%E3%81%95%E3%82%8C%E3%81%9F%E3%83%AD%E3%82%B0\" data-line=\"413\" class=\"code-line\">\n \u5b9f\u969b\u306b\u8a18\u9332\u3055\u308c\u305f\u30ed\u30b0<\/h3>\n<p data-line=\"415\" class=\"code-line\"><img decoding=\"async\" src=\"https:\/\/storage.googleapis.com\/zenn-user-upload\/380071afc413-20251101.png\" alt=\"\u5b9f\u969b\u306b\u8a18\u9332\u3055\u308c\u305f\u30ed\u30b0\" class=\"md-img\" loading=\"lazy\"\/><\/p>\n<h4 id=\"%E3%83%95%E3%82%A3%E3%83%AB%E3%82%BF%E3%83%AA%E3%83%B3%E3%82%B0\" data-line=\"417\" class=\"code-line\">\n \u30d5\u30a3\u30eb\u30bf\u30ea\u30f3\u30b0<\/h4>\n<p data-line=\"419\" class=\"code-line\">\u5c5e\u6027\u3092\u4f7f\u3063\u3066\u30d5\u30a3\u30eb\u30bf\u30ea\u30f3\u30b0\u3067\u304d\u307e\u3059\u3002<\/p>\n<p data-line=\"421\" class=\"code-line\"><img decoding=\"async\" src=\"https:\/\/storage.googleapis.com\/zenn-user-upload\/662dd6f16381-20251101.png\" alt=\"\u30d5\u30a3\u30eb\u30bf\u30ea\u30f3\u30b0\u8a2d\u5b9a\u4f8b\" class=\"md-img\" loading=\"lazy\"\/><\/p>\n<h4 id=\"issue%E7%94%BB%E9%9D%A2%E3%81%A7%E3%83%AD%E3%82%B0%E3%82%92%E7%A2%BA%E8%AA%8D%E3%81%A7%E3%81%8D%E3%82%8B\" data-line=\"423\" class=\"code-line\">\n Issue\u753b\u9762\u3067\u30ed\u30b0\u3092\u78ba\u8a8d\u3067\u304d\u308b<\/h4>\n<p data-line=\"425\" class=\"code-line\">\u30a8\u30e9\u30fc\u3092Sentry\u306b\u9001\u3063\u3066\u3044\u308b\u3068\u3001\u30c8\u30e9\u30f3\u30b6\u30af\u30b7\u30e7\u30f3\u5185\u306e\u30ed\u30b0\u3092\u3042\u308f\u305b\u3066\u78ba\u8a8d\u3067\u304d\u307e\u3059\u3002<\/p>\n<p data-line=\"427\" class=\"code-line\"><img decoding=\"async\" src=\"https:\/\/storage.googleapis.com\/zenn-user-upload\/45f7f9ed3ff7-20251101.png\" alt=\"Issue\u753b\u9762\u3067\u30ed\u30b0\u3092\u78ba\u8a8d\u3067\u304d\u308b\" class=\"md-img\" loading=\"lazy\"\/><\/p>\n<h4 id=\"%E3%83%AD%E3%82%B0%E3%82%92%E6%9D%A1%E4%BB%B6%E3%81%AB%E3%82%A2%E3%83%A9%E3%83%BC%E3%83%88%E3%82%92%E8%A8%AD%E5%AE%9A%E3%81%A7%E3%81%8D%E3%82%8B\" data-line=\"429\" class=\"code-line\">\n \u30ed\u30b0\u3092\u6761\u4ef6\u306b\u30a2\u30e9\u30fc\u30c8\u3092\u8a2d\u5b9a\u3067\u304d\u308b<\/h4>\n<p data-line=\"431\" class=\"code-line\">\u30d5\u30a3\u30eb\u30bf\u30ea\u30f3\u30b0\u6761\u4ef6\u306b\u30de\u30c3\u30c1\u3059\u308b\u30ed\u30b0\u306e\u51fa\u73fe\u3092\u5831\u544a\u3059\u308b\u30a2\u30e9\u30fc\u30c8\u3092\u8a2d\u5b9a\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002<\/p>\n<p data-line=\"433\" class=\"code-line\"><img decoding=\"async\" src=\"https:\/\/storage.googleapis.com\/zenn-user-upload\/ba9fde8edf67-20251101.png\" alt=\"\u30ed\u30b0\u306e\u5c5e\u6027\u3092\u4f7f\u3063\u3066\u30a2\u30e9\u30fc\u30c8\u3092\u8a2d\u5b9a\u3067\u304d\u308b\" class=\"md-img\" loading=\"lazy\"\/><\/p>\n<h2 id=\"%E5%AE%9F%E8%A3%85%E6%99%82%E3%81%AE%E6%B3%A8%E6%84%8F%E7%82%B9%E3%81%A8%E8%A7%A3%E6%B1%BA%E7%AD%96\" data-line=\"435\" class=\"code-line\">\n \u5b9f\u88c5\u6642\u306e\u6ce8\u610f\u70b9\u3068\u89e3\u6c7a\u7b56<\/h2>\n<p data-line=\"437\" class=\"code-line\">\u5b9f\u88c5\u4e2d\u306b\u906d\u9047\u3057\u305f\u554f\u984c\u3068\u89e3\u6c7a\u7b56\u3092\u7d39\u4ecb\u3057\u307e\u3059\u3002<\/p>\n<h3 id=\"%E5%95%8F%E9%A1%8C%3A-array%E3%82%84hash%E3%81%AE%E3%83%91%E3%83%A9%E3%83%A1%E3%83%BC%E3%82%BF%E3%81%8C%E8%A8%98%E9%8C%B2%E3%81%95%E3%82%8C%E3%81%AA%E3%81%84\" data-line=\"439\" class=\"code-line\">\n \u554f\u984c: Array\u3084Hash\u306e\u30d1\u30e9\u30e1\u30fc\u30bf\u304c\u8a18\u9332\u3055\u308c\u306a\u3044<\/h3>\n<p data-line=\"441\" class=\"code-line\">\u5f53\u521d\u3001\u4ee5\u4e0b\u306e\u3088\u3046\u306battributes\u3092\u8a2d\u5b9a\u3057\u3066\u3044\u307e\u3057\u305f\u3002<\/p>\n<div class=\"code-block-container\">\n<pre class=\"language-ruby\"><code class=\"language-ruby code-line\" data-line=\"443\">\nattributes <span class=\"token operator\">=<\/span> <span class=\"token punctuation\">{<\/span>\n  <span class=\"token symbol\">duration_ms<\/span><span class=\"token operator\">:<\/span> duration<span class=\"token punctuation\">,<\/span>\n  <span class=\"token symbol\">service_class<\/span><span class=\"token operator\">:<\/span> service_class<span class=\"token punctuation\">.<\/span>name<span class=\"token punctuation\">,<\/span>\n  <span class=\"token symbol\">args<\/span><span class=\"token operator\">:<\/span> filter_sensitive_arguments<span class=\"token punctuation\">(<\/span>args<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span> \n  <span class=\"token symbol\">opts<\/span><span class=\"token operator\">:<\/span> filter_sensitive_params<span class=\"token punctuation\">(<\/span>opts<span class=\"token punctuation\">)<\/span>     \n<span class=\"token punctuation\">}<\/span>\n<\/code><\/pre>\n<\/div>\n<p data-line=\"453\" class=\"code-line\">\u3057\u304b\u3057\u3001Sentry\u306eLogs\u3067\u306f\u3001<code>args<\/code>\u3068<code>opts<\/code>\u304c\u8a18\u9332\u3055\u308c\u307e\u305b\u3093\u3067\u3057\u305f\u3002<\/p>\n<h4 id=\"%E5%8E%9F%E5%9B%A0\" data-line=\"455\" class=\"code-line\">\n \u539f\u56e0<\/h4>\n<p data-line=\"457\" class=\"code-line\">Sentry\u306e<code>attributes<\/code>\u306f String \u3084 Number \u306a\u3069\u306e\u578b\u3092\u60f3\u5b9a\u3057\u3066\u304a\u308a\u3001\u69cb\u9020\u3092\u6301\u3063\u305fArray\u3084Hash\u3092\u305d\u306e\u307e\u307e\u6e21\u3059\u3068\u7121\u8996\u3055\u308c\u307e\u3059\u3002<\/p>\n<h4 id=\"%E8%A7%A3%E6%B1%BA%E7%AD%96\" data-line=\"459\" class=\"code-line\">\n \u89e3\u6c7a\u7b56<\/h4>\n<p data-line=\"461\" class=\"code-line\"><code>to_json<\/code> \u3059\u308b\u306a\u3069\u3057\u3066\u6587\u5b57\u5217\u306b\u3057\u307e\u3059\u3002<\/p>\n<div class=\"code-block-container\">\n<pre class=\"language-ruby\"><code class=\"language-ruby code-line\" data-line=\"463\">\nattributes <span class=\"token operator\">=<\/span> <span class=\"token punctuation\">{<\/span>\n  <span class=\"token symbol\">duration_ms<\/span><span class=\"token operator\">:<\/span> duration<span class=\"token punctuation\">,<\/span>\n  <span class=\"token symbol\">service<\/span><span class=\"token operator\">:<\/span> service<span class=\"token punctuation\">.<\/span><span class=\"token keyword\">class<\/span><span class=\"token punctuation\">.<\/span>name<span class=\"token punctuation\">,<\/span>\n  <span class=\"token symbol\">args<\/span><span class=\"token operator\">:<\/span> filter_sensitive_arguments<span class=\"token punctuation\">(<\/span>args<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">.<\/span>to_json<span class=\"token punctuation\">,<\/span>\n  <span class=\"token symbol\">opts<\/span><span class=\"token operator\">:<\/span> filter_sensitive_params<span class=\"token punctuation\">(<\/span>opts<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">.<\/span>to_json\n<span class=\"token punctuation\">}<\/span>\n<\/code><\/pre>\n<\/div>\n<h3 id=\"%E5%95%8F%E9%A1%8C%3A-activerecordsubscriber%E3%81%AB%E3%82%88%E3%82%8B%E5%AE%B9%E9%87%8F%E3%81%AE%E6%80%A5%E5%A2%97\" data-line=\"474\" class=\"code-line\">\n \u554f\u984c: ActiveRecordSubscriber\u306b\u3088\u308b\u5bb9\u91cf\u306e\u6025\u5897<\/h3>\n<p data-line=\"476\" class=\"code-line\"><code>Sentry::Rails::LogSubscribers::ActiveRecordSubscriber<\/code> \u3092\u6709\u52b9\u306b\u3059\u308b\u3068\u3001\u3059\u3079\u3066\u306eSQL\u30af\u30a8\u30ea\u304c\u69cb\u9020\u5316\u30ed\u30b0\u3068\u3057\u3066\u8a18\u9332\u3055\u308c\u307e\u3059\u3002\u3053\u308c\u306b\u3088\u308a\u3001\u30ed\u30b0\u306e\u5bb9\u91cf\u304c\u6025\u6fc0\u306b\u5897\u5927\u3057\u3001Sentry Logs\u306e\u6708\u9593\u5bb9\u91cf\u5236\u9650\u3084\u30b3\u30b9\u30c8\u306b\u5927\u304d\u306a\u5f71\u97ff\u3092\u4e0e\u3048\u308b\u53ef\u80fd\u6027\u304c\u3042\u308a\u307e\u3059\u3002<\/p>\n<div class=\"code-block-container\">\n<pre class=\"language-ruby\"><code class=\"language-ruby code-line\" data-line=\"478\">\nconfig<span class=\"token punctuation\">.<\/span>rails<span class=\"token punctuation\">.<\/span>structured_logging<span class=\"token punctuation\">.<\/span>subscribers <span class=\"token operator\">=<\/span> <span class=\"token punctuation\">{<\/span>\n  <span class=\"token symbol\">active_record<\/span><span class=\"token operator\">:<\/span> Sentry<span class=\"token double-colon punctuation\">::<\/span>Rails<span class=\"token double-colon punctuation\">::<\/span>LogSubscribers<span class=\"token double-colon punctuation\">::<\/span>ActiveRecordSubscriber<span class=\"token punctuation\">,<\/span>  \n  <span class=\"token symbol\">action_controller<\/span><span class=\"token operator\">:<\/span> Sentry<span class=\"token double-colon punctuation\">::<\/span>Rails<span class=\"token double-colon punctuation\">::<\/span>LogSubscribers<span class=\"token double-colon punctuation\">::<\/span>ActionControllerSubscriber<span class=\"token punctuation\">,<\/span>\n  \n<span class=\"token punctuation\">}<\/span>\n<\/code><\/pre>\n<\/div>\n<h4 id=\"%E5%8E%9F%E5%9B%A0-1\" data-line=\"487\" class=\"code-line\">\n \u539f\u56e0<\/h4>\n<p data-line=\"489\" class=\"code-line\">ActiveRecordSubscriber\u306f\u3001\u3059\u3079\u3066\u306e\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u30af\u30a8\u30ea\u306b\u5bfe\u3057\u3066\u30ed\u30b0\u30a4\u30d9\u30f3\u30c8\u3092\u767a\u884c\u3057\u307e\u3059\u3002\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u898f\u6a21\u306b\u3088\u3063\u3066\u306f\u3001\u5927\u91cf\u306e\u30af\u30a8\u30ea\u304c\u5b9f\u884c\u3055\u308c\u308b\u3053\u3068\u3082\u3042\u308a\u3001\u30ed\u30b0\u306e\u5bb9\u91cf\u304c\u60f3\u5b9a\u4ee5\u4e0a\u306b\u5897\u52a0\u3057\u307e\u3059\u3002<\/p>\n<p data-line=\"491\" class=\"code-line\">\u307e\u305f\u3001\u554f\u984c\u306e\u3042\u308b\u30af\u30a8\u30ea\u306e\u30ed\u30b0\u306fSentry Tracing\u306a\u3069\u306e\u4ed6\u306e\u6a5f\u80fd\u3067\u3059\u3067\u306b\u78ba\u8a8d\u3067\u304d\u308b\u5834\u5408\u304c\u591a\u304f\u3001\u91cd\u8907\u3057\u3066\u30ed\u30b0\u3092\u8a18\u9332\u3059\u308b\u5fc5\u8981\u6027\u304c\u4f4e\u3044\u30b1\u30fc\u30b9\u3082\u3042\u308a\u307e\u3059\u3002<\/p>\n<h4 id=\"%E8%A7%A3%E6%B1%BA%E7%AD%96-1\" data-line=\"493\" class=\"code-line\">\n \u89e3\u6c7a\u7b56<\/h4>\n<p data-line=\"495\" class=\"code-line\">\u5fc5\u8981\u306a\u30b5\u30d6\u30b9\u30af\u30e9\u30a4\u30d0\u306e\u307f\u3092\u6709\u52b9\u306b\u3057\u307e\u3059\u3002\u30af\u30a8\u30ea\u306e\u30ed\u30b0\u304c\u4e0d\u8981\u306a\u5834\u5408\u306f\u3001ActiveRecordSubscriber\u3092\u7121\u52b9\u306b\u3057\u307e\u3059\u3002<\/p>\n<div class=\"code-block-container\">\n<pre class=\"language-ruby\"><code class=\"language-ruby code-line\" data-line=\"497\">\nconfig<span class=\"token punctuation\">.<\/span>rails<span class=\"token punctuation\">.<\/span>structured_logging<span class=\"token punctuation\">.<\/span>subscribers <span class=\"token operator\">=<\/span> <span class=\"token punctuation\">{<\/span>\n  \n  \n  \n  \n  <span class=\"token symbol\">application_service<\/span><span class=\"token operator\">:<\/span> <span class=\"token double-colon punctuation\">::<\/span>LogSubscribers<span class=\"token double-colon punctuation\">::<\/span>ApplicationServiceSubscriber\n<span class=\"token punctuation\">}<\/span>\n<\/code><\/pre>\n<\/div>\n<p data-line=\"508\" class=\"code-line\">\u7528\u9014\u3068\u30b3\u30b9\u30c8\u3092\u8003\u616e\u3057\u3066\u3001\u9069\u5207\u306a\u30b5\u30d6\u30b9\u30af\u30e9\u30a4\u30d0\u3092\u9078\u629e\u3059\u308b\u3053\u3068\u304c\u91cd\u8981\u3067\u3059\u3002<\/p>\n<p data-line=\"510\" class=\"code-line\">\u3042\u308b\u3044\u306f\u672c\u756a\u74b0\u5883\u3067\u306f\u7121\u52b9\u3001\u30b9\u30c6\u30fc\u30b8\u30f3\u30b0\u3001\u958b\u767a\u3067\u306f\u6709\u52b9\u3068\u3044\u3046\u8a2d\u5b9a\u3082\u3088\u3044\u3068\u601d\u3044\u307e\u3059\u3002<\/p>\n<h3 id=\"%E5%95%8F%E9%A1%8C%3A-call.component-%E3%81%A8%E3%81%84%E3%81%86%E3%82%A4%E3%83%99%E3%83%B3%E3%83%88%E3%81%8C%E6%8B%BE%E3%81%88%E3%81%AA%E3%81%84\" data-line=\"512\" class=\"code-line\">\n \u554f\u984c: call.component \u3068\u3044\u3046\u30a4\u30d9\u30f3\u30c8\u304c\u62fe\u3048\u306a\u3044<\/h3>\n<p data-line=\"514\" class=\"code-line\">\u305f\u3068\u3048\u3070 <code>call<\/code> \u3068\u3044\u3046\u30a4\u30d9\u30f3\u30c8\u3092 <code>call.application_service<\/code> \u3068\u3044\u3046\u540d\u524d\u3067\u8cfc\u8aad\u3057\u3088\u3046\u3068\u3057\u3066\u3082\u3001 <code>ApplicationServiceSubscriber#call<\/code> \u3068\u3044\u3046\u30e1\u30bd\u30c3\u30c9\u3067\u306f\u62fe\u3046\u3053\u3068\u304c\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f\u3002<\/p>\n<h4 id=\"%E5%8E%9F%E5%9B%A0-2\" data-line=\"516\" class=\"code-line\">\n \u539f\u56e0<\/h4>\n<p data-line=\"518\" class=\"code-line\"><a target=\"_blank\" href=\"https:\/\/api.rubyonrails.org\/classes\/ActiveSupport\/LogSubscriber.html#method-i-call\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">ActiveSupport::LogSubscriber#call<\/a> \u306f\u3059\u3067\u306b\u5b58\u5728\u3059\u308b\u305f\u3081\u3001\u30aa\u30fc\u30d0\u30fc\u30e9\u30a4\u30c9\u306b\u306a\u3063\u3066\u3057\u307e\u3046\u3002<\/p>\n<h4 id=\"%E8%A7%A3%E6%B1%BA%E7%AD%96-2\" data-line=\"520\" class=\"code-line\">\n \u89e3\u6c7a\u7b56<\/h4>\n<p data-line=\"522\" class=\"code-line\"><code>call<\/code> \u3068\u3044\u3046\u30a4\u30d9\u30f3\u30c8\u540d\u306f\u4f7f\u7528\u3057\u306a\u3044\u3002<\/p>\n<h2 id=\"%E5%AE%9F%E9%9A%9B%E3%81%AE%E9%81%8B%E7%94%A8%E3%81%A7%E5%BE%97%E3%82%89%E3%82%8C%E3%81%9F%E5%8A%B9%E6%9E%9C\" data-line=\"524\" class=\"code-line\">\n \u5b9f\u969b\u306e\u904b\u7528\u3067\u5f97\u3089\u308c\u305f\u52b9\u679c<\/h2>\n<p data-line=\"526\" class=\"code-line\">\u69cb\u9020\u5316\u30ed\u30ae\u30f3\u30b0\u3092\u5c0e\u5165\u3059\u308b\u3053\u3068\u3067\u3001\u4ee5\u4e0b\u306e\u52b9\u679c\u304c\u5f97\u3089\u308c\u307e\u3057\u305f\u3002<\/p>\n<h3 id=\"%E3%83%87%E3%83%90%E3%83%83%E3%82%B0%E6%99%82%E9%96%93%E3%81%AE%E7%9F%AD%E7%B8%AE\" data-line=\"528\" class=\"code-line\">\n \u30c7\u30d0\u30c3\u30b0\u6642\u9593\u306e\u77ed\u7e2e<\/h3>\n<p data-line=\"530\" class=\"code-line\">\u30a8\u30e9\u30fc\u3068\u30ed\u30b0\u304c\u540c\u3058\u753b\u9762\u3067\u78ba\u8a8d\u3067\u304d\u308b\u305f\u3081\u3001\u8907\u6570\u30c4\u30fc\u30eb\u9593\u306e\u30bf\u30d6\u5207\u308a\u66ff\u3048\u304c\u4e0d\u8981\u306b\u306a\u308a\u307e\u3057\u305f\u3002\u30a8\u30e9\u30fc\u767a\u751f\u6642\u306b\u3001\u305d\u306e\u30a8\u30e9\u30fc\u306b\u95a2\u9023\u3059\u308b\u5b9f\u884c\u30ed\u30b0\u3092\u5373\u5ea7\u306b\u78ba\u8a8d\u3067\u304d\u307e\u3059\u3002<\/p>\n<p data-line=\"532\" class=\"code-line\">\u307e\u305f\u3001\u30d7\u30ec\u30fc\u30f3\u6587\u5b57\u5217\u3084JSON\u5f62\u5f0f\u306e\u30ed\u30b0\u306b\u6bd4\u3079\u3066\u3001\u30ed\u30b0\u306e\u5185\u5bb9\u3092\u8aad\u307f\u53d6\u308a\u3084\u3059\u304f\u3001\u8ffd\u3044\u3084\u3059\u304f\u306a\u308a\u307e\u3057\u305f\u3002<\/p>\n<h3 id=\"%E5%95%8F%E9%A1%8C%E3%81%AE%E6%97%A9%E6%9C%9F%E7%99%BA%E8%A6%8B\" data-line=\"534\" class=\"code-line\">\n \u554f\u984c\u306e\u65e9\u671f\u767a\u898b<\/h3>\n<p data-line=\"536\" class=\"code-line\">\u30a2\u30e9\u30fc\u30c8\u6a5f\u80fd\u3092\u6d3b\u7528\u3059\u308b\u3053\u3068\u3067\u3001\u7279\u5b9a\u306eService\u30af\u30e9\u30b9\u306e\u5931\u6557\u7387\u304c\u4e0a\u6607\u3057\u305f\u969b\u306b\u901a\u77e5\u3092\u53d7\u3051\u53d6\u308c\u307e\u3059\u3002\u30e6\u30fc\u30b6\u30fc\u304b\u3089\u306e\u5831\u544a\u524d\u306b\u554f\u984c\u3092\u691c\u77e5\u3067\u304d\u308b\u3088\u3046\u306b\u306a\u308a\u307e\u3057\u305f\u3002<\/p>\n<h3 id=\"%E3%83%91%E3%83%95%E3%82%A9%E3%83%BC%E3%83%9E%E3%83%B3%E3%82%B9%E5%88%86%E6%9E%90%E3%81%AE%E5%AE%B9%E6%98%93%E3%81%95\" data-line=\"538\" class=\"code-line\">\n \u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u5206\u6790\u306e\u5bb9\u6613\u3055<\/h3>\n<p data-line=\"540\" class=\"code-line\">Sentry Tracing \u3068\u3042\u308f\u305b\u3066\u3001\u30ed\u30b0\u306b<code>duration_ms<\/code>\u3092\u8a18\u9332\u3059\u308b\u3053\u3068\u3067\u3001\u3069\u306eService\u304c\u3069\u306e\u7a0b\u5ea6\u6642\u9593\u304c\u304b\u304b\u3063\u3066\u3044\u308b\u306e\u304b\u4e00\u76ee\u3067\u308f\u304b\u308b\u306e\u3067\u3001\u30dc\u30c8\u30eb\u30cd\u30c3\u30af\u306e\u7279\u5b9a\u306b\u5f79\u7acb\u3061\u307e\u3059\u3002<\/p>\n<h3 id=\"%E3%83%AD%E3%82%AE%E3%83%B3%E3%82%B0%E6%96%B9%E6%B3%95%E3%81%AE%E5%85%B1%E9%80%9A%E5%8C%96\" data-line=\"542\" class=\"code-line\">\n \u30ed\u30ae\u30f3\u30b0\u65b9\u6cd5\u306e\u5171\u901a\u5316<\/h3>\n<p data-line=\"544\" class=\"code-line\">\u30ed\u30ae\u30f3\u30b0\u306e\u300c\u666e\u901a\u306e\u3084\u308a\u65b9\u300d\u3092\u6c7a\u3081\u3066\u304a\u304f\u3053\u3068\u3067\u3001\u30ed\u30b0\u8a2d\u8a08\u3068\u5b9f\u88c5\u306e\u30eb\u30fc\u30eb\u3092\u4f5c\u308a\u3084\u3059\u304f\u306a\u308a\u307e\u3059\u3002<\/p>\n<h2 id=\"%E3%81%BE%E3%81%A8%E3%82%81\" data-line=\"546\" class=\"code-line\">\n \u307e\u3068\u3081<\/h2>\n<p data-line=\"548\" class=\"code-line\">Sentry Logs\u3068ActiveSupport::Notifications\u3092\u7d44\u307f\u5408\u308f\u305b\u308b\u3053\u3068\u3067\u3001Rails\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306b\u69cb\u9020\u5316\u30ed\u30ae\u30f3\u30b0\u3092\u5c0e\u5165\u3067\u304d\u307e\u3057\u305f\u3002<\/p>\n<h3 id=\"%E4%B8%BB%E3%81%AA%E5%88%A9%E7%82%B9\" data-line=\"550\" class=\"code-line\">\n \u4e3b\u306a\u5229\u70b9<\/h3>\n<ul data-line=\"552\" class=\"code-line\">\n<li data-line=\"552\" class=\"code-line\">\u30a8\u30e9\u30fc\u3068\u30ed\u30b0\u306e\u7d71\u5408\u306b\u3088\u308a\u3001\u30c7\u30d0\u30c3\u30b0\u52b9\u7387\u304c\u5411\u4e0a<\/li>\n<li data-line=\"553\" class=\"code-line\">ActiveSupport::Notifications\u306b\u3088\u308b\u758e\u7d50\u5408\u306a\u8a2d\u8a08<\/li>\n<li data-line=\"554\" class=\"code-line\">Rails\u306e<code>filter_parameters<\/code>\u8a2d\u5b9a\u306b\u3088\u308b\u6a5f\u5bc6\u60c5\u5831\u306e\u81ea\u52d5\u30d5\u30a3\u30eb\u30bf\u30ea\u30f3\u30b0<\/li>\n<li data-line=\"555\" class=\"code-line\">\u30ea\u30a2\u30eb\u30bf\u30a4\u30e0\u3067\u306e\u30ed\u30b0\u76e3\u8996\u3068\u30a2\u30e9\u30fc\u30c8<\/li>\n<\/ul>\n<h3 id=\"%E4%BB%8A%E5%BE%8C%E3%81%AE%E5%B1%95%E9%96%8B\" data-line=\"557\" class=\"code-line\">\n \u4eca\u5f8c\u306e\u5c55\u958b<\/h3>\n<p data-line=\"559\" class=\"code-line\">\u5c0e\u5165\u5f8c\u306f\u3001\u4ee5\u4e0b\u306e\u5c55\u958b\u3092\u691c\u8a0e\u3067\u304d\u307e\u3059\uff1a<\/p>\n<ol data-line=\"561\" class=\"code-line\">\n<li data-line=\"561\" class=\"code-line\">\n<strong>\u30a2\u30e9\u30fc\u30c8\u8a2d\u5b9a\u306e\u6700\u9069\u5316<\/strong>: \u91cd\u8981\u306a\u51e6\u7406\u306b\u5bfe\u3057\u3066\u9069\u5207\u306a\u30a2\u30e9\u30fc\u30c8\u3092\u8a2d\u5b9a<\/li>\n<li data-line=\"562\" class=\"code-line\">\n<strong>\u30c0\u30c3\u30b7\u30e5\u30dc\u30fc\u30c9\u306e\u4f5c\u6210<\/strong>: \u3088\u304f\u4f7f\u7528\u3059\u308b\u30af\u30a8\u30ea\u3092\u30c0\u30c3\u30b7\u30e5\u30dc\u30fc\u30c9\u5316<\/li>\n<li data-line=\"563\" class=\"code-line\">\n<strong>\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u76e3\u8996<\/strong>: <code>duration_ms<\/code>\u3092\u6d3b\u7528\u3057\u305f\u7d99\u7d9a\u7684\u306a\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u76e3\u8996<\/li>\n<\/ol>\n<p data-line=\"565\" class=\"code-line\">\u69cb\u9020\u5316\u30ed\u30ae\u30f3\u30b0\u306f\u3001\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u53ef\u89b3\u6e2c\u6027\u3092\u5927\u304d\u304f\u5411\u4e0a\u3055\u305b\u307e\u3059\u3002Sentry Logs\u3092\u6d3b\u7528\u3059\u308b\u3053\u3068\u3067\u3001\u958b\u767a\u30c1\u30fc\u30e0\u5168\u4f53\u3067\u52b9\u7387\u7684\u306b\u554f\u984c\u3092\u767a\u898b\u30fb\u89e3\u6c7a\u3067\u304d\u308b\u74b0\u5883\u3092\u69cb\u7bc9\u3067\u304d\u307e\u3057\u305f\u3002<\/p>\n<\/div>\n\n<br \/><a href=\"https:\/\/zenn.dev\/takeyuwebinc\/articles\/664bf4426adf43\">\u5143\u306e\u8a18\u4e8b\u3092\u78ba\u8a8d\u3059\u308b <\/a><\/p>\n","protected":false},"excerpt":{"rendered":"\u306f\u3058\u3081\u306b Rails\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u904b\u7528\u306b\u304a\u3044\u3066\u3001\u30ed\u30b0\u306e\u7ba1\u7406\u306f\u554f\u984c\u767a\u751f\u6642\u306e\u30c7\u30d0\u30c3\u30b0\u3084\u30b5\u30fc\u30d3\u30b9\u76e3\u8996\u306e\u305f\u3081\u306b\u91cd\u8981\u306a\u69cb\u6210\u8981\u7d20\u3067\u3059\u3002\u3057\u304b\u3057\u3001\u5f93\u6765\u306e\u30c6\u30ad\u30b9\u30c8\u30d9\u30fc\u30b9\u306e\u30ed\u30b0\u3067\u306f\u3001\u30a8\u30e9\u30fc\u767a\u751f\u6642\u306b\u8907\u6570\u306e\u30c4\u30fc\u30eb\u3092\u884c\u304d\u6765\u3057\u306a\u304c\u3089\u30ed\u30b0\u3092\u691c\u7d22\u3057 [&hellip;]","protected":false},"author":1,"featured_media":21750,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[4],"tags":[],"class_list":["post-21749","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-company-tec"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.6 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Sentry Logs\u3067\u5b9f\u73fe\u3059\u308bRails\u30a2\u30d7\u30ea\u306e\u69cb\u9020\u5316\u30ed\u30ae\u30f3\u30b0 - \u30dd\u30b1\u30b3\u30f3<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/zenn.dev\/takeyuwebinc\/articles\/664bf4426adf43\" \/>\n<meta property=\"og:locale\" content=\"ja_JP\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Sentry Logs\u3067\u5b9f\u73fe\u3059\u308bRails\u30a2\u30d7\u30ea\u306e\u69cb\u9020\u5316\u30ed\u30ae\u30f3\u30b0 - \u30dd\u30b1\u30b3\u30f3\" \/>\n<meta property=\"og:description\" content=\"\u306f\u3058\u3081\u306b Rails\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u904b\u7528\u306b\u304a\u3044\u3066\u3001\u30ed\u30b0\u306e\u7ba1\u7406\u306f\u554f\u984c\u767a\u751f\u6642\u306e\u30c7\u30d0\u30c3\u30b0\u3084\u30b5\u30fc\u30d3\u30b9\u76e3\u8996\u306e\u305f\u3081\u306b\u91cd\u8981\u306a\u69cb\u6210\u8981\u7d20\u3067\u3059\u3002\u3057\u304b\u3057\u3001\u5f93\u6765\u306e\u30c6\u30ad\u30b9\u30c8\u30d9\u30fc\u30b9\u306e\u30ed\u30b0\u3067\u306f\u3001\u30a8\u30e9\u30fc\u767a\u751f\u6642\u306b\u8907\u6570\u306e\u30c4\u30fc\u30eb\u3092\u884c\u304d\u6765\u3057\u306a\u304c\u3089\u30ed\u30b0\u3092\u691c\u7d22\u3057 [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/zenn.dev\/takeyuwebinc\/articles\/664bf4426adf43\" \/>\n<meta property=\"og:site_name\" content=\"\u30dd\u30b1\u30b3\u30f3\" \/>\n<meta property=\"article:published_time\" content=\"2025-11-01T01:01:35+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/pokecon.jp\/job\/wp-content\/uploads\/2025\/11\/og-base-w1200-v2.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1200\" \/>\n\t<meta property=\"og:image:height\" content=\"630\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"info@pokecon.jp\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"\u57f7\u7b46\u8005\" \/>\n\t<meta name=\"twitter:data1\" content=\"info@pokecon.jp\" \/>\n\t<meta name=\"twitter:label2\" content=\"\u63a8\u5b9a\u8aad\u307f\u53d6\u308a\u6642\u9593\" \/>\n\t<meta name=\"twitter:data2\" content=\"5\u5206\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/zenn.dev\\\/takeyuwebinc\\\/articles\\\/664bf4426adf43#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/pokecon.jp\\\/job\\\/21749\\\/\"},\"author\":{\"name\":\"info@pokecon.jp\",\"@id\":\"https:\\\/\\\/pokecon.jp\\\/job\\\/#\\\/schema\\\/person\\\/16c9f07b1ba984d165d9aee259bda997\"},\"headline\":\"Sentry Logs\u3067\u5b9f\u73fe\u3059\u308bRails\u30a2\u30d7\u30ea\u306e\u69cb\u9020\u5316\u30ed\u30ae\u30f3\u30b0\",\"datePublished\":\"2025-11-01T01:01:35+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/pokecon.jp\\\/job\\\/21749\\\/\"},\"wordCount\":202,\"image\":{\"@id\":\"https:\\\/\\\/zenn.dev\\\/takeyuwebinc\\\/articles\\\/664bf4426adf43#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/pokecon.jp\\\/job\\\/wp-content\\\/uploads\\\/2025\\\/11\\\/og-base-w1200-v2.png\",\"articleSection\":[\"\u4f01\u696d\u30c6\u30c3\u30af\"],\"inLanguage\":\"ja\"},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/pokecon.jp\\\/job\\\/21749\\\/\",\"url\":\"https:\\\/\\\/zenn.dev\\\/takeyuwebinc\\\/articles\\\/664bf4426adf43\",\"name\":\"Sentry Logs\u3067\u5b9f\u73fe\u3059\u308bRails\u30a2\u30d7\u30ea\u306e\u69cb\u9020\u5316\u30ed\u30ae\u30f3\u30b0 - \u30dd\u30b1\u30b3\u30f3\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/pokecon.jp\\\/job\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/zenn.dev\\\/takeyuwebinc\\\/articles\\\/664bf4426adf43#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/zenn.dev\\\/takeyuwebinc\\\/articles\\\/664bf4426adf43#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/pokecon.jp\\\/job\\\/wp-content\\\/uploads\\\/2025\\\/11\\\/og-base-w1200-v2.png\",\"datePublished\":\"2025-11-01T01:01:35+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/pokecon.jp\\\/job\\\/#\\\/schema\\\/person\\\/16c9f07b1ba984d165d9aee259bda997\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/zenn.dev\\\/takeyuwebinc\\\/articles\\\/664bf4426adf43#breadcrumb\"},\"inLanguage\":\"ja\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/zenn.dev\\\/takeyuwebinc\\\/articles\\\/664bf4426adf43\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"ja\",\"@id\":\"https:\\\/\\\/zenn.dev\\\/takeyuwebinc\\\/articles\\\/664bf4426adf43#primaryimage\",\"url\":\"https:\\\/\\\/pokecon.jp\\\/job\\\/wp-content\\\/uploads\\\/2025\\\/11\\\/og-base-w1200-v2.png\",\"contentUrl\":\"https:\\\/\\\/pokecon.jp\\\/job\\\/wp-content\\\/uploads\\\/2025\\\/11\\\/og-base-w1200-v2.png\",\"width\":1200,\"height\":630},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/zenn.dev\\\/takeyuwebinc\\\/articles\\\/664bf4426adf43#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"\u30db\u30fc\u30e0\",\"item\":\"https:\\\/\\\/pokecon.jp\\\/job\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Sentry Logs\u3067\u5b9f\u73fe\u3059\u308bRails\u30a2\u30d7\u30ea\u306e\u69cb\u9020\u5316\u30ed\u30ae\u30f3\u30b0\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/pokecon.jp\\\/job\\\/#website\",\"url\":\"https:\\\/\\\/pokecon.jp\\\/job\\\/\",\"name\":\"\u30dd\u30b1\u30b3\u30f3\",\"description\":\"\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/pokecon.jp\\\/job\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"ja\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/pokecon.jp\\\/job\\\/#\\\/schema\\\/person\\\/16c9f07b1ba984d165d9aee259bda997\",\"name\":\"info@pokecon.jp\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"ja\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/2b0549cd9f7907c092ca5fbb283baf72337f235726e4b46fa39ec0b701ac2fe2?s=96&d=wavatar&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/2b0549cd9f7907c092ca5fbb283baf72337f235726e4b46fa39ec0b701ac2fe2?s=96&d=wavatar&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/2b0549cd9f7907c092ca5fbb283baf72337f235726e4b46fa39ec0b701ac2fe2?s=96&d=wavatar&r=g\",\"caption\":\"info@pokecon.jp\"},\"url\":\"https:\\\/\\\/pokecon.jp\\\/job\\\/author\\\/infopokecon-jp\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Sentry Logs\u3067\u5b9f\u73fe\u3059\u308bRails\u30a2\u30d7\u30ea\u306e\u69cb\u9020\u5316\u30ed\u30ae\u30f3\u30b0 - \u30dd\u30b1\u30b3\u30f3","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/zenn.dev\/takeyuwebinc\/articles\/664bf4426adf43","og_locale":"ja_JP","og_type":"article","og_title":"Sentry Logs\u3067\u5b9f\u73fe\u3059\u308bRails\u30a2\u30d7\u30ea\u306e\u69cb\u9020\u5316\u30ed\u30ae\u30f3\u30b0 - \u30dd\u30b1\u30b3\u30f3","og_description":"\u306f\u3058\u3081\u306b Rails\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u904b\u7528\u306b\u304a\u3044\u3066\u3001\u30ed\u30b0\u306e\u7ba1\u7406\u306f\u554f\u984c\u767a\u751f\u6642\u306e\u30c7\u30d0\u30c3\u30b0\u3084\u30b5\u30fc\u30d3\u30b9\u76e3\u8996\u306e\u305f\u3081\u306b\u91cd\u8981\u306a\u69cb\u6210\u8981\u7d20\u3067\u3059\u3002\u3057\u304b\u3057\u3001\u5f93\u6765\u306e\u30c6\u30ad\u30b9\u30c8\u30d9\u30fc\u30b9\u306e\u30ed\u30b0\u3067\u306f\u3001\u30a8\u30e9\u30fc\u767a\u751f\u6642\u306b\u8907\u6570\u306e\u30c4\u30fc\u30eb\u3092\u884c\u304d\u6765\u3057\u306a\u304c\u3089\u30ed\u30b0\u3092\u691c\u7d22\u3057 [&hellip;]","og_url":"https:\/\/zenn.dev\/takeyuwebinc\/articles\/664bf4426adf43","og_site_name":"\u30dd\u30b1\u30b3\u30f3","article_published_time":"2025-11-01T01:01:35+00:00","og_image":[{"width":1200,"height":630,"url":"https:\/\/pokecon.jp\/job\/wp-content\/uploads\/2025\/11\/og-base-w1200-v2.png","type":"image\/png"}],"author":"info@pokecon.jp","twitter_card":"summary_large_image","twitter_misc":{"\u57f7\u7b46\u8005":"info@pokecon.jp","\u63a8\u5b9a\u8aad\u307f\u53d6\u308a\u6642\u9593":"5\u5206"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/zenn.dev\/takeyuwebinc\/articles\/664bf4426adf43#article","isPartOf":{"@id":"https:\/\/pokecon.jp\/job\/21749\/"},"author":{"name":"info@pokecon.jp","@id":"https:\/\/pokecon.jp\/job\/#\/schema\/person\/16c9f07b1ba984d165d9aee259bda997"},"headline":"Sentry Logs\u3067\u5b9f\u73fe\u3059\u308bRails\u30a2\u30d7\u30ea\u306e\u69cb\u9020\u5316\u30ed\u30ae\u30f3\u30b0","datePublished":"2025-11-01T01:01:35+00:00","mainEntityOfPage":{"@id":"https:\/\/pokecon.jp\/job\/21749\/"},"wordCount":202,"image":{"@id":"https:\/\/zenn.dev\/takeyuwebinc\/articles\/664bf4426adf43#primaryimage"},"thumbnailUrl":"https:\/\/pokecon.jp\/job\/wp-content\/uploads\/2025\/11\/og-base-w1200-v2.png","articleSection":["\u4f01\u696d\u30c6\u30c3\u30af"],"inLanguage":"ja"},{"@type":"WebPage","@id":"https:\/\/pokecon.jp\/job\/21749\/","url":"https:\/\/zenn.dev\/takeyuwebinc\/articles\/664bf4426adf43","name":"Sentry Logs\u3067\u5b9f\u73fe\u3059\u308bRails\u30a2\u30d7\u30ea\u306e\u69cb\u9020\u5316\u30ed\u30ae\u30f3\u30b0 - \u30dd\u30b1\u30b3\u30f3","isPartOf":{"@id":"https:\/\/pokecon.jp\/job\/#website"},"primaryImageOfPage":{"@id":"https:\/\/zenn.dev\/takeyuwebinc\/articles\/664bf4426adf43#primaryimage"},"image":{"@id":"https:\/\/zenn.dev\/takeyuwebinc\/articles\/664bf4426adf43#primaryimage"},"thumbnailUrl":"https:\/\/pokecon.jp\/job\/wp-content\/uploads\/2025\/11\/og-base-w1200-v2.png","datePublished":"2025-11-01T01:01:35+00:00","author":{"@id":"https:\/\/pokecon.jp\/job\/#\/schema\/person\/16c9f07b1ba984d165d9aee259bda997"},"breadcrumb":{"@id":"https:\/\/zenn.dev\/takeyuwebinc\/articles\/664bf4426adf43#breadcrumb"},"inLanguage":"ja","potentialAction":[{"@type":"ReadAction","target":["https:\/\/zenn.dev\/takeyuwebinc\/articles\/664bf4426adf43"]}]},{"@type":"ImageObject","inLanguage":"ja","@id":"https:\/\/zenn.dev\/takeyuwebinc\/articles\/664bf4426adf43#primaryimage","url":"https:\/\/pokecon.jp\/job\/wp-content\/uploads\/2025\/11\/og-base-w1200-v2.png","contentUrl":"https:\/\/pokecon.jp\/job\/wp-content\/uploads\/2025\/11\/og-base-w1200-v2.png","width":1200,"height":630},{"@type":"BreadcrumbList","@id":"https:\/\/zenn.dev\/takeyuwebinc\/articles\/664bf4426adf43#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"\u30db\u30fc\u30e0","item":"https:\/\/pokecon.jp\/job\/"},{"@type":"ListItem","position":2,"name":"Sentry Logs\u3067\u5b9f\u73fe\u3059\u308bRails\u30a2\u30d7\u30ea\u306e\u69cb\u9020\u5316\u30ed\u30ae\u30f3\u30b0"}]},{"@type":"WebSite","@id":"https:\/\/pokecon.jp\/job\/#website","url":"https:\/\/pokecon.jp\/job\/","name":"\u30dd\u30b1\u30b3\u30f3","description":"","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/pokecon.jp\/job\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"ja"},{"@type":"Person","@id":"https:\/\/pokecon.jp\/job\/#\/schema\/person\/16c9f07b1ba984d165d9aee259bda997","name":"info@pokecon.jp","image":{"@type":"ImageObject","inLanguage":"ja","@id":"https:\/\/secure.gravatar.com\/avatar\/2b0549cd9f7907c092ca5fbb283baf72337f235726e4b46fa39ec0b701ac2fe2?s=96&d=wavatar&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/2b0549cd9f7907c092ca5fbb283baf72337f235726e4b46fa39ec0b701ac2fe2?s=96&d=wavatar&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/2b0549cd9f7907c092ca5fbb283baf72337f235726e4b46fa39ec0b701ac2fe2?s=96&d=wavatar&r=g","caption":"info@pokecon.jp"},"url":"https:\/\/pokecon.jp\/job\/author\/infopokecon-jp\/"}]}},"_links":{"self":[{"href":"https:\/\/pokecon.jp\/job\/wp-json\/wp\/v2\/posts\/21749","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/pokecon.jp\/job\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/pokecon.jp\/job\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/pokecon.jp\/job\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/pokecon.jp\/job\/wp-json\/wp\/v2\/comments?post=21749"}],"version-history":[{"count":1,"href":"https:\/\/pokecon.jp\/job\/wp-json\/wp\/v2\/posts\/21749\/revisions"}],"predecessor-version":[{"id":21751,"href":"https:\/\/pokecon.jp\/job\/wp-json\/wp\/v2\/posts\/21749\/revisions\/21751"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/pokecon.jp\/job\/wp-json\/wp\/v2\/media\/21750"}],"wp:attachment":[{"href":"https:\/\/pokecon.jp\/job\/wp-json\/wp\/v2\/media?parent=21749"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/pokecon.jp\/job\/wp-json\/wp\/v2\/categories?post=21749"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/pokecon.jp\/job\/wp-json\/wp\/v2\/tags?post=21749"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}