arkts-syntax-assistant について
OpenHarmony 開発者向けの ArkTS スキルです。構文、TypeScript からの移行、性能改善を扱い、生成コードはプロジェクトのビルドスクリプトで検証します。
主な機能
- 01ArkTS 構文の回答と例
- 02TypeScript 移行ガイド
- 03性能改善の提案
- 04コンパイルエラーの調査
- 05生成コードのビルド検証
活用シーン
- 01ArkTS の構文や型規則の確認
- 02TypeScript コードの ArkTS への移行
- 03コンパイルエラーの修正
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ summerkaze/ skill-arkts-syntax-assistant --skill arkts-syntax-assistantインストール後、Claude Code で/arkts-syntax-assistantを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
README.en.mdSKILL.zh.mdLICENSE.txtREADME.mdreferences/en/arkts-get-started.mdarkts-high-performance-programming.mdarkts-migration-background.mdarkts-more-cases.mdintroduction-to-arkts.mdtypescript-to-arkts-migration-guide.mdreferences/zh/arkts-migration-background.mdarkts-more-cases.mdarkts-get-started.mdarkts-high-performance-programming.mdtypescript-to-arkts-migration-guide.mdintroduction-to-arkts.mdscripts/run.shrun.ps1詳細
ArkTS 構文アシスタント
概要
ArkTS は、OpenHarmony アプリケーションのデフォルトの開発言語です。TypeScript を基盤として静的型付けを強化し、プログラムの安定性とパフォーマンスを向上させています。
主な機能
- 静的型付け:すべての型はコンパイル時に決定され、実行時のチェックを削減します
- 動的なオブジェクトレイアウトなし:オブジェクトの構造はコンパイル時に固定され、実行時に変更できません
- 制限付きの演算子:コードの意味を明確にするため、一部の演算子の動作が制限されています
- 構造的型付けなし:現在、構造的型付けはサポートされていません
リファレンスドキュメント
ワークフロー
1. 構文に関する質問
User Question -> Identify Question Type -> Consult Documentation -> Provide Code Example
よくある構文に関する質問:
- 変数宣言 -> 明示的な型または型推論を使って
let/constを使用します - 関数定義 -> オプションパラメーター、デフォルト値、残余パラメーター、アロー関数をサポートします
- クラスとインターフェース -> フィールドの初期化が必要で、継承と実装をサポートします
- ジェネリクス -> 制約とデフォルト値をサポートします
- null 安全性 -> Nullable 型((T | null))、非 null アサーション((!))、オプショナルチェーン(((?.)))
2. TypeScript からの移行
Identify TS Code -> Check Incompatible Features -> Consult Migration Rules -> Provide ArkTS Alternative
主な移行ルールのクイックリファレンス:
| TypeScript | ArkTS の代替 |
|---|---|
var x | let x |
any/unknown | 具体的な型 |
{n: 42} オブジェクトリテラル | 先にクラス/インターフェースを定義 |
[index: T]: U インデックスシグネチャ | Record<T, U> |
A & B 交差型 | interface C extends A, B |
function(){} 関数式 | () => {} アロー関数 |
<Type>value 型アサーション | value as Type |
分割代入 [a, b] = arr | 個別にアクセス arr[0]、arr[1] |
for..in | for ループまたは for..of |
| コンストラクターのパラメータープロパティ | フィールドを明示的に宣言 |
3. パフォーマンスの最適化
Analyze Code -> Identify Performance Issues -> Consult Optimization Guide -> Provide Solutions
高パフォーマンスプログラミングの要点:
- 宣言:不変値には
constを使用し、整数と浮動小数点数の混在を避けます - ループ:ループ不変条件を抽出し、数値のオーバーフローを避けます
- 関数:クロージャーよりパラメーター渡しを優先し、オプションパラメーターを避けます
- 配列:数値には TypedArray を使用し、疎配列とユニオン型の配列を避けます
- 例外:ループ内でのスローを避け、代わりに戻り値を使用します
4. コンパイルエラーの解決
Get Error Message -> Search Migration Rules -> Find Related Case -> Provide Fix
よくある質問
Q:JSON.parse の戻り値はどのように扱いますか?
// Error
let data = JSON.parse(str);
// Correct
let data: Record<string, Object> = JSON.parse(str);
Q:オブジェクト型はどのように定義しますか?
// TypeScript syntax (not supported in ArkTS)
type Person = { name: string, age: number }
// ArkTS syntax
interface Person {
name: string;
age: number;
}
// Using object literal
let p: Person = { name: 'John', age: 25 };
Q:globalThis をどのように置き換えますか?
// Error
globalThis.value = 'xxx';
// Use singleton pattern
export class GlobalContext {
private constructor() {}
private static instance: GlobalContext;
private _objects = new Map<string, Object>();
public static getContext(): GlobalContext {
if (!GlobalContext.instance) {
GlobalContext.instance = new GlobalContext();
}
return GlobalContext.instance;
}
getObject(key: string): Object | undefined {
return this._objects.get(key);
}
setObject(key: string, value: Object): void {
this._objects.set(key, value);
}
}
Q:catch 内のエラー型はどのように扱いますか?
// Error
try {} catch (e: BusinessError) {}
// Correct
try {} catch (error) {
let e: BusinessError = error as BusinessError;
}
Q:Record 型はどのように使いますか?
// TypeScript index signature
function foo(data: { [key: string]: string }) {}
// ArkTS Record
function foo(data: Record<string, string>) {}
// Usage example
let map: Record<string, number> = {
'John': 25,
'Mary': 21,
};
Q:コンストラクターシグネチャをファクトリー関数でどのように置き換えますか?
// TypeScript constructor signature
type ControllerCtor = {
new (value: string): Controller;
}
// ArkTS factory function
type ControllerFactory = () => Controller;
class Menu {
createController: ControllerFactory = () => {
return new Controller('default');
}
}
使用禁止の標準ライブラリ API
ArkTS では、以下の API の使用は禁止されています。
- グローバル:
eval - Object:
__proto__、defineProperty、freeze、getPrototypeOfなど - Reflect:
apply、construct、definePropertyなど - Proxy:すべてのハンドラーメソッド
ビルドスクリプト
scripts ディレクトリには、依存関係のインストールを含む、ArkTS プロジェクトのコンパイルを簡単に実行するスクリプトがあります。
| プラットフォーム | スクリプト | 目的 |
|---|---|---|
| macOS/Linux | scripts/run.sh | ohpm install + hvigorw assembleApp を実行します |
| Windows | scripts/run.ps1 | ohpm install + hvigorw assembleApp を実行します |
使用方法:
# macOS/Linux
bash scripts/run.sh
# Windows PowerShell
.\scripts\run.ps1
スクリプトの実行手順:
- 依存関係をインストールします(
ohpm install --all) - プロジェクトをビルドします(
hvigorw assembleApp)
必須要件
重要:このスキルが ArkTS コードを生成する場合、以下のワークフローに必ず従う必要があります。
-
コンパイル検証:コードの生成後、ビルドスクリプトを使用して必ずプロジェクトをコンパイルしてください。
- macOS/Linux:
bash scripts/run.sh - Windows:
.\scripts\run.ps1
- macOS/Linux:
-
再試行手順:コンパイルに失敗した場合:
- エラー出力を分析します
- 問題を修正して、コンパイルを再試行します
- コンパイルの試行は最大 3 回 です
-
ユーザーへの確認:コンパイルに 3 回失敗した後、
AskUserQuestionを使用します。Question: Compilation failed after 3 attempts. How would you like to proceed? Options: - Continue retrying (attempt another fix) - Manual intervention (I'll wait for your guidance) - Skip compilation (proceed without verification) -
エラーの報告:失敗した場合は、コンパイルエラーの出力全体を必ず表示します。
回答のガイドライン
- コード例を優先する:正しい構文と誤った構文を比較して示します
- 公式ドキュメントを参照する:詳しい説明については、references/ 内の該当するドキュメントを参照するよう案内します
- 理由を説明する:ArkTS にこの制限がある理由(パフォーマンス、安定性)を説明します
- 代替案を提示する:サポートされていない機能については、実現可能な代替案を提示します
ライセンス
MIT License - LICENSE.txt を参照してください。
コメント
Markdown 対応