Այս գործնական աշխատանքում կստեղծես cc-practice ուսումնական repository-ն։ Դասընթացի բոլոր հաջորդ գործնական աշխատանքները արվելու են հենց դրանում։ Հետո Claude Code-ի հետ կանցկացնես առաջին իրական session-ը՝ սկզբից մինչև commit։
Նպատակ
Աշխատանքի վերջում դու․
կստուգես, որ Claude Code-ը տեղադրված է, և դու մուտք ես գործել,
կստեղծես
cc-practiceփոքր Python նախագիծը, որում դիտմամբ թողած մեկ սխալ կա,նախագծի պանակում կգործարկես
claudeև կհաստատես, որ վստահում ես պանակին (trust),Claude-ին կխնդրես նախ բացատրել նախագիծը, հետո գործարկել թեստերը և ուղղել ձախողվողը, իսկ դու կհաստատես նրա ամեն քայլը,
կվերանայես փոփոխությունը
/diff-ով և կանես commit, հետո դուրս կգաս/exit-ով և կվերադառնասclaude -c-ով։
Վերջում cc-practice-ում կլինի երկու commit, և բոլոր թեստերը կանցնեն։ Working tree-ն (աշխատանքային պանակը) մաքուր կլինի։ Հաջորդ մոդուլների գործնական աշխատանքները սկսվելու են հենց այս վիճակից։
Ինչ է պետք
Տեղադրված Claude Code (դաս 338) և մուտք գործած հաշիվ (դաս 337),
Python 3.10 կամ ավելի նոր տարբերակ,
Git,
ցանկացած տեքստային editor (օրինակ՝ VS Code),
մոտ 60 րոպե։
Բոլոր քայլերն անվտանգ են, և ցանկացածը կարելի է հետ շրջել։ Ամեն ինչ կատարվում է միայն cc-practice պանակում, որը վերջում կարող ես պարզապես ջնջել։
Քայլ 1․ Ստուգիր գործիքները
Բացիր terminal և գործարկիր․
claude --version
claude auth status --text
git --versionClaude Code-ի, git-ի և Python-ի տարբերակների ստուգումը՝ բոլորն էլ տեղադրված են։
macOS-ում, Linux-ում և WSL-ում Python-ի տարբերակը ստուգիր python3 --version հրամանով, իսկ Windows-ում՝ python --version-ով։ Տարբերակը պետք է լինի 3.10 կամ ավելի նոր։
Եթե claude --version-ը սխալ է տալիս, նայիր դաս 338-ի սխալների աղյուսակը։ Իսկ եթե claude auth status --text-ը ցույց է տալիս, որ մուտք չես գործել, ոչինչ։ Մուտք կգործես Քայլ 5-ում։
Քայլ 2․ Ստեղծիր պանակը և տեղադրիր pytest
Թեստերը գործարկելու համար pytest է պետք։ Այն կտեղադրենք virtual environment-ում (Python-ի մեկուսացված միջավայրում), որպեսզի չխառնվի համակարգի Python-ին։ Ժամանակակից Linux համակարգերում Python-ն ընդհանրապես չի թողնում փաթեթներ տեղադրել համակարգի մակարդակում։ Միջավայրը կդնենք նախագծի կողքին, ոչ թե ներսում, որ այն repository-ի մեջ չընկնի։
macOS, Linux, WSL․
mkdir cc-practice
cd cc-practice
python3 -m venv ../cc-practice-venv
source ../cc-practice-venv/bin/activate
python -m pip install pytestWindows PowerShell․
mkdir cc-practice
cd cc-practice
python -m venv ..\cc-practice-venv
..\cc-practice-venv\Scripts\Activate.ps1
python -m pip install pytestՄի բան չմոռանաս։ Ամեն նոր terminal-ում claude-ը գործարկելուց առաջ ակտիվացրու միջավայրը։ macOS-ում, Linux-ում և WSL-ում դա արվում է source ../cc-practice-venv/bin/activate հրամանով, իսկ Windows PowerShell-ում՝ ..\cc-practice-venv\Scripts\Activate.ps1-ով։ Claude Code-ը հրամանները գործարկում է նույն միջավայրում, և առանց դրա pytest-ը չի գտնի։
Քայլ 3․ Ստեղծիր ֆայլերը
cc-practice պանակում ստեղծիր հինգ ֆայլ։ Դրանց պարունակությունը պատճենիր տառ առ տառ, որովհետև հաջորդ դասերը հենվում են հենց այս տարբերակի վրա։
todo.py-ը առաջադրանքների ցանկի փոքր հավելված է։ mark_done ֆունկցիայում դիտմամբ սխալ ենք թողել․
import json
import sys
from pathlib import Path
DATA_FILE = Path("tasks.json")
def load_tasks():
if not DATA_FILE.exists():
return []
return json.loads(DATA_FILE.read_text(encoding="utf-8"))
def save_tasks(tasks):
DATA_FILE.write_text(json.dumps(tasks, ensure_ascii=False, indent=2), encoding="utf-8")
def add_task(tasks, title):
tasks.append({"title": title, "done": False})
return tasks
def mark_done(tasks, number):
# number is 1-based, as shown by `list`
tasks[number]["done"] = True # BUG: off-by-one, should be number - 1
return tasks
def count_open(tasks):
return sum(1 for t in tasks if not t["done"])
def main(argv):
tasks = load_tasks()
if len(argv) < 2 or argv[1] == "list":
for i, t in enumerate(tasks, start=1):
mark = "x" if t["done"] else " "
print(f"{i}. [{mark}] {t['title']}")
print(f"Open: {count_open(tasks)}")
elif argv[1] == "add":
save_tasks(add_task(tasks, " ".join(argv[2:])))
elif argv[1] == "done":
save_tasks(mark_done(tasks, int(argv[2])))
else:
print("usage: python todo.py [list | add <title> | done <number>]")
if __name__ == "__main__":
main(sys.argv)test_todo.py՝ երեք թեստ․
from todo import add_task, mark_done, count_open
def test_add_task():
tasks = add_task([], "buy milk")
assert tasks == [{"title": "buy milk", "done": False}]
def test_mark_done_first_task():
tasks = [{"title": "a", "done": False}, {"title": "b", "done": False}]
mark_done(tasks, 1)
assert tasks[0]["done"] is True
assert tasks[1]["done"] is False
def test_count_open():
tasks = [{"title": "a", "done": True}, {"title": "b", "done": False}]
assert count_open(tasks) == 1README.md՝ երկու տող․
cc-practice: a tiny command-line to-do list used for Claude Code practice.
Run `python todo.py [list | add <title> | done <number>]`; run tests with `python -m pytest`..gitignore․
tasks.json
__pycache__/
.env
.claude/settings.local.json
CLAUDE.local.md.env-ում կեղծ գաղտնիք է։ Այն պետք կգա 5-րդ մոդուլում, երբ կսովորենք Claude-ին արգելել գաղտնի ֆայլեր կարդալը։ Ֆայլը .gitignore-ում է, և երբեք commit չի արվի․
API_TOKEN=fake-token-for-practiceՖայլերի անուններն ուշադիր ստուգիր։ Windows-ի Notepad-ը երբեմն ինքն է ավելացնում .txt, և ստացվում է, օրինակ, .gitignore.txt։
Քայլ 4․ Համոզվիր, որ թեստը ձախողվում է, և արա առաջին commit-ը
Գործարկիր թեստերը․
python -m pytestԵրկու թեստ պետք է անցնի, իսկ test_mark_done_first_task-ը պետք է ձախողվի։ Ահա ելքի կրճատ օրինակը (pytest-ի տարբերակից կախված՝ այն կարող է մի փոքր տարբերվել)․
test_todo.py .F. [100%]
...
FAILED test_todo.py::test_mark_done_first_task - assert False is True
========================= 1 failed, 2 passed in 0.02s ==========================Հիմա ստեղծիր git repository և արա առաջին commit-ը։ Եթե git config user.name հրամանը ոչինչ չի տպում, նախ նշիր անունդ և էլ. հասցեդ միայն այս repository-ի համար (առանց --global)․
git init
git config user.name "Your Name"
git config user.email "[email protected]"
git add -A
git commit -m "Initial practice project"
git ls-filesgit ls-files-ը պետք է ցույց տա ճիշտ չորս ֆայլ՝ .gitignore, README.md, test_todo.py, todo.py։ .env-ը ցանկում չպետք է լինի։
Մեկ թեստը ձախողվում է, ինչպես սպասվում էր, իսկ git ls-files-ը ցույց է տալիս չորս ֆայլ՝ առանց .env-ի։
Քայլ 5․ Գործարկիր Claude Code-ը նախագծի պանակում
Համոզվիր, որ cc-practice պանակում ես, և virtual environment-ը ակտիվ է։ Գործարկիր․
claude --permission-mode defaultԻնչի՞ համար է --permission-mode default-ը։ Claude Code-ի նոր տարբերակներում (v2.1.283 և ավելի նոր) terminal-ի session-ը լռելյայն սկսվում է auto mode-ով։ Այդ ռեժիմում գործողությունները քո փոխարեն ստուգում է առանձին մոդել (classifier), ու թույլտվության հարցումներ գրեթե չես տեսնի։ Իսկ այս աշխատանքում ուզում ենք տեսնել ամեն հարցումը։ Դրա համար սկսում ենք Manual ռեժիմով, որի կարգավորման արժեքը default է։ Ռեժիմներին մանրամասն կանդրադառնանք 5-րդ մոդուլում։
Ինչ կտեսնես․
Առաջին գործարկման ժամանակ կարող են լինել սկզբնական կարգավորման մի քանի էկրաններ և մուտք բրաուզերով (դաս 337)։ Հետևիր հրահանգներին։
Վստահության հարցում (workspace trust)։ Claude Code-ը հարցնում է՝ վստահո՞ւմ ես այս պանակին։ Սա քո սեփական նախագիծն է, այնպես որ հաստատիր։ Վստահությունը պահվում է repository-ի համար, և այս պանակում այլևս չի հարցնի։ Իսկ անծանոթ, ներբեռնված նախագծին առանց ստուգելու երբեք մի վստահիր։ Նախագծի կարգավորումները կարող են, օրինակ, նախօրոք թույլատրել հրամաններ։
Prompt-ի (հարցման դաշտի) տակ, status bar-ում, պետք է երևա
⏸ manual mode on։ Եթե այլ ռեժիմ է, սեղմիրShift+Tab, մինչև Manual-ը հայտնվի։
Վստահության հարցումը․ ընտրիր «Yes, I trust this folder»։
Manual ռեժիմ՝ prompt-ի տակ գրված է «manual mode on»։
claude-ը մի գործարկիր ուղղակի home պանակում (~)։ Այնտեղ վստահությունը չի պահվում, և հարցումը ամեն անգամ կկրկնվի։
Քայլ 6․ Խնդրիր բացատրել նախագիծը
Գրիր prompt-ում և սեղմիր Enter․
Բացատրիր, թե ինչ է անում այս նախագիծը, ինչ ֆայլեր կան, և ինչպես գործարկել թեստերը։ Առայժմ ոչինչ մի փոխիր։Claude-ը կարդաց ֆայլերը առանց թույլտվություն հարցնելու, բացատրեց նախագիծը և նկատեց սխալը, բայց ոչինչ չփոխեց։
Prompt-ները կարող ես գրել նաև անգլերեն։ Հետևիր, թե ինչ է անում Claude-ը։ Այն ինքն է կարդում todo.py-ը և test_todo.py-ը, կարդում է նաև README.md-ն ու թույլտվություն չի հարցնում։ Manual ռեժիմում նախագծի պանակի ֆայլերը կարդալու համար հարցում պետք չէ։ Իսկ խմբագրելու և հրամաններ գործարկելու համար պետք է։
Պատասխանը ամեն անգամ մի քիչ տարբեր կլինի։ Շատ հավանական է, որ Claude-ը միանգամից նկատի BUG մեկնաբանությունը, և դա նորմալ է։ Եթե Claude-ը կարդա նաև .env-ը, վտանգ չկա, որովհետև գաղտնիքը կեղծ է։ Իրական նախագծերում նման ֆայլերի ընթերցումը կարգելենք 5-րդ մոդուլում։
Քայլ 7․ Գործարկիր թեստերը և ուղղիր սխալը՝ քո հաստատմամբ
Գրիր․
Գործարկիր թեստերը python -m pytest հրամանով։ Եթե որևէ թեստ ձախողվում է, գտիր պատճառը todo.py-ում և ուղղիր այն ամենափոքր հնարավոր փոփոխությամբ։ Թեստերը մի փոխիր։ Ուղղելուց հետո նորից գործարկիր թեստերը։Հիմա կտեսնես թույլտվության հարցումներ (permission prompt)։ Ամեն անգամ նախ կարդա, թե Claude-ը ինչ է պատրաստվում անել, հետո նոր ընտրիր։
Bash հրաման՝
python -m pytest։ Հարցման մեջ երևում են հրամանը և տարբերակները՝ Yes, Yes, and don't ask again for … (այս repository-ում այս հրամանը միշտ թույլատրել), երբեմն նաև Yes, and switch to auto mode, և No։ Ընտրիր պարզ Yes, որովհետև այս աշխատանքում ուզում ենք տեսնել ամեն քայլը։ Տարբերակների ճշգրիտ ձևակերպումը կարող է տարբեր լինել՝ կախված Claude Code-ի տարբերակից։Ֆայլի խմբագրում՝
todo.py։ Claude-ը ցույց է տալիս առաջարկվող փոփոխությունը։ Ստուգիր, որ փոխվում է միայնmark_done-ի տողը, և ինդեքսը դառնում էnumber - 1։ Եթե ամեն ինչ ճիշտ է, ընտրիր Yes։Թեստերի կրկնակի գործարկում։ Նորից ընտրիր Yes։ Արդյունքը պետք է լինի
3 passed։
Claude-ը հարցնում է՝ կարո՞ղ է գործարկել թեստերը։ Ընտրիր «1. Yes»։
Claude-ը ցույց է տալիս փոփոխությունը և սպասում է հաստատման։ Ընտրիր «1. Yes»։
Ուղղված ֆունկցիան մոտավորապես այսպիսին կլինի (Claude-ը կարող է նաև ջնջել BUG մեկնաբանությունը, դա նորմալ է)․
def mark_done(tasks, number):
# number is 1-based, as shown by `list`
tasks[number - 1]["done"] = True
return tasksԵթե Claude-ը todo.py-ի փոխարեն փորձի փոխել թեստը, անցիր No տարբերակին, սեղմիր Tab և գրիր պատճառը, օրինակ՝ «Թեստը ճիշտ է, ուղղիր todo.py-ը»։ Claude-ը կստանա մեկնաբանությունը և կշարունակի։ Իսկ Esc-ը մերժում է գործողությունը առանց մեկնաբանության, և Claude-ը կանգ է առնում։
Եթե ընտրես «don't ask again» տարբերակը, կանոնը կպահվի .claude/settings.local.json ֆայլում, որն արդեն .gitignore-ում է։ Կանոններին կանդրադառնանք 5-րդ մոդուլում։
Քայլ 8․ Վերանայիր փոփոխությունը /diff-ով
Գրիր․
/diff/diff-ը ցույց է տալիս այն փոփոխությունները, որոնք դեռ commit չեն արվել, այդ թվում՝ Claude-ի արածները։ v2.1.296-ում այն terminal-ի աջ կողմում, զրույցի կողքին, բացում է diff panel․
Panel-ի համար terminal-ը պետք է ունենա առնվազն 110 սյունակ լայնություն։ Եթե պատուհանը նեղ է, panel-ի փոխարեն կտեսնես
Resize your terminal to at least 110 columns to show the diff panelհաղորդագրությունը։ Այդ դեպքում մեծացրու պատուհանը։Սկզբում panel-ը ցույց է տալիս այս session-ի փոփոխությունները։ Եթե սեղմես
Ctrl+X, հետոB, կանցնես commit չարված բոլոր փոփոխություններին (uncommitted (vs HEAD))։ Նույն ստեղներով հետ ես գալիս։Panel-ը թաքցնելու համար նորից գործարկիր
/diff։
Այլ տարբերակներում /diff-ի տեսքը և ստեղները կարող են տարբերվել։
/diff panel-ը․ կարմիրը հեռացված տողն է, կանաչը՝ ավելացվածը։
Ստուգիր, որ փոխվել է միայն todo.py-ը, և փոփոխությունը մեկ կամ երկու տող է։ Commit-ից առաջ փոփոխությունները վերանայելը լավ սովորություն է։ Այն կպահենք ամբողջ դասընթացի ընթացքում։
Քայլ 9․ Commit արա փոփոխությունը
Գրիր․
Commit արա todo.py-ի փոփոխությունը հետևյալ հաղորդագրությամբ՝ Fix off-by-one in mark_doneCommit-ը պատրաստ է, իսկ Claude-ը հիշեցնում է, որ հաղորդագրությանը ավելացրել է Co-Authored-By տողը։
Claude-ը կարող է նախ գործարկել git status կամ git diff։ Կարդալու հրամանները սովորաբար թույլտվություն չեն պահանջում, բայց git add-ի և git commit-ի համար հարցում կլինի։ Կարդա հրամանը և ընտրիր Yes։
Claude Code-ը commit-ի հաղորդագրության վերջում կարող է իր մասին լրացուցիչ տող (trailer) ավելացնել։ Դա որոշվում է attribution կարգավորմամբ, որին կանդրադառնանք 8-րդ մոդուլում։
Քայլ 10․ Դուրս արի /exit-ով
Գրիր․
/exitSession-ը կփակվի (նույնը կարող ես անել՝ երկու անգամ սեղմելով Ctrl+D)։ Հիմա նույն terminal-ում ստուգիր արդյունքը․
git log --oneline
git status
python -m pytestԵրկու commit, մաքուր working tree և երեք անցած թեստ։
Պետք է տեսնես երկու commit և 3 passed։ Working tree-ի մասին էլ պետք է գրված լինի «nothing to commit, working tree clean» կամ նման մի բան։
Քայլ 11․ Վերադարձիր claude -c-ով
Session-ները պահվում են համակարգչում, այնպես որ զրույցը կարելի է շարունակել։ Նույն cc-practice պանակում գործարկիր․
claude -cclaude -c (--continue) բացում է այս պանակի ամենավերջին զրույցը՝ ամբողջ պատմությամբ։ Նայիր status bar-ին։ Manual ռեժիմում ավարտված session-ը սովորաբար նույն ռեժիմով էլ վերականգնվում է։ Եթե այդպես չէ, սեղմիր Shift+Tab։
Հարցրու․
Ի՞նչ փոխեցինք այս session-ում, և ո՞ր commit-ում է այդ փոփոխությունը։Վերականգնված session-ում Claude-ը հիշում է ուղղումը և commit-ը, իսկ ներքևում նորից manual mode է։
Claude-ը կպատասխանի նախորդ զրույցի հիման վրա, և նորից բացատրել պետք չի լինի։ Վերջում նորից գրիր /exit։ Session-ների մասին մանրամասն կխոսենք 7-րդ մոդուլում։
Ստուգում
☐
claude --version-ը տպում է տարբերակը։☐
cc-practice-ում կանtodo.py,test_todo.py,README.md,.gitignore,.envֆայլերը և.gitպանակը։☐
git ls-files-ը.envչի ցույց տալիս։☐
git log --oneline-ը ցույց է տալիս երկու commit՝ սկզբնականը և ուղղումը։☐
todo.py-ումmark_done-ն օգտագործում էnumber - 1։☐
python -m pytest-ը ցույց է տալիս3 passed։☐
git status-ը ցույց է տալիս մաքուր working tree։☐ Session-ի ընթացքում տեսել և հաստատել ես առնվազն երեք թույլտվության հարցում։
☐
/diff-ը բացվել է, և դու տեսել ես փոփոխությունը։☐
claude -c-ը վերականգնել է զրույցը, և Claude-ը հիշում էր ուղղումը։
Եթե ինչ-որ բան չաշխատեց
Խնդիր | Հավանական պատճառ | Լուծում |
|---|---|---|
| Տեղադրման պանակը | Բացիր նոր terminal և նայիր դաս 338-ը |
| Համակարգի Python-ը արգելում է գլոբալ տեղադրումը | Օգտագործիր virtual environment, ինչպես Քայլ 2-ում |
| Համակարգում չկա | Գործարկիր |
| PowerShell-ի execution policy-ն արգելում է script-երը | Գործարկիր |
| Միջավայրը ակտիվ չէ այս terminal-ում | Դուրս արի |
| Git-ը տեղադրված չէ | Տեղադրիր Git (Windows-ում՝ Git for Windows) |
| Git-ում անունը և էլ. հասցեն սահմանված չեն | Լրացրու |
Հարցումներ չկան, Claude-ը միանգամից փոխում է ֆայլերը | Session-ը auto կամ acceptEdits ռեժիմում է | Սեղմիր |
Վստահության հարցումը կրկնվում է ամեն անգամ |
|
|
| Դու այլ պանակում ես | Գործարկիր |
Մուտքի ժամանակ Claude Code-ը առաջարկում է API key հաստատել | Միջավայրում կա | Եթե ուզում ես subscription, մերժիր և նայիր դաս 337-ը |
Լրացուցիչ մարտահրավեր
Ձեռքով ստուգիր ուղղումը։ Terminal-ում հերթով գործարկիր
python todo.py add "Buy milk",python todo.py add "Call mom",python todo.py done 1,python todo.py list։ Առաջին առաջադրանքը պետք է նշված լինի[x]-ով։tasks.jsonֆայլը.gitignore-ում է, այնպես որ repository-ն մաքուր կմնա։ Վերջում կարող ես այն ջնջել։Մերժիր մեկնաբանությամբ։ Նոր session-ում խնդրիր Claude-ին README-ում ավելացնել երրորդ տող։ Երբ հայտնվի խմբագրման հարցումը, ընտրիր No, սեղմիր
Tabև գրիր, թե ինչու ես մերժում։ Հետևիր, թե ինչպես է Claude-ը արձագանքում։ Վերջումgit status-ը պետք է ցույց տա մաքուր working tree։ Եթե այնուամենայնիվ ինչ-որ փոփոխություն մնացել է,git restore README.md-ն ֆայլը կվերականգնի։
Ձեռքով ստուգում․ done 1-ից հետո նշված է հենց առաջին առաջադրանքը։
Խմբագրման հարցումում ընտրված է No, իսկ Tab-ից հետո գրված է մերժման պատճառը։
Claude-ը ընդունեց մերժումը և README-ում ոչինչ չփոխեց։
Մանրամասն՝ Quickstart և Manage sessions։