あざらし備忘録。

音ゲー好きなウェッブエンジニアがいろいろ思った事やった事を書いていくブログです

Composerでインストール出来るOSSを公開するまでにやったこと[Composer][PHP][Packagist][OSS初心者]

先日自身初のOSS的なものを出しました(番宣)

shiro-goma.hatenablog.com

github.com

Composerでインストール可能なライブラリとして出したので、出すまでの過程を備忘録も兼ねて書こうかなと思います。

作るきっかけ

  1. Rubyのgemであるaasm/aasm · GitHubに触れる
  2. イイナーと思って業務で用いているPHPで使えるステートマシンライブラリを探す
  3. あんまりお手軽さや、対象クラスとステートマシンとの一心同体感がない
  4. よし、AASMっぽいのつくろう

着想

  1. どうやったら一心同体感出せるかなー
  2. AASMみたいに設定ファイルとかなくて対象クラスに記述がしたら動く、みたいなのがいいなー
  3. Doctrineが簡単に使えるアノテーションを提供してたなー
  4. 一心同体感出したいからさも元から対象クラスに状態管理関連のメソッドが生えてましたよみたいな雰囲気にしたいなー
  5. traitでは
  6. @brtriverさんの出していたbrtriver/simple-crud-bundle · GitHubっぽく出来るのでは
  7. よし、やってみよう

作成後

ドキュメント書き

英語。brokenなのしか書けないけど頑張ってかかねば。

翻訳ツール

これを入れて頑張ってました。 だいぶ捗った。

chrome.google.com

英文とかをドラッグして選択すると即時日本語へ翻訳してくれてとても便利でした!

ドキュメントの内容

  • ライブラリ名(一行目)
  • 概要(Description)
  • デモ(Demo)
  • 他ライブラリとの対比(VS.)
  • 動作環境(Requirement)
  • インストール方法(Installation (via composer))
  • 使い方や機能の説明(Usage)
  • 今後実装していきたいこと(In future)
  • ご質問はこちら(Questions)
  • コントリビュート方法(Contribution)
  • ライセンス表記(Licence)
  • 作った人(Author)
  • 謝辞(Acknowledgement)

こんな感じのレールに乗ってつらつらと書いていきました。

バージョンに対するタグ付け

バージョンを指定してインストール出来るように、タグ付けは忘れずに。

今回のライブラリでは1.0.0スタートにしましたが、そこまで深い意味あいを持って付けたわけではなく、0.0.1スタート等でもいいとは思います。

ただ、「機能は少ないけど普通に使えるよ」という意味で、今回は1.0.0からにしました。

TravisCIによるテスト実行

Rubyが対象でしたが以前チュートリアルを書いたのでご参考まで。

shiro-goma.hatenablog.com

少ないですがバッヂも付けておきました。OSSっぽさ出るし←

travis.ymlで意識したこと

複数バージョンでテストが通ることの確認をするために、

  • php5.4
  • php5.5
  • php5.6

でのテストを実施。 普段はそんなに意識しないけれど大事になりますね。 実際、php5.4での動作を怠っていたのをテストで気づけてPHP5.4対応のコミットを直前で足したりしました。

ライセンス周り

あまり馴染みがないのであわあわしましたが、

d.hatena.ne.jp

のようなまとめを調べていったり、権利を主張するような気はないのと、使用しているライブラリや、文化圏の傾向などを追って行って、色々とライセンスを確認していった所、メジャーどころはMITライセンスが大多数を占めていたことから、今回はMITライセンスを採用しました。

今後も特段問題なければMITライセンスで出していくかなぁと思っています。

Composerでのインストール

今回はPHPのライブラリなので、Composerでインストールできるようにもしていきました。

composer.jsonの準備

あとで登録するPackagistでいい感じに表示するためにも、色々とcomposer.jsonに記載しました。

{
    "name": "gomachan46/state-machine",
    "description": "simple state machine with annotations for PHP, inspired by AASM known as a Ruby state machine.",
    "keywords": [
        "statemachine",
        "workflow",
        "state",
        "status",
        "annotation",
        "doctrine2",
        "event",
        "transition",
        "symfony",
        "bundle",
        "SM",
        "trait",
        "finite",
        "aasm"
    ],
    "require": {
        "php": ">=5.4.0",
        "doctrine/annotations": "~1.0",
        "doctrine/inflector": "~1.0"
    },
    "require-dev": {
        "phpunit/phpunit": "4.*"
    },
    "license": "MIT",
    "authors": [
        {
            "name": "Go Nakanishi",
            "email": "[email protected]"
        }
    ],
    "autoload": {
        "psr-4": {
            "": "src/",
            "StateMachine\\Tests\\": "tests/"
        }
    }
}

っていう感じに書いたりすると、以下のように表示されたり、検索時に引っかかってくれたりするようになるので書いておきました。 ただ今確認したらキーワード多すぎて切れてるな...w反省w

f:id:shiro_goma:20150417223644p:plain

Packagistへのリポジトリ登録

Composerでのインストールを簡単にするために、Packagistへ、作成したライブラリのリポジトリ登録を行いました。

gomachan46/state-machine - Packagist

Composerでのインストール時にリポジトリをわざわざ記載しなくても良いし、上記のようなページもできるし、タグ付けのようなこともできるので検索もされやすくなるし、いいこと付くめです:)

ぜひ登録しましょう!

Packagistにログイン

GitHubログインがあるので簡単にログインできます:)

リポジトリのURLを登録する

でかでかとSubmit Package というようなボタンがあるので、そこを押すと、リポジトリのURLを入力するフォームが表示されます。

GitHubのURLでもいいですし、GitのSSH clone URLとかでも大丈夫です。

登録はたったこれだけ!簡単です。

OSSで出してみて

一人でやってただけだけど、めっちゃ楽しかったので本当良かった。

ただ、一人でやってみたとはいえ、ギョームに組み込む、つまり「自分が使う側にまわる」というモチベーションはすごく大きくて、チームのメンバーからのフィードバックもすごくやる気につながったし、楽しさにつながったし、モチベーションの維持は大事感はありました。

「OSSで出せるようにつくろう」としたことは色々と手間もあったけれど、可能性を広げる、世界を広げることができる非常に大きなチャンスなので、苦労してでも外に出せるような形にして出しきる、っていうのは非常に収穫が多い動きだなぁと体感できたのでこれからも積極的にやっていこうと思います:)

まだまだ拙いけど続けていったら磨かれそうな、少なくとも磨かれるまでの時間は短くなるだろうなという感覚を身をもって味わえたのは良かった!

とりあえず小さな1歩を踏み出せたので、世に出すための障壁が少し低くなりました。 何よりこれが一番の収穫です!

今回の記事を見て少しでもカジュアルに物を世に出せるようになった人が増えれば幸いです:)