composer で依存関係から特定のライブラリを除外する

Maven でのこれ

<dependencies>
    <dependency>
      <groupId>sample.ProjectA</groupId>
      <artifactId>Project-A</artifactId>
      <version>1.0</version>
      <scope>compile</scope>
      <exclusions>
        <exclusion>  <!-- declare the exclusion here -->
          <groupId>sample.ProjectB</groupId>
          <artifactId>Project-B</artifactId>
        </exclusion>
      </exclusions> 
    </dependency>
  </dependencies>

composer にはこの依存関係から特定のライブラリを除外する機能はない。まだ実装していないのではなく方針として入れるつもりはなさそう。composer 開発者はこの機能を不要と思っているっぽい。

Exclude packages · Issue #1549 · composer/composer

理想をいうと微妙なところだけど、実際こういう問題はよく起きるからカバーするべきじゃないかな。composer 開発者はそういう経験ないのだろうか。PHPフルスタックでそれのみで完結するようなフレームワークが多く、依存関係のツリーが深くならないから dependency hell が起きづらいと勝手に理解しておく。

一応、問題自体は除外したいモジュールを provide に指定すれば解決する。すでに提供されているのだから composer で持ってくる必要はないよね、ということ。

{
    "require": {
        "foo": "1.0.0"
    },
    "provide": {
        "bar": "*"
    }
}

ただし、これだと問題は解決するものの意味としては全く違うから気持ち悪い。設定が json だからコメントも書けない。

まとめ

  • composer で exclude したいときは provide を使う
  • json で設定ファイルはきびしい

なんでこがいに並外れた Typesafe ができたんか言うたら...

「よくシリコンバレーのスタートアップが作ってるようなうさんくさいビデオ」を Typesafe も作っていました。

Typesafe activator ダウンロードするか、めんどくさい...とサイトに行ったらいきなりビデオ見せられました。なかなかのユーザー体験をしました。

何か Typesafe Activator がすごい革新的っぽいことが伝わってきます。

他にもいろいろあります。

去年 Scala Conference に来てくれた Jamie さん

すごそう。

知らない人

すごそう。

Heiko さん

すごそう。

小田好先生

すごい(確信)

まとめ

  • Typesafe すごそう
  • 広島弁バージョンの登場が待たれる