fbpx

メニュー

PHPにとってのIRB, IPython的なもの、Boris

高橋文樹 高橋文樹

この投稿は 9年半 前に公開されました。いまではもう無効になった内容を含んでいるかもしれないことをご了承ください。

タイトルそのまんまなんですが、Borisというのがあるらしいです。RubyやPythonにはインタラクティブシェルというのがあって、ターミナルから文字通り「対話的に」コーディングを行えます。

Pythonのインラタクティブシェル、IPython
Pythonのインラタクティブシェル、IPython

一応、PHPにもこういうのはあって、 php -a とやるとインタラクティブシェルが起動するのですが、IPythonやIRBにあるような戻り値の自動表示がありません。いちいちecho しなければいけないので、大変ダルいんですね。

変数を定義しても表示されない
変数を定義しても表示されない

そこでBorisというのを使うと、戻り値がいい感じにわかります。

Borisを実行したところ
Borisを実行したところ

いいですね。Macならhomebrewで入れるのが楽です。

Borisをライブラリに同梱する

で、それはそれで「オシャレやね」という程度ですが、このBorisはライブラリを読み込んだ状況で始めることができます。

たとえば、僕はいまHamePubというePub生成用のPHPライブラリ(既存WebサイトのHTMLを突っ込んでePubを作れる)を作っている最中なのですが、いかんせんライブラリなので、それ自体では特になにも起きないんですね。外部から呼び出されることではじめて動作します。

したがって、このライブラリの開発では、ライブラリ自体のコーディングとは別に、ライブラリを使用する側のコードも書く必要があります。

一応、ユニットテストは導入済みなんですが、いちいちテストから書きたくないという思いもあるので、「諸々設定済みの状況で始められねーかなー」という場合があります。そんなとき、Borisを設定して用意しておけば楽ですね。

// composer.json
"require-dev": {
    "phpunit/phpunit": "4.4.*",
    "d11wtq/boris": "1.0.8"
}

たとえば、composer.jsonに書いておくと、composer install した段階でBorisのオートローダーが生成されます。

あとはこれをキックするphpをどっかに(プロジェクトルート/binとかですかね)においておけば、コードの記述とその操作が簡単にできます。今回はプロジェクトルートにおいてしまいましょう。

# プロジェクトルートで実行
vi hamepub
chmod +x hamepub

hamepubファイルの中身はこんな感じです。

#!/usr/bin/env php
<?php
/**
 * Command line utility
 *
 * @package Hametuha\HamePub
 */
// コマンドラインじゃなければ停止
if( 'cli' !== php_sapi_name() ){
    die('This is command line tool.');
}

// Composerのオートローダーを読み込み
require_once __DIR__. '/vendor/autoload.php';

// Borisを初期化
$boris = new \Boris\Boris('hamepub> ');
$config = new \Boris\Config();
$config->apply($boris);

$options = new \Boris\CLIOptionsHandler();
$options->handle($boris);

// ローカル変数をセット
$boris->setLocal([
    'epub_id' => 10,
    'temp_dir' => __DIR__.DIRECTORY_SEPARATOR.'tests'.DIRECTORY_SEPARATOR.'tmp',
]);

// Start
$boris->start();

こうすると、プロジェクトルートで ./hamepub と実行すれば、設定済みのBorisが起動します。

ローカル変数やライブラリのクラスが読み込み済み
ローカル変数やライブラリのクラスが読み込み済み

変数も使用できます。かっこいいですね。あと、プロンプトの先頭が自分のライブラリ名になっているのもやる気がでます。

というわけで、Borisの紹介でした。ライブラリを配布する場合なんかに、これが付いていると導入が早いかもしれません。

[429] [429] Client error: `POST https://webservices.amazon.co.jp/paapi5/getitems` resulted in a `429 Too Many Requests` response: {"__type":"com.amazon.paapi5#TooManyRequestsException","Errors":[{"Code":"TooManyRequests","Message":"The request was de (truncated...)

すべての投稿を見る

高橋文樹ニュースレター

高橋文樹が最近の活動報告、サイトでパブリックにできない情報などをお伝えするメーリングリストです。 滅多に送りませんので、ぜひご登録お願いいたします。 お得なダウンロードコンテンツなども計画中です。