LoginSignup
24

More than 5 years have passed since last update.

Composerを使ってないphpのアプリにComposerを導入する

Last updated at Posted at 2016-02-24

意外と知らないことというか、おっかなびっくりでやっていたり、他のところに依存しないで複雑なインストールが必要なんじゃないかと怯んでいる人とかがいらっしゃるようなので、適当に書きます。

ダウンロードしたやつをphpで実行すればいいだけ。

Composerをシステム全体にインストールしないでcomposer.pharをダウンロードして、プロジェクト直下で最初に使いたいライブラリをphp composer.phar require なんかのライブラリ名ってするとcomposer.jsoncomposer.lockvendorディレクトリが出来上がります。

その後のライブラリの追加などは、出来上がったものをベースに新しく使いたいものを追加変更していけば良いだけです。
php composer.pharをコマンド実行してライブラリを追加していくのでも良いと思います。

monologのインストールの例

phpのフレームワークLaravelでも利用されている、monologというログライブラリを、利用したい場合を例にします。

composer.pharをダウンロード

公式サイトからダウンロードできます。ここにあります。。現在の最新版は、1.0.0-alpha11 (2015-11-14)です。

ダウンロードします。

wget https://getcomposer.org/download/1.0.0-alpha11/composer.phar

ダウンロードされました。

composer.phar実行

composer.pharはphpで実行できるので、

php composer.phar 〜〜〜〜ってオプションつけながら実行すればライブラリがその実行したところの直下に出来上がります。

monologでは、

php composer.phar require monolog/monolog

とやれば、monolog本体とmonologが依存しているライブラリと、それらのライブラリを一括でloadするためのautoload.phpが出来上がります。
呼び出し方やパッケージ名などは、最近はみんな意識が高いので、READMEにかいてありますね。

monologがインストール出来たのでみてみる

ファイルは、カレントディレクトリにvendorというディレクトリが出来上がってその配下に置かれます。

├── htdocs //例です
│   ├── admin
│   ├── images
│   ├── いろんなパス
│   ├── …
│   └── いろんなパス
├── composer.json // これも出来上がる
├── composer.lock // これも出来上がる
├── lib  //例です
├── tmp  //例です
└── vendor // これが出来上がる
    ├── composer
    ├── monolog
    └── psr

これでもうmonologが利用できます。

composer.jsonには、requireしたインストールしたものがバージョンされて書きだされています。

composer.json
{
    "require": {
        "monolog/monolog": "^1.17"
    }
}

composer.lockには、実際にmonolog自体がインストールされた時に依存しているライブラリの一覧やオートロードのための設定が書き出されていますが、こちらは開発している人は直接変更しません。書いてあることがわからなくても恐れるにたりません。必要になるまでは無視しましょう。笑

composer.lock
{
    "_readme": [
        "This file locks the dependencies of your project to a known state",
        "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file",
        "This file is @generated automatically"
    ],
    "hash": "63946ac2ea8bb27a32cbe4d16644c833",
    "content-hash": "86fa6d774713f6609169690844125b05",
    "packages": [
        {
            "name": "monolog/monolog",
            "version": "1.17.2",
            "source": {
                "type": "git",
                "url": "https://github.com/Seldaek/monolog.git",
                "reference": "bee7f0dc9c3e0b69a6039697533dca1e845c8c24"
            },
            "dist": {
                .... snip 

monologがインストール出来たので使ってみる

この状態で、monologをrequreして使うには、あとはマニュアル通りです。

例えば、アプリケーション用のログクラスを作りましょう。最初の行にautoload.phpを呼ぶようにして、こんなふうに作り始められます。
いろんなライブラリを使いたくなった時にはrequire_onceを1268万行書かないと動き始めない素のphpがこんなに簡単になりますね。psrとautoload.php最高。

lib/classes/AppLogger.php
<?php
require_once dirname(__FILE__) . '/../../vendor/autoload.php'; // こう書いとく。

use Monolog\Logger;
use Monolog\Handler\StreamHandler;
use Monolog\Processor\WebProcessor;
use Monolog\Formatter\LineFormatter;

/**
 * Class AppLogger
 *
 */
class AppLogger
{

    /**
     * @var Monolog\Logger
     */
    protected $log;

    public function __construct() {
        $this->log = new Logger('myLogger');
    }
}

実際のログのクラス実装の例は、こちらのブログの記事が新しくて参考になるのでリンクを貼っておきます。(Composerの導入のところはこの記事の内容で置き換えてくださいね。もう一回インストールしないでねw)

require_onceを書く場所は一回でいいのでこのクラスファイルに書かないで、最初の呼び出されるphpファイルに書いとくだけでも良いです。

これを本番環境に持って行くには

これを本番環境に持って行くには、本番環境にcomposer.pharcomposer.jsoncomposer.lockを持って行って、

php composer.phar install

ってすればいいです。

インストールも嫌だったら、phpのバージョンさえ合えば動くので、

vendor ディレクトリイカも全部本番環境に持って行ったらそのまま動きます。ソの際は、autoload.phpをrequireしているところを絶対パスで書かないように気をつけてください。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
24