ð£ æ°åºåèª ð£

-
äžæä¿ç®¡
æŒååŸãæ¬ä¿ç®¡ã«ç§»è¡ãããŸã§ã®ä¿ç®¡ãããã -
æ¬ä¿ç®¡
äžæä¿ç®¡åŸãåŒãç¶ãç眮ãèŠãã蚌æ ç©ä»¶ã®ä¿ç®¡ãããã -
貞åºã
å調ã¹çã®ãããä¿ç®¡äžã®èšŒæ ç©ä»¶ãä¿ç®¡èšåããäžæçã«åºåº«ããããšãããã -
æåºã
éèŽãéä»ãç§»éçã®ããã蚌æ ç©ä»¶ã®ä¿ç®¡ãè§£é€ããããšãããã -
蚌æ ç©ä»¶ç®¡çæå±
蚌æ ç©ä»¶ã«ä¿ãææ»ãæ åœããæå±ãããã

蚌æ ç©ä»¶ç®¡çæå±ã«ããã管çäœå¶
ãªããšãªãæŽçã现ããã

çµåæ¡ä»¶
- SQLã«ãããŠç°ãªãããŒãã«éã§ã©ã®ããã«ããŒã¿ãçµåããããå®çŸ©ããã«ãŒã«
- äžçªåºæ¬çãªæ¹æ³ã¯ãJOINå¥ãã䜿çšããæ¹æ³
- ãINNER JOINãäž¡æ¹ã®ããŒãã«ã«å ±éã®ã¬ã³ãŒãã®ã¿ãæœåºãã

å·Šå€éšçµå
- ãLEFT JOIN ãã®ããš

GitLabã®runnerãKubernetes䜿ããã®ãã


-
ãžã§ããå®è¡ã§ããRunnerãããããšãç¢ºèª (GitLab.comã䜿ã£ãŠããå Žåã¯ããã®ã¹ãããã¯é£ã°ããŠãåé¡ãªã)
-
ãªããžããªã®ã«ãŒãã«.gitlab-ci.yml ãã¡ã€ã« ãäœæ

build-job, test-job1, test-job2, ããã³ deploy-prodã®4ã€ã®ãžã§ããå®çŸ©
build-job:
stage: build
script:
- echo "Hello, $GITLAB_USER_LOGIN!"
test-job1:
stage: test
script:
- echo "This job tests something"
test-job2:
stage: test
script:
- echo "This job tests something, but takes more time than test-job1."
- echo "After the echo commands complete, it runs the sleep command for 20 seconds"
- echo "which simulates a test that runs 20 seconds longer than test-job1"
- sleep 20
deploy-prod:
stage: deploy
script:
- echo "This job deploys something from the $CI_COMMIT_BRANCH branch."
environment: production

stage : CI/CDãã€ãã©ã€ã³ã¯è€æ°ã®ã¹ããŒãžã§æ§æããããåã¹ããŒãžã¯äžŠè¡ã«å®è¡ãããã
jobs : åã¹ããŒãžå ã§åå¥ã®ãžã§ããå®çŸ©ãããããžã§ãã¯æå®ãããã¹ããŒãžã«åŸã£ãŠå®è¡ãããã

buildã¹ããŒãžã¯ãGitLab CI/CD ãã€ãã©ã€ã³ãããªã¬ãŒããããã³ã«å®è¡ãããã
èŠããã«ããªããžããªã«å¯ŸããŠäœããã®ã€ãã³ããçºçããå ŽåïŒäŸãã°ãã³ãããã®ããã·ã¥ãããŒãžãªã¯ãšã¹ãã®äœæãªã©ïŒãéœåºŠå®è¡ãããã€ã¡ãŒãžã

- æ§æãå®çŸ©
- äŸåé¢ä¿ã远å
- ã¿ã¹ã¯ãå®çŸ©

- checkã¿ã¹ã¯ã¯ãGradleãã«ãã®äžç°ãšããŠå®è¡ãããã¿ã¹ã¯ã®äžã€
- checkã¿ã¹ã¯ã¯éåžžãbuildã¿ã¹ã¯ã®äŸåã¿ã¹ã¯ãšããŠèšå®ãããŠããã
- ãããã£ãŠãbuildã¿ã¹ã¯ãå®è¡ãããšããã®éçšã§checkã¿ã¹ã¯ãå®è¡ããã

JavaExecã¿ã€ã
- JavaExecã¯ãGradleã®ã¿ã¹ã¯ã¿ã€ãã®äžã€ã
- Javaã®ã¯ã©ã¹ãå¥ã®ããã»ã¹ãšããŠå®è¡ããããã«äœ¿çšãããã
- JavaExecã¿ã¹ã¯ã䜿çšãããšãç¹å®ã®Javaã¯ã©ã¹ãå®è¡ãããã®ã¯ã©ã¹ã«å¯ŸããŠåŒæ°ãæž¡ããããã¯ã©ã¹ãã¹ãèšå®ãããããããšãã§ããã
verificationã°ã«ãŒã
- Gradleã¿ã¹ã¯ã«ã¯ãgroupãšããããããã£ãããã
- ããã¯ã¿ã¹ã¯ãè«ççã«ã°ã«ãŒãåããããã«äœ¿çšãããã
- ã°ã«ãŒãåãèšå®ããããšã§ãGradleã®ã³ãã³ãã©ã€ã³ãã«ããã¿ã¹ã¯ãªã¹ãã®è¡šç€ºæã«ãé¢é£ããã¿ã¹ã¯ããŸãšããŠè¡šç€ºããããšãã§ããã

åç
§å€ãïŒ
åç
§ã蟿ã£ãŠå®éã®ããŒã¿ãååŸã»æäœããããš

Swiftã ãšä»¥äž
var x = 42
let pointer = UnsafeMutablePointer(&x) // x ã®åç
§ãååŸ
print(pointer.pointee) // åç
§å€ããã㊠x ã®å€ãååŸ
Rustã¯ä»¥äžããã£ã¡ã®æ¹ãæå³åããããããã
let x = 5;
let y = &x; // y 㯠x ã®åç
§
println!("{}", y); // y ã¯åç
§ãªã®ã§ãã®ãŸãŸã§ã¯ã¢ãã¬ã¹ã®ãããªãã®
println!("{}", *y); // *y ã§åç
§å€ããã㊠x ã®å€ãååŸ

SwiftæžããŠãããšãããŸæèããªããã©ãèåŸã§ã¯åããŠããä»çµã¿ã£ãœãæãã
ã¯ã©ã¹ã€ã³ã¹ã¿ã³ã¹ã®ããããã£ã«ã¢ã¯ã»ã¹ããæãšãå
éšçã«ã¯åç
§å€ããè¡ãããŠããã£ãœãã

Rustã§ã¯ãSwiftã®classã«çžåœãããã®ã¯æ§é äœã§å®çŸ©ããã£ãœãã
struct MyClass {
value: i32
}
impl MyClass {
// ã³ã³ã¹ãã©ã¯ã¿ã«çžåœããã¡ãœãã
fn new(value: i32) -> Self {
MyClass { value }
}
// å€ãååŸããã¡ãœãã
fn get_value(&self) -> i32 {
self.value
}
}
fn main() {
// MyClassã®ã€ã³ã¹ã¿ã³ã¹ãçæ
let instance = MyClass::new(42);
// ã€ã³ã¹ã¿ã³ã¹ã®åç
§ã䜿ã£ãŠå€ãååŸ
println!("{}", instance.get_value());
}
/*
class MyClass {
var value: Int = 42
}
let instance = MyClass()
print(instance.value) // æé»çã«åç
§å€ããã㊠value ãååŸ
Swiftã§æžããšãããªãã
*/````

ããçš®æç€ºçã«è²ã æžãããšãå€ãããããçç¥èšæ³ãšããæ£èŠãããã®ããªã£ãŠæããããRustã

æ§é äœãåæåã«é¢é£ã¥ããããŠãããã®ã¯é¢æ°(selfããšããªã)
æ§é äœãåæåã«é¢é£ã¥ããããŠãããã®ã¯ã¡ãœãã(selfãåã)
ãã®éããé¢çœãæããããã

é¢é£é¢æ°ã¯æ§é äœã®æ°èŠã€ã³ã¹ã¿ã³ã¹ãè¿ãã³ã³ã¹ãã©ã¯ã¿ã«ããå©çšãããã
impl Rectangle {
fn square(size: u32) -> Rectangle {
Rectangle { width: size, height: size }
}
}

ãã®é¢é£é¢æ°ãåŒã³åºãããã«ãæ§é äœåãšäžç·ã«::èšæ³ã䜿çšããŸã; äžäŸã¯let sq = Rectangle::square(3);ã§ãã ãã®é¢æ°ã¯ãæ§é äœã«ãã£ãŠåå空éåããããŠããŸã: ::ãšããèšæ³ã¯ãé¢é£é¢æ°ãšã¢ãžã¥ãŒã«ã«ãã£ãŠäœãåºãããåå空éäž¡æ¹ã«äœ¿çšãããŸãã ã¢ãžã¥ãŒã«ã«ã€ããŠã¯ç¬¬7ç« ã§è°è«ããŸãã
::ã§ã€ã³ã¹ã¿ã³ã¹ãæ°èŠã«ç²åŸããããŒã£ãŠæãã®ããšãèšã£ãŠããã®ããªã£ãŠæãããã

let range1 = -100..<100
print(range1[0]) // 0
print(range1[-100]) // -100
print(type(of: range1)) // Range<Int>

é
åãšã¯ã¡ãã£ãšæ§è³ªãéããã³ã³ãã£ã·ã§ãã«ã³ã³ãã©ãŒãã³ã¹ã䜿ã£ãŠããã
Strideable ã«é©åããŠããªãããã§ããªãã£ãœãã
æã¯Strideable ãªãã®ãèŠçŽ ã«æã€Rangeã¯CountableRangeã§ããããããªããã®ã¯æ®éã®Rangeã«ããŠãããããã

é åã«å€æããã°åé¡ã¯ãªããããããã
let range = -100..<100
let array = Array(range)
print(array[0]) // -100
print(array[99]) // -1

Unicode.Scalar ãStrideableã§ã¯ãªãã®ã

æç€ºçã«ã¹ããããæç€ºããã°forã§åããã£ãœãã
for d in stride(from: 0.0, through: 0.1, by: 0.01) {
print(d)
}

endIndexã¯æåŸã®Indexã®æ¬¡ã®å€ãååŸãã

æåŸã¯lastã

åœåããææ°ãé ãããæããã

Stringã§é«é颿°äœ¿ãããã«ããããIntãStringã«å€æããŠãã®ããªããééããŠããæãããããå倿ã軜çã«äœ¿ããããŠãããããã©ãŒãã³ã¹çã«ã奜ãŸããã¯ãªãã

代æ°çããŒã¿åïŒAlgebraic Data Type: ADTïŒ ãšã¯ãããŒã¿åãæ§ç¯ããããã®æ°åŠçãªæŠå¿µã§ãããç¹ã« ãåããšãç©ãã®çµã¿åãã ãå©çšããŠåã衚çŸããæ¹æ³ãæããŸããããã°ã©ãã³ã°ã§ã¯ãè€éãªããŒã¿åãæç¢ºãã€å®å šã«è¡šçŸããããã«äœ¿ãããéèŠãªèãæ¹ã§ãã

enumãšstructã®åããæã䜿ãã®ãã

Swiftãªãenumã ãã§å®çŸã§ããæ§é ã ãªã

matchã¯åŒãªã®ãããããããšç¶²çŸ æ§ãã§ãã¯ãå³ãããªãdefaltãèš±ããªãã

颿°åããŠããªããããããã

ããŒããããäžã€ã®ãªããžã§ã¯ãã«å€çš®ãªããŒã¿ãæãããããã®ã¯ã¡ã¢ãªçã«å¹çãè¯ããªãã®ããããšç¢ºãã«ã ãŒãããã軜åŠã«ã§ããããã«ãªããã

ã¯ã€ã«ãã«ãŒãã£ãŠå·éã«çºé³é¢çœããªããããã ããããã©ã³ãã§ãããšäœã«ã§ããªãããã€ãšããããç¹å¥ãªãã€ã

if let
ãšmatch
ãšéžæå¯èœ

ã¯ãŒã¯ã¹ããŒã¹ãªããŠæŠå¿µãããã®ãã

ããã±ãŒãž: ã¯ã¬ãŒãããã«ããããã¹ãããå ±æããããšãã§ããCargoã®æ©èœ
ã¯ã¬ãŒã: ã©ã€ãã©ãªãå®è¡å¯èœãã¡ã€ã«ãçæãããæšæ§é ãããã¢ãžã¥ãŒã«çŸ€
ã¢ãžã¥ãŒã« ãš use: ããã䜿ãããšã§ããã¹ã®æ§æãã¹ã³ãŒããå ¬éãããåŠããæ±ºå®ã§ããŸã
ãã¹: èŠçŽ ïŒäŸãã°æ§é äœã颿°ãã¢ãžã¥ãŒã«ïŒã«ååãã€ããæ¹æ³

æå³èªäœã¯ãã¡ããã¡ãææ¡ããããæãããã

ããå€ãæž¡ãããšããŠãäºåã«èšå®ãããå€ã®äžã®äžçªã®è¿äŒŒå€ã確å®ããããã

ããããŒã³ã³ããView