Composerのパッケージを作成して公開するまで

f:id:hacktk:20181203181847p:plain

こんにちは。 @hacktk です。この記事はイノベーター・ジャパンAdvent Calendar 2018の3日目の記事です。

今回Composerのパッケージを作成して公開したので、その手順を書きます。(Laravel特有のtipsも少し書いています。)

手順を説明する前に、つくったもののリンクを貼っておきます。この記事では最低限のものしかつくりませんが、他にもいろいろと足しています。

github.com

ではさっそく作りましょう。

リポジトリをつくる

GitHubにPublicなリポジトリをつくりましょう。(最初の作成自体の手順は割愛します。)

composer.jsonを書く

リポジトリのトップ階層に置くcomposer.jsonをつくります。

composer init で雛形を作れます。

{
    "name": "your-account/package-name",
    "authors": [
        {
            "name": "your-name",
            "email": "your-email@example.com"
        }
    ],
    "require": {}
}

composer.jsonはいろいろな情報を書くことができますが、最低限これだけあれば公開できます。

READMEを書く

READMEは利用者のためにも必ず書きましょう。

何を書けば良いかわからない場合は、以下のものだけでも。

  • パッケージの名前
  • インストール方法
  • 簡単な使い方
  • ライセンス(GitHubの機能でLICENSEファイルを作れます)

パッケージのコードを書く

実際のパッケージを作りましょう。

気を付けるのは以下の点です。

  • 必須ではありませんが、 src ディレクトリにコードを置くことが多いようです
  • テストはなるべく書きましょう
  • 書いたらautoloadセクションをcomposer.jsonに追加します
    • これにより、 use InnovatorJapan\LaravelCsv\[Class名] という名前空間が使えるようになります
"autoload": {
    "psr-4": {
        "InnovatorJapan\\LaravelCsv\\": "src/"
    }
}

(おまけ)Laravelのパッケージでのtips

1️⃣ auto-discoveryを使う

Laravel5.5以降には、ServiceProviderを自作した場合に自動でそれを登録してくれるauto-discoveryという機能があります。

composer.jsonのextraセクションに以下のように書きます。

"extra": {
    "laravel": {
        "providers": [
            "InnovatorJapan\\LaravelCsv\\CsvServiceProvider"
        ]
    }
}

2️⃣ orchestra/testbenchを使う

Laravelのパッケージを開発していて困るのが、テストを書く際にLaravel特有の機能(サービスコンテナやMigrationなど)が使えないということです。

orchestra/testbench パッケージをインストールすると、それらが使えるようになります。

"require-dev": {
    "orchestra/testbench": "^3.6"
}

Packagistに登録する

ここまでできたらあとは公開するだけなので、Packagistに登録しましょう。

登録する

  1. Sign inする
    • Packagist にアクセスします
    • 右上の Sign in から新規に登録します
      • Use GitHubが楽でおすすめです
  2. リポジトリを登録する
    • Submit package にアクセスします
    • Repository URL にリポジトリのURLを入力してCheckボタン、あとは画面のとおりに
  3. これで完了です

(おまけ)tips

1️⃣ 不要なファイルがインストールされないようにする

このままだと、使う側に不要なファイルもインストールされてしまいます。

.gitattributes に不要なファイルを書くことで、これらをPackagistへの登録から除外することができます。

/.gitattributes  export-ignore
/.gitignore      export-ignore
/phpunit.xml     export-ignore
/tests           export-ignore
/README.md       export-ignore

2️⃣ インストールされるバージョンを指定できるようにする

このままだと、使う側は最新バージョン(dev-master)しかインストールできません。

gitの機能でtagを打つことで、使う側はtag指定でインストールできるようになります。

$ git tag 1.0.0
$ git push origin 1.0.0

おわりに

今回の記事は、自分が初めてパッケージの公開をしたときのメモを手直ししたものです。

「あなたもOSSを書いて貢献!💪」というと少しハードルが高いと感じるかもしれませんが、社内のリポジトリで良く使われる処理をライブラリとして切り出す、と考えればやりやすいかなと思います。

まずは周囲の人の役に立つライブラリから始めてみませんか。

さて明日のアドベントカレンダー担当は、もうすっかり東京の人になってしまったオシオさんです。お楽しみに!

それでは。