diff --git a/map/map_projection_loader/CMakeLists.txt b/map/map_projection_loader/CMakeLists.txt
index f6102a1efa795..87f519ab22572 100644
--- a/map/map_projection_loader/CMakeLists.txt
+++ b/map/map_projection_loader/CMakeLists.txt
@@ -6,25 +6,24 @@ autoware_package()
 
 ament_auto_find_build_dependencies()
 
-ament_auto_add_library(map_projection_loader_lib SHARED
+ament_auto_add_library(${PROJECT_NAME} SHARED
   src/map_projection_loader.cpp
   src/load_info_from_lanelet2_map.cpp
 )
 
-target_link_libraries(map_projection_loader_lib yaml-cpp)
-
-ament_auto_add_executable(map_projection_loader src/map_projection_loader_node.cpp)
-
-target_compile_options(map_projection_loader PUBLIC -g -Wall -Wextra -Wpedantic -Werror)
+rclcpp_components_register_node(${PROJECT_NAME}
+  PLUGIN "MapProjectionLoader"
+  EXECUTABLE ${PROJECT_NAME}_node
+  EXECUTOR SingleThreadedExecutor
+)
 
-target_link_libraries(map_projection_loader map_projection_loader_lib)
-target_include_directories(map_projection_loader PUBLIC include)
+target_link_libraries(${PROJECT_NAME} yaml-cpp)
 
 function(add_testcase filepath)
   get_filename_component(filename ${filepath} NAME)
   string(REGEX REPLACE ".cpp" "" test_name ${filename})
   ament_add_gmock(${test_name} ${filepath})
-  target_link_libraries("${test_name}" map_projection_loader_lib)
+  target_link_libraries("${test_name}" ${PROJECT_NAME})
   ament_target_dependencies(${test_name} ${${PROJECT_NAME}_FOUND_BUILD_DEPENDS})
 endfunction()
 
@@ -57,7 +56,8 @@ if(BUILD_TESTING)
   add_testcase(test/test_load_info_from_lanelet2_map.cpp)
 endif()
 
-ament_auto_package(INSTALL_TO_SHARE
+ament_auto_package(
+  INSTALL_TO_SHARE
   launch
   config
 )
diff --git a/map/map_projection_loader/include/map_projection_loader/map_projection_loader.hpp b/map/map_projection_loader/include/map_projection_loader/map_projection_loader.hpp
index 54e794e2742bf..05bc6e64e1675 100644
--- a/map/map_projection_loader/include/map_projection_loader/map_projection_loader.hpp
+++ b/map/map_projection_loader/include/map_projection_loader/map_projection_loader.hpp
@@ -29,7 +29,7 @@ tier4_map_msgs::msg::MapProjectorInfo load_map_projector_info(
 class MapProjectionLoader : public rclcpp::Node
 {
 public:
-  MapProjectionLoader();
+  explicit MapProjectionLoader(const rclcpp::NodeOptions & options);
 
 private:
   using MapProjectorInfo = map_interface::MapProjectorInfo;
diff --git a/map/map_projection_loader/launch/map_projection_loader.launch.xml b/map/map_projection_loader/launch/map_projection_loader.launch.xml
index a6570b69d3498..13418a7e97423 100644
--- a/map/map_projection_loader/launch/map_projection_loader.launch.xml
+++ b/map/map_projection_loader/launch/map_projection_loader.launch.xml
@@ -4,7 +4,7 @@
   <arg name="map_projector_info_path" description="Path to the yaml file"/>
   <arg name="lanelet2_map_path" description="Path to the lanelet2 map file"/>
 
-  <node pkg="map_projection_loader" exec="map_projection_loader" name="map_projection_loader" output="screen">
+  <node pkg="map_projection_loader" exec="map_projection_loader_node" output="both">
     <param from="$(var param_path)" allow_substs="true"/>
   </node>
 </launch>
diff --git a/map/map_projection_loader/package.xml b/map/map_projection_loader/package.xml
index 475881577bd58..7a930085cd7b1 100644
--- a/map/map_projection_loader/package.xml
+++ b/map/map_projection_loader/package.xml
@@ -21,6 +21,7 @@
   <depend>component_interface_utils</depend>
   <depend>lanelet2_extension</depend>
   <depend>rclcpp</depend>
+  <depend>rclcpp_components</depend>
   <depend>tier4_map_msgs</depend>
   <depend>yaml-cpp</depend>
 
diff --git a/map/map_projection_loader/src/map_projection_loader.cpp b/map/map_projection_loader/src/map_projection_loader.cpp
index 5966baaed8383..383051e8f67a5 100644
--- a/map/map_projection_loader/src/map_projection_loader.cpp
+++ b/map/map_projection_loader/src/map_projection_loader.cpp
@@ -82,7 +82,8 @@ tier4_map_msgs::msg::MapProjectorInfo load_map_projector_info(
   return msg;
 }
 
-MapProjectionLoader::MapProjectionLoader() : Node("map_projection_loader")
+MapProjectionLoader::MapProjectionLoader(const rclcpp::NodeOptions & options)
+: rclcpp::Node("map_projection_loader", options)
 {
   const std::string yaml_filename = this->declare_parameter<std::string>("map_projector_info_path");
   const std::string lanelet2_map_filename =
@@ -96,3 +97,6 @@ MapProjectionLoader::MapProjectionLoader() : Node("map_projection_loader")
   adaptor.init_pub(publisher_);
   publisher_->publish(msg);
 }
+
+#include <rclcpp_components/register_node_macro.hpp>
+RCLCPP_COMPONENTS_REGISTER_NODE(MapProjectionLoader)
diff --git a/map/map_projection_loader/src/map_projection_loader_node.cpp b/map/map_projection_loader/src/map_projection_loader_node.cpp
deleted file mode 100644
index 1d9336be0d9dd..0000000000000
--- a/map/map_projection_loader/src/map_projection_loader_node.cpp
+++ /dev/null
@@ -1,23 +0,0 @@
-// Copyright 2023 TIER IV, Inc.
-//
-// 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 "map_projection_loader/map_projection_loader.hpp"
-
-int main(int argc, char * argv[])
-{
-  rclcpp::init(argc, argv);
-  rclcpp::spin(std::make_shared<MapProjectionLoader>());
-  rclcpp::shutdown();
-  return 0;
-}
diff --git a/map/map_projection_loader/test/test_node_load_local_cartesian_utm_from_yaml.test.py b/map/map_projection_loader/test/test_node_load_local_cartesian_utm_from_yaml.test.py
index b8540550ce9da..0d0b5cb31afba 100644
--- a/map/map_projection_loader/test/test_node_load_local_cartesian_utm_from_yaml.test.py
+++ b/map/map_projection_loader/test/test_node_load_local_cartesian_utm_from_yaml.test.py
@@ -44,7 +44,7 @@ def generate_test_description():
 
     map_projection_loader_node = Node(
         package="map_projection_loader",
-        executable="map_projection_loader",
+        executable="map_projection_loader_node",
         output="screen",
         parameters=[
             {
diff --git a/map/map_projection_loader/test/test_node_load_local_from_yaml.test.py b/map/map_projection_loader/test/test_node_load_local_from_yaml.test.py
index c7697038cc253..6a17ff340b19f 100644
--- a/map/map_projection_loader/test/test_node_load_local_from_yaml.test.py
+++ b/map/map_projection_loader/test/test_node_load_local_from_yaml.test.py
@@ -44,7 +44,7 @@ def generate_test_description():
 
     map_projection_loader_node = Node(
         package="map_projection_loader",
-        executable="map_projection_loader",
+        executable="map_projection_loader_node",
         output="screen",
         parameters=[
             {
diff --git a/map/map_projection_loader/test/test_node_load_mgrs_from_yaml.test.py b/map/map_projection_loader/test/test_node_load_mgrs_from_yaml.test.py
index f75beddc6827c..37cfd9936bf20 100644
--- a/map/map_projection_loader/test/test_node_load_mgrs_from_yaml.test.py
+++ b/map/map_projection_loader/test/test_node_load_mgrs_from_yaml.test.py
@@ -44,7 +44,7 @@ def generate_test_description():
 
     map_projection_loader_node = Node(
         package="map_projection_loader",
-        executable="map_projection_loader",
+        executable="map_projection_loader_node",
         output="screen",
         parameters=[
             {
diff --git a/map/map_projection_loader/test/test_node_load_transverse_mercator_from_yaml.test.py b/map/map_projection_loader/test/test_node_load_transverse_mercator_from_yaml.test.py
index 765f3cde04679..7bccdc7875454 100644
--- a/map/map_projection_loader/test/test_node_load_transverse_mercator_from_yaml.test.py
+++ b/map/map_projection_loader/test/test_node_load_transverse_mercator_from_yaml.test.py
@@ -44,7 +44,7 @@ def generate_test_description():
 
     map_projection_loader_node = Node(
         package="map_projection_loader",
-        executable="map_projection_loader",
+        executable="map_projection_loader_node",
         output="screen",
         parameters=[
             {