Node.js、PHP、MariaDBの複数バージョン管理:Fedoraの「武器」DNF Modularityを活用する

Fedora tutorial - IT technology blog
Fedora tutorial - IT technology blog

背景:新旧プロジェクトによるバージョンの競合

Web開発やDevOpsに携わっていると、古いプロジェクトはPHP 7.4に依存し、新しいプロジェクトはPHP 8.2を要求するといった、バージョンの「板挟み」に悩まされることがよくあります。Node.jsも同様で、アプリケーションごとに異なる環境が必要です。通常、nvmを使ったり、サードパーティのリポジトリを追加したりして解決を試みますが、これらはシステム衝突のリスクを孕んでいます。

私は過去2年間、Fedoraをメインの作業マシンとして使用してきました。最も気に入っている点は、DNF Modularityです。特定のソフトウェアバージョンを1つだけ強制するのではなく、Modularityを使用すると、公式リポジトリから直接、複数のバージョン「ストリーム(streams)」を切り替えて実行できます。

「なぜDockerを使わないのか?」と思うかもしれません。実際、Modularityはdnfに深く統合されているため、圧倒的な安定性を提供します。アップグレード時のセキュリティやライブラリのエラーを心配する必要はありません。わずか3〜5分の操作で、OSの依存関係を壊すことなく、Node.js 18から20へ移行できます。

Module、Stream、Profileのクイック理解

コマンドを入力する前に、混乱を避けるためにこれら3つの中心的な概念を確認しておきましょう:

  • Module: 管理したいソフトウェアの名前(例:nodejs)。
  • Stream: そのモジュールの特定のバージョン(例:18, 20, 22)。
  • Profile: 用途に合わせたインストール方法。サーバー用のcommonや、デバッグツールを含むdevelopmentなどが選択可能です。

自分のマシンで何が利用可能か確認するには、次のコマンドを使用します:

dnf module list

返されるリストは非常に長くなることがあります。Node.jsなどで素早くフィルタリングするには、次のように実行します:

dnf module list nodejs

Stream列に注目してください。[d]はデフォルトバージョン、[i]はそのバージョンが既にインストールされていることを示します。

実践:瞬時にバージョンを柔軟に切り替える

1. Node.js of the handling

現在Node.js 18を使用しており、クライアントからNode.js 20を要求されたとしましょう。nodesourceからスクリプトをダウンロードする必要はありません。標準的な手順は「Reset – Enable – Install」だけです:

# ステップ 1: 古い設定を削除するためにモジュールをリセット
sudo dnf module reset nodejs

# ステップ 2: バージョン 20 のストリームを有効化
sudo dnf module enable nodejs:20

# ステップ 3: インストールまたはシステムを同期
sudo dnf install nodejs

既にNode.js 18がインストールされている場合は、sudo dnf distro-syncを実行するだけです。システムが自動的に関連パッケージを同期のためにアップグレードまたはダウングレードします。

2. Webプロジェクト向けのPHP管理

PHPはModularityの真価が最も発揮される場所です。サーバーにクリーンなPHP 8.2をインストールする場合、私はよくプロファイルを使用します:

sudo dnf module enable php:8.2

# よく使われる拡張機能をすべて含む 'common' プロファイルでインストール
sudo dnf install @php:8.2/common

@記号を使うことで、個々のライブラリ名を覚えなくてもパッケージセット全体をインストールできます。php-mbstringphp-xmlなどを一つずつ入力する手間が省け、時間を大幅に短縮できます。

3. MariaDB:慎重に越したことはない

データベースのバージョン変更は、基盤となるデータ構造があるため、常にリスクが伴います。有効化の方法は同様です:

sudo dnf module enable mariadb:10.11
sudo dnf install mariadb-server

実体験からのアドバイス:DNFはソフトウェア(バイナリ)のアップグレードのみを行い、mysql_upgradeを自動で実行することはありません。ストリームを変更する前には、必ずmysqldumpデータをバックアップし、「取り返しのつかない事態」を避けましょう。

確認とエラー発生時の「切り戻し」

完了したら、結果を確認しましょう。次のコマンドでアクティブなすべてのモジュールがリストされます:

dnf module list --enabled

バージョンを直接チェックして確信を得ましょう:

node -v && php -v

誤って間違ったストリームを有効にして環境を壊してしまいましたか?慌てる必要はありません。DNFには優れた履歴機能があります。次を実行するだけです:

dnf history

エラーが発生した操作のIDを見つけ、dnf history undo <ID>と入力すれば、数秒で以前の状態に「巻き戻す」ことができます。これは、私が設定をいじりすぎてしまったときによく使う救命策です。

DNF ModularityはFedoraを多機能なマシンに変え、システムをクリーンに保ちながら、プロジェクトのあらゆる厳しい要求に応えることを可能にします。スムーズな開発体験を!

Share: