Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 7 additions & 0 deletions .agents/instructions/extendscript.md
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,13 @@ description: "ExtendScript (ES3) 向け TypeScript コーディングルール
すべてのスクリプトの `index.ts` で、先頭に `import "../../init"` を記述すること。
これによりポリフィルが読み込まれる。

## スクリプト説明コメント

`src/**/index.ts` の先頭、`import` より前には、
[スクリプト説明コメントブロック](../../docs/script-comment-block.md) を配置する。
スクリプトの対象、得られる結果、利用者向け手順が変わる場合は、説明コメントも同時に更新する。
内部実装だけの変更では更新を必須にしない。

## import パス

スクリプトからの相対 import パスは以下の通り:
Expand Down
30 changes: 27 additions & 3 deletions .agents/skills/add-script/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,9 @@ argument-hint: "対象アプリ(After Effects / Illustrator / Photoshop)、
プロジェクトのスクリプト生成ツールを使って新規スクリプトを作成し、用途をコメントとして記録する。
ユーザーの選択に応じてスケルトンで止めるか、実装まで進める。

説明コメントの形式は [docs/script-comment-block.md](../../../docs/script-comment-block.md) を正本とする。
このスキルでは、生成後に用途から説明、処理手順、Material Symbols の候補を完成させる。

## When to Use

- 「スクリプトを作りたい」「新しいスクリプトを追加して」と言ったとき
Expand Down Expand Up @@ -121,12 +124,14 @@ pnpm new -- --app=<appId> --name=<ScriptName> --license --ui=scriptui

### 5. 用途(purpose)をファイルに記録する

`src/<appId>/<ScriptName>/index.ts` を開き、ファイル先頭に以下のコメントブロックを追加する:
`src/<appId>/<ScriptName>/index.ts` を開き、ファイル先頭の雛形を用途に合わせて完成させる。
コメントブロックは `import` より前へ配置し、次の5項目をこの順序で記載する:

```typescript
/**
* @script <ScriptName>
* @app <appId>(After Effects / Illustrator / Photoshop)
* @app <appId>
* @material-symbols <候補1>, <候補2>, <候補3>
* @description
* <ユーザーが述べた用途を具体的に記述する>
*
Expand All @@ -136,7 +141,22 @@ pnpm new -- --app=<appId> --name=<ScriptName> --license --ui=scriptui
*/
```

`@workflow` はユーザーの `purpose` から推測して記述する。不明な場合は `TODO` として残す。
`@script` はディレクトリ名および `es.config.mjs` の設定名と一致させ、`@app` はアプリIDだけを記載する。
`@description` は対象・操作・結果を含む1〜3文、`@workflow` は利用者から見た操作と結果を1〜5段階で記述する。
内部関数やAPI呼び出しなどの実装詳細は記載しない。

`@material-symbols` には、[Google Fonts の公式アイコン一覧](https://fonts.google.com/icons) で実在を確認した
新しい Material Symbols を、意味の異なる3件だけ小文字スネークケースで記載する。
候補は重複させず、アルファベット順に並べ、カンマと半角空白で区切る。
Google Fonts を参照できない場合は、[Google の material-design-icons リポジトリ](https://github.com/google/material-design-icons) の
`symbols` または `update/current_versions.json` で確認する。両方の確認先を参照できない場合だけ、次の `TODO` を残して作成を続行する:

```typescript
* @material-symbols TODO: 公式一覧を確認し、候補を3件カンマ区切りで記載
```

候補について利用者へ確認せず、用途から自動で選ぶ。Google Fonts と公式リポジトリの両方を参照できない場合だけ `TODO` を残す。
`@workflow` も用途が不明な場合は `TODO` を残す。

**ScriptUI の場合**: 生成済みテンプレートが `entryUI` と `__ES_THIS__` を使っていることを確認する:

Expand All @@ -157,12 +177,15 @@ entryUI("<ScriptName>", __ES_THIS__, (win) => {
### 6. 作成したファイルを確認する

作成した `src/<appId>/<ScriptName>/index.ts` を読み、生成結果とコメントが意図通りか確認する。
スケルトンのみを作成する場合でも、聞き取った用途から `@description` と `@workflow` を完成させる。
実装まで進める場合は、実装後の対象・結果・利用者向け手順に合わせてコメントを再確認する。

### 7a. スケルトンモード — ここで完了

ユーザーが「スケルトンのみ」を選んだ場合:

- ファイルパス `src/<appId>/<ScriptName>/index.ts` をリンク付きでユーザーに報告する
- `@material-symbols` に記載した候補名を完了報告へ示す。公式一覧を確認できず `TODO` を残した場合は、その `TODO` も示す
- 実装する際のヒント(どの関数を使うか)を簡単に案内する
- **実装には着手しない**

Expand All @@ -176,6 +199,7 @@ entryUI("<ScriptName>", __ES_THIS__, (win) => {
4. エラーがなければ `pnpm build -- <appId>/<ScriptName>` を実行してビルドする
5. エラーがあればステップ 3 に戻って修正する
6. ビルド成功後、実装した内容を簡潔に日本語で報告する
7. 完了報告に `@material-symbols` へ記載した候補名を示す。公式一覧を確認できず `TODO` を残した場合は、その `TODO` も示す

---

Expand Down
53 changes: 53 additions & 0 deletions .github/dependabot.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
version: 2

updates:
- package-ecosystem: npm
directory: /
target-branch: develop
schedule:
interval: monthly
cooldown:
default-days: 7
# 冷却期間は通常の版更新にだけ適用され、セキュリティ更新を遅延させない。
groups:
babel:
patterns:
- "@babel/*"
update-types:
- minor
- patch
typescript-eslint:
patterns:
- "@typescript-eslint/*"
update-types:
- minor
- patch
rollup:
patterns:
- rollup
- "@rollup/*"
- rollup-plugin-license
update-types:
- minor
- patch
quality:
patterns:
- eslint
- "@eslint/*"
- globals
- prettier
update-types:
- minor
- patch
ignore:
- dependency-name: typescript
- dependency-name: "@babel/*"
versions:
- "8.x"
- package-ecosystem: github-actions
directory: /
target-branch: develop
schedule:
interval: monthly
cooldown:
default-days: 7
65 changes: 65 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
name: CI

on:
pull_request:
branches:
- develop
push:
branches:
- develop

permissions:
contents: read

concurrency:
group: ci-${{ github.event.pull_request.number || github.ref }}
cancel-in-progress: true

jobs:
verify:
name: Node.js ${{ matrix.node-version }}
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
node-version:
- 22
- 24
steps:
- name: Checkout
uses: actions/checkout@v7

- name: Set up pnpm
uses: pnpm/action-setup@v4
with:
version: 11.17.0
run_install: false

- name: Set up Node.js
uses: actions/setup-node@v7
with:
node-version: ${{ matrix.node-version }}
cache: pnpm

- name: Verify tool versions
run: |
test "$(pnpm --version)" = "11.17.0"
node --version

- name: Install dependencies
run: pnpm install --frozen-lockfile --strict-peer-dependencies

- name: Lint
run: pnpm lint

- name: Test
run: pnpm test

- name: Build all applications
run: pnpm build --all

- name: Check formatting
run: pnpm exec prettier --check .

- name: Check diff
run: git diff --check
6 changes: 3 additions & 3 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ jobs:

steps:
- name: Checkout main
uses: actions/checkout@v4
uses: actions/checkout@v7
with:
ref: main
fetch-depth: 0
Expand Down Expand Up @@ -114,9 +114,9 @@ jobs:

- name: Set up Node.js
if: steps.settings.outputs.should_release == 'true'
uses: actions/setup-node@v4
uses: actions/setup-node@v7
with:
node-version: 20
node-version: 24

- name: Bump package version
if: steps.settings.outputs.should_release == 'true'
Expand Down
2 changes: 2 additions & 0 deletions AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,8 @@
- GitHub Copilot 専用の `.github/copilot-instructions.md`、`.github/instructions/`、`.github/skills/` は正本にせず、この配布用リポジトリには置きません。
- 作業前にこの `AGENTS.md` を確認してください。対象ファイルに対応する追加指示がある場合は、その指示も確認してください。
- `src/**/*.ts` を編集する場合は、`.agents/instructions/extendscript.md` を確認してください。
- Node.js と pnpm の対応版、TypeScript 4.9.5 固定の理由は、
[`docs/adr/0001-typescript-4-9-5-for-es3.md`](docs/adr/0001-typescript-4-9-5-for-es3.md) を参照してください。
- 参照先 docs / skills とこのファイルが矛盾する場合は、このファイルを優先し、必要なら矛盾を報告してください。

## 必ず守ること
Expand Down
28 changes: 25 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -30,12 +30,16 @@ shimの限界として、正しく動作しないものはeslintによってエ

## 環境 / Environment

- Node.js >= 20
- pnpm
- Node.js `^22.13.0 || >=24`
- pnpm `11.17.0`
- TypeScript `4.9.5`(ES3 出力のため固定)

TypeScript 4.9.5 を固定する理由と、Babel 8・TypeScript 5 系を別移行とする判断は、
[ADR 0001](docs/adr/0001-typescript-4-9-5-for-es3.md) に記録しています。

## テスト環境 / Tested environment

- Node.js v22.15.0
- Node.js v22.13.0 / v24.13.0
- Windows 11
- AfterEffects 2025 / Illustrator 2025 / Photoshop 2025

Expand Down Expand Up @@ -74,6 +78,9 @@ pnpm new -- --app=aeft --name=MyPanel --license --ui=scriptui
pnpm new
```

生成される説明コメントの規格と、生成後に `TODO` を完成させる手順は
[スクリプト説明コメントブロック](docs/script-comment-block.md) を参照してください。

### es.config.mjs

```mjs
Expand Down Expand Up @@ -105,6 +112,17 @@ export default {

```ts
// src/aeft/example/index.ts
/**
* @script example
* @app aeft
* @material-symbols TODO: 公式一覧を確認し、候補を3件カンマ区切りで記載
* @description
* TODO: 対象・操作・得られる結果を1〜3文で記載
*
* @workflow
* 1. TODO: 利用者から見た操作と結果を記載
*/

import "../../init";
import { entry } from "../../lib/lib";

Expand Down Expand Up @@ -146,6 +164,7 @@ pnpm watch
| `pnpm new` | 新規スクリプト追加 |
| `pnpm add-app` | 新規アプリ追加 |
| `pnpm clean` | ビルドハッシュをクリーンアップ |
| `pnpm test` | ビルド差分判定の回帰テスト |

`pnpm add-app -- --app=<appId>` で正式対応アプリを追加すると、`pnpm build:<appId>` も自動で追加されます。

Expand All @@ -154,9 +173,12 @@ pnpm watch
`src/tests/index.ts`にテストを記述しています。
ビルドして実行すればダイアログが表示され、shimが想定通り動いているかが表示されます。

ビルド差分判定の回帰テストは `pnpm test` で実行できます。

## ドキュメント

- [プロジェクト概要](docs/project-overview.md)
- [スクリプト説明コメントブロック](docs/script-comment-block.md)
- [ポリフィル](docs/polyfills.md)
- [はじめに](docs/guides/getting-started.md)
- [リリース手順](docs/release-process.md)
Expand Down
34 changes: 34 additions & 0 deletions docs/adr/0001-typescript-4-9-5-for-es3.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
# ADR 0001: ES3 出力のため TypeScript 4.9.5 を固定する

- 状態: 採用
- 日付: 2026-07-26

## 文脈

このテンプレートは、TypeScript から ExtendScript 向けの ES3 出力を生成する。
TypeScript 5.0 では ES3 を対象にする設定が非推奨になり、TypeScript 5.5 では
TypeScript 5.0 で非推奨になった機能が無効化された。したがって、TypeScript の
上位系列へ単純に更新すると、テンプレートの出力契約またはビルド設定を変更する
移行が必要になる。

## 決定

開発依存関係の TypeScript は `4.9.5` を厳密指定する。ES3 出力を維持したまま
TypeScript 5 系へ移行する作業は、この更新とは分離した別の移行として扱う。
Babel 8 への更新も、TypeScript の上位系列への移行と互換性確認が必要になるため、
今回の対象外とする。Dependabot では TypeScript の自動更新を除外し、Babel の
メジャー更新を除外する。

## 結果

- `tsconfig.json` の `target: "ES3"` を維持し、ExtendScript の実行環境に対する
出力契約を守れる。
- TypeScript と Babel の上位系列へ更新する場合は、ES3 出力、型検査、Babel の
変換結果を含む別の移行計画と実機検証が必要になる。
- Babel 7 系と周辺依存のセキュリティ更新は、今回の固定方針と矛盾しない範囲で
継続する。

## 参考

- [TypeScript 5.0: ES3 対象の非推奨化](https://www.typescriptlang.org/docs/handbook/release-notes/typescript-5-0.html#deprecations-and-default-changes)
- [TypeScript 5.5: TypeScript 5.0 で非推奨になった機能の無効化](https://www.typescriptlang.org/docs/handbook/release-notes/typescript-5-5.html#disabling-features-deprecated-in-typescript-50)
Loading
Loading