diff --git a/localization/yabloc/yabloc_monitor/CMakeLists.txt b/localization/yabloc/yabloc_monitor/CMakeLists.txt
index aa1515661b2f6..7267cda53714f 100644
--- a/localization/yabloc/yabloc_monitor/CMakeLists.txt
+++ b/localization/yabloc/yabloc_monitor/CMakeLists.txt
@@ -4,12 +4,16 @@ project(yabloc_monitor)
 find_package(autoware_cmake REQUIRED)
 autoware_package()
 
-ament_auto_add_executable(yabloc_monitor
-  src/yabloc_monitor_node.cpp
+ament_auto_add_library(${PROJECT_NAME}
   src/yabloc_monitor_core.cpp
   src/availability_module.cpp
 )
-ament_target_dependencies(yabloc_monitor)
+
+rclcpp_components_register_node(${PROJECT_NAME}
+  PLUGIN "YabLocMonitor"
+  EXECUTABLE ${PROJECT_NAME}_node
+  EXECUTOR SingleThreadedExecutor
+)
 
 ament_auto_package(
   INSTALL_TO_SHARE
diff --git a/localization/yabloc/yabloc_monitor/launch/yabloc_monitor.launch.xml b/localization/yabloc/yabloc_monitor/launch/yabloc_monitor.launch.xml
index cf9f73977d35d..3073208e2e1a2 100644
--- a/localization/yabloc/yabloc_monitor/launch/yabloc_monitor.launch.xml
+++ b/localization/yabloc/yabloc_monitor/launch/yabloc_monitor.launch.xml
@@ -1,7 +1,7 @@
 <launch>
   <arg name="param_file" default="$(find-pkg-share yabloc_monitor)/config/yabloc_monitor.param.yaml"/>
 
-  <node name="yabloc_monitor" pkg="yabloc_monitor" exec="yabloc_monitor" output="screen">
+  <node pkg="yabloc_monitor" exec="yabloc_monitor_node" output="both">
     <param from="$(var param_file)"/>
     <remap from="~/input/yabloc_pose" to="/localization/pose_estimator/yabloc/pf/pose"/>
   </node>
diff --git a/localization/yabloc/yabloc_monitor/package.xml b/localization/yabloc/yabloc_monitor/package.xml
index 22a5d0eded6b6..a42a734dbab31 100644
--- a/localization/yabloc/yabloc_monitor/package.xml
+++ b/localization/yabloc/yabloc_monitor/package.xml
@@ -20,6 +20,7 @@
   <depend>diagnostic_updater</depend>
   <depend>geometry_msgs</depend>
   <depend>rclcpp</depend>
+  <depend>rclcpp_components</depend>
 
   <test_depend>ament_cmake_gtest</test_depend>
   <test_depend>ament_lint_auto</test_depend>
diff --git a/localization/yabloc/yabloc_monitor/src/yabloc_monitor_core.cpp b/localization/yabloc/yabloc_monitor/src/yabloc_monitor_core.cpp
index 876b86fd2bc9e..31e6ec9c51e7a 100644
--- a/localization/yabloc/yabloc_monitor/src/yabloc_monitor_core.cpp
+++ b/localization/yabloc/yabloc_monitor/src/yabloc_monitor_core.cpp
@@ -18,7 +18,8 @@
 
 #include <memory>
 
-YabLocMonitor::YabLocMonitor() : Node("yabloc_monitor"), updater_(this)
+YabLocMonitor::YabLocMonitor(const rclcpp::NodeOptions & options)
+: Node("yabloc_monitor", options), updater_(this)
 {
   updater_.setHardwareID(get_name());
   updater_.add("yabloc_status", this, &YabLocMonitor::update_diagnostics);
@@ -46,3 +47,6 @@ void YabLocMonitor::update_diagnostics(diagnostic_updater::DiagnosticStatusWrapp
     stat.summary(diagnostic_msgs::msg::DiagnosticStatus::ERROR, "NG");
   }
 }
+
+#include <rclcpp_components/register_node_macro.hpp>
+RCLCPP_COMPONENTS_REGISTER_NODE(YabLocMonitor)
diff --git a/localization/yabloc/yabloc_monitor/src/yabloc_monitor_core.hpp b/localization/yabloc/yabloc_monitor/src/yabloc_monitor_core.hpp
index 8b8b937da205b..5dd46d63de6f2 100644
--- a/localization/yabloc/yabloc_monitor/src/yabloc_monitor_core.hpp
+++ b/localization/yabloc/yabloc_monitor/src/yabloc_monitor_core.hpp
@@ -25,7 +25,7 @@
 class YabLocMonitor : public rclcpp::Node
 {
 public:
-  YabLocMonitor();
+  explicit YabLocMonitor(const rclcpp::NodeOptions & options = rclcpp::NodeOptions());
 
 private:
   void update_diagnostics(diagnostic_updater::DiagnosticStatusWrapper & stat);
diff --git a/localization/yabloc/yabloc_monitor/src/yabloc_monitor_node.cpp b/localization/yabloc/yabloc_monitor/src/yabloc_monitor_node.cpp
deleted file mode 100644
index 9b58325c852ea..0000000000000
--- a/localization/yabloc/yabloc_monitor/src/yabloc_monitor_node.cpp
+++ /dev/null
@@ -1,28 +0,0 @@
-// Copyright 2023 TIER IV
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-#include "yabloc_monitor_core.hpp"
-
-#include <memory>
-
-int main(int argc, char ** argv)
-{
-  rclcpp::init(argc, argv);
-  rclcpp::NodeOptions node_options;
-  auto node = std::make_shared<YabLocMonitor>();
-
-  rclcpp::spin(node);
-
-  return 0;
-}