$30 off During Our Annual Pro Sale. View Details »

Construct Hub に自作ライブラリを公開しよう with projen / Publish your library to Construct Hub with projen

hayao_k
June 01, 2022

Construct Hub に自作ライブラリを公開しよう with projen / Publish your library to Construct Hub with projen

JAWS-UG CDK支部 #1 〜初回拡大版〜 の LT 資料です

hayao_k

June 01, 2022
Tweet

More Decks by hayao_k

Other Decks in Technology

Transcript

  1. Construct Hub に
    自作ライブラリを公開しよう
    with projen
    JAWS-UG CDK 支部 #1 〜初回拡大版〜
    June 1st, 2022
    小杉 隼人 | Hayato Kosugi

    View Slide

  2. About Me
    • Cloud Engineer @ セゾン情報システムズ
    • AWS Community Builder (Fall of 2020)
    • 2019 - 2022 APN AWS Top Engineers
    • 11x AWS Certified
    • CDK は個人利用がメイン
    2
    @hayaok3 @hayao_k

    View Slide

  3. Agenda
    • Construct Hub って何
    • projen はいいぞ
    3

    View Slide

  4. What is Construct Hub?
    • コミュニティや AWS、AWS パートナーが公開する Construct Library を
    検出・共有するためのレジストリ
    • 昨年 12 月 AWS CDK v2 と同日に GA
    • 現在 1000 以上の Construct Library が掲載
    • https://constructs.dev/
    4

    View Slide

  5. Construct Hub に掲載される条件
    • JSII-compatible であること
    • 多言語対応のため
    • オープンソースライセンスであること
    • Apache, BSD, EPL, MPL-2.0, ISC, and CDDL or MIT
    • CDK Keyword を使用して npm Registry に公開されていること
    • cdk, awscdk, aws-cdk, cdk8s, or cdktf
    • これらを満たすと 約 30 分で自動で掲載
    5

    View Slide

  6. 6

    View Slide

  7. 難しそう?
    projen を使った開発がおすすめ
    7

    View Slide

  8. CDK で TypeScript をやっているときの私
    • プロジェクト構成の管理は近年複雑化している
    • TypeScript プロジェクトの場合
    • package.json, tsconfig.json, .gitignore, eslint, jest, etc
    •ぜんぜんわからない、俺 たち は雰囲気で
    TypeScript をやっている…
    8

    View Slide

  9. What is Projen?
    • A new generation of project generators
    • Construct の考え方をプロジェクト構成に適用
    • プロジェクト構成をコードで定義し、維持するためのツール
    • package.json, tsconfig.json 等、通常は自分で管理する必要のある
    構成ファイルを自動で管理
    • プロジェクトの雛形を作るだけではなく、継続管理する
    • https://github.com/projen/projen
    9

    View Slide

  10. • node - Node.js project.
    • project - Base project.
    • python - Python project.
    • react - React project without TypeScript.
    • react-ts - React project with TypeScript.
    • typescript - TypeScript project.
    • typescript-app - TypeScript app.
    Built-in Project types
    • awscdk-app-java - AWS CDK app in Java.
    • awscdk-app-py - AWS CDK app in Python.
    • awscdk-app-ts - AWS CDK app in TypeScript.
    • awscdk-construct - AWS CDK construct library project.
    • cdk8s-app-ts - CDK8s app in TypeScript.
    • cdk8s-construct - CDK8s construct library project.
    • cdktf-construct - CDKTF construct library project.
    • java - Java project.
    • jsii - Multi-language jsii library project.
    • nextjs - Next.js project without TypeScript.
    • nextjs-ts - Next.js project with TypeScript.
    10
    $ mkdir awesome-project
    $ cd awesome-project
    $ git init
    $ npx projen new PROJECT-TYPE
    🤖 Synthesizing project...

    View Slide

  11. Construct Library プロジェクトの作成
    • projen new awscdk-construct
    • 開発に必要なファイルが生成される
    • package.json, jsii によるビルドスクリプト,
    GitHub Actions Workflow など
    • .projenrc.js に必要な設定を定義
    • サポートする CDK の最小バージョン
    • 他のライブラリとの依存関係
    • 各パッケージマネージャーでのライブラリ名など
    12

    View Slide

  12. .projenrc.js の例
    13
    • projen コマンドで変更を反映
    • projen が管理するファイルの多くは手動で
    編集しない (できない)
    • 編集した場合はビルドが Fail する
    • e.g., publishToPypi
    • package.json の jsii 設定に python が
    追加
    • GitHub Actions の release.yml に
    PyPI へ publish する Step が追加
    指定可能なオプションは多岐にわたるため、API リファレンスを参照
    https://projen.io/api/API.html#projen-awscdk-awscdkconstructlibrary
    const { awscdk } = require('projen');
    const cdkVersion = '2.25.0';
    const project = new awscdk.AwsCdkConstructLibrary({
    author: 'hayao-k',
    authorAddress: '[email protected]',
    cdkVersion,
    defaultReleaseBranch: 'main',
    name: 'cdk-sample-lib',
    repositoryUrl: 'https://github.com/hayao-k/cdk-sample-lib.git',
    description: 'Sample AWS CDK Construct Library by projen',
    keywords: ['sample'],
    license: 'Apache-2.0',
    deps: [
    `@aws-cdk/aws-apigatewayv2-alpha@${cdkVersion}-alpha.0`,
    `@aws-cdk/aws-apigatewayv2-integrations-alpha@${cdkVersion}-alpha.0`,
    'other-useful-lib'
    ],
    publishToPypi: {
    distName: 'cdk-sample-lib',
    module: 'cdk_sample_lib',
    },
    });
    project.synth();

    View Slide

  13. Release も簡単自動化
    • Build workflow (.github/workflows/build.yml)
    • pull request 作成時に起動
    • ライブラリのビルド、改ざんチェック
    • Release workflow (.github/workflows/release.yml)
    • リリースブランチへの push 時に起動
    • ライブラリのビルド、改ざんチェック
    • Conventional Commits による Semantic Versioning
    • GitHub Releases, 各言語のレジストリへの公開 (要 Secrets 登録)
    14

    View Slide

  14. Step by Step の手順はこちら
    • projen ではじめる快適 AWS CDK
    Construct Library 開発生活
    • https://qiita.com/hayao_k/items/194dfb051f18
    a38b6dbd
    • A Beginner's Guide to Create AWS
    CDK Construct Library with projen
    • https://dev.to/aws-builders/a-beginner-s-
    guide-to-create-aws-cdk-construct-library-
    with-projen-5eh4
    • Construct Hub の Contribute ページでも
    紹介いただいてます
    15

    View Slide

  15. Summary
    • Construct Hub
    • コミュニティや AWS、AWS パートナーが公開する Construct Library を
    検出・共有するためのレジストリ
    • 時間の関係で紹介できなかったが便利なライブラリがたくさん
    • 自作ライブラリも公開できる
    • projen
    • プロジェクト構成の管理や CI が劇的に楽になる
    • Developer Experience に感動
    • 特別な考慮不要で自作ライブラリを Construct Hub に掲載できる
    16

    View Slide

  16. AWESOME Book & Posts & Slide
    • The CDK Book
    • https://thecdkbook.com/
    • CDKの成り立ちとその可能性について (The CDK Bookより)
    • https://qiita.com/oktomoya/items/3cf66205b8c932d252ef
    • CDK Construct ライブラリを開発する際のTips
    • https://tmokmss.hatenablog.com/entry/20220517/1652755027
    • AWSアカウントの共通設定をCDK ConstructHubで公開しました
    • https://docs.google.com/presentation/d/1X2r7LUuijiWISgL-P2SPyVFz6l2EqZ1DFzbaAjb9SKo
    • 【レポート+やってみた】projen – a CDK for software project configuration #CDK Day
    • https://dev.classmethod.jp/articles/cdk-day-projen-try/
    17

    View Slide

  17. Happy Constructing!
    18

    View Slide