ソース情報
- リポジトリ
- mag123c/linkhub
- ソースの最終更新活動
- 2026年1月21日 03:08
- 検出された SKILL.md の言語
- 韓国語
- スター
- 0
- フォーク
- 0
インストール方法
デフォルトでは、最初にソースを確認する Prompt が選択されています。直接コマンドに切り替えるか、ローカルコピーをダウンロードすることもできます。
ソースファイルを確認
インストールを決める前に、SKILL.md と SkillsMP に表示されている付属ファイルをお読みください。
メニュー
デフォルトでは、最初にソースを確認する Prompt が選択されています。直接コマンドに切り替えるか、ローカルコピーをダウンロードすることもできます。
インストールを決める前に、SKILL.md と SkillsMP に表示されている付属ファイルをお読みください。
SOC 職業分類に基づく
Codex または Claude でインストール この Prompt をコピーして Codex、Claude、または他のアシスタントに貼り付けると、Skill ページを確認してインストールできます。
直接コマンドでは確認用 Prompt が省略されます。実行前にソースを確認してください。
npx skills add https://github.com/mag123c/linkhub --skill developerコマンドは1行のまま表示されます。コピー前に横へスクロールして全体を確認してください。
ローカルで確認しますか?SkillsMP が現在取得できるファイルをダウンロードできます。
SKILL.md を表示中
| name | developer |
| description | 기능 개발 스킬. 타입 정의, Storage API, 비즈니스 로직. 코드 작성 시 사용. |
React + TypeScript + Vite + Tailwind CSS + Chrome Storage API + Vitest
구조 = 인터페이스/타입 (TypeScript)
로직 = 순수 함수 (FP)
| 원칙 | 적용 |
|---|---|
| SRP | 하나의 함수 = 하나의 책임 |
| 순수 함수 | 입력 → 출력만, 사이드 이펙트는 경계에서 |
| 불변성 | 객체 수정 대신 새 객체 반환 |
| 명확한 의도 | 이름이 곧 문서, 주석 최소화 |
Chrome Storage API 직접 호출 금지. 반드시 Storage 유틸리티 통해 접근:
src/
├── shared/
│ ├── types/ # 타입 정의
│ │ ├── link.types.ts
│ │ └── settings.types.ts
│ ├── storage/ # Storage 래퍼
│ │ ├── link.storage.ts
│ │ └── settings.storage.ts
│ └── utils/ # 유틸리티 함수
│ ├── search.ts
│ └── export.ts
// link.storage.ts
import type { Link } from '../types/link.types';
const STORAGE_KEY = 'linkhub_links';
export async function getLinks(): Promise<Link[]> {
const result = await chrome.storage.local.get(STORAGE_KEY);
return result[STORAGE_KEY] || [];
}
export async function saveLink(link: Link): Promise<void> {
const links = await getLinks();
const updated = [...links, link];
await chrome.storage.local.set({ [STORAGE_KEY]: updated });
}
export async function deleteLink(id: string): Promise<void> {
const links = await getLinks();
const filtered = links.filter(l => l.id !== id);
await chrome.storage.local.set({ [STORAGE_KEY]: filtered });
}
// 엔터티 타입
export interface Link {
id: string;
url: string;
title: string;
favicon?: string;
tags: string[];
memo?: string;
isReadLater: boolean;
createdAt: number;
updatedAt: number;
}
// 입력 타입 (생성/수정용)
export type CreateLinkInput = Omit<Link, 'id' | 'createdAt' | 'updatedAt'>;
export type UpdateLinkInput = Partial<CreateLinkInput>;
상세 구현은 기존 코드베이스 분석