Linterã¨ã¯ï¼ESLintå°å ¥ããCI飿ºã¾ã§å®å ¨ã¬ã¤ããWebã¨ã³ã¸ãã¢åãã
Â
Linterã®å½¹å²ã¨å°å ¥ï¼ESLintãªã©ï¼
ã¯ããã«
Webéçºã«ããã¦ã³ã¼ãã®å質ãä¿ã¤ããã«æ¬ ãããªããã¼ã«ã®ä¸ã¤ããLinterï¼ãªã³ã¿ã¼ï¼ãã§ããæ¬è¨äºã§ã¯ãLinterã®åºæ¬çãªå½¹å²ããã代表çãªLinterã§ããESLintã®å°å ¥æ¹æ³ãè¨å®ãæ´»ç¨æ³ã¾ã§ã1æéã§å¦ã¹ãå 容ã§ç¶²ç¾ çã«è§£èª¬ãã¾ãã
Linterã¨ã¯ä½ãï¼
Linterã¨ã¯ãã½ã¼ã¹ã³ã¼ããè§£æãã¦æ§æãã¹ãã¹ã¿ã¤ã«ã®åé¡ãæ¤åºããéçè§£æãã¼ã«ã®ãã¨ã§ãã主ãªç®çã¯ä»¥ä¸ã®éãã§ãï¼
- ã³ã¼ãã®ä¸è²«æ§ãä¿ã¤
- ãã°ã®åå ã¨ãªãè¨è¿°ãã¹ãæªç¶ã«é²ã
- ãã¼ã éçºã«ãããã³ã¼ãã¹ã¿ã¤ã«ã®çµ±ä¸
- ã¬ãã¥ã¼ã³ã¹ãã®åæ¸
代表çãªLinterã®ç¨®é¡
- JavaScript/TypeScript: ESLint, TSLintï¼â»éæ¨å¥¨ï¼
- HTML/CSS: stylelint
- Python: pylint, flake8
- Go: golint
- PHP: PHP_CodeSniffer
ESLintã®å°å ¥æé
- Node.jsãã¤ã³ã¹ãã¼ã«ããã¦ãããã¨ã確èª
- ããã¸ã§ã¯ããã£ã¬ã¯ããªã§ä»¥ä¸ãå®è¡:
npm install eslint --save-dev - åæè¨å®ã¦ã£ã¶ã¼ããèµ·å:
npx eslint --init - ããã¸ã§ã¯ãã«åããã¦è¨å®ãã¡ã¤ã«ï¼.eslintrcï¼ã使
ãã使ãããESLintã®è¨å®ä¾
{
"env": {
"browser": true,
"es2021": true
},
"extends": [
"eslint:recommended",
"plugin:react/recommended"
],
"parserOptions": {
"ecmaFeatures": {
"jsx": true
},
"ecmaVersion": 12,
"sourceType": "module"
},
"rules": {
"semi": ["error", "always"],
"quotes": ["error", "double"]
}
}
VSCodeã¨ã®é£æº
以ä¸ã®æ¡å¼µæ©è½ãã¤ã³ã¹ãã¼ã«ãããã¨ã§ãä¿åæã«èªåä¿®æ£ãå¯è½ã«ãªãã¾ãï¼
- ESLintï¼æ¡å¼µæ©è½ï¼
settings.jsonã«ä»¥ä¸ã追å ï¼
{
"editor.codeActionsOnSave": {
"source.fixAll.eslint": true
}
}
Prettierã¨ã®ä½µç¨
ã³ã¼ãæ´å½¢ãã¼ã«ã§ããPrettierã¨ESLintãä½µç¨ããå ´åãeslint-config-prettierãeslint-plugin-prettierã使ã£ã¦æ´åæ§ãä¿ã¡ã¾ãã
npm install --save-dev eslint-config-prettier eslint-plugin-prettier
CIã¨ã®çµ±å
CI/CDãã¤ãã©ã¤ã³ã«ESLintãçµã¿è¾¼ããã¨ã§ãããã·ã¥æã«èªåã§ã³ã¼ãå質ããã§ãã¯ã§ãã¾ãï¼
# GitHub Actionsã®ä¾
name: Lint
on: [push, pull_request]
jobs:
lint:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Use Node.js
uses: actions/setup-node@v3
with:
node-version: '18'
- run: npm install
- run: npx eslint .
ã¾ã¨ã
Linterã¯ãåãªãè¦åãã¼ã«ã§ã¯ãªããã³ã¼ãã®å質åä¸ã»ãã¼ã ã®å¹çåã»ãã°ã®äºé²ãªã©ã«ç´çµããé常ã«å¼·åãªãã¼ã«ã§ããESLintãã¯ããã¨ããLinterã®å°å ¥ã¯ãWebã¨ã³ã¸ãã¢ã«ã¨ã£ã¦å¿ é ã¹ãã«ã¨ããããã§ãããã
ãã¼ã éçºãå éããï¼PRã¬ãã¥ã¼ã§æ¼ãããã¹ããã§ãã¯ãã¤ã³ã
Â
PRã¬ãã¥ã¼ã®ãã¤ã³ãï¼è³ªã®é«ãã³ã¼ããçã¿åºãããã«
Pull Requestï¼PRï¼ã¬ãã¥ã¼ã¯ããã¼ã éçºã«ãããå質ä¿è¨¼ã¨ç¥èå ±æã®éè¦ãªããã»ã¹ã§ãããã®è¨äºã§ã¯ãWebã¨ã³ã¸ãã¢ãç¥ã£ã¦ããã¹ãPRã¬ãã¥ã¼ã®åºæ¬ã¨ã1æéã§å¦ã¹ãå®è·µãã¤ã³ããç¶²ç¾ çã«è§£èª¬ãã¾ãã
1. PRã¬ãã¥ã¼ã¨ã¯ï¼
Pull Requestï¼PRï¼ã¬ãã¥ã¼ã¯ãéçºè ãã³ã¼ããmainãã©ã³ããªã©ã«ãã¼ã¸ããåã«ãä»ã®ã¡ã³ãã¼ãã³ã¼ãã確èªã»æ¤è¨¼ããããã»ã¹ã§ããã¬ãã¥ã¼ãéãã¦ãã³ã¼ãã®å質ãã»ãã¥ãªãã£ãããã©ã¼ãã³ã¹ãä¿å®æ§ãæ ä¿ããã¾ãã
2. ãªãã¬ãã¥ã¼ãå¿ è¦ãªã®ã
- ãã°ã®æ©æçºè¦ã¨ä¿®æ£
- ã³ã¼ãã£ã³ã°è¦ç´ã®éµå®
- è¤æ°äººã§ã®ç¥èå ±æã¨å¦ç¿
- æè¡çè² åµã®æå¶
- å±äººåã®é²æ¢
3. PRã¬ãã¥ã¼ã®åºæ¬ããã¼
- éçºè ãfeatureãã©ã³ãã§éçºãè¡ã
- Pull Requestã使ããã¬ãã¥ã¼ã¢ãã¢ãµã¤ã³
- ã¬ãã¥ã¼ã¢ãã³ã¼ãã確èªããã³ã¡ã³ããä¿®æ£ä¾é ¼ãè¡ã
- éçºè ã対å¿ããåã¬ãã¥ã¼
- åé¡ããªããã°ãã¼ã¸
4. è¯ãã¬ãã¥ã¼ã³ã¡ã³ãã®ä¾
- Good: ããã®å¤æ°å㯠'userName' ã®æ¹ãããæå³ãæç¢ºã§ãã
- Bad: ããªããå¤ã
- Good: ããã®ã«ã¼ããmap颿°ã§æ¸ãæããã¨ãã£ã¨ã·ã³ãã«ã«ãªãã¾ãã
- Bad: ããã®æ¸ãæ¹å«ãã
5. ã¬ãã¥ã¼æã«ãã§ãã¯ãã¹ããã¤ã³ã
- 1. åä½ç¢ºèªï¼ ãã¼ã«ã«ã¾ãã¯CIã§åä½ãä¿è¨¼ããã¦ããã
- 2. ã³ã¼ãã£ã³ã°è¦ç´ï¼ ãã¼ã ã«ã¼ã«ã«å¾ã£ã¦ããã
- 3. å½åï¼ å¤æ°åã»é¢æ°åãæå³ãæ£ãã表ãã¦ããã
- 4. ä¸è¦ãªã³ã¼ãï¼ ãããã°ç¨ã³ã¼ããæªä½¿ç¨å¤æ°ãæ®ã£ã¦ããªãã
- 5. ã»ãã¥ãªãã£ï¼ ã¦ã¼ã¶ã¼å ¥åã®ããªãã¼ã·ã§ã³ãããã¦ããã
- 6. ããã©ã¼ãã³ã¹ï¼ ç¡é§ãªã«ã¼ããå¦çããªãã
- 7. å¯èªæ§ï¼ è¤éãªãã¸ãã¯ãèªã¿ãããæ´çããã¦ããã
- 8. ãã¹ãï¼ åä½ãã¹ããE2Eãã¹ããæ¸ããã¦ããã
- 9. ã³ã¡ã³ãï¼ è¤éãªç®æã«é©åãªèª¬æãããã
6. PRãµã¤ãºã¨ã¬ãã¥ã¼å¹ç
1ã¤ã®PRã«å«ã¾ãã夿´ã大ããããã¨ãã¬ãã¥ã¼ã®è³ªãä¸ãããã¡ã§ããç®å®ã¨ãã¦ã夿´è¡æ°ã¯300è¡æªæºãæã¾ããã¨ããã¦ãã¾ããPRãå°ããä¿ã¤ãã¨ã§ãã¬ãã¥ã¼ã®å転çãé«ã¾ãã¾ãã
7. CI/CDã¨ã®é£æº
PR使æã«èªåãã¹ããLintãå®è¡ãããããã«è¨å®ãã¦ãããã¨ã§ã人éã®ã¬ãã¥ã¼ã¯ã³ã¼ãã®æå³ãè¨è¨ã«éä¸ã§ãã¾ããGitHub Actions ã GitLab CI ãªã©ãæ´»ç¨ãã¾ãããã
8. ã¬ãã¥ã¼æåã®è²ã¦æ¹
- ãã¬ãã£ããªææããã建è¨çãªææ¡ã
- ã¬ãã¥ã¼ææã¯ãã¼ã ã®æé·ã®ä¸é¨ã¨æãã
- ã³ã¼ãã§ã¯ãªãè¡åãã¬ãã¥ã¼ããï¼äººæ ¼å¦å®NGï¼
- ã¬ãã¥ã¼ããããLGTMï¼Looks Good To Meï¼ãã§æ¿èªã®ææè¡¨ç¤ºã
9. ããããã¢ã³ããã¿ã¼ã³
- ã¬ãã¥ã¼ãªãã§ãã¼ã¸
- PRã巨大ããã¦èª°ãã¬ãã¥ã¼ãããããªã
- ã¬ãã¥ã¼ãå½¢å¼çã§æ©æ¢°ç
- ã³ã¼ãã¹ã¿ã¤ã«ææã ãã§çµãã£ã¦ãã¾ã
10. ã¾ã¨ã
PRã¬ãã¥ã¼ã¯ãåãªããã§ãã¯ä½æ¥ã§ã¯ãªãããã¼ã ã®ç¥èå ±æã»åè³ªç¶æã®ããã®éè¦ãªã³ãã¥ãã±ã¼ã·ã§ã³ã§ããæè¡ã ãã§ãªããæåã¨ãã¦ãã¬ãã¥ã¼ãæ£ããéç¨ãããã¨ããè¯ãéçºãã¼ã ã¸ã®ç¬¬ä¸æ©ã§ãã
Gitã®ãã©ã³ãæ¦ç¥ãå®å ¨çè§£ï¼mainã»devã»featureã®ä½¿ãåãã¬ã¤ã
Â
ãã©ã³ãæ¦ç¥ï¼main, dev, featureï¼å®å ¨ã¬ã¤ã
ãã¼ã ã§ã®ã½ããã¦ã§ã¢éçºã«ããã¦ããã©ã³ãæ¦ç¥ã¯ããã¸ã§ã¯ãã®å質ã¨éçºã¹ãã¼ãã大ããå·¦å³ãã¾ããæ¬è¨äºã§ã¯ã1æéã§çè§£ã§ããããã«ãmainã»devã»featureã¨ãã£ã代表çãªãã©ã³ãæ¦ç¥ã«ã¤ãã¦ä½ç³»çã«è§£èª¬ãã¾ãã
1. ãã©ã³ãã¨ã¯ï¼
Gitã®ãã©ã³ãã¯ãããã¸ã§ã¯ãã®ã³ã¼ãã並è¡ãã¦å¤æ´ããããã®ä»çµã¿ã§ããç¹å®ã®æ©è½éçºããã°ä¿®æ£ããªãªã¼ã¹æºåãªã©ãç¬ç«ãã¦è¡ããããã«ãªãã¾ãã
2. ãã使ããããã©ã³ãæ¦ç¥
- mainï¼ã¾ãã¯masterï¼ï¼æ¬çªç°å¢ã«ãããã¤ãããå®å®çã³ã¼ã
- developï¼ã¾ãã¯devï¼ï¼æ¬¡ã®ãªãªã¼ã¹åè£ãçµ±åããããã®éçºç¨ãã©ã³ã
- feature/*ï¼æ°æ©è½ãæ¹åç¹ãªã©ãåå¥ã«éçºããããã®ãã©ã³ã
- hotfix/*ï¼æ¬çªç°å¢ã§ã®ç·æ¥ä¿®æ£ç¨
- release/*ï¼ãªãªã¼ã¹æºåã®ããã®èª¿æ´ã»æ¤è¨¼ãè¡ããã©ã³ã
3. Git Flowã¨ã¯
Git Flowã¯ãæåãªãã©ã³ãæ¦ç¥ã®ä¸ã¤ã§ãä¸è¨ã®ãããªãã©ã³ãæ§æããã¼ã¹ã«ãã¦ãã¾ãã
Git Flowã®æµã
- main ãã develop ãã©ã³ãã使
- develop ãã feature ãã©ã³ãã使ããæ©è½éçº
- develop ã«ãã¼ã¸
- release ãã©ã³ããåã£ã¦æçµèª¿æ´
- main ã«ãã¼ã¸ãã¦æ¬çªãªãªã¼ã¹
- main ã develop ã«ããã¼ã¸ï¼å±¥æ´ã®æ´åï¼
4. ãã©ã³ãåã®å½åè¦å
- feature/login-formï¼ãã°ã¤ã³ãã©ã¼ã æ©è½
- hotfix/typo-headerï¼è¦åºãã®èª¤åä¿®æ£
- release/v1.2.0ï¼v1.2.0ãªãªã¼ã¹æºå
5. ãã©ã³ãéç¨ã®ã¡ãªãã
- è¤æ°äººãåæã«å®å ¨ã«éçºå¯è½
- æ¬çªã³ã¼ããå®å®ãã¦ç¶æ
- ã³ã¼ãã¬ãã¥ã¼ã»CI/CDããããã
- ãã©ãã«æã®ãã¼ã«ããã¯ã容æ
6. Pull Requestï¼PRï¼ã¨ãã©ã³ã
éçºãçµãã£ãããfeature ãã©ã³ããã develop 㸠PR ãåºããã³ã¼ãã¬ãã¥ã¼ã»CI å®è¡å¾ã«ãã¼ã¸ãã¾ããããã«ããåè³ªãæ ä¿ãã¾ãã
7. CI/CDã¨ã®é£æº
GitHub Actions ãªã©ã¨é£æºããã°ãfeature ãã©ã³ãã® push ã«èªåãã¹ããå®è¡ãmain ã¸ã®ãã¼ã¸ã§èªåãããã¤ãã¨ãã£ãã¯ã¼ã¯ããã¼ãæ§ç¯ã§ãã¾ãã
8. ãããããã©ã³ãéç¨ã®ãã¹ã¨å¯¾ç
- develop ã¸ã®ç´æ¥ pushï¼ ä¿è·ã«ã¼ã«ãè¨å®ããPR çµç±ã«éå®
- å½åã®ä¸çµ±ä¸ï¼ ãã¼ã ã§å½åè¦åãããã¥ã¡ã³ãå
- æ¾ç½®ãã©ã³ãï¼ å®æçã«ä¸è¦ãã©ã³ããåé¤
9. ãã¼ã ãã¨ã®æé©å
ãã¼ã ã®è¦æ¨¡ãéç¨ããªã·ã¼ã«ãããGit Flow ãç°¡ç¥åã㦠main + feature ã ãã§éç¨ããã±ã¼ã¹ããtrunk-based development ã«è¿ãå½¢ãæ¡ç¨ãããã¨ãããã¾ãã
10. ã¾ã¨ã
ãã©ã³ãæ¦ç¥ã¯ããã¸ã§ã¯ãã®æåãå·¦å³ããéè¦ãªè¦ç´ ã§ããmainã»devã»featureãã©ã³ãããã¾ã使ãããªããå¹ççãã¤å®å ¨ãªéçºä½å¶ãç¯ãã¾ãããã
Gitåå¿è åãï¼clone/commit/push/pull å®å ¨ã¬ã¤ãã1æéã§ç¿å¾ã
Â
Gitã®åºæ¬ï¼clone, commit, push, pullï¼å®å ¨ã¬ã¤ã
Gitã¯ãWebã¨ã³ã¸ãã¢ã«ã¨ã£ã¦å¿
é ã®åæ£åãã¼ã¸ã§ã³ç®¡çã·ã¹ãã ã§ããæ¬è¨äºã§ã¯ãç¹ã«éè¦ãªã³ãã³ãã§ããcloneãcommitãpushãpullãä¸å¿ã«ãGitã®åºæ¬çãªä½¿ãæ¹ã¨èæ¯ç¥èã1æéã§ç¿å¾ã§ããããã«è§£èª¬ãã¾ãã
1. Gitã¨ã¯ï¼
Gitã¯ãã½ã¼ã¹ã³ã¼ããããã¥ã¡ã³ããªã©ã®å¤æ´å±¥æ´ã管çãããã¼ã«ã§ããããã¸ã§ã¯ãã®ç¶æ ãéå»ã«é¡ã£ã¦ç¢ºèªã§ããããè¤æ°äººã§ã®éçºãå¹çåãããããããã«æ´»ç¨ããã¾ãã
ç¹å¾´
- 忣åï¼ãã¼ã«ã«ã«ãå±¥æ´ãä¿åããã
- ãã©ã³ãæä½ãé«é
- è¤æ°äººã§ã®ä¸¦è¡éçºã«å¼·ã
2. cloneï¼ãªãã¸ããªã®ã³ãã¼
ãªã¢ã¼ãã«ããGitãªãã¸ããªããã¼ã«ã«ã«ã³ãã¼ããããã®ã³ãã³ãã§ãã
git clone https://github.com/user/repo.git
ããã«ããã対象ã®ãã£ã¬ã¯ããªã«ãªãã¸ããªãè¤è£½ããã以éã®æä½ãå¯è½ã«ãªãã¾ãã
3. commitï¼å¤æ´ãè¨é²
ãã¼ã«ã«ã§è¡ã£ã夿´ãå±¥æ´ã¨ãã¦è¨é²ãã¾ãã
git add .
git commit -m "æå³ã®ããã³ãããã¡ãã»ã¼ã¸"
git addï¼å¤æ´ãã¹ãã¼ã¸ã«è¿½ågit commitï¼ã¹ãã¼ã¸ããã夿´ã確å®
4. pushï¼ãªã¢ã¼ãã«åæ
ãã¼ã«ã«ã§ã³ãããããå 容ããªã¢ã¼ããªãã¸ããªã«åæ ãã¾ãã
git push origin main
originã¯ãªã¢ã¼ãã®ååãmainã¯ãã©ã³ãåã§ãã
5. pullï¼ãªã¢ã¼ãã®å¤æ´ãåå¾
ä»ã®äººã®å¤æ´ããã¼ã«ã«ã«åæ ããããã®ã³ãã³ãã§ãã
git pull origin main
ãªã¢ã¼ãã®ææ°ã®ã³ããããåå¾ãã¦ããã¼ã«ã«ã«ãã¼ã¸ãã¾ãã
6. Gitã®ã¯ã¼ã¯ããã¼
- 使¥éå§ï¼git clone
- 夿´ï¼ã³ã¼ããç·¨é
- ã¹ãã¼ã¸ï¼git add
- ã³ãããï¼git commit
- åæ ï¼git push
- åæï¼git pull
7. ãããããã©ãã«ã¨å¯¾å¦æ³
- ã³ã³ããªã¯ãï¼pullæã«ç«¶åãçºçãæåã§è§£æ±ºãã¦åã³ãããã
- pushã§ããªãï¼ãªã¢ã¼ãã«æ°ããã³ããããããå ´åãå ã«pullã
- addå¿ãï¼commitãã¦ã夿´ãåæ ãããªã â git statusã§ç¢ºèªã
8. ã³ãã³ãã®è£å©ãã¼ã«
- Git GUIï¼SourceTreeãGitKrakenãGitHub Desktop
- ã¿ã¼ããã«è£å®ï¼zsh + oh-my-zsh + git plugin
- VS Codeæ¡å¼µï¼GitLens
9. Gitã使ã£ããã¼ã éçºã®åºæ¬
- ãã©ã³ãéç¨ï¼featureãdevelopãmainï¼
- PRï¼Pull Requestï¼ãã¼ã¹ã®éçº
- CI/CDã¨ã®é£æºï¼GitHub Actionsãªã©ï¼
10. ã¾ã¨ã
Gitã®åºæ¬çãªã³ãã³ãã§ããcloneãcommitãpushãpullãæ£ãã使ãããªããã¨ã¯ãWebã¨ã³ã¸ãã¢ã¨ãã¦ã®ç¬¬ä¸æ©ã§ãããã¼ã ã§ã®å¹ççãªéçºãå®å®ããéç¨ã®ããã«ãã確å®ã«ç¿å¾ãã¦ããã¾ãããã
AWS CloudWatchã¨ãã°ç£è¦ã®ãã¹ã¦ï¼å®å®éç¨ã«ä¸å¯æ¬ ãªãã°æ¦ç¥
Â
CloudWatchããã°ç£è¦ã®æ¦è¦
Webã¢ããªã±ã¼ã·ã§ã³ãã¤ã³ãã©ãå®å®éç¨ããããã§ããã°ã®åéã¨ç£è¦ã¯é常ã«éè¦ã§ããæ¬è¨äºã§ã¯ãAWS CloudWatch ãä¸å¿ã«ããã°ç£è¦ã®åºæ¬æ¦å¿µãè¨å®æ¹æ³ãå¿ç¨ãã¯ããã¯ã«ã¤ãã¦ä½ç³»çã«è§£èª¬ãã¾ãã
1. ãã°ç£è¦ã¨ã¯
ãã°ç£è¦ã¨ã¯ãã¢ããªã±ã¼ã·ã§ã³ããµã¼ããåºåãããã°ãåéã»åæããç°å¸¸ããã©ãã«ã®å åãæ¤ç¥ã»éç¥ããããã®ä»çµã¿ã§ãã
代表çãªç£è¦å¯¾è±¡ãã°
- ã¢ããªã±ã¼ã·ã§ã³ãã°
- Webãµã¼ãï¼NginxãApacheï¼ãã°
- OS/ã·ã¹ãã ãã°ï¼/var/log/ï¼
- ã³ã³ãããã°ï¼Docker, ECS, Kubernetesï¼
- DBãã°ï¼MySQL, PostgreSQLãªã©ï¼
2. AWS CloudWatchã¨ã¯
AWS CloudWatchã¯ãAWSç°å¢ã«ãããç£è¦ã¨ãã°ç®¡çãçµ±åçã«æä¾ãããµã¼ãã¹ã§ãã以ä¸ã®ä¸»ãªæ©è½ãããã¾ãã
- CloudWatch Logsï¼ãã°ã®åéã»æ¤ç´¢ã»å¯è¦å
- CloudWatch Metricsï¼ãªã½ã¼ã¹ã®ã¡ããªã¯ã¹ç£è¦
- CloudWatch Alarmsï¼ãããå¤ã«ããã¢ã©ã¼ãéç¥
- CloudWatch Dashboardsï¼å¯è¦åããã·ã¥ãã¼ã
- CloudWatch Logs Insightsï¼ã¯ã¨ãªãã¼ã¹ã®ãã°åæ
3. CloudWatch Logsã®åºæ¬æ§æ
- Log Groupï¼ãã°ã®ã°ã«ã¼ãåä½
- Log Streamï¼ãã°ãã¼ã¿ã®é£ç¶çãªæµãï¼ä¾ï¼1ã¤ã®EC2ã¤ã³ã¹ã¿ã³ã¹ï¼
- ãã°ã¨ã¼ã¸ã§ã³ãï¼CloudWatch AgentãFluent BitãAWS CLI ãªã©
4. ãã°éä¿¡ã®è¨å®
EC2ããã®éä¿¡
sudo yum install amazon-cloudwatch-agent
sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-config-wizard
sudo systemctl start amazon-cloudwatch-agent
ECSã»Fargateããã®éä¿¡
ãã°ãã©ã¤ãã«awslogsãæå®ã
logConfiguration:
logDriver: awslogs
options:
awslogs-group: "/ecs/my-app"
awslogs-region: "ap-northeast-1"
awslogs-stream-prefix: "ecs"
5. CloudWatch Logs Insights
ãã°ã«å¯¾ãã¦SQLã©ã¤ã¯ãªã¯ã¨ãªãå®è¡ããã¨ã©ã¼æ°ããªã¯ã¨ã¹ãæ°ãå¯è¦åã§ãã¾ãã
fields @timestamp, @message
| filter @message like /ERROR/
| sort @timestamp desc
| limit 20
6. ã¢ã©ã¼ã éç¥ã®è¨å®
ã¡ããªã¯ã¹ã«å¯¾ãã¦CloudWatch Alarmãè¨å®ããSNSçµç±ã§éç¥ãéä¿¡ã
- ã¡ããªã¯ã¹ï¼CPU使ç¨ç, ã¨ã©ã¼ã¬ã¼ã
- éç¥ï¼Amazon SNS â Email, Slack, Lambda
7. ä»ã®ãã°ç£è¦ãµã¼ãã¹ã¨ã®æ¯è¼
- Datadogï¼UIãåªãã¦ãããCloudWatch飿ºãç°¡å
- New Relicï¼ã¢ããªã±ã¼ã·ã§ã³ããã©ã¼ãã³ã¹åæã«å¼·ã
- Elastic Stackï¼ELKï¼ï¼å®å ¨ãªã¼ãã³ã½ã¼ã¹ã§æè»æ§ãã
8. ãã¹ããã©ã¯ãã£ã¹
- ãã°éãå¶å¾¡ããã³ã¹ã対çï¼ãµã³ããªã³ã°ã»ä¿åæéã®è¦ç´ãï¼
- ç°å¢ãã¨ã«Log Groupãåããï¼dev/stg/prodï¼
- ã¢ããªã±ã¼ã·ã§ã³ãã°ã¯æ§é åå½¢å¼ï¼JSONï¼ã§åºå
- ç£è¦ã¨ã¢ã©ã¼ãã¯æå°éãã¤æå³ã®ãããã®ã«
ã¾ã¨ã
ãã°ç£è¦ã¯ãã©ãã«å¯¾å¿ã»é害æ¤ç¥ã ãã§ãªããã¢ããªã±ã¼ã·ã§ã³ãã·ã¹ãã ã®æ¹åã«ãå½¹ç«ã¡ã¾ããCloudWatchãä¸å¿ã¨ããç£è¦ä½å¶ãæ´åãããã¨ã§ãWebãµã¼ãã¹ã®å®å®éç¨ãå®ç¾ã§ãã¾ãã
ã¼ããã¦ã³ã¿ã¤ã ãããã¤ã極ããï½Blue-Green, Rolling Update, å®è·µææ³ã¾ã¨ã
Â
ãããã¤æã®ã¼ããã¦ã³ã¿ã¤ã ã®å·¥å¤«
æ¬è¨äºã§ã¯ãWebã¢ããªã±ã¼ã·ã§ã³ã稼åãããã¾ã¾æ°ãããã¼ã¸ã§ã³ããããã¤ãããã¼ããã¦ã³ã¿ã¤ã ãããã¤ã¡ã³ãï¼Zero Downtime Deploymentï¼ãã«ã¤ãã¦ãä»çµã¿ã»æè¡ã»å®è£ æ¹æ³ã»æ³¨æç¹ã¾ã§å¾¹åºçã«è§£èª¬ãã¾ãã
1. ãªãã¼ããã¦ã³ã¿ã¤ã ãéè¦ã
- ã¦ã¼ã¶ã¼ä½é¨ã®ç¶æï¼ç¨¼åä¸ã®ãµã¼ãã¹ã«ã¢ã¯ã»ã¹é害ãåºããªã
- æ¥åå½±é¿ã®åé¿ï¼ãã¸ãã¹ä¸ã®æå¤±ãé²ã
- ã·ã¹ãã ä¿¡é ¼æ§ï¼ç¶ç¶çããªããªã¼ã®å®ç¾ã«ã¯å¿ é
2. ã¼ããã¦ã³ã¿ã¤ã ãå®ç¾ãã主ãªã¢ããã¼ã
2.1 Blue-Green Deployment
æ¬çªç°å¢ããBlueï¼æ§ï¼ãã¨ãGreenï¼æ°ï¼ãã«åããå®å ¨ã«åãæ¿ããæ¹å¼ãåæ¿å¾ããã«ãã¼ã«ããã¯å¯è½ã
2.2 Rolling Update
ã¤ã³ã¹ã¿ã³ã¹ãå°ããã¤å ¥ãæ¿ããæ¹å¼ãã³ã³ããç°å¢ã§ãã使ãããï¼ä¾ï¼Kubernetesã®Rolling Updateæ¦ç¥ï¼ã
2.3 Canary Release
ä¸é¨ã®ã¦ã¼ã¶ã¼ã«æ°ãã¼ã¸ã§ã³ãæä¾ããåé¡ããªããã°æ®µéçã«åãæ¿ããã
2.4 Feature Toggleï¼æ©è½ãã©ã°ï¼
ã¢ããªã«ã³ã¼ãããããã¤ãã¦ããã¤ã¤ãã¦ã¼ã¶ã¼ã«å ¬éãããã©ããã¯ãã©ã°ã§å¶å¾¡ã
3. æè¡çãªå·¥å¤«ã¨æ§æ
- ãã¼ããã©ã³ãµã¼ã®ä½¿ç¨ï¼ALB/Nginxãªã©ï¼
- DBãã¤ã°ã¬ã¼ã·ã§ã³ã¯å¾æ¹äºææ§ãä¿ã¤
- ã»ãã·ã§ã³ã®åé¢ï¼Sticky sessionã®åé¿ãRedisãªã©ã使ç¨ï¼
- ãã«ã¹ãã§ãã¯ã¨ç£è¦è¨å®ï¼Liveness/Readiness probeï¼
4. ã¤ã³ãã©æ§æä¾
+-----------+ +----------------+
| User | ---> | Load Balancer | ---> Greenç°å¢
+-----------+ +----------------+
|
+---------> Blueç°å¢ï¼åæ¿åï¼
5. Docker/Kubernetesã«ãããå®è£
5.1 Docker Composeã§ã®Rolling Updateã¯å°é£
Docker SwarmãKubernetesãæ¨å¥¨ã
5.2 Kubernetesã®ä¾
kubectl set image deployment/myapp myapp-container=myapp:v2
ãã®ã³ãã³ãã§ãRolling Updateãéå§ãããæ®µéçã«æ°ããPodã¸åãæ¿ããããã
6. ã¼ããã¦ã³ã¿ã¤ã ãé»ãè¦å ã¨ãã®å¯¾ç
- DBã®ãã㯠â 徿¹äºæãªãã¤ã°ã¬ã¼ã·ã§ã³æ¦ç¥
- ãã£ãã·ã¥ã®ä¸æ´å â ãã£ãã·ã¥ãã¼ã¸ã§ã³ç®¡çã®å°å ¥
- ã»ãã·ã§ã³ç¶æ ã®ä¿æ â å¤é¨ã»ãã·ã§ã³ã¹ãã¬ã¼ã¸
7. CI/CDãã¼ã«ã¨ã®é£æº
- GitHub Actions ã§ã®Workflowå®ç¾©
- ArgoCD ã Spinnaker ãªã©ã®K8såããããã¤ç®¡çãã¼ã«
8. ãã¼ã«ããã¯æ¦ç¥
èªåãã¼ã«ããã¯è¨å®ï¼ãã«ã¹ãã§ãã¯å¤±ææï¼ãBlue-Greenã§ã®å³æåæ¿ããã¼ã¸ã§ã³ç®¡ç
ã¾ã¨ã
- ã¼ããã¦ã³ã¿ã¤ã ãããã¤ã«ã¯è¤æ°ã®æè¡ã¨è¨è¨ææ³ã®çè§£ãå¿ è¦
- ã·ã¹ãã ã®æ§æã«å¿ãã¦æé©ãªææ³ãé¸å®ãããã¨ãéµ
- ãã¹ãã»ç£è¦ã»ãã¼ã«ããã¯ä½å¶ãéç¨å質ãå·¦å³ãã
æ¬è¨äºãã¼ããã¦ã³ã¿ã¤ã ã®åºç¤ã¨å®è·µã®çè§£ã«å½¹ç«ã¦ã°å¹¸ãã§ãã
Webã¢ããªã®ãã°ä¿åã¨åæãå®å ¨çè§£ï½åéã»å¯è¦åã»æ´»ç¨ã¾ã§ä¸æ°ã«å¦ã¶
Â
Webã¢ããªã®ãã°ä¿åã¨åæï½åºç¤ããå®è·µã¾ã§å®å ¨ã¬ã¤ã
Webã¢ããªã®éç¨ã«ããã¦ãã°ã¯ä¸å¯æ¬ ãªæ å ±æºã§ããæ¬è¨äºã§ã¯ããã°ã®ä¿åæ¹æ³ãããã°ãæ´»ç¨ããåæã¾ã§ãWebã¨ã³ã¸ãã¢ãç¥ã£ã¦ããã¹ããã¤ã³ãã1æéã§å¦ã¹ãããç¶²ç¾ çã«è§£èª¬ãã¾ãã
1. ãã°ã¨ã¯ä½ãï¼
- ã¢ããªã±ã¼ã·ã§ã³ãã·ã¹ãã ãåºåããå±¥æ´ã»è¨é²æ å ±
- ä¾ï¼ã¢ã¯ã»ã¹ãã°ãã¨ã©ã¼ãã°ãã¢ããªãã°ãã»ãã¥ãªãã£ãã°ãªã©
- ãããã°ãç£è¦ãã¦ã¼ã¶ã¼è¡ååæãªã©ã«æ´»ç¨
2. ãã°ã®åé¡ã¨ä¿åå
- 種é¡:
- ã¢ã¯ã»ã¹ãã°ï¼Nginx, Apacheï¼
- ã¢ããªã±ã¼ã·ã§ã³ãã°ï¼Node.js, Rails, Laravel ãªã©ï¼
- ã¨ã©ã¼ãã°
- ãã¼ã¿ãã¼ã¹ãã°
- èªè¨¼/ã»ãã¥ãªãã£ãã°
- ä¿åå
:
- ãã¼ã«ã«ãã¡ã¤ã«ï¼/var/log/ãªã©ï¼
- ã¯ã©ã¦ãã¹ãã¬ã¼ã¸ï¼S3, Azure Blobãªã©ï¼
- ãã°éä¸ç®¡çãã¼ã«ï¼Fluentd, Logstash, CloudWatchãªã©ï¼
3. ãã°ã®åºåæ¹æ³ï¼ã¢ããªå´ï¼
// Node.js (winston)
const winston = require('winston');
const logger = winston.createLogger({
transports: [new winston.transports.File({ filename: 'app.log' })]
});
logger.info('ã¢ããªã±ã¼ã·ã§ã³ãèµ·åãã¾ãã');
4. ãã°ã®ãã¼ãã¼ã·ã§ã³
- ãã°ãã¡ã¤ã«ãè¥å¤§åããªãããã«ã宿çã«åãæ¿ãã
- ãã¼ã«ä¾:
logrotateï¼Linuxï¼,winston-daily-rotate-fileï¼Node.jsï¼
5. ãã°ã®æ§é åï¼JSONå½¢å¼ï¼
{
"timestamp": "2025-05-21T12:00:00Z",
"level": "info",
"message": "ã¦ã¼ã¶ã¼ããã°ã¤ã³ãã¾ãã",
"user_id": 12345
}
â æ©æ¢°å¯èªã»åæãã¼ã«ã¨ã®é£æºã容æ
6. ãã°åéãã¼ã«ã®ç´¹ä»
- Fluentd: æè»ãªãã°éç´ãã¼ã«ãå¤ç¨®å¤æ§ãªåºåå ã«å¯¾å¿
- Logstash: Elastic Stackã®ä¸é¨ãElasticsearchã¨ã®è¦ªåæ§ãé«ã
- Amazon CloudWatch Logs: AWSç°å¢ã§ã®æ¨æºçãªãã°åéææ®µ
- Datadog Logs, Sentry, Papertrail: åç¨ç£è¦ã»åæãã¼ã«
7. ãã°åæã¨å¯è¦å
- Kibanaï¼Elasticsearchï¼: ã¯ã¨ãªï¼ã°ã©ãåã§è¦è¦çåæ
- Grafana: 夿§ãªãã¼ã¿ã½ã¼ã¹ã«å¯¾å¿ããããã·ã¥ãã¼ã
- BigQuery: 大éãã¼ã¿ã«SQLã§ã¢ã¯ã»ã¹ã»åæ
8. ã¢ã©ã¼ãè¨å®
- ãã°ã«ã¨ã©ã¼ãç°å¸¸ãåºããå³éç¥
- ãã¼ã«ä¾: Prometheus + Alertmanager, Datadog Alerts, CloudWatch Alarm
9. ã»ãã¥ãªãã£ã¨ãã©ã¤ãã·ã¼
- ãã°ã«ãã¹ã¯ã¼ãã»å人æ å ±ãåºåããªã
- GDPRãªã©ã«é æ ®ï¼å¿ååã»ä¿åæéå¶éï¼
- ãã°ãã¡ã¤ã«ã®æå·åã¨ã¢ã¯ã»ã¹å¶é
10. CI/CDã¨ã®çµ±å
- ãããã¤å¾ã®ãã°ç£è¦ã§å³åº§ã«åé¡ãæ¤ç¥
- GitHub Actionsã¨Slack飿ºã§èªåéç¥ãå¯è½
11. ãããã失æã¨ãã¹ããã©ã¯ãã£ã¹
- ãã°ã®åºåå ããªãã¦æ¶å¤±âæ¸ãè¾¼ã¿å ã常ã«ç¢ºèª
- 大éåºåã§ãã£ã¹ã¯å§è¿«âãã¼ãã¼ã·ã§ã³å¿ é
- å¯è¦åãã¼ã«æªä½¿ç¨âæ å ±ãåããã
12. ã¾ã¨ã
- ãã°ã¯ãã©ãã«å¯¾å¿ãæ¹åã®ãã³ãã¨ãªã
- æ§é åã»éä¸ç®¡çã»å¯è¦åã»åæã§ä¾¡å¤ãå¼ãåºã
- ã»ãã¥ãªãã£ã¨ããã©ã¼ãã³ã¹ã«ãæ°ãé ã