diff --git a/.sqlx/query-e19a25a597098f5d6c5f83992e6eb3a916d2256e346b93c1ad31cc26f9a705a2.json b/.sqlx/query-323d5e8a03e7c905970e1787748510402a5d36c1166f2d21cf14a100779048d6.json
similarity index 79%
rename from .sqlx/query-e19a25a597098f5d6c5f83992e6eb3a916d2256e346b93c1ad31cc26f9a705a2.json
rename to .sqlx/query-323d5e8a03e7c905970e1787748510402a5d36c1166f2d21cf14a100779048d6.json
index 40f94335..733d0a99 100644
--- a/.sqlx/query-e19a25a597098f5d6c5f83992e6eb3a916d2256e346b93c1ad31cc26f9a705a2.json
+++ b/.sqlx/query-323d5e8a03e7c905970e1787748510402a5d36c1166f2d21cf14a100779048d6.json
@@ -1,6 +1,6 @@
 {
   "db_name": "PostgreSQL",
-  "query": "WITH from_stations AS (\n                SELECT\n                    s.station_cd,\n                    s.line_cd\n                FROM stations AS s\n                WHERE s.station_g_cd = $1\n                AND s.e_status = 0\n            )\n            SELECT\n                s.station_cd,\n                s.station_g_cd,\n                s.station_name,\n                s.station_name_k,\n                s.station_name_r,\n                s.station_name_rn,\n                s.station_name_zh,\n                s.station_name_ko,\n                s.station_number1,\n                s.station_number2,\n                s.station_number3,\n                s.station_number4,\n                s.three_letter_code,\n                s.line_cd,\n                s.pref_cd,\n                s.post,\n                s.address,\n                s.lon,\n                s.lat,\n                s.open_ymd,\n                s.close_ymd,\n                s.e_status,\n                s.e_sort,\n                l.company_cd,\n                COALESCE(NULLIF(COALESCE(a.line_name, l.line_name), ''), NULL) AS line_name,\n                COALESCE(NULLIF(COALESCE(a.line_name_k, l.line_name_k), ''), NULL) AS line_name_k,\n                COALESCE(NULLIF(COALESCE(a.line_name_h, l.line_name_h), ''), NULL) AS line_name_h,\n                COALESCE(NULLIF(COALESCE(a.line_name_r, l.line_name_r), ''), NULL) AS line_name_r,\n                COALESCE(NULLIF(COALESCE(a.line_name_zh, l.line_name_zh), ''), NULL) AS line_name_zh,\n                COALESCE(NULLIF(COALESCE(a.line_name_ko, l.line_name_ko), ''), NULL) AS line_name_ko,\n                COALESCE(NULLIF(COALESCE(a.line_color_c, l.line_color_c), ''), NULL) AS line_color_c,\n                l.line_type,\n                l.line_symbol1,\n                l.line_symbol2,\n                l.line_symbol3,\n                l.line_symbol4,\n                l.line_symbol1_color,\n                l.line_symbol2_color,\n                l.line_symbol3_color,\n                l.line_symbol4_color,\n                l.line_symbol1_shape,\n                l.line_symbol2_shape,\n                l.line_symbol3_shape,\n                l.line_symbol4_shape,\n                COALESCE(l.average_distance, 0.0)::DOUBLE PRECISION AS average_distance,\n                NULL::int AS type_id,\n                NULL::int AS sst_id,\n                NULL::int AS type_cd,\n                NULL::int AS line_group_cd,\n                NULL::int AS pass,\n                NULL::text AS type_name,\n                NULL::text AS type_name_k,\n                NULL::text AS type_name_r,\n                NULL::text AS type_name_zh,\n                NULL::text AS type_name_ko,\n                NULL::text AS color,\n                NULL::int AS direction,\n                NULL::int AS kind\n            FROM stations AS s\n                LEFT JOIN from_stations AS fs\n                    ON fs.station_cd IS NOT NULL\n                LEFT JOIN station_station_types AS from_sst\n                    ON from_sst.station_cd = fs.station_cd\n                LEFT JOIN station_station_types AS dst_sst\n                    ON dst_sst.station_cd = s.station_cd\n                LEFT JOIN types AS t\n                    ON t.type_cd = dst_sst.type_cd\n                LEFT JOIN line_aliases AS la\n                    ON la.station_cd = s.station_cd\n                LEFT JOIN aliases AS a\n                    ON la.alias_cd = a.id\n                JOIN lines AS l\n                    ON l.line_cd = s.line_cd\n                    AND l.e_status = 0\n            WHERE\n                (\n                    s.station_name   LIKE $2\n                    OR s.station_name_rn LIKE $3\n                    OR s.station_name_k LIKE $4\n                    OR s.station_name_zh LIKE $5\n                    OR s.station_name_ko LIKE $6\n                )\n                AND s.e_status = 0\n                AND (\n                    (\n                        from_sst.id IS NOT NULL\n                        AND dst_sst.id IS NOT NULL\n                        AND from_sst.line_group_cd = dst_sst.line_group_cd\n                        AND dst_sst.pass <> 1\n                    )\n                    OR\n                    (\n                        (from_sst.id IS NULL OR dst_sst.id IS NULL)\n                        AND s.line_cd = COALESCE(fs.line_cd, s.line_cd)\n                    )\n                )\n            ORDER BY s.station_g_cd, s.station_name\n            LIMIT $7",
+  "query": "WITH from_stations AS (\n                SELECT\n                    s.station_cd,\n                    s.line_cd\n                FROM stations AS s\n                WHERE s.station_g_cd = $1\n                AND s.e_status = 0\n            )\n            SELECT\n                s.station_cd,\n                s.station_g_cd,\n                s.station_name,\n                s.station_name_k,\n                s.station_name_r,\n                s.station_name_rn,\n                s.station_name_zh,\n                s.station_name_ko,\n                s.station_number1,\n                s.station_number2,\n                s.station_number3,\n                s.station_number4,\n                s.three_letter_code,\n                s.line_cd,\n                s.pref_cd,\n                s.post,\n                s.address,\n                s.lon,\n                s.lat,\n                s.open_ymd,\n                s.close_ymd,\n                s.e_status,\n                s.e_sort,\n                l.company_cd,\n                COALESCE(NULLIF(COALESCE(a.line_name, l.line_name), ''), NULL) AS line_name,\n                COALESCE(NULLIF(COALESCE(a.line_name_k, l.line_name_k), ''), NULL) AS line_name_k,\n                COALESCE(NULLIF(COALESCE(a.line_name_h, l.line_name_h), ''), NULL) AS line_name_h,\n                COALESCE(NULLIF(COALESCE(a.line_name_r, l.line_name_r), ''), NULL) AS line_name_r,\n                COALESCE(NULLIF(COALESCE(a.line_name_zh, l.line_name_zh), ''), NULL) AS line_name_zh,\n                COALESCE(NULLIF(COALESCE(a.line_name_ko, l.line_name_ko), ''), NULL) AS line_name_ko,\n                COALESCE(NULLIF(COALESCE(a.line_color_c, l.line_color_c), ''), NULL) AS line_color_c,\n                l.line_type,\n                l.line_symbol1,\n                l.line_symbol2,\n                l.line_symbol3,\n                l.line_symbol4,\n                l.line_symbol1_color,\n                l.line_symbol2_color,\n                l.line_symbol3_color,\n                l.line_symbol4_color,\n                l.line_symbol1_shape,\n                l.line_symbol2_shape,\n                l.line_symbol3_shape,\n                l.line_symbol4_shape,\n                COALESCE(l.average_distance, 0.0)::DOUBLE PRECISION AS average_distance,\n                COALESCE(from_sst.line_group_cd, NULL)::int AS line_group_cd, -- has_train_types用\n                NULL::int AS type_id,\n                NULL::int AS sst_id,\n                NULL::int AS type_cd,\n                NULL::int AS pass,\n                NULL::text AS type_name,\n                NULL::text AS type_name_k,\n                NULL::text AS type_name_r,\n                NULL::text AS type_name_zh,\n                NULL::text AS type_name_ko,\n                NULL::text AS color,\n                NULL::int AS direction,\n                NULL::int AS kind\n            FROM stations AS s\n                LEFT JOIN from_stations AS fs\n                    ON fs.station_cd IS NOT NULL\n                LEFT JOIN station_station_types AS from_sst\n                    ON from_sst.station_cd = fs.station_cd\n                LEFT JOIN station_station_types AS dst_sst\n                    ON dst_sst.station_cd = s.station_cd\n                LEFT JOIN types AS t\n                    ON t.type_cd = dst_sst.type_cd\n                LEFT JOIN line_aliases AS la\n                    ON la.station_cd = s.station_cd\n                LEFT JOIN aliases AS a\n                    ON la.alias_cd = a.id\n                JOIN lines AS l\n                    ON l.line_cd = s.line_cd\n                    AND l.e_status = 0\n            WHERE\n                (\n                    s.station_name   LIKE $2\n                    OR s.station_name_rn LIKE $3\n                    OR s.station_name_k LIKE $4\n                    OR s.station_name_zh LIKE $5\n                    OR s.station_name_ko LIKE $6\n                )\n                AND s.e_status = 0\n                AND (\n                    (\n                        from_sst.id IS NOT NULL\n                        AND dst_sst.id IS NOT NULL\n                        AND from_sst.line_group_cd = dst_sst.line_group_cd\n                        AND dst_sst.pass <> 1\n                    )\n                    OR\n                    (\n                        (from_sst.id IS NULL OR dst_sst.id IS NULL)\n                        AND s.line_cd = COALESCE(fs.line_cd, s.line_cd)\n                    )\n                )\n            ORDER BY s.station_g_cd, s.station_name\n            LIMIT $7",
   "describe": {
     "columns": [
       {
@@ -230,22 +230,22 @@
       },
       {
         "ordinal": 45,
-        "name": "type_id",
+        "name": "line_group_cd",
         "type_info": "Int4"
       },
       {
         "ordinal": 46,
-        "name": "sst_id",
+        "name": "type_id",
         "type_info": "Int4"
       },
       {
         "ordinal": 47,
-        "name": "type_cd",
+        "name": "sst_id",
         "type_info": "Int4"
       },
       {
         "ordinal": 48,
-        "name": "line_group_cd",
+        "name": "type_cd",
         "type_info": "Int4"
       },
       {
@@ -366,5 +366,5 @@
       null
     ]
   },
-  "hash": "e19a25a597098f5d6c5f83992e6eb3a916d2256e346b93c1ad31cc26f9a705a2"
+  "hash": "323d5e8a03e7c905970e1787748510402a5d36c1166f2d21cf14a100779048d6"
 }
diff --git a/.sqlx/query-58899fb950e311e87a33db5142b914a376a60c6cd2650c3723fbdde78beaff12.json b/.sqlx/query-422bdec51028a86db49d9e2b0babd7f58066d3a2433f5b6416972dfc359540fa.json
similarity index 89%
rename from .sqlx/query-58899fb950e311e87a33db5142b914a376a60c6cd2650c3723fbdde78beaff12.json
rename to .sqlx/query-422bdec51028a86db49d9e2b0babd7f58066d3a2433f5b6416972dfc359540fa.json
index 218700c0..554e1ef0 100644
--- a/.sqlx/query-58899fb950e311e87a33db5142b914a376a60c6cd2650c3723fbdde78beaff12.json
+++ b/.sqlx/query-422bdec51028a86db49d9e2b0babd7f58066d3a2433f5b6416972dfc359540fa.json
@@ -1,6 +1,6 @@
 {
   "db_name": "PostgreSQL",
-  "query": "WITH\n                from_cte AS (\n                    SELECT\n                        s.station_cd,\n                        s.line_cd\n                    FROM\n                        stations AS s\n                    WHERE\n                        s.station_g_cd = $1\n                ),\n                to_cte AS (\n                    SELECT\n                        s.station_cd,\n                        s.line_cd\n                    FROM\n                        stations AS s\n                    WHERE\n                        s.station_g_cd = $2\n                ),\n                common_lines AS (\n                    SELECT DISTINCT s1.line_cd\n                    FROM stations s1\n                    WHERE s1.station_g_cd = $3\n                        AND s1.e_status = 0\n                        AND EXISTS (\n                        SELECT 1\n                        FROM stations s2\n                        WHERE s2.station_g_cd = $4\n                            AND s2.e_status = 0\n                            AND s2.line_cd = s1.line_cd\n                        )\n                ),\n                sst_cte_c1 AS (\n                    SELECT\n                        sst.line_group_cd\n                    FROM\n                        station_station_types AS sst\n                        JOIN from_cte ON sst.station_cd = from_cte.station_cd\n                    WHERE\n                        sst.pass <> 1\n                ),\n                sst_cte_c2 AS (\n                    SELECT\n                        sst.line_group_cd\n                    FROM\n                        station_station_types AS sst\n                        JOIN to_cte ON sst.station_cd = to_cte.station_cd\n                    WHERE\n                        sst.pass <> 1\n                ),\n                sst_cte AS (\n                    SELECT\n                        sst.id,\n                        sst.station_cd,\n                        sst.type_cd,\n                        sst.line_group_cd,\n                        sst.pass\n                    FROM\n                        station_station_types AS sst\n                        JOIN sst_cte_c1 ON sst.line_group_cd = sst_cte_c1.line_group_cd\n                        JOIN sst_cte_c2 ON sst.line_group_cd = sst_cte_c2.line_group_cd\n                )\n            SELECT\n            sta.station_cd,\n            sta.station_g_cd,\n            sta.station_name,\n            sta.station_name_k,\n            sta.station_name_r,\n            sta.station_name_rn,\n            sta.station_name_zh,\n            sta.station_name_ko,\n            sta.station_number1,\n            sta.station_number2,\n            sta.station_number3,\n            sta.station_number4,\n            sta.three_letter_code,\n            sta.line_cd,\n            sta.pref_cd,\n            sta.post,\n            sta.address,\n            sta.lon,\n            sta.lat,\n            sta.open_ymd,\n            sta.close_ymd,\n            sta.e_status,\n            sta.e_sort,\n            lin.company_cd,\n            COALESCE(NULLIF(COALESCE(a.line_name, lin.line_name), ''), NULL) AS line_name,\n            COALESCE(NULLIF(COALESCE(a.line_name_k, lin.line_name_k), ''), NULL) AS line_name_k,\n            COALESCE(NULLIF(COALESCE(a.line_name_h, lin.line_name_h), ''), NULL) AS line_name_h,\n            COALESCE(NULLIF(COALESCE(a.line_name_r, lin.line_name_r), ''), NULL) AS line_name_r,\n            COALESCE(NULLIF(COALESCE(a.line_name_zh, lin.line_name_zh), ''), NULL) AS line_name_zh,\n            COALESCE(NULLIF(COALESCE(a.line_name_ko, lin.line_name_ko), ''), NULL) AS line_name_ko,\n            COALESCE(NULLIF(COALESCE(a.line_color_c, lin.line_color_c), ''), NULL) AS line_color_c,\n            lin.line_type,\n            lin.line_symbol1,\n            lin.line_symbol2,\n            lin.line_symbol3,\n            lin.line_symbol4,\n            lin.line_symbol1_color,\n            lin.line_symbol2_color,\n            lin.line_symbol3_color,\n            lin.line_symbol4_color,\n            lin.line_symbol1_shape,\n            lin.line_symbol2_shape,\n            lin.line_symbol3_shape,\n            lin.line_symbol4_shape,\n            COALESCE(lin.average_distance, 0.0)::DOUBLE PRECISION AS average_distance,\n            NULL::int AS type_id,\n            NULL::int AS sst_id,\n            NULL::int AS type_cd,\n            NULL::int AS line_group_cd,\n            NULL::int AS pass,\n            NULL::text AS type_name,\n            NULL::text AS type_name_k,\n            NULL::text AS type_name_r,\n            NULL::text AS type_name_zh,\n            NULL::text AS type_name_ko,\n            NULL::text AS color,\n            NULL::int AS direction,\n            NULL::int AS kind\n            FROM\n                stations AS sta\n\t\t\t\tJOIN common_lines AS cl ON sta.line_cd = cl.line_cd\n\t\t\t\tJOIN lines AS lin ON lin.line_cd = cl.line_cd\n                LEFT JOIN sst_cte AS sst ON sst.station_cd = sta.station_cd\n                LEFT JOIN types AS tt ON tt.type_cd = sst.type_cd\n                LEFT JOIN line_aliases AS la ON la.station_cd = sta.station_cd\n                LEFT JOIN aliases AS a ON a.id = la.alias_cd\n            WHERE\n                sst.line_group_cd IS NULL\n                AND lin.e_status = 0\n                AND sta.e_status = 0\n                ORDER BY sta.e_sort, sta.station_cd",
+  "query": "WITH\n                from_cte AS (\n                    SELECT\n                        s.station_cd,\n                        s.line_cd\n                    FROM\n                        stations AS s\n                    WHERE\n                        s.station_g_cd = $1\n                ),\n                to_cte AS (\n                    SELECT\n                        s.station_cd,\n                        s.line_cd\n                    FROM\n                        stations AS s\n                    WHERE\n                        s.station_g_cd = $2\n                ),\n                common_lines AS (\n                    SELECT DISTINCT s1.line_cd\n                    FROM stations s1\n                    WHERE s1.station_g_cd = $3\n                        AND s1.e_status = 0\n                        AND EXISTS (\n                        SELECT 1\n                        FROM stations s2\n                        WHERE s2.station_g_cd = $4\n                            AND s2.e_status = 0\n                            AND s2.line_cd = s1.line_cd\n                        )\n                ),\n                sst_cte_c1 AS (\n                    SELECT\n                        sst.line_group_cd\n                    FROM\n                        station_station_types AS sst\n                        JOIN from_cte ON sst.station_cd = from_cte.station_cd\n                    WHERE\n                        sst.pass <> 1\n                ),\n                sst_cte_c2 AS (\n                    SELECT\n                        sst.line_group_cd\n                    FROM\n                        station_station_types AS sst\n                        JOIN to_cte ON sst.station_cd = to_cte.station_cd\n                    WHERE\n                        sst.pass <> 1\n                ),\n                sst_cte AS (\n                    SELECT\n                        sst.id,\n                        sst.station_cd,\n                        sst.type_cd,\n                        sst.line_group_cd,\n                        sst.pass\n                    FROM\n                        station_station_types AS sst\n                        JOIN sst_cte_c1 ON sst.line_group_cd = sst_cte_c1.line_group_cd\n                        JOIN sst_cte_c2 ON sst.line_group_cd = sst_cte_c2.line_group_cd\n                )\n            SELECT\n            sta.station_cd,\n            sta.station_g_cd,\n            sta.station_name,\n            sta.station_name_k,\n            sta.station_name_r,\n            sta.station_name_rn,\n            sta.station_name_zh,\n            sta.station_name_ko,\n            sta.station_number1,\n            sta.station_number2,\n            sta.station_number3,\n            sta.station_number4,\n            sta.three_letter_code,\n            sta.line_cd,\n            sta.pref_cd,\n            sta.post,\n            sta.address,\n            sta.lon,\n            sta.lat,\n            sta.open_ymd,\n            sta.close_ymd,\n            sta.e_status,\n            sta.e_sort,\n            lin.company_cd,\n            COALESCE(NULLIF(COALESCE(a.line_name, lin.line_name), ''), NULL) AS line_name,\n            COALESCE(NULLIF(COALESCE(a.line_name_k, lin.line_name_k), ''), NULL) AS line_name_k,\n            COALESCE(NULLIF(COALESCE(a.line_name_h, lin.line_name_h), ''), NULL) AS line_name_h,\n            COALESCE(NULLIF(COALESCE(a.line_name_r, lin.line_name_r), ''), NULL) AS line_name_r,\n            COALESCE(NULLIF(COALESCE(a.line_name_zh, lin.line_name_zh), ''), NULL) AS line_name_zh,\n            COALESCE(NULLIF(COALESCE(a.line_name_ko, lin.line_name_ko), ''), NULL) AS line_name_ko,\n            COALESCE(NULLIF(COALESCE(a.line_color_c, lin.line_color_c), ''), NULL) AS line_color_c,\n            lin.line_type,\n            lin.line_symbol1,\n            lin.line_symbol2,\n            lin.line_symbol3,\n            lin.line_symbol4,\n            lin.line_symbol1_color,\n            lin.line_symbol2_color,\n            lin.line_symbol3_color,\n            lin.line_symbol4_color,\n            lin.line_symbol1_shape,\n            lin.line_symbol2_shape,\n            lin.line_symbol3_shape,\n            lin.line_symbol4_shape,\n            COALESCE(lin.average_distance, 0.0)::DOUBLE PRECISION AS average_distance,\n            COALESCE(sst.line_group_cd, NULL)::int AS line_group_cd, -- has_train_types用\n            NULL::int AS type_id,\n            NULL::int AS sst_id,\n            NULL::int AS type_cd,\n            NULL::int AS pass,\n            NULL::text AS type_name,\n            NULL::text AS type_name_k,\n            NULL::text AS type_name_r,\n            NULL::text AS type_name_zh,\n            NULL::text AS type_name_ko,\n            NULL::text AS color,\n            NULL::int AS direction,\n            NULL::int AS kind\n            FROM\n                stations AS sta\n\t\t\t\tJOIN common_lines AS cl ON sta.line_cd = cl.line_cd\n\t\t\t\tJOIN lines AS lin ON lin.line_cd = cl.line_cd\n                LEFT JOIN sst_cte AS sst ON sst.station_cd = sta.station_cd\n                LEFT JOIN types AS tt ON tt.type_cd = sst.type_cd\n                LEFT JOIN line_aliases AS la ON la.station_cd = sta.station_cd\n                LEFT JOIN aliases AS a ON a.id = la.alias_cd\n            WHERE\n                sst.line_group_cd IS NULL\n                AND lin.e_status = 0\n                AND sta.e_status = 0\n                ORDER BY sta.e_sort, sta.station_cd",
   "describe": {
     "columns": [
       {
@@ -230,22 +230,22 @@
       },
       {
         "ordinal": 45,
-        "name": "type_id",
+        "name": "line_group_cd",
         "type_info": "Int4"
       },
       {
         "ordinal": 46,
-        "name": "sst_id",
+        "name": "type_id",
         "type_info": "Int4"
       },
       {
         "ordinal": 47,
-        "name": "type_cd",
+        "name": "sst_id",
         "type_info": "Int4"
       },
       {
         "ordinal": 48,
-        "name": "line_group_cd",
+        "name": "type_cd",
         "type_info": "Int4"
       },
       {
@@ -363,5 +363,5 @@
       null
     ]
   },
-  "hash": "58899fb950e311e87a33db5142b914a376a60c6cd2650c3723fbdde78beaff12"
+  "hash": "422bdec51028a86db49d9e2b0babd7f58066d3a2433f5b6416972dfc359540fa"
 }
diff --git a/stationapi/src/infrastructure/station_repository.rs b/stationapi/src/infrastructure/station_repository.rs
index 57dd8aca..de94eb8e 100644
--- a/stationapi/src/infrastructure/station_repository.rs
+++ b/stationapi/src/infrastructure/station_repository.rs
@@ -1006,10 +1006,10 @@ impl InternalStationRepository {
                 l.line_symbol3_shape,
                 l.line_symbol4_shape,
                 COALESCE(l.average_distance, 0.0)::DOUBLE PRECISION AS average_distance,
+                COALESCE(from_sst.line_group_cd, NULL)::int AS line_group_cd, -- has_train_types用
                 NULL::int AS type_id,
                 NULL::int AS sst_id,
                 NULL::int AS type_cd,
-                NULL::int AS line_group_cd,
                 NULL::int AS pass,
                 NULL::text AS type_name,
                 NULL::text AS type_name_k,
@@ -1276,10 +1276,10 @@ impl InternalStationRepository {
             lin.line_symbol3_shape,
             lin.line_symbol4_shape,
             COALESCE(lin.average_distance, 0.0)::DOUBLE PRECISION AS average_distance,
+            COALESCE(sst.line_group_cd, NULL)::int AS line_group_cd, -- has_train_types用
             NULL::int AS type_id,
             NULL::int AS sst_id,
             NULL::int AS type_cd,
-            NULL::int AS line_group_cd,
             NULL::int AS pass,
             NULL::text AS type_name,
             NULL::text AS type_name_k,
diff --git a/stationapi/src/use_case/interactor/query.rs b/stationapi/src/use_case/interactor/query.rs
index cab7f1b9..e9423c9a 100644
--- a/stationapi/src/use_case/interactor/query.rs
+++ b/stationapi/src/use_case/interactor/query.rs
@@ -526,16 +526,6 @@ where
             .get_route_stops(from_station_id, to_station_id)
             .await?;
 
-        let line_group_id_vec = stops
-            .iter()
-            .filter_map(|row| row.line_group_cd.map(|id| id as u32))
-            .collect::<Vec<u32>>();
-
-        let tt_lines = self
-            .line_repository
-            .get_by_line_group_id_vec_for_routes(&line_group_id_vec)
-            .await?;
-
         let route_row_tree_map: BTreeMap<i32, Vec<Station>> = stops.iter().fold(
             BTreeMap::new(),
             |mut acc: BTreeMap<i32, Vec<Station>>, value| {
@@ -548,193 +538,74 @@ where
             },
         );
 
-        let routes: Vec<Route> = route_row_tree_map
-            .iter()
-            .filter_map(|(id, stops)| {
-                let stops = stops
-                    .iter()
-                    .map(|row| {
-                        let extracted_line = self.extract_line_from_station(row);
-
-                        if let Some(tt_line) =
-                            tt_lines.iter().find(|line| line.line_cd == row.line_cd)
-                        {
-                            let train_type = match row.type_id.is_some() {
-                                true => Some(Box::new(TrainType {
-                                    id: row.type_id,
-                                    station_cd: Some(row.station_cd),
-                                    type_cd: row.type_cd,
-                                    line_group_cd: row.line_group_cd,
-                                    pass: row.pass,
-                                    type_name: row.type_name.clone().unwrap_or_default(),
-                                    type_name_k: row.type_name_k.clone().unwrap_or_default(),
-                                    type_name_r: row.type_name_r.clone(),
-                                    type_name_zh: row.type_name_zh.clone(),
-                                    type_name_ko: row.type_name_ko.clone(),
-                                    color: row.color.clone().unwrap_or_default(),
-                                    direction: row.direction,
-                                    kind: row.kind,
-                                    line: Some(Box::new(tt_line.clone())),
-                                    lines: tt_lines.to_vec(),
-                                })),
-                                false => None,
-                            };
-
-                            let stop = Station {
-                                station_cd: row.station_cd,
-                                station_g_cd: row.station_g_cd,
-                                station_name: row.station_name.clone(),
-                                station_name_k: row.station_name_k.clone(),
-                                station_name_r: row.station_name_r.clone(),
-                                station_name_zh: row.station_name_zh.clone(),
-                                station_name_ko: row.station_name_ko.clone(),
-                                station_numbers: self.get_station_numbers(row),
-                                station_number1: row.station_number1.clone(),
-                                station_number2: row.station_number2.clone(),
-                                station_number3: row.station_number3.clone(),
-                                station_number4: row.station_number4.clone(),
-                                three_letter_code: row.three_letter_code.clone(),
-                                line_cd: row.line_cd,
-                                line: Some(Box::new(extracted_line.clone())),
-                                lines: vec![],
-                                pref_cd: row.pref_cd,
-                                post: row.post.clone(),
-                                address: row.address.clone(),
-                                lon: row.lon,
-                                lat: row.lat,
-                                open_ymd: row.open_ymd.clone(),
-                                close_ymd: row.close_ymd.clone(),
-                                e_status: row.e_status,
-                                e_sort: row.e_sort,
-                                stop_condition: row.stop_condition,
-                                distance: row.distance,
-                                train_type,
-                                has_train_types: row.has_train_types,
-                                company_cd: row.company_cd,
-                                line_name: row.line_name.clone(),
-                                line_name_k: row.line_name_k.clone(),
-                                line_name_h: row.line_name_h.clone(),
-                                line_name_r: row.line_name_r.clone(),
-                                line_name_zh: row.line_name_zh.clone(),
-                                line_name_ko: row.line_name_ko.clone(),
-                                line_color_c: row.line_color_c.clone(),
-                                line_type: row.line_type,
-                                line_symbol1: row.line_symbol1.clone(),
-                                line_symbol2: row.line_symbol2.clone(),
-                                line_symbol3: row.line_symbol3.clone(),
-                                line_symbol4: row.line_symbol4.clone(),
-                                line_symbol1_color: row.line_symbol1_color.clone(),
-                                line_symbol2_color: row.line_symbol2_color.clone(),
-                                line_symbol3_color: row.line_symbol3_color.clone(),
-                                line_symbol4_color: row.line_symbol4_color.clone(),
-                                line_symbol1_shape: row.line_symbol1_shape.clone(),
-                                line_symbol2_shape: row.line_symbol2_shape.clone(),
-                                line_symbol3_shape: row.line_symbol3_shape.clone(),
-                                line_symbol4_shape: row.line_symbol4_shape.clone(),
-                                average_distance: row.average_distance,
-                                type_id: row.type_id,
-                                sst_id: row.sst_id,
+        let mut routes: Vec<Route> = Vec::new();
+
+        for (id, stops) in route_row_tree_map.iter() {
+            let line_group_id_vec = stops
+                .iter()
+                .filter_map(|row| row.line_group_cd.map(|id| id as u32))
+                .collect::<Vec<u32>>();
+
+            let mut tt_lines = self
+                .line_repository
+                .get_by_line_group_id_vec_for_routes(&line_group_id_vec)
+                .await?;
+
+            let stops = stops
+                .iter()
+                .map(|row| {
+                    let extracted_line = self.extract_line_from_station(row);
+
+                    if let Some(tt_line) =
+                        tt_lines.iter_mut().find(|line| line.line_cd == row.line_cd)
+                    {
+                        tt_line.line_symbols = self.get_line_symbols(tt_line);
+
+                        let train_type = match row.type_id.is_some() {
+                            true => Some(Box::new(TrainType {
+                                id: row.type_id,
+                                station_cd: Some(row.station_cd),
                                 type_cd: row.type_cd,
                                 line_group_cd: row.line_group_cd,
                                 pass: row.pass,
-                                type_name: row.type_name.clone(),
-                                type_name_k: row.type_name_k.clone(),
+                                type_name: row.type_name.clone().unwrap_or_default(),
+                                type_name_k: row.type_name_k.clone().unwrap_or_default(),
                                 type_name_r: row.type_name_r.clone(),
                                 type_name_zh: row.type_name_zh.clone(),
                                 type_name_ko: row.type_name_ko.clone(),
-                                color: row.color.clone(),
+                                color: row.color.clone().unwrap_or_default(),
                                 direction: row.direction,
                                 kind: row.kind,
-                            };
-
-                            return stop.into();
-                        }
-
-                        let stop = Station {
-                            station_cd: row.station_cd,
-                            station_g_cd: row.station_g_cd,
-                            station_name: row.station_name.clone(),
-                            station_name_k: row.station_name_k.clone(),
-                            station_name_r: row.station_name_r.clone(),
-                            station_name_zh: row.station_name_zh.clone(),
-                            station_name_ko: row.station_name_ko.clone(),
-                            station_numbers: self.get_station_numbers(row),
-                            station_number1: row.station_number1.clone(),
-                            station_number2: row.station_number2.clone(),
-                            station_number3: row.station_number3.clone(),
-                            station_number4: row.station_number4.clone(),
-                            three_letter_code: row.three_letter_code.clone(),
-                            line_cd: row.line_cd,
-                            line: Some(Box::new(extracted_line.clone())),
-                            lines: vec![],
-                            pref_cd: row.pref_cd,
-                            post: row.post.clone(),
-                            address: row.address.clone(),
-                            lon: row.lon,
-                            lat: row.lat,
-                            open_ymd: row.open_ymd.clone(),
-                            close_ymd: row.close_ymd.clone(),
-                            e_status: row.e_status,
-                            e_sort: row.e_sort,
-                            stop_condition: row.stop_condition,
-                            distance: row.distance,
-                            train_type: None,
-                            has_train_types: row.has_train_types,
-                            company_cd: row.company_cd,
-                            line_name: row.line_name.clone(),
-                            line_name_k: row.line_name_k.clone(),
-                            line_name_h: row.line_name_h.clone(),
-                            line_name_r: row.line_name_r.clone(),
-                            line_name_zh: row.line_name_zh.clone(),
-                            line_name_ko: row.line_name_ko.clone(),
-                            line_color_c: row.line_color_c.clone(),
-                            line_type: row.line_type,
-                            line_symbol1: row.line_symbol1.clone(),
-                            line_symbol2: row.line_symbol2.clone(),
-                            line_symbol3: row.line_symbol3.clone(),
-                            line_symbol4: row.line_symbol4.clone(),
-                            line_symbol1_color: row.line_symbol1_color.clone(),
-                            line_symbol2_color: row.line_symbol2_color.clone(),
-                            line_symbol3_color: row.line_symbol3_color.clone(),
-                            line_symbol4_color: row.line_symbol4_color.clone(),
-                            line_symbol1_shape: row.line_symbol1_shape.clone(),
-                            line_symbol2_shape: row.line_symbol2_shape.clone(),
-                            line_symbol3_shape: row.line_symbol3_shape.clone(),
-                            line_symbol4_shape: row.line_symbol4_shape.clone(),
-                            average_distance: row.average_distance,
-                            type_id: row.type_id,
-                            sst_id: row.sst_id,
-                            type_cd: row.type_cd,
-                            line_group_cd: row.line_group_cd,
-                            pass: row.pass,
-                            type_name: row.type_name.clone(),
-                            type_name_k: row.type_name_k.clone(),
-                            type_name_r: row.type_name_r.clone(),
-                            type_name_zh: row.type_name_zh.clone(),
-                            type_name_ko: row.type_name_ko.clone(),
-                            color: row.color.clone(),
-                            direction: row.direction,
-                            kind: row.kind,
+                                line: Some(Box::new(tt_line.clone())),
+                                lines: tt_lines.to_vec(),
+                            })),
+                            false => None,
                         };
 
-                        stop.into()
-                    })
-                    .collect::<Vec<proto::Station>>();
+                        let stop = self.build_station_from_row(row, &extracted_line, train_type);
 
-                // TODO: SQLで同等の処理を行う
-                let includes_requested_station = stops
-                    .iter()
-                    .any(|stop| stop.group_id == from_station_id || stop.group_id == to_station_id);
-                if !includes_requested_station {
-                    return None;
-                }
+                        return stop.into();
+                    }
 
-                Some(Route {
-                    id: *id as u32,
-                    stops,
+                    let stop = self.build_station_from_row(row, &extracted_line, None);
+
+                    stop.into()
                 })
-            })
-            .collect();
+                .collect::<Vec<proto::Station>>();
+
+            // TODO: SQLで同等の処理を行う
+            let includes_requested_station = stops
+                .iter()
+                .any(|stop| stop.group_id == from_station_id || stop.group_id == to_station_id);
+            if !includes_requested_station {
+                continue;
+            }
+
+            routes.push(Route {
+                id: *id as u32,
+                stops,
+            });
+        }
         Ok(routes)
     }
 
@@ -848,3 +719,85 @@ where
         Ok(vec![])
     }
 }
+
+impl<SR, LR, TR, CR> QueryInteractor<SR, LR, TR, CR>
+where
+    SR: StationRepository,
+    LR: LineRepository,
+    TR: TrainTypeRepository,
+    CR: CompanyRepository,
+{
+    fn build_station_from_row(
+        &self,
+        row: &Station,
+        extracted_line: &Line,
+        train_type: Option<Box<TrainType>>,
+    ) -> Station {
+        Station {
+            station_cd: row.station_cd,
+            station_g_cd: row.station_g_cd,
+            station_name: row.station_name.clone(),
+            station_name_k: row.station_name_k.clone(),
+            station_name_r: row.station_name_r.clone(),
+            station_name_zh: row.station_name_zh.clone(),
+            station_name_ko: row.station_name_ko.clone(),
+            station_numbers: self.get_station_numbers(row),
+            station_number1: row.station_number1.clone(),
+            station_number2: row.station_number2.clone(),
+            station_number3: row.station_number3.clone(),
+            station_number4: row.station_number4.clone(),
+            three_letter_code: row.three_letter_code.clone(),
+            line_cd: row.line_cd,
+            line: Some(Box::new(extracted_line.clone())),
+            lines: vec![],
+            pref_cd: row.pref_cd,
+            post: row.post.clone(),
+            address: row.address.clone(),
+            lon: row.lon,
+            lat: row.lat,
+            open_ymd: row.open_ymd.clone(),
+            close_ymd: row.close_ymd.clone(),
+            e_status: row.e_status,
+            e_sort: row.e_sort,
+            stop_condition: row.stop_condition,
+            distance: row.distance,
+            train_type,
+            has_train_types: row.has_train_types,
+            company_cd: row.company_cd,
+            line_name: row.line_name.clone(),
+            line_name_k: row.line_name_k.clone(),
+            line_name_h: row.line_name_h.clone(),
+            line_name_r: row.line_name_r.clone(),
+            line_name_zh: row.line_name_zh.clone(),
+            line_name_ko: row.line_name_ko.clone(),
+            line_color_c: row.line_color_c.clone(),
+            line_type: row.line_type,
+            line_symbol1: row.line_symbol1.clone(),
+            line_symbol2: row.line_symbol2.clone(),
+            line_symbol3: row.line_symbol3.clone(),
+            line_symbol4: row.line_symbol4.clone(),
+            line_symbol1_color: row.line_symbol1_color.clone(),
+            line_symbol2_color: row.line_symbol2_color.clone(),
+            line_symbol3_color: row.line_symbol3_color.clone(),
+            line_symbol4_color: row.line_symbol4_color.clone(),
+            line_symbol1_shape: row.line_symbol1_shape.clone(),
+            line_symbol2_shape: row.line_symbol2_shape.clone(),
+            line_symbol3_shape: row.line_symbol3_shape.clone(),
+            line_symbol4_shape: row.line_symbol4_shape.clone(),
+            average_distance: row.average_distance,
+            type_id: row.type_id,
+            sst_id: row.sst_id,
+            type_cd: row.type_cd,
+            line_group_cd: row.line_group_cd,
+            pass: row.pass,
+            type_name: row.type_name.clone(),
+            type_name_k: row.type_name_k.clone(),
+            type_name_r: row.type_name_r.clone(),
+            type_name_zh: row.type_name_zh.clone(),
+            type_name_ko: row.type_name_ko.clone(),
+            color: row.color.clone(),
+            direction: row.direction,
+            kind: row.kind,
+        }
+    }
+}
