public async Task <IActionResult> GetAll([FromQuery] SearchInputModel filter, [FromQuery] int?perPage, [FromQuery] int page = 1, bool withTotal = false)
        {
            //未指定、あるいは1000件以上であれば、1000件に指定
            var pageCount = (perPage.HasValue && perPage.Value < 1000) ? perPage.Value : 1000;

            var experiments = experimentRepository
                              .GetAllWithOrderby(x => x.Id, false)
                              .Include(x => x.Template)
                              .Include(x => x.DataSet)
                              .Include(x => x.ExperimentPreprocess).ThenInclude(x => x.TrainingHistory).ThenInclude(x => x.DataSet)
                              .Include(x => x.TrainingHistory).ThenInclude(x => x.DataSet)
                              .SearchLong(d => d.Id, filter.Id)
                              .SearchString(d => d.Name, filter.Name)
                              .SearchTime(d => d.CreatedAt, filter.StartedAt);

            if (withTotal)
            {
                SetTotalCountToHeader(experiments.Count());
            }

            var result = new List <IndexOutputModel>();

            foreach (var x in experiments.Paging(page, pageCount))
            {
                var preprocessStatus = await UpdateStatus(x.ExperimentPreprocess?.TrainingHistory);

                var trainingStatus = await UpdateStatus(x.TrainingHistory);

                var status = GetExperimentStatus(preprocessStatus, trainingStatus);
                result.Add(new IndexOutputModel(x, status.ToString()));
            }

            return(JsonOK(result));
        }