SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

連載記事

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

CodeZine BOOKS(コードジン・ブックス)は、CodeZineの連載からカットアップした、開発現場の課題解決に役立つ書籍シリーズです。

書籍に関する記事を見る

'); googletag.cmd.push(function() { googletag.pubads().addEventListener('slotRenderEnded', function(e) { var ad_id = e.slot.getSlotElementId(); if (ad_id == 'div-gpt-ad-1659428980688-0') { var ad = $('#'+ad_id).find('iframe'); if ($(ad).width() == 728) { var ww = $(window).width(); ww = ww*0.90; var style = document.createElement("style"); document.head.appendChild( style ); var sheet = style.sheet; sheet.insertRule( "#div-gpt-ad-1659428980688-0 iframe {-moz-transform: scale("+ww/728+","+ww/728+");-moz-transform-origin: 0 0;-webkit-transform: scale("+ww/728+","+ww/728+");-webkit-transform-origin: 0 0;-o-transform: scale("+ww/728+","+ww/728+");-o-transform-origin: 0 0;-ms-transform: scale("+ww/728+","+ww/728+");-ms-transform-origin: 0 0;}", 0 ); sheet.insertRule( "#div-gpt-ad-1659428980688-0 div{ height:"+(90*ww/728)+"px;width:"+728+"px;}", 0 ); } else { if ($(window).width() < 340) { var ww = $(window).width(); ww = ww*0.875; var style = document.createElement("style"); document.head.appendChild( style ); var sheet = style.sheet; sheet.insertRule( "#div-gpt-ad-1659428980688-0 iframe {-moz-transform: scale("+ww/320+","+ww/320+");-moz-transform-origin: 0 0;-webkit-transform: scale("+ww/320+","+ww/320+");-webkit-transform-origin: 0 0;-o-transform: scale("+ww/320+","+ww/320+");-o-transform-origin: 0 0;-ms-transform: scale("+ww/320+","+ww/320+");-ms-transform-origin: 0 0;}", 0 ); sheet.insertRule( "#div-gpt-ad-1659428980688-0 div{ height:"+(180*ww/320)+"px;width:"+320+"px;}", 0 ); } } } }); }); } else { document.write('
'); document.write('
'); }
PHPカンファレンス実行委員プレゼンツ PHPの最前線

PHPパッケージ管理ツール「Composer」の処理の仕組みを見てみよう!

PHPカンファレンス実行委員プレゼンツ PHPの最前線 第4回

  • X ポスト
  • このエントリーをはてなブックマークに追加

 PHPに関する日本最大のカンファレンスである「PHPカンファレンス2024」が2024年12月22日(日)に開催されます。カンファレンス盛り上げ企画として、開催までの5カ月間にわたりPHPの技術記事の連載を企画しました。この記事をお読みの皆さんには、PHPのさまざまな技術に触れながらカンファレンス当日を楽しみにしていただければと思います。 第4回目の今回は、PHPのパッケージ管理ツールとしておなじみの「Composer」について、どのようにパッケージの存在を確認し、バージョンを解決するのか、一連の流れを見ていきましょう。

  • X ポスト
  • このエントリーをはてなブックマークに追加

パッケージ管理ツール「Composer」

 今日では、多くのプログラミング言語において、開発プロジェクトにパッケージ管理ツールが欠かせないものとなりました。

 既存資産の活用で「車輪の再発明」を避け、開発の効率化を助けてくれます。また、セキュリティ意識が高まる中で、厳密なバージョン管理や確実なアップデートも強く求められています。使いやすいパッケージ管理ツールがなければ、いずれも頭の痛い問題になるのではないでしょうか。

 言語によってはパッケージ管理ツールを標準で提供されているものもある一方で、コミュニティ主導で3rdパーティツールとして提供されているものも多く存在しています。

 PHPでは、Composerがデファクトスタンダードなツールです。コミュニティ主導で開発されているものですが、PHPを利用するプロジェクトであれば、Composerの利用は不可欠になっているといえそうです。

 では、Composerはどのようにしてパッケージの存在を確認し、バージョンを解決するのでしょうか? そんな疑問に答えるべく、一連の流れを追ってみようというのが本稿の主旨です。

 なお、内容はすべて執筆時点の最新版であるv2.8.2を前提としています。

composer.jsonとcomposer.lock

 多くの類似ツールと同様に、Composerでも「構成管理ファイル」「ロックファイル」によって依存パッケージを管理しています。

 前者にあたるのがcomposer.jsonで、後者がcomposer.lockというファイルです。それぞれの役割は次のとおりです。

  • composer.json:プロジェクトが直接依存するパッケージ名と、許容するバージョンの範囲を指定。アプリケーション(プロジェクト)の開発者が設定するもの。パッケージの追加コマンド(composer require)によって更新される
  • composer.lock:プロジェクトが間接的に依存するものも含めて、パッケージ名と詳細なバージョンを指定。Composerによって自動的に生成されるもの。追加済パッケージのバージョンアップ(composer update)によって更新される

 例えば、composer require "hoge/fuga:^1.0.0"と指定したら、パッケージhoge/fugaのバージョン1.x系統の最新版(例えば1.27.5)が利用されます。その際には、composer.jsonにはhoge/fuga:^1.0.0が、composer.lockにはhoge/fuga:1.27.5が記述されます。

 この例は、「自身が依存を持たない単一のパッケージの取得」という極めて単純なシナリオになっています。それでも、分解して捉えると複数の仕事が含まれていることに気付きます。

  1. パッケージhoge/fugaが存在するか・利用可能かのチェック
  2. hoge/fugaの利用可能なバージョンのチェック
  3. バージョン解決の戦略[1]に基づいて^1.0.0の条件に合致するバージョンの特定

[1] デフォルトでは、安定版かつ最新版を取得します

 これに加えて、一般的なComposerの利用場面では、「間接依存を持つ場合」「複数パッケージ同士が同じパッケージに依存する場合」「インストールの前提条件が指定されている場合(PHPのバージョンや拡張の有無など)」等の更に複雑な要件が発生します。

 こうした問題は、どのように解決されているのでしょうか? 具体的な仕組みを見ていきましょう。

会員登録無料すると、続きをお読みいただけます

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

次のページ
パッケージ管理を理解する上で必要な登場人物の整理

関連リンク

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
PHPカンファレンス実行委員プレゼンツ PHPの最前線連載記事一覧

もっと読む

この記事の著者

金城 秀樹(キンジョウ ヒデキ)

 ずっとPHPにお世話になり続けているWeb系プログラマー。趣味は積ん読とNBA観戦。最近は、本を読んだ感想を話すPodcast「readlinefm」もやっています。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/20455 2024/11/13 11:00
" ); }

おすすめ

アクセスランキング

  1. 1
    Linux Mint 22.1、通称「Xia」がリリース NEW
  2. 2
    C# 13の新機能を理解する――paramsコレクションと新しいロックセマンティクス
  3. 3
    ITエンジニア本大賞2025、ベスト10選出! 技術書部門とビジネス書部門の大賞はどうなる!?
  4. 4
    実はITエンジニアの設計力が求められるkintone、その仕組みとポイントを事例に学ぶ
  5. 5
    アイスマイリー、「生成AIリスキリングカオスマップ 2025」を公開 NEW
  1. 6
    Flutterでアプリをビルドしよう。AndroidとiOSそれぞれの流れを解説 NEW
  2. 7
    Microsoft、AIとのチャットと従量課金のエージェント機能を利用可能な「Microsoft 365 Copilot Chat」の提供を開始 NEW
  3. 8
    総務省、データサイエンス・オンライン講座「誰でも使える統計オープンデータ」をリニューアル開講
  4. 9
    デスクトップアプリ開発に必要な「Rust」の文法を理解しよう
  5. 10
    ガントチャートをWebアプリに組み込める「ガントシート」でプロジェクト管理機能を作成してみよう

アクセスランキング

  1. 1
    Linux Mint 22.1、通称「Xia」がリリース NEW
  2. 2
    C# 13の新機能を理解する――paramsコレクションと新しいロックセマンティクス
  3. 3
    ITエンジニア本大賞2025、ベスト10選出! 技術書部門とビジネス書部門の大賞はどうなる!?
  4. 4
    実はITエンジニアの設計力が求められるkintone、その仕組みとポイントを事例に学ぶ
  5. 5
    アイスマイリー、「生成AIリスキリングカオスマップ 2025」を公開 NEW
  6. 6
    Flutterでアプリをビルドしよう。AndroidとiOSそれぞれの流れを解説 NEW
  7. 7
    Microsoft、AIとのチャットと従量課金のエージェント機能を利用可能な「Microsoft 365 Copilot Chat」の提供を開始 NEW
  8. 8
    総務省、データサイエンス・オンライン講座「誰でも使える統計オープンデータ」をリニューアル開講
  9. 9
    デスクトップアプリ開発に必要な「Rust」の文法を理解しよう
  10. 10
    ガントチャートをWebアプリに組み込める「ガントシート」でプロジェクト管理機能を作成してみよう
  1. 1
    アジャイル開発の推進において、必ずしも"すごい人"は必要ない──現場のエンジニアがDevOps推進で実現する組織改革
  2. 2
    ガントチャートをWebアプリに組み込める「ガントシート」でプロジェクト管理機能を作成してみよう
  3. 3
    1/10まで全文無料公開、人気の入門書シリーズ『いきなりプログラミング Androidアプリ開発』
  4. 4
    デスクトップアプリ開発に必要な「Rust」の文法を理解しよう
  5. 5
    "けしからん"精神が切り拓く未来──IPA登氏が語る、技術大国・日本が目指す復活戦略
  6. 6
    Google、社内AIエージェント「Google Agentspace」発表
  7. 7
    JavaScriptのWebフレームワーク、「Astro 5.1」リリース
  8. 8
    ITエンジニア本大賞2025、ベスト10選出! 技術書部門とビジネス書部門の大賞はどうなる!?
  9. 9
    実はITエンジニアの設計力が求められるkintone、その仕組みとポイントを事例に学ぶ
  10. 10
    テストは増え続ける、でもボトルネックにはできない──テスト効率化の2つのカギを朱峰 錦司氏が解説!

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

メールバックナンバー

アクセスランキング

  1. 1
    Linux Mint 22.1、通称「Xia」がリリース NEW
  2. 2
    C# 13の新機能を理解する――paramsコレクションと新しいロックセマンティクス
  3. 3
    ITエンジニア本大賞2025、ベスト10選出! 技術書部門とビジネス書部門の大賞はどうなる!?
  4. 4
    実はITエンジニアの設計力が求められるkintone、その仕組みとポイントを事例に学ぶ
  5. 5
    アイスマイリー、「生成AIリスキリングカオスマップ 2025」を公開 NEW
  1. 6
    Flutterでアプリをビルドしよう。AndroidとiOSそれぞれの流れを解説 NEW
  2. 7
    Microsoft、AIとのチャットと従量課金のエージェント機能を利用可能な「Microsoft 365 Copilot Chat」の提供を開始 NEW
  3. 8
    総務省、データサイエンス・オンライン講座「誰でも使える統計オープンデータ」をリニューアル開講
  4. 9
    デスクトップアプリ開発に必要な「Rust」の文法を理解しよう
  5. 10
    ガントチャートをWebアプリに組み込める「ガントシート」でプロジェクト管理機能を作成してみよう

アクセスランキング

  1. 1
    Linux Mint 22.1、通称「Xia」がリリース NEW
  2. 2
    C# 13の新機能を理解する――paramsコレクションと新しいロックセマンティクス
  3. 3
    ITエンジニア本大賞2025、ベスト10選出! 技術書部門とビジネス書部門の大賞はどうなる!?
  4. 4
    実はITエンジニアの設計力が求められるkintone、その仕組みとポイントを事例に学ぶ
  5. 5
    アイスマイリー、「生成AIリスキリングカオスマップ 2025」を公開 NEW
  6. 6
    Flutterでアプリをビルドしよう。AndroidとiOSそれぞれの流れを解説 NEW
  7. 7
    Microsoft、AIとのチャットと従量課金のエージェント機能を利用可能な「Microsoft 365 Copilot Chat」の提供を開始 NEW
  8. 8
    総務省、データサイエンス・オンライン講座「誰でも使える統計オープンデータ」をリニューアル開講
  9. 9
    デスクトップアプリ開発に必要な「Rust」の文法を理解しよう
  10. 10
    ガントチャートをWebアプリに組み込める「ガントシート」でプロジェクト管理機能を作成してみよう
  1. 1
    アジャイル開発の推進において、必ずしも"すごい人"は必要ない──現場のエンジニアがDevOps推進で実現する組織改革
  2. 2
    ガントチャートをWebアプリに組み込める「ガントシート」でプロジェクト管理機能を作成してみよう
  3. 3
    1/10まで全文無料公開、人気の入門書シリーズ『いきなりプログラミング Androidアプリ開発』
  4. 4
    デスクトップアプリ開発に必要な「Rust」の文法を理解しよう
  5. 5
    "けしからん"精神が切り拓く未来──IPA登氏が語る、技術大国・日本が目指す復活戦略
  6. 6
    Google、社内AIエージェント「Google Agentspace」発表
  7. 7
    JavaScriptのWebフレームワーク、「Astro 5.1」リリース
  8. 8
    ITエンジニア本大賞2025、ベスト10選出! 技術書部門とビジネス書部門の大賞はどうなる!?
  9. 9
    実はITエンジニアの設計力が求められるkintone、その仕組みとポイントを事例に学ぶ
  10. 10
    テストは増え続ける、でもボトルネックにはできない──テスト効率化の2つのカギを朱峰 錦司氏が解説!