window.pipedriveLeadboosterConfig={です。 ベース:'leadbooster-chat.pipedrive.com'、 companyId:11580370, playbookUuid: '22236db1-6d50-40c4-b48f-8b11262155be', version: 2、 } ;(function () { var w = window もし (w.LeadBooster) {なら console.warn('LeadBooster already exists') } else { w.LeadBooster = { {. q: [], on: function (n, h) { this.q.push({ t: 'o', n: n, h: h }) }, trigger: 関数 (n) { { this.q.push({ t: 'o', n: n, h: h }) this.q.push({ t: 't', n: n }) }, } } })() 1台のマシンで複数のプロジェクトの複数の環境を扱う?- The Codest
The Codest
  • 会社概要
  • サービス
    • ソフトウェア開発
      • フロントエンド開発
      • バックエンド開発
    • Staff Augmentation
      • フロントエンド開発者
      • バックエンド開発者
      • データエンジニア
      • クラウドエンジニア
      • QAエンジニア
      • その他
    • アドバイザリー
      • 監査&コンサルティング
  • 産業
    • フィンテック&バンキング
    • E-commerce
    • アドテック
    • ヘルステック
    • 製造業
    • 物流
    • 自動車
    • アイオーティー
  • 価値
    • CEO
    • CTO
    • デリバリー・マネージャー
  • チーム
  • Case Studies
  • ノウハウ
    • ブログ
    • ミートアップ
    • ウェビナー
    • リソース
採用情報 連絡先
  • 会社概要
  • サービス
    • ソフトウェア開発
      • フロントエンド開発
      • バックエンド開発
    • Staff Augmentation
      • フロントエンド開発者
      • バックエンド開発者
      • データエンジニア
      • クラウドエンジニア
      • QAエンジニア
      • その他
    • アドバイザリー
      • 監査&コンサルティング
  • 価値
    • CEO
    • CTO
    • デリバリー・マネージャー
  • チーム
  • Case Studies
  • ノウハウ
    • ブログ
    • ミートアップ
    • ウェビナー
    • リソース
採用情報 連絡先
戻る矢印 戻る
2022-12-01
ソフトウェア開発

1台のマシンで複数のプロジェクトの複数の環境を扱う?

バルトウォミエ・クシンスキ

1台のマシンで多数の環境を処理するための黄金手段はあるのでしょうか?私たちのJavaエキスパートBartłomiejがその答えを知っています!

典型的な職場環境を見てみよう。 ソフトハウス.異なる環境を持つ顧客が何人かいる。MySQLを好む顧客もいれば、Postgresを好む顧客もいます。あるバージョンのアプリケーションには ジャワ 11とJava 17がある。フロントエンドは、異なるバージョンの 角ばった.最終的に、すべてのDB、バックエンド、フロントエンドのバージョンの組み合わせを含む3次元配列ができる。しかしある日、上司がこう言った。

コミック<br />ウィズ</br>ボス

マルチバース環境のルーツ

上記のような状況は珍しいことではない。言語やフレームワークのバージョン間の移行、データベースの更新、あるいは単に顧客からの異なる要求によって、すべての構成がひっくり返る可能性がある。私たちは、そのような変更を管理するのに役立つ、いくつかの仮定や要件や目標に合致するソリューションを持つべきです:

  • 使いやすい - 一つのコマンドでコンフィギュレーションやバージョンを変更できる、
  • リッチライブラリー - 複数の技術や「もの」(ライブラリ、フレームワーク、アプリ)をサポートする必要がある、
  • 拡張可能 - あなたのプラグインを追加する可能性を提供する必要があります。

今回は3つの分野に焦点を当てる。第一はJavaとJVMのためのツール。2つ目は汎用ツール。3つ目は、目的を達成するためのdockerの使い方だ。

​

私はJavaで、JVMで仕事をしている。

あなたが Java開発者 あるいは、もっと一般的には JVM技術を使うことができる。 SDKMAN!.これは、多くのライブラリ、フレームワーク、言語をサポートする、とても素晴らしく使いやすいツールだ。

のインストールプロセス SDKMAN! とても簡単だ。走る必要がある:

curl -s "https://get.sdkman.io" | bash

そして

ソース "$HOME/.sdkman/bin/sdkman-init.sh"

これで ジャワ, スカラ そして メイブン のバージョンがある。

バージョンの管理 - 例

この例では、いくつかのツールのインストールとバージョン更新を行う。これは利用可能なツールのほんの一部です。

インストール

あなたの新しい プロジェクト 用途 ジャワ17.あなたは何も持っていない ジャワ バージョンがインストールされている。それをインストールし、さらにビルドを高速化するためにMavenデーモン・ツールを追加したい。そこで、Mavenもインストールする必要がある。そのためには、3つの簡単なコマンドを実行する必要がある:

$ sdk install java 17-open

$ sdk インストール maven 3.8.4

$ sdk インストール mvnd 0.7.1

各ツールのインストールの最後に、デフォルトにするかどうか尋ねられます:

Java17-openをデフォルトに設定しますか(Y/n):

これは、ライブラリや言語の新しいバージョンをインストールするときに重要です。SDKMAN! は、そのデフォルトバージョンを現在のユーザーのすべての端末のグローバルバージョンとして設定するからです。

バージョンの確認と更新

時々、SDKMAN! はインデックスを更新する必要があります。その際、使用しているツールの新しいバージョンがあるというメッセージが表示されることがあります。どのバージョンが利用可能かを確認するには、次のように入力します。 sdk ls <TOOL.について sdk ls maven:

利用可能なMavenバージョン

================================================================================

    3.8.6 3.3.3

    3.8.5 3.3.1

3.8.4 3.2.5

    3.8.3 3.2.3

    3.8.2 3.2.2

    3.8.1 3.2.1

    3.6.3 3.1.1

    3.6.2 3.1.0

    3.6.1 3.0.5

    3.6.0 3.0.4

    3.5.4

    3.5.3

    3.5.2

    3.5.0

    3.3.9



================================================================================

ローカルバージョン

現在使用中

================================================================================

上で見たように、Mavenは私たちが使っているものよりも新しいバージョンを持っている。同じことが mvnd (0.8.2)とJava(19-open)だ。すべてをアップデートしよう。そのためにはインストール・コマンドを呼び出せばいいのだが、今回はバージョン指定子は使わない:

$ sdk インストール maven

$ sdk インストール mvnd

$ sdk javaのインストール

しかし、何かが間違っていた。 メイブン そして mvnd は正しいバージョンを持っているが ジャワ バージョン 17.0.5-tem.それは、ツールの「最新」バージョンは、ローカルSDKMAN!ではなく、そのベンダーによって管理されているからです。このベンダーとは誰ですか?SDKMAN!におけるベンダーとは、バージョンを公開できる人のことです。しかし、最終的に 19-オープンをデフォルトにした。 17-オープン.

ローカルバージョンと端末ごとのバージョン管理

​
を設定することができる。 デフォルト あるツールのバージョンは、すべてのプロジェクトと端末に対してグローバルである。しかし、特定のバージョンが必要な場合は、2つの方法がある。ひとつは sdk使用 <VERSION コマンドを毎回実行する。二つ目は .sdkmanrc ファイルに保存される。

1つ目のオプションは1人で使用するためのものですが、2つ目はチームで作業し、コンフィギュレーションを共有するためのものです。 チーム メンバーだ。

SDKMANの長所と短所!

SDKMAN!は非常に使いやすく、サポートされているツール、フレームワーク、言語の豊富なライブラリを持っています。Linux、MacOS、Windowsで動作する。一方、このツールはJVMに特化しており、作者がベンダーであることを承認する必要がある。さらに .sdkmanrc は非常に貧弱で、ディレクトリを変更するプロセスを大幅に遅らせる可能性がある。

他の多くの言語を使いたい

多くの言語やツールを使用する必要がある場合は、以下を参照してください。 アズダフ.このツールは「高レベル」ツールに焦点を当てている。SDKMAN!では、BpipeやZnaiのようなJavaに特化したツールが多数提供されているが、asdfではより多くのツールが提供されている。もちろん、これらのツールの一部は重複しており、たとえばJava、Tomcat、mvndは両方で利用できる。

を使用したい場合 アズダフを持っている必要がある。 ギット そして カール をインストールする。その後は

git clone https://github.com/asdf-vm/asdf.git ~/.asdf --branch v0.10.2

に以下の行を追加する。 ~/.bashrc file:

.$HOME/.asdf/asdf.sh

.$HOME/.asdf/completions/asdf.bash

プラグインやツールをお好きなバージョンでインストールできるようになりました。

プラグインベースの管理

SDKMAN!とは違います、 アズダフ はプラグインを使ってツールを管理する。つまり、ツールをインストールする前に、プラグインをインストールする必要がある。例のプロジェクトに戻り、次のコマンドを使って環境を設定してみよう。 アサドフスフ.

まず、プラグインをインストールする必要がある:

asdfプラグインにJavaを追加

asdfプラグインにmavenを追加する

asdfプラグインにmvndを追加する

それからツールをインストールする:

asdfはJavaをインストールする openjdk-17

asdf maven 3.8.4 をインストールする

asdf インストール mvnd 0.7.1

そしてまた、SDKMANと違って!、 アズダフ を実行しても、私たちの環境は何も変わりません。javaを使おうとすると、次のようなエラーメッセージが表示される:

Javaコマンドにバージョンが設定されていない

以下のバージョンのいずれかを、~/.tool-versionsの設定ファイルに追加してください。

Java openjdk-17

ファイルを作成する必要がある。 ツールバージョン をホームディレクトリに置いて、デフォルトのバージョンを管理する。

ローカル版とグローバル版

でソフトウェアのバージョンを更新する。 アズダフ はとてもシンプルだ。新しいバージョンをインストールするだけだ。このプロセスは環境に影響を与えないので、いつでもファイルシステムのどの場所でもできる。あるソフトウェアの特定のバージョンを使いたいときは、プロジェクト・ディレクトリに ツールバージョン ファイルをチームメンバー間で共有することができます。チームメンバー全員が以下のファイルを持っていることを保証する必要があることを忘れないでください。 アズダフ とプラグインがインストールされています。プラグイン一覧 これ.

バージョンの競合

アズダフ vimやkubernetessのようなプログラミング言語やフレームワーク、ツールだけをサポートしているわけではない。データベースもサポートしている。このような場合、例えばPostgresの複数のバージョンをインストールしても、実行できるインスタンスは1つだけだ。それは アズダフ は、分離レイヤーを介さずにOS上で直接コマンドを実行する。そのため、「ポートがすでに使用中である」といった問題や、リソースの競合が発生する。

長所と短所

アズダフ は、ポリグロット環境で作業したい場合に非常に優れたツールだ。多くのツール、言語、フレームワークをサポートしている。プラグイン・ベース・アーキテクチャにより、拡張も非常に簡単だ。しかし、ライブラリにあるツールの中には、必要な依存関係をすべて提供するためにインストール時に追加作業が必要なものもある。 アズダフ を使用しても、Windowsでは動作しません。 WSL.

最後に - Docker

上でポートの衝突について述べたとき、多くの人はその解決策を知っているだろう。

ドッカー は、場合によっては私たちを助けてくれるかもしれない。このツールは非常に大きく複雑なので、1つの記事で論じることはできない。

Dockerと一緒に ドッカーコンポース マルチコンテナ環境を調整する可能性を与えてくれるツールだ。

Dockerの長所と短所

Dockerは、ポートやファイルといった特定のリソースを必要とするツールの管理に役立つ。Dockerはインスタンスをコンテナに分離し、それらを完全に制御できる。とはいえ、Dockerは作業環境に多くの複雑さをもたらすツールであり、場合によっては問題になることもある。テストでDockerを使用するケースの1つは、私たちの以前の記事の1つに記載されています。 記事.

まとめ

ツールのバージョン管理に使えるすべてのツールについて説明したわけではないことは承知している。例えば jEnv SDKMANを置き換えることができる、

または エヌブイエム npm または RVM Rubyのために。私が「戦場でテスト」し、誰にでも勧められるツールに焦点を当てた。

関連記事

ソフトウェア開発

Javaプログラミングで避けるべき9つの間違い

Javaでのプログラミングで避けるべき間違いとは?次の記事では、この質問にお答えします。

The Codest
ラファル・サヴィツキ Java開発者
エンタープライズ&スケールアップ・ソリューション

Javaはあなたのビジネスをどうサポートできるか?

始める前に、ひとつ重要なことを思い出していただきたい。Javaは単なるプログラミング言語ではない。

バルトロミエ・クジンスキー
ソフトウェア開発

テスト・コンテナ - テストをより簡単にするには?

より簡単にテストを行う方法をお探しですか?お任せください!以下の記事をチェックして、それを可能にする方法を学んでください。

バルトロミエ・クジンスキー
ソフトウェア開発

Javascriptツールの使用例

プログラミングのレベルアップに役立つ検索ツールJavaScriptをご紹介します。ESLint、Prettier、Huskyについてもっと知る!

The Codest
レダ・サルミ React 開発者
ソフトウェア開発

非同期およびシングルスレッド JavaScript?

JavaScriptはシングルスレッド言語であると同時に、ノンブロッキング、非同期、並行処理も可能です。この記事では、その仕組みを説明する。

ルカシュ・コルコ

ナレッジベースを購読して、IT部門の専門知識を常に最新の状態に保ちましょう。

    会社概要

    The Codest - ポーランドに技術拠点を持つ国際的なソフトウェア開発会社。

    イギリス - 本社

    • オフィス 303B, 182-184 High Street North E6 2JA
      イギリス、ロンドン

    ポーランド - ローカル・テック・ハブ

    • ファブリチュナ・オフィスパーク、アレハ
      ポコジュ18、31-564クラクフ
    • ブレイン・エンバシー, コンストルクトースカ
      11, 02-673 Warsaw, Poland

      The Codest

    • ホーム
    • 会社概要
    • サービス
    • Case Studies
    • ノウハウ
    • 採用情報
    • 辞書

      サービス

    • アドバイザリー
    • ソフトウェア開発
    • バックエンド開発
    • フロントエンド開発
    • Staff Augmentation
    • バックエンド開発者
    • クラウドエンジニア
    • データエンジニア
    • その他
    • QAエンジニア

      リソース

    • 外部ソフトウェア開発パートナーとの協力に関する事実と神話
    • 米国から欧州へ:アメリカの新興企業がヨーロッパへの移転を決断する理由
    • テックオフショア開発ハブの比較:テックオフショア ヨーロッパ(ポーランド)、ASEAN(フィリピン)、ユーラシア(トルコ)
    • CTOとCIOの課題は?
    • The Codest
    • The Codest
    • The Codest
    • Privacy policy
    • ウェブサイト利用規約

    著作権 © 2025 by The Codest。無断複写・転載を禁じます。

    jaJapanese
    en_USEnglish de_DEGerman sv_SESwedish da_DKDanish nb_NONorwegian fiFinnish fr_FRFrench pl_PLPolish arArabic it_ITItalian ko_KRKorean es_ESSpanish nl_NLDutch etEstonian elGreek jaJapanese