---
Title: 最初の拡張機能を作成する方法
nav: ja
---

このチュートリアルの目的は、[Alfresco Content Application (通称 ACA)](https://github.com/Alfresco/alfresco-content-app "https://github.com/Alfresco/alfresco-content-app")の “hello world” 拡張機能を開発する方法を説明することです。[ACA 拡張メカニズム](https://alfresco-content-app.netlify.app/#/extending/ "https://alfresco-content-app.netlify.app/#/extending/")は、サポートされているフロントエンドアプリケーションをカスタマイズするための推奨方法であり、このチュートリアルは、顧客やパートナーと共有するコンテンツの基礎となることを想定しています。

# 前提条件

このチュートリアルのスタート地点は、開発環境 (例えばあなたのラップトップ) で [Alfresco Content Application (通称 ACA)](https://github.com/Alfresco/alfresco-content-app "https://github.com/Alfresco/alfresco-content-app") の完全なリポジトリを利用できることです。このチュートリアルは、以下のバージョンのソフトウェアの利用を前提として書かれています。
-   ACA バージョン 2.2.0,
-   ACS 7.0.0-M3,
-   NodeJs バージョン 14.15.2,
-   Chrome バージョン 87.0.4280.88.

# ACA 拡張機能の作成

[こちら](https://github.com/Alfresco/alfresco-digital-workspace-app/blob/develop/docs/extending.md "https://github.com/Alfresco/alfresco-digital-workspace-app/blob/develop/docs/extending.md")に記載されているように、ADW 拡張機能の作成は、モノレポ用の [Nx Workspace](https://nx.dev/angular "https://nx.dev/angular") の開発ツールに沿って簡単に行うことができます。

ACA プロジェクトのルートフォルダから、ターミナルで以下のコマンドを起動します。ご覧のように、以下のコマンドでは、`my-extension` という名前の新しいエクステンションを作成しています。

    ng generate library my-extension

エラーが発生する場合は、`tsconfig.json` ファイルに以下の行を追加してください。

    "compilerOptions": { "baseUrl": ".", "rootDir": "." }

そうすると、`projects/my-extension` のパスに、以下のような構造が現れます。

-   すべての typescript のソースコードを含む `src` フォルダ。非常に重要なのは、拡張機能のすべてのインクルードを定義した `public-api.ts` ファイルと、拡張機能のモジュールクラスを定義した `lib/my-extension.module.ts` ファイルです
    
-   ドキュメント用の README.md ファイルや、テストや設定に使用するその他のファイル

作成を完了するには、次のコマンドを起動して拡張機能を構築します。

    nx build my-extension

# ACA 拡張機能の基礎知識を身につける

さて、`my-extension` ができたので、拡張モジュールに適切な設定を加えてみましょう。そのためには、`projects/my-extension/src/lib/my-extension.module.ts` ファイルを以下のように変更します。

    // 以下のようにインポートを追加します。
    import { ExtensionService } from '@alfresco/adf-extensions';
    
    // 以下のようにコンストラクタを追加します。
    NgModule({...})
    export class MyExtensionModule {
      constructor(extensions: ExtensionService) {
        extensions.setComponents({
          'my-extension.main.component': MyExtensionComponent,
        }); 
      }
    }

さて、いよいよ新しい拡張機能の設定を行います。このために、ACA のランディングページの左メニューで見ることができるリンクを追加するために拡張を指示します。

適切な設定を行うために、記述されたパスに以下のフォルダを作成します。

    projects/my-extension/assets

これができたら、次のような内容のファイル `projects/my-extension/assets/my-extension.json` を作成します。

    {
      "$schema": "../../../extension.schema.json",
      "$id": "my-extension",
      "$version": "1.0.0",
      "$vendor": "氏名または会社名",
      "$name": "plugin1",
      "$description": "demo plugin",
      "$license": "MIT",
      
      "routes": [ 
        {
          "id": "my.extension.route",
          "path": "ext/my/route",
          "component": "my-extension.main.component"
        }
      ],
      
      "features": {
        "navbar": [
          {
            "id": "my.extension.nav",
            "items": [
              {
                "id": "my.extension.main",
                "icon": "extension",
                "title": "My Extension",
                "route": "my.extension.route"
              } 
            ]
          }
        ]
      }
    }

これは非常に基本的な例で、既存の左メニューに “My Extension” という項目を追加し、ACA のランディングページに表示される “my-extension works!“ というテキストを含む空白のページを実装します。ここからは、[拡張](https://alfresco-content-app.netlify.app/#/extending/ "https://alfresco-content-app.netlify.app/#/extending/")のドキュメントに従って、拡張機能を充実させていくことができます。

# ACA アプリケーションの一部として拡張を行う

ACA の拡張機能が初期バージョンとして開発されたので、アプリケーションが使用するもののリストに拡張モジュールを追加してみましょう。タスクを完了するには、`src/app/extensions.module.ts` ファイルを以下のように編集します。

    // ページに次のようなインポートを追加します。
    import { MyExtensionModule } from 'my-extension';
    
    @NgModule({
      imports: [
        ...,
        MyExtensionModule
      ],
    })
    export class AppExtensionsModule {}

さらに、`src/assets/app.extensions.json` ファイルを編集して、`$references` 配列を作成します。下の図は、そのようになっています。

    "$references": ["my-extension.json"],

ACA アプリからパブリック URL を介して拡張機能が見えるように、設定ファイルを指示してみましょう。タスクを完了するには、以下のように angular.json ファイルを編集します。

    // 'src/app.config.json' 配列に追加します。
    ...
    {
      "glob": "my-extension.json",
      "input": "projects/my-extension/assets",
      "output": "./assets/plugins"
    },
    ...

最後に、package.json ファイルを編集して拡張機能のビルドを許可し、scripts セクションに以下の行を追加します。

    { ...
      "scripts": {
        ...,
        "build:my-extension": "nx build my-extension && npx cpr projects/my-extension/assets dist/my-extension/assets --deleteFirst"
      }, ...
    }

以下のコマンドを実行して、拡張機能のビルドを作成します。

    npm install my-extension

# 拡張機能を含む ACA の動作

すべての開発が完了したので、いよいよ ADW を起動して結果を見てみましょう。ADW を起動するには、ターミナルから次のコマンドを実行します。

    npm start

ACA のランディングページの左メニューに新しい項目が追加され、次のような内容の新しいページへのルートが実装されているはずです。下のスクリーンショットは、それがどのように見えるかを説明しています。

![extension](../images/extension-01.png)
