本記事は、CodeCatalyst の Packages 機能を利用しようとしている方向けの記事になります。
具体的には、「CodeCatalyst の Packages 機能の概要を知りたい方」「ローカルパッケージを Amazon CodeCatalyst のパッケージリポジトリに追加してみたい方」向けの記事です。
こんにちは!エンタープライズクラウド部クラウドコンサルティング課の日高です。
もし私のことを少しでも知りたいと思っていただけるなら、私の後輩が書いてくれた以下のブログを覗いてみてください。
本ブログでは、「CodeCatalyst の Packages 機能の概要」と「ローカルパッケージを Amazon CodeCatalyst のパッケージリポジトリに追加する方法」について記載します。
はじめに
現在、Angel Dojo というAWSのトレーニングプログラムに参加しています。このプログラムでは、3ヶ月間でサービスの企画から開発までを行います。
※Angel Dojo については以下のブログをご覧ください。
私のチームでは、Amazon CodeCatalyst を使ってプロジェクトを進めており、パッケージ管理には package.json
を使用し、Amazon CodeCatalyst のリポジトリでコードを管理しています。
そんな中で、「パッケージ管理の方法はこのままで良いのか?」と考え始めたタイミングで、CodeCatalystのPackages機能の存在を知りました。
本ブログでは、ローカルパッケージを Amazon CodeCatalyst のパッケージリポジトリ に追加し、パッケージ管理の基盤を整える方法を紹介していきます。
パッケージリポジトリを使う意味について
「Gitと package.json
でパッケージ管理をしているのに、わざわざパッケージリポジトリを使う意味はあるの?」という疑問が湧くかもしれません。私も正直パッケージリポジトリを使う意義はよくわかっていませんでした。
確かに、Gitと package.json だけでパッケージ管理をしていると、十分に機能しているように思うかもしれません。
ただ、パッケージリポジトリを活用すると、もっと効率的にプロジェクトを進めることができます。ここでは、パッケージリポジトリを使うことで得られるメリットを説明します。
バージョン管理が一元化され、プロジェクト間で一貫性が保てる package.json でパッケージのバージョンを管理するのは良いのですが、プロジェクトごとに個別に管理していると、バージョンの不一致が発生することがあります。
パッケージリポジトリを使えば、すべてのプロジェクトで一貫したバージョン管理が可能になり、複数のプロジェクトで同じパッケージを使っていても整合性が保たれます。ビルド済みのパッケージを配布できる Gitで管理しているのは主にソースコードですが、パッケージリポジトリを使うとビルド済みのパッケージを直接配布できます。
つまり、他のプロジェクトやチームはビルドの手間を省いて、そのまますぐに利用できるので、作業の効率が格段に上がります。パッケージの再利用が簡単 プロジェクトで独自に開発したパッケージやツールを他のプロジェクトでも使いたい場合、パッケージリポジトリを利用すると再利用が非常に簡単になります。
リポジトリにパッケージを公開すれば、他のプロジェクトで簡単に npm install するだけでそのパッケージを利用できるため、再利用が促進されます。プライベートパッケージの安全な共有 パッケージリポジトリを使えば、プライベートパッケージを安全に管理できます。
たとえば、外部には公開したくない社内向けのツールやライブラリがある場合、パッケージリポジトリを使えば必要な人だけがアクセスできるようにして、セキュリティを保ちながら共有することができます。依存関係の自動更新とCI/CDの統合 パッケージリポジトリを使うことで、依存関係のバージョンを自動で更新し、CI/CDパイプラインともスムーズに統合できます。
これにより、常に最新のパッケージバージョンを利用した状態で開発・テストを進められるため、作業の効率がアップします。
CodeCatalyst の Packages 機能
Amazon CodeCatalyst には、アプリケーション開発に使用されるソフトウェアパッケージを安全に保存および共有できるフルマネージドパッケージリポジトリサービスが存在しています。
簡潔にまとめると、CodeCatalyst のプロジェクト内でパッケージリポジトリを作成してパッケージ管理ができる機能になります。
現在(2024年9月時点)は、npm・Maven・NuGet・Python の4つのパッケージ形式をサポートしています。
※サポートされているパッケージ形式については以下をご覧ください。
概念
CodeCatalystでは、プログラムに必要な「部品(パッケージ)」を効率よく管理できる機能が用意されています。
この章では、初心者向けに「パッケージリポジトリ」「アップストリームリポジトリ」「ゲートウェイリポジトリ」の3つの概念を解説していきます。
パッケージリポジトリ
CodeCatalystのパッケージリポジトリは、プログラムで使う複数の「パッケージ」を保存しておく場所です。
各パッケージには、複数の「バージョン」があり、これらのバージョンは具体的なファイルセット(アセット)に対応しています。
また、このリポジトリはpolyglot(ポリグロット)の性質を持っています。
polyglotとは、Python、JavaScript、Javaといった異なるプログラミング言語のパッケージを一つのリポジトリでまとめて管理できるということです。
つまり、npm(JavaScript用)、pip(Python用)、mvn(Java用)、nuget(.NET用)など、よく使われるCLIツールを使って、パッケージをダウンロードしたり、公開したりすることができます。
アップストリームリポジトリ
「アップストリームリポジトリ」とは、他のリポジトリからパッケージを取得できる仕組みです。
自分のリポジトリに必要なパッケージがない場合、アップストリームリポジトリに設定したリポジトリに探しに行って、そのパッケージを取得できます。
「アップストリームリポジトリ」を利用すると、クライアント(パッケージマネージャーなど)から見ると、自分のリポジトリとアップストリームリポジトリの内容が一緒に見えるようになります。
これにより、自分のリポジトリに特定のバージョンのパッケージがない場合でも、アップストリームリポジトリを検索して、そのパッケージを取得することができるようになります。
「アップストリームリポジトリ」として設定するリポジトリは、後述の「ゲートウェイリポジトリ」と「自身のパッケージリポジトリ」から選択することが可能です。
また、「Upstreams」ページで、パッケージを検索する順序を編集することも可能になります。
※1つのリポジトリに設定できるアップストリームリポジトリは最大で10個までで、CodeCatalystが検索するリポジトリの合計数は最大25個までです。この点にご注意ください。
ゲートウェイリポジトリ
ゲートウェイリポジトリは、外部の公式なパッケージリポジトリ(例えばnpmやMaven Centralなど)からパッケージを取得して、自分のリポジトリに保存する「特殊なタイプのリポジトリ」です。
このリポジトリを使うと、外部のパッケージを直接取得するのではなく、一度ゲートウェイリポジトリに保存しておくことができます。
そして、次回同じパッケージが必要になった時は、外部のリポジトリにアクセスせず、自分のリポジトリからすぐに取り出すことができます。
これにより、パッケージの取得が速くなり、外部との通信も減らすことができます。
※サポートされている外部パッケージリポジトリとそのゲートウェイリポジトリについては以下をご覧ください。
ローカルパッケージを CodeCatalyst のパッケージリポジトリに追加
パッケージリポジトリの作成
ナビゲーションペインで、「Packages (パッケージ)」 を選択し、「Create package repository」を押下します。
パッケージリポジトリ名を記入し、「create」を押下します。
パッケージリポジトリに接続する
先ほど作成したパッケージリポジトリの「Connect to repository」を選択します。
今回は npm へ接続したいので、「npm client」を選択します。
OSを選択して、記述されている設定ステップに従い、設定をします。
Step2 で設定されているコマンドを実行することで以下の操作を実行します。
- プロジェクトにプロジェクトレベルの.npmrcファイルがない場合は、作成します。
- パッケージリポジトリのエンドポイント情報をプロジェクトレベルの.npmrcファイルに追加します。
- 認証情報 (PAT) をユーザーレベルの.npmrcファイルに追加します。
上記の Step2 で設定されているコマンドを実行することで、CodeCatalyst パッケージリポジトリに接続する準備が整いました。
ローカルパッケージをパッケージリポジトリに追加
以下のコマンドを使用して、npm パッケージを CodeCatalyst パッケージリポジトリに追加します。
npm publish
コマンドを実行すると、ローカルパッケージがパッケージリポジトリに追加されていることを確認できました。
これでローカルパッケージを、Amazon CodeCatalyst のパッケージリポジトリで管理する手筈が整いました。
まとめ
パッケージリポジトリを活用することで、バージョン管理の一元化、ビルドの手間削減、再利用の促進、セキュリティの向上、そして自動化の推進など、多くのメリットを享受できそうです。
パッケージリポジトリでのパッケージ管理をする運用はまだ行っていないので、触りの部分だけ執筆させてもらいました。
今後は以下のような運用フローで管理していこうと思っています。
- ローカルで作成したパッケージを npm publish してパッケージリポジトリに追加。
- 他のプロジェクトはそのパッケージを npm install で利用。
- パッケージの新しいバージョンが必要な場合、再度 npm publish でリポジトリを更新。
本記事が誰かの助けになれば幸いです。
日高 僚太(執筆記事の一覧)
2024 Japan AWS Jr. Champions / 2024 Japan AWS All Certifications Engineers
EC部クラウドコンサルティング課所属。2022年IT未経験でSWXへ新卒入社。
記事に関するお問い合わせや修正依頼⇒ hidaka@serverworks.co.jp