Upgrade to Pro — share decks privately, control downloads, hide ads and more …

PsySHを使ったREPLなコンソールの作り方

 PsySHを使ったREPLなコンソールの作り方

2018年2月28日(水)にGMO Yoursで開催された第123回 PHP勉強会@東京のLT発表資料です。
https://phpstudy.doorkeeper.jp/events/70860

Avatar for Shinya Sasaki

Shinya Sasaki

March 02, 2018
Tweet

Other Decks in Programming

Transcript

  1. 本⽇の内容 • ⾃⼰紹介 • PsySHとは? • REPLとは? • PHP対話シェルとの違い •

    どんなところで使われているか? • PsySHの使い⽅ • PsySHを使ったREPLの作り⽅ © 2018 PRECS Inc.
  2. PsySHとは? A runtime developer console, interactive debugger and REPL for

    PHP. (開発者向けのコンソール、対話型デバッガ、そしてPHP向けのREPL ) 公式サイト https://psysh.org/より • 公式サイト • https://psysh.org/ • GitHub • https://github.com/bobthecow/psysh © 2018 PRECS Inc. 過去に、@tadsan がブログに記事を書いていたりします。 http://cho-phper.hateblo.jp/entry/2015/11/10/031000
  3. PHP対話シェルとの違い 1. ⾼機能 • 定数、変数、クラス、ファンクションの⼀覧などを簡単に表⽰ できて、grepで絞り込みができる。 • 該当ソースコードを表⽰できる。 • コマンドからドキュメントを表⽰

    2. クラスメソッドの途中など、コードの中に埋め込んで、 埋め込んだ場所でシェルを発動させることができる。 • スコープ内の変数などの情報をシェルで確認 • コールスタックの表⽰など 3. ⾃分でコマンドを作って拡張ができる。 © 2018 PRECS Inc.
  4. どんなところで使われているか? Laravel Drush(Drupal) CakePHP © 2018 PRECS Inc. php artisan

    tinker drush repl bin/cake console 様々なフレームワークの対話シェルとして利⽤されています。
  5. 作り⽅の簡単な説明 • ⼆つのやり⽅があります 1. Psy¥Command¥Command を継承した⾃作コマンドを作る 2. Psy¥Shell を継承して拡張する 今回は、1の

    『Psy¥Command¥Commandを継承した⾃作コマンドを作る』 やり⽅を説明します。 (2の『Psy¥Shellを拡張する⽅法は別の機会に。) © 2018 PRECS Inc.
  6. PsySHがやっていること PsySHを簡単に説明すると、次のことを⾏なっています。 1. Psy¥Command¥Command を継承したコマンド (Symfony¥Component¥Console¥Command¥Command を継承) 2. phpコード をREPLする。

    Psy¥Command¥Command のコード⾃体はヘルプ⽤の表⽰テキストの調整を⾏なっているぐら いで⼤きな拡張はないです。 Symfony Console Command と同じ作り⽅ という認識で⼤体あっている。 (最低限、configureとexecuteを実装すれば、とりあえず動く。) Symfony Console Commandドキュメントが参考になります。 https://symfony.com/doc/current/console.html © 2018 PRECS Inc.
  7. configureメソッドで使⽤するメソッド (抜粋) ϝιου આ໌ setName コマンドの名前 setDescription コマンドの説明 setAlias コマンドのエイリアス

    setDefinition オプションの設定など setHelp --help オプション指定時に表⽰されるヘルプ © 2018 PRECS Inc. Symfony Console Commands に従い、実装する
  8. executeメソッドで使⽤するメソッド (抜粋) ϝιου આ໌ getOption オプションの取得 getArgument 必須引数の取得 © 2018

    PRECS Inc. Symfony¥Component¥Console¥Input¥InputInterface Symfony¥Component¥Console¥Output¥OutputInterface ϝιου આ໌ write メッセージの出⼒ writeln メッセージの出⼒(改⾏付き)