05ïŒã¯ãããŠã¹ããã¢ããªãäœã£ãŠã¿ãïŒéçºãã§ãŒãºïŒ
åçš¿:
æŽæ°:

èšäºã®æŠèŠ
ãã¡ãã®äžèЧã®5ã€ç®ããéçºãã§ãŒãºãã®èšäºã
- æ€èšãã§ãŒãºïŒã©ããªã¢ããªãäœããïŒ
- èŠä»¶ãã§ãŒãºïŒã©ããªèŠä»¶ã®ã¢ããªã«ãããïŒ
- 調æ»ãã§ãŒãºïŒã©ããªæè¡ã䜿ããïŒ
- èšèšãã§ãŒãºïŒã©ããã£ãŠäœããïŒ
- éçºãã§ãŒãºïŒå®éã«äœãã¯ãããïŒãä»åã
- å ¬éãã§ãŒãºïŒã¢ããªãå ¬éããïŒ
- ä¿å®ãã§ãŒãºïŒå ¬éããçŸåšãŸã§ïŒ
ãã€ãžã§ã¹ãã§èªã¿ããæ¹ã¯ãã¡ãã®èšäºãã
ãããã ãã®åºŠãçŽ äººãªããã¹ããã¢ããªéçºã«ææŠããŠã¿ããä»åã®èšäºã§ã¯æŠèŠãšçµç·¯ã«ã€ããŠæžãç¶Žã£ãŠã¿ãããå®éã«è¡ã£ãäœæ¥ã®è©³çްã¯ãå š7åã«åããèšäºãå¥éäœæ
ã€ã³ã¹ããŒã«ã¯ãã¡ãããã

ã¯ãããŠã®ã¹ããã¢ããªéçº éçºãã§ãŒãº
ååã¯ãèšèšäœæ¥ã®å·¥çšã§è¡ã£ãããšã«ã€ããŠæžããã
Visual Studioã§å¿ èŠãªãããžã§ã¯ãã远å ãããã©ã«ãæ§æãæŽããã¯ã©ã¹ãã¡ã€ã«ãé 眮ããªããã®èšèšäœæ¥ã ã£ãã
å šäœã®éªšçµã¿ã¯ã§ãããä»åã¯å®éã«ã³ãŒãã£ã³ã°ãã©ã®ããã«é²ããŠãã£ããããŸãšãããã
ã©ãããçæããŠããã

ããŠãŸãã¯ã©ãããã³ãŒãã£ã³ã°ãããŠããã°ãããã
ãŸãã¯ãååã®èšèšäœæ¥ã§äœã£ãã³ã³ããŒãã³ãå³ãèŠãŠã¿ããã

ãã®å³ã®ãDomainãããã¢ããªã®ãã£ãšãéèŠãªå Žæãããšæ¬ã«æžããŠãã£ãã
ä»åã¯ç¡ç èšé²ãä¿åã»é²èЧããã¢ããªã
ç¡ç èšé²ã®å®çŸ©ãã«ãŒã«ãªã©ãã¢ããªã®èãšãªãã³ãŒãã¯ãã®ãDomainãã«æžããŠããã
Domainã¯ã远å ã§ãŠã§ãã¢ããªãäœãããšã«ãªã£ãããããŒã¿ããŒã¹ãRDBããããã¥ã¡ã³ãDBã«ãªã£ãŠããå€ããããšã®ãªãäžæ žãæ ãéšåã
ãšããããšã§ãDomainãç¡ããã°å§ãŸããªããããããçæããã
ãŸãã¯ãã就坿éããèµ·åºæéããšãã£ãããç¡ç èšé²ããæã€æ å ±ã
ãããã¯ãValue ObjetããšããŠæžãããããããæã€ã«ãŒã«ãªã©ãšäœµããŠå®è£ ããã
ãããããEntityããšããŠãèµ·åºæéã¯å°±å¯æéããæªæ¥ã®æ¥æã§ãããªã©è€åçãªã«ãŒã«ãšäžç·ã«ãŸãšããããã
ç¡ç èšé²ã®Entityã¯ãããªæãã«ãªãã
using System;
using OneThird.Domain.Exceptions;
using OneThird.Domain.Models.Slogs.ValueObjects;
namespace OneThird.Domain.Models.Slogs
{
/// <summary>
/// ç¡ç èšé²ã®Entityã¯ã©ã¹
/// ã»WakeupDateTimeã¯SleepDateTimeããåŸã§ããããš
/// ã»WakeUpdateã®æ¥ä»ã¯TargetDateãšåãã§ããããš
/// ã»SleepDateTimeã¯TargetDateã®åæ¥17æããTargetDateåœæ¥16æ59åãŸã§ã§ããããš
/// </summary>
public class SlogEntity : Entity<SlogId>
{
/// <summary> ã³ã³ã¹ãã©ã¯ã¿ (Create) </summary>
/// <param name="slogId">SlogId</param>
/// <param name="targetDate">TargetDate</param>
/// <param name="sleepDateTime">SleepDateTime</param>
/// <param name="wakeupDateTime">WakeupDateTime</param>
/// <param name="rating">Rating</param>
/// <param name="note">Note</param>
/// <param name="userId">UserId</param>
public SlogEntity(
SlogId slogId,
TargetDate targetDate,
SleepDateTime sleepDateTime,
WakeupDateTime wakeupDateTime,
Rating rating,
Note note,
UserId userId)
{
Id = slogId ?? throw new ArgumentNullException(nameof(slogId));
TargetDate = targetDate ?? throw new ArgumentNullException(nameof(targetDate));
SleepDateTime = sleepDateTime ?? throw new ArgumentNullException(nameof(sleepDateTime));
WakeupDateTime = wakeupDateTime ?? throw new ArgumentNullException(nameof(wakeupDateTime));
Rating = rating ?? throw new ArgumentNullException(nameof(rating));
Note = note ?? throw new ArgumentNullException(nameof(note));
UserId = userId ?? throw new ArgumentNullException(nameof(userId));
ValidatePreAndPostDates(sleepDateTime, wakeupDateTime);
ValidateSleepDateTime(sleepDateTime);
ValidateWakeupDateTime(wakeupDateTime);
}
/// <summary> Gets TargetDate </summary>
public TargetDate TargetDate { get; }
/// <summary> Gets SleepDateTime </summary>
public SleepDateTime SleepDateTime { get; }
/// <summary> Gets WakeupDateTime </summary>
public WakeupDateTime WakeupDateTime { get; }
/// <summary> Gets Rating </summary>
public Rating Rating { get; }
/// <summary> Gets Note </summary>
public Note Note { get; }
/// <summary> Gets UserId </summary>
public UserId UserId { get; }
/// <summary> ç¡ç æé(TimeSpan) </summary>
public TimeSpan SleepHours => WakeupDateTime.Value - SleepDateTime.Value;
/// <summary>
/// èµ·åºæ¥æ(WakeupDateTime)ã®æ¥ä»ã察象æ¥ä»(TargetDate)ãšåæ¥ã§ãããš
/// </summary>
/// <param name="target">SleepDateTime</param>
private void ValidateWakeupDateTime(WakeupDateTime target)
{
if (target.Value.Date != TargetDate.Value)
{
throw new OutOfRangeException($"{nameof(WakeupDateTime)}:{target.Value}");
}
}
/// <summary>
/// SleepDateTime ã®æ¡ä»¶ - 以äžïŒæ¡ä»¶ãæºããããš
/// Condition A : TargetDateã®åæ¥17:00 ïœ åœæ¥16:59ã®ç¯å²å
/// ã»Condition B : ãŸãã¯ãTargetDateã®åœæ¥17:00以éã®å Žåã
/// WakeupDateTimeãåœæ¥23:59以å
/// </summary>
/// <param name="sleepDateTime">SleepDateTime</param>
private void ValidateSleepDateTime(SleepDateTime sleepDateTime)
{
if (!GetResultOfConditionA(sleepDateTime) &&
!GetResultOfConditionB(sleepDateTime))
{
throw new OutOfRangeException(
$"{nameof(SleepDateTime)}:{sleepDateTime.Value}");
}
}
// Condition A : TargetDateã®åæ¥17:00 ïœ åœæ¥16:59ã®ç¯å²å
private bool GetResultOfConditionA(SleepDateTime sleepDateTime)
{
var conditionStart = TargetDate.Value.Date.AddDays(-1).AddHours(17);
var conditionEnd = TargetDate.Value.Date.Add(new TimeSpan(16, 59, 59));
return conditionStart <= sleepDateTime.Value &&
sleepDateTime.Value <= conditionEnd;
}
// Condition B : ãŸãã¯ãTargetDateã®åœæ¥17:00以éã®å Žåã
// WakeupDateTimeãåœæ¥23:59以å
private bool GetResultOfConditionB(SleepDateTime sleepDateTime)
{
var condition1 = TargetDate.Value.Date.AddHours(17);
var condition2 = TargetDate.Value.Date.Add(new TimeSpan(23, 59, 59));
return condition1 <= sleepDateTime.Value &&
WakeupDateTime.Value <= condition2;
}
/// <summary> ç¡ç æ¥æãšèµ·åºæ¥æã®ååŸé¢ä¿ãæ€èšŒãã </summary>
/// <param name="sleepDateTime">SleepDateTime</param>
/// <param name="wakeupDateTime">WakeupDateTime</param>
private void ValidatePreAndPostDates(SleepDateTime sleepDateTime, WakeupDateTime wakeupDateTime)
{
if (sleepDateTime.Value > wakeupDateTime.Value)
{
throw new PreAndPostDateException(
$"Sleep DateTime:{sleepDateTime.Value.ToString("yyyy/MM/dd hh:mm")}{Environment.NewLine}Wakeup DateTime:{wakeupDateTime.Value.ToString("yyyy/MM/dd hh:mm")}");
}
}
}
}
ãSlogããšããã®ã¯ããSleep Logãã®ç¥ç§°ãšããŠä»ããåç§°ã
ä»åã®ã¢ããªã«ãããŠãã£ãšã䜿çšããé »åºŠã®é«ãã¯ãŒãã®ããã䜿ããããããåœåããã
ç¶ããŠãåŸã Entityãå ã«ããŒã¿ããŒã¹ãšããåãããå®è£ ããInfrastructureãããžã§ã¯ããã«è¡ãã
ããã§å¿ èŠãšãªãã€ã³ã¿ãŒãã§ã€ã¹ããã®Domainã«äœã£ãŠããã
using System.Collections.Generic;
using System.Threading.Tasks;
using OneThird.Domain.Models.Slogs.ValueObjects;
using OneThird.Domain.Models.YearMonths;
namespace OneThird.Domain.Models.Slogs
{
/// <summary> SlogRepository Interface </summary>
public interface ISlogRepository
{
/// <summary> Save new Entity </summary>
/// <param name="slogEntity">target SlogEntity</param>
/// <returns>Task</returns>
Task SaveAsync(SlogEntity slogEntity);
/// <summary> Delete Entity </summary>
/// <param name="slogEntity">target SlogEntity</param>
/// <returns>Task</returns>
Task DeleteAsync(SlogEntity slogEntity);
/// <summary> Find one entity by Guid </summary>
/// <param name="slogEntity">target SlogEntity</param>
/// <returns>a entity</returns>
Task<SlogEntity> FindAsync(SlogEntity slogEntity);
/// <summary> Find all entities </summary>
/// <param name="userId">target UserId</param>
/// <returns>IEnumerable entities</returns>
Task<IEnumerable<SlogEntity>> FindAllAsync(UserId userId);
/// <summary> ç¹å®æéãæå®ããã¯ãšãªã¡ãœããå®è£
</summary>
/// <param name="userId">target UserId</param>
/// <param name="fromDate">from TargetDate</param>
/// <param name="toDate">targetto TargetDate</param>
/// <returns>IEnumerable SlogEntities</returns>
Task<IEnumerable<SlogEntity>> FindSpecificPeriod(UserId userId, TargetDate fromDate, TargetDate toDate);
/// <summary> TargetDateã®å¹ŽãšæãDistinctã§ååŸãã </summary>
/// <param name="userId">target UserId</param>
/// <returns>IEnumerable YearMonthEntity</returns>
Task<IEnumerable<YearMonthEntity>> GetYearMonthOfTargetDateWithNoDuplicatesAsync(UserId userId);
}
}
äžèšã¯å®æãããã®ã§ãæåã¯ãã£ãšã¹ã«ã¹ã«ã ã£ãã
å®è£ ãé²ããŠãããšãåŸãããããããã«ãŒã«ãå¿ èŠã ããšãããããã©ãŒãã³ã¹ãèæ ®ããã¯ãšãªã远å ãããããªã©æãã€ãã
ãã®ãã³ã«ããã®Domainãå å®ãããã
UIãDBãå€ãã£ãŠãäžå€ãšãªãã«ãŒã«ã¯ãæçµçã«å¿ èŠãšãªãå ã ã§ã¯ãªãããã®Domainã«ç«ã¡æ»ã£ãŠã³ãŒãã£ã³ã°ããã
ãŸãã«ãŒã«ããŠãŒã¶ã«æèãããªãããå ¥åããã工倫ãªã©ã¯UIåŽã®è²¬åãšããŠãXamarinåŽã«å®è£ ããã
ãããªå ·åã«ãInfrastructureãApplicationãæåŸã«XamarinïŒUIïŒã®é çªã§ã³ãŒãã£ã³ã°ãé²ããŠãã£ãã
Infrastructureãå®è£ ããŠããæç¹ã§ã¯ãSqliteã䜿ãã€ããã§ããããŸã ãããã調ã¹ãŠããéäžã ã£ãã
äœæ¥ã次ã«é²ããããããã«ãšãããããList<T>ãã䜿ã£ãä»®æ³DBãå®è£ ããŠããã
ãã¡ã€ã³é§åéçºã®å®è£ ã«ã€ããŠã¯ããã¡ãã®æ¬ãåèã«ããã
åå¿è ã«ãçè§£ãããã説æãšãªãããæ§æãããŠããã
ãC#ãã§ãµã³ãã«ãæžãããŠããããã.NETéçºè ã«ãšã£ãŠã¯éå®ããäžåã
ãã¹ãé§åéçºãåèã«å®è£ ããŠãã

å®è£ ã®æµãã¯åé ã®éãã ãããã1ã€ãããã¹ãé§åéçºãã«ã€ããŠæžãããã
ãŠããããã¹ãã«ã€ããŠ
åé ã§ãDomainããéçºããUIã®å®è£ ã¯æåŸã«è¡ã£ããšæžããã
ããããããã§ã¯æåŸãŸã§DomainãApplicationãªã©ã®ãããžã§ã¯ãã«å®è£ ããã³ãŒããæ£ããåäœããã®ãåãããªãã
UIãä»äžããŠãããããããã°ãšãæããããŠãããã
ãŸãããããã®äœã¹ããã¯PCã§ãšãã¥ã¬ãŒã¿ã䜿ã£ããããã°ã¯æéããããã
ãããã解決ããŠãããææ®µãšããŠãããŠããããã¹ããã¯æ¬ ãããªãã
æåã«Value ObjetãEntityã«å®è£ ããã«ãŒã«ãªã©ãUIç¡ãã«æ€èšŒã§ããã
ãšãã¥ã¬ãŒã¿ã䜿ããã³ãŒããå®è¡ã§ããããåŠçæéãçãæžãã
ä»å䜿çšããã®ã¯ããxUnitããšãããã¹ããã¬ãŒã ã¯ãŒã¯ã
xUnit.net ã§ãŠããããã¹ããå§ãã
ãŸããèšäºã«ãããChainning Assertionããšãããã©ã°ã€ã³ã倧å€äŸ¿å©ã
ãŠããããã¹ããæžããŠããããšã®ã¡ãªãã
ãŠããããã¹ããæžããŠããã¡ãªããã¯ä»ã«ãããã
åå¿è ã®ãšã£ãŠäžçºã§ããã³ãŒããæžãããšã¯ãšãŠãé£ããã
äžåºŠå®è£ ããŠããåŸããä¿®æ£ããããšã¯äœåºŠãèµ·ããã
ãããä¿®æ£äœæ¥ã¯ããã£ããæ£ããå®è£ ããç®æãç Žå£ããŠããŸããªã¹ã¯ã䌎ãã
ããã§ããŠããããã¹ããæžããŠããããã«ãã®ãã³å®è¡ããããã«ããŠãããšããã¹ãã®å€±æããšããŠæããŠãããã
ãŸããå°ããªã¡ãœãããæžãç¿æ £ãèªç¶ãšèº«ã«ã€ãã
æ £ããªããã¡ã¯ãã²ãšã€ã®ã¡ãœããã«è€æ°ã®åŠçãçªã£èŸŒãã§ãããã§ããã¡ãœãããæžããŠããŸããã¡ã
ã²ãšã€ã®ã¡ãœããã«ã¯ã²ãšã€ã®ç®çãå®è£ ããã®ãè¯ããšããã¡ãã¡ã§ç®ã«ããã
åæ©èœã®ã¡ãœãããè€æ°çµã¿åãããŠåŠçãè¡ãããå®è£ ããã»ããã¡ã³ããã³ã¹æ§ã¯éåžžã«é«ãŸãã
ãããŠå¯èªæ§ãå¢ãã
ã§ã¯ãŠããããã¹ããå°ããã¡ãœãããæžãç¿æ £ã«ã©ãäœçšãããã
巚倧ãªã¡ãœããã®ãŠããããã¹ããæžãã®ã¯ã€ãããããããã€ã³ãã
ãã®ããšã·ã³ãã«ãªã¡ãœãããæžãããã¹ããçãæžããçžäºã«äœçšããã®ãçãã ãšæããŠããã
ãã¹ããã¡ãŒã¹ãã«ããã¡ãªãã
å®è£ ãããã¹ããæžããŠæ€èšŒããããããæ®éã ãšèããŠããã
ã ããããããã®äžçã«ã¯ããã¹ãé§åéçºãç¥ããŠãTDDããªããã®ãååšããããšãç¥ã£ãã
ãã¹ãé§åéçºãšã¯ - ITçšèªèŸå ž
ãã¹ãé§åéçºãTDD / ãã¹ãããªãã³éçºããšã¯ããœãããŠã§ã¢éçºã®ææ³ã®äžã€ã§ãããã°ã©ã æ¬äœããå ã«ãã¹ãã³ãŒããæžãããã®ãã¹ãã«éãããã«æ¬äœã®ã³ãŒããèšè¿°ããŠããæ¹åŒãããã¹ããã¡ãŒã¹ãã(test first)ãšåŒã°ããååã«åŸã£ãŠéçºãé²ããŠããææ³ã§ããŸãããã°ã©ã ã®æ©èœã仿§ã«åºã¥ããŠããã®ããã°ã©ã ãéãã¹ããã¹ãæ¡ä»¶ããã¹ãã³ãŒããèšè¿°ããŠããã
ããã¹ããå ã«æžããšãæ£æ°ãïŒïŒããšæåã¯æã£ãã
ã ããããã«ã¯å€§ããªæ©æµããããšç¥ãã
ãã®ãæåã«ãã¹ããæžããããšã¯ãã€ãŸããå®è£ ããã³ãŒãã¯ã©ã®ãããªæ¡ä»¶ãæºããããæåã«èãããã«ã€ãªããã
æåã«ãã¹ãã³ãŒããæžããªããã詳现ãªå®è£ ã³ãŒãã®èšèšãè¡ãã€ã¡ãŒãžãã
ãããŠããã¹ãããã¹ããããå®è£ ããã
çµæãšããŠãã¹ãããªãšããã³ãŒããæžãããšãã§ããã
æ £ãããŸã§ã¯ããªããããžãã ãæ £ããŠããŸãã°ãã£ã¡ã®ãã®ã
ããã¹ãé§åéçºãã«ã€ããŠã¯ã以äžã®æ¬ãåèã«ããã
ãããŸã§æžããã®ã¯ãã®æ¬ã®åã売ãã
å®éã«ãã©ããã£ãããšãèããªãããã¹ããæžããå®è£ ãããŸãç·ŽãçŽããŠããããã³ãŒãã亀ããªãã説æããŠããããéåžžã«ããããããã£ãã
å人éçºã¯ããã¹ãææããŠããã人ãããªããããèªåã§èªåã®ã³ãŒããä¿å šããå¿ èŠãããã
ãŸãèªåã®ã³ãŒããæŽç·ŽãããŠããäœæ¥ãèªåã
TTDã¯ãããã®æ©æµãåæã«åããããšãã§ããããããã«ãšã£ãŠããšã£ãŠããããããéçºææ³ã ãšæããŠããã
調ã¹ãåãã¢ããèšã

èšèšãèããŠããæ®µéã§ã調ã¹ãäœæ¥ã¯ãšãŠãéèŠã ã£ãããå®è£ 段éã§ã¯ããå°é£ããå¢ããšå®æããŠããã
åå¿è ã«ãšã£ãŠè¡ãè©°ã£ããšããåºæ¬çãªæ å ±ãã²ãããå¿çšãããããªåšçšãªç䌌ã¯ãŸã å³ãããã®ãããã
ã§ããããšãªãã°ããã³ãã€ã³ãã§æ£è§£ãæžãããŠããæ å ±ã«ããã€ããããã®ã
ãã€ãã£ãéçºãè¡ã£ãŠããã®ã§ããã°ã ãã¶éããããããªãããä»åã¯ãXamarin.Formsããšãããéçºäººå£ãããã»ã©å€ããªããã¬ãŒã ã¯ãŒã¯ã䜿ã£ãŠããã
éçºäººå£ãå°ãªããã°ã転ãã£ãŠããæ å ±ãæ¯äŸããŠå°ãªãã
ããšãã°ãä»åãç¡ç ãè©äŸ¡ããã¬ãŒãã£ã³ã°ãªããžã§ã¯ããå®è£ ããããšèããã
ããã¯Xamarinã«ã¯ãªãã®ã
ãããã®ã§ä»£æ¿ããããšãã§ããã1ïœ5ã®æ°åãéžã¶ã»ã¬ã¯ã¿ãšãã
ã ãã©ãã©ãããŠã5段éã®æãéžã¶ããã«ãããã£ãã
絶察ã«ã
ã§ã¯ã©ããã£ãŠãã®åé¡ã解決ããã°è¯ããã
- 1ã€ç®ã¯ããéã®åã«ã¢ããèšãããŠææã®ã³ã³ããŒãã³ããè²·ããã
- ãããã®çµæžåãèããªãã§ã»ãããç¡çãåŽäžã
- 2ã€ç®ã¯ãRatingBarã䜿ããããã€ãã£ãéçºã«åãæ¿ãããã
- ããã¯æ£çŽäœåºŠãé ãããã£ãããåŽäžãšããã
- 3ã€ç®ã¯ããæ
å ±éãå¢ãããã
- ã€ãŸããæ¥æ¬èªæ€çŽ¢ã§ã¯èŠã€ãããªããè±èªã§æ¢ãã
çµæãè€æ°ã®éžæè¢ãåŸãããšãã§ããç®çéãã®å®è£ ãè¡ãããšãã§ããã
æ å ±éãå€ãèšèªããã¬ãŒã ã¯ãŒã¯ã§ãåãã ãšæããã調ã¹ãäœæ¥ã¯è±èªã§è¡ã£ãæ¹ãæ©ãç®çã«ãã©ãçãããšæãã
æ¥æ¬åºæã®ç¿æ £ã«åºã¥ããããªå®è£ ã§ããã°å¥ã ããäžçå ±éã®ã³ãã§ããã°ããã£ãšã話è ãå€ãèšèªã䜿ãããšã¯å€§ããªã¢ããã³ããŒãžã ãšå®æããã
ããŸã¯é«æ©èœãªç¿»èš³ããŒã«ãããã
ãã£ãšåé¡è§£æ±ºã®å€§ããªåã«ãªããšæãã
ãœãŒã¹ç®¡çããŒã«ã掻çšããïŒGitïŒ

ã³ãŒããæžããŠãããšãããã£ã±ãå ã«æ»ãããããšããç¶æ³ã«ãã°ãã°çŽé¢ããã
ãã®å¯Ÿè±¡ã¯ãã²ãšã€ã®ãœãŒã¹ãã¡ã€ã«ã ãã®å Žåãããã°ããããžã§ã¯ãå šäœã ã£ããã
ããããã€ã§ãå ã«æ»ãããšãªã£ããå®éšçã«ãããããªå®è£ ã詊ããŠã¿ããããããšãããããããªãã
ã»ãšãã©ã®éçºããŒã«ãšåæ§ãVisual Studioã§ããGitãã䜿çšããæ©èœãçµã¿èŸŒãŸããŠããã
Visual Studio ã§ã® Git ãšã¯ã¹ããªãšã³ã¹
Visual Studio ã§ã®ãœãŒã¹ç®¡çã® Git ãªãã·ã§ã³ãã確èªãã ããããŸãè¡ã£ãã³ãŒãã®å€æŽãæéã®çµéã«åãã远跡ããããããããç¹å®ã®ããŒãžã§ã³ã«æ»ãããã§ããŸãã
ãœãŒã¹ãã¡ã€ã«ãGitã§ç®¡çãããšãç¹å®ã®ãã¡ã€ã«ã ãå ã«æ»ãããããã¹ãŠãå ã«æ»ãããããããšã容æã«ã§ããããã«ãªãã
ã©ã®ããã«å®è£ ãããå®ãŸã£ãŠããªãå Žåãå®éšçšã®ãã©ã³ããäœã£ãŠã²ãšéã詊ãããšãç°¡åã«ã§ããã
ãã©ã€ïŒãšã©ãŒãæ°è»œã«è¡ããç°å¢ã¯å¿åŒ·ãã
Gitã¯èªåã®PCäžã§ãœãŒã¹ç®¡çãè¡ãããWebãä»ããŠGithubããMicrosoftãæäŸããAzure DevOpsãçµã¿åãããããšã§ããªã³ã©ã€ã³äžã«ãªããžããªã眮ãããšãã§ããã
å人éçºã§ãã£ãŠããå¥ã®ç«¯æ«ãããäœæ¥ã§ããããåŸã®ãªãªãŒã¹äœæ¥ã«ãããŠãã¡ãªãããå€ãããã
ããã«ã€ããŠã¯æ¬¡åæžãããã
ãŸãšã

ä»åã¯ãå®è£ äœæ¥ãã©ã®ããã«é²ããŠãã£ããã«ã€ããŠæžããã
ãã£ãšã·ã³ãã«ã«é²ããŠããããšãã§ãããšæããããã£ãšå³å¯ã«ããã¹ããšããããããšãæãã
ãã£ããã®å人éçºãèªåèªèº«ããã£ãšãæ©æµãåããããšãã§ããææ³ãèŠã€ããŠããã®ããããšèããŠããã
ããŸçŸæç¹ã®èªåã ãã§ãªããåŸããä¿®æ£ãè¡ããšãã®èªåãªã©ãå°ãæªæ¥ã®èªåãèæ ®ããæ¹æ³ãéžã¶ããšããã€ã³ãã ãšæãã
äºåºŠãšæ¯ãè¿ãããšãã§ããªããããªçªã£èµ°ãæ¹ã ãšãã£ãšåŸæããã
ãã ãããéãããšéçºèªäœã楜ãããªããªã£ãŠããŸãã
åèã«ãªã£ããã¯ããããªãããèªåãªãã®éçºæ¹æ³ãèŠã€ãåºãäžå©ã«ãªãã°å¹žãã
次åã¯ããªãã ããã ã§äžçªé¢åã ã£ãããªãªãŒã¹äœæ¥ã«ã€ããŠæžãäºå®ã
ã¯ãããŠã¹ããã¢ããªãäœã£ãŠã¿ã èšäºäžèЧ
- æ€èšãã§ãŒãºïŒã©ããªã¢ããªãäœããïŒ
- èŠä»¶ãã§ãŒãºïŒã©ããªèŠä»¶ã®ã¢ããªã«ãããïŒ
- 調æ»ãã§ãŒãºïŒã©ããªæè¡ã䜿ããïŒ
- èšèšãã§ãŒãºïŒã©ããã£ãŠäœããïŒ
- éçºãã§ãŒãºïŒå®éã«äœãã¯ãããïŒãä»åã
- å ¬éãã§ãŒãºïŒã¢ããªãå ¬éããïŒ
- ä¿å®ãã§ãŒãºïŒå ¬éããçŸåšãŸã§ïŒ