string GenerateCreateTableSql(string tableName, IEnumerable <IGrouping <Type, FieldInfo> > group)
        {
            StringBuilder sb = new StringBuilder();

            // 値テーブルの作成
            sb.Append($"DROP TABLE IF EXISTS `{tableName}`;");
            sb.Append($@"
CREATE TABLE IF NOT EXISTS `{tableName}` (
`idx` int(11) NOT NULL AUTO_INCREMENT,
`id` varchar(50) NOT NULL,
");

            var columnConfigList = new Dictionary <string, ColumnConfigAttribute>();
            var reverseGroup     = group.Reverse();

            foreach (var infos in reverseGroup)
            {
                foreach (var info in infos)
                {
                    if (info.Name == "id" || info.Name == "idx")
                    {
                        continue;
                    }

                    AddColumnTypeAttribute attr = (AddColumnTypeAttribute)Attribute.GetCustomAttribute(info, typeof(AddColumnTypeAttribute));
                    if (attr == null)
                    {
                        Debug.LogError($"[AddColumnType]を設定して下さい。 {info.Name}");
                        return(string.Empty);
                    }

                    ColumnConfigAttribute attr2 = (ColumnConfigAttribute)Attribute.GetCustomAttribute(info, typeof(ColumnConfigAttribute));
                    if (attr2 == null)
                    {
                        Debug.LogError($"[ColumnConfig]を設定して下さい。 {info.Name}");
                        return(string.Empty);
                    }

                    string columnName = info.Name.ToLowercaseNamingConvention(true);
                    sb.Append($"`{columnName}` {string.Join(" ", attr.GetMembers())},");
                    columnConfigList.Add(columnName, attr2);
                }
            }

            sb.Append($@"
`disable` int(1) NULL,
PRIMARY KEY (`idx`) USING BTREE,
UNIQUE KEY (`id`)
) ENGINE = InnoDB AUTO_INCREMENT = 2 CHARACTER SET = utf8 COLLATE = utf8_unicode_ci ROW_FORMAT = Compact;
");
            return(sb.ToString());
        }
        string GenerateInsertConfigSql(string tableName, IEnumerable <IGrouping <Type, FieldInfo> > group)
        {
            StringBuilder sb = new StringBuilder();

            List <string> configColNames = new List <string> {
                "column_name"
            };

            foreach (var info in typeof(ColumnConfigAttribute).GetFields())
            {
                configColNames.Add(info.Name.ToLowercaseNamingConvention(true));
            }

            // configテーブルにInsert
            sb.Append($"INSERT INTO {tableName}_config (");
            sb.Append($"{string.Join(",", configColNames)}");
            sb.Append($") VALUES ");

            var reverseGroup = group.Reverse();

            foreach (var infos in reverseGroup)
            {
                foreach (var info in infos)
                {
                    if (info.Name == "idx")
                    {
                        continue;
                    }

                    ColumnConfigAttribute attr2 = (ColumnConfigAttribute)Attribute.GetCustomAttribute(info, typeof(ColumnConfigAttribute));
                    if (attr2 == null)
                    {
                        Debug.LogError($"[ColumnConfig]を設定して下さい。 {info.Name}");
                        return(String.Empty);
                    }

                    string columnName = info.Name.ToLowercaseNamingConvention(true);
                    sb.Append($"('{columnName}',");
                    foreach (var field in typeof(ColumnConfigAttribute).GetFields())
                    {
                        sb.Append($"'{field.GetValue(attr2)}',");
                    }
                    sb.Remove(sb.Length - 1, 1);
                    sb.Append($"),");
                }
            }
            sb.Remove(sb.Length - 1, 1);
            sb.Append($";");

            return(sb.ToString());
        }