Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
PsySHを使ったREPLなコンソールの作り方
Search
Shinya Sasaki
March 02, 2018
Programming
1
330
PsySHを使ったREPLなコンソールの作り方
2018年2月28日(水)にGMO Yoursで開催された第123回 PHP勉強会@東京のLT発表資料です。
https://phpstudy.doorkeeper.jp/events/70860
Shinya Sasaki
March 02, 2018
Tweet
Share
Other Decks in Programming
See All in Programming
Vibe Coding - AI 驅動的軟體開發
mickyp100
0
180
Lambda のコードストレージ容量に気をつけましょう
tattwan718
0
140
Rust 製のコードエディタ “Zed” を使ってみた
nearme_tech
PRO
0
210
CSC307 Lecture 04
javiergs
PRO
0
660
OCaml 5でモダンな並列プログラミングを Enjoyしよう!
haochenx
0
140
Data-Centric Kaggle
isax1015
2
780
ぼくの開発環境2026
yuzneri
0
240
React 19でつくる「気持ちいいUI」- 楽観的UIのすすめ
himorishige
11
7.5k
コントリビューターによるDenoのすゝめ / Deno Recommendations by a Contributor
petamoriken
0
210
開発者から情シスまで - 多様なユーザー層に届けるAPI提供戦略 / Postman API Night Okinawa 2026 Winter
tasshi
0
210
要求定義・仕様記述・設計・検証の手引き - 理論から学ぶ明確で統一された成果物定義
orgachem
PRO
1
230
Claude Codeと2つの巻き戻し戦略 / Two Rewind Strategies with Claude Code
fruitriin
0
140
Featured
See All Featured
Optimising Largest Contentful Paint
csswizardry
37
3.6k
The Invisible Side of Design
smashingmag
302
51k
State of Search Keynote: SEO is Dead Long Live SEO
ryanjones
0
120
What does AI have to do with Human Rights?
axbom
PRO
0
2k
How to make the Groovebox
asonas
2
1.9k
Build your cross-platform service in a week with App Engine
jlugia
234
18k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
234
17k
We Have a Design System, Now What?
morganepeng
54
8k
Statistics for Hackers
jakevdp
799
230k
Primal Persuasion: How to Engage the Brain for Learning That Lasts
tmiket
0
260
Organizational Design Perspectives: An Ontology of Organizational Design Elements
kimpetersen
PRO
1
470
Hiding What from Whom? A Critical Review of the History of Programming languages for Music
tomoyanonymous
2
430
Transcript
& PsySHを使った REPLなコンソールの作り⽅ (株)PRECS 佐々⽊ 鎮也 © 2018 PRECS Inc.
本⽇の内容 • ⾃⼰紹介 • PsySHとは? • REPLとは? • PHP対話シェルとの違い •
どんなところで使われているか? • PsySHの使い⽅ • PsySHを使ったREPLの作り⽅ © 2018 PRECS Inc.
⾃⼰紹介 ▪名前 佐々⽊ 鎮也(@precs_shinya) ▪仕事 ・PRECS(プレックス)という企 業でPRECS/リピストという定期 購⼊カートサービスの開発責任 者をやっております。 ©
2018 PRECS Inc. このアイコンの⼈
宣伝: PHPerKaigi 2018 に協賛しました © 2018 PRECS Inc. PRECSではエンジニアを募集しております。
宣伝ここまで © 2018 PRECS Inc.
ここから本編 PsySHとは? © 2018 PRECS Inc.
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
REPLとは • read-eval-print loopのこと。読んだものを評価して表⽰すること を繰り返す、対話型の実⾏環境のこと。 • PHPで書くなら、こんな感じ。 • そもそも、PHPには対話シェルが標準実装されています。 ©
2018 PRECS Inc. read 読む eval 評価 print 表⽰ loop 繰り返し php –r ‘while(true) { echo eval(readline()) . PHP_EOL; }’ php -a
PHP対話シェルとの違い 1. ⾼機能 • 定数、変数、クラス、ファンクションの⼀覧などを簡単に表⽰ できて、grepで絞り込みができる。 • 該当ソースコードを表⽰できる。 • コマンドからドキュメントを表⽰
2. クラスメソッドの途中など、コードの中に埋め込んで、 埋め込んだ場所でシェルを発動させることができる。 • スコープ内の変数などの情報をシェルで確認 • コールスタックの表⽰など 3. ⾃分でコマンドを作って拡張ができる。 © 2018 PRECS Inc.
どんなところで使われているか? Laravel Drush(Drupal) CakePHP © 2018 PRECS Inc. php artisan
tinker drush repl bin/cake console 様々なフレームワークの対話シェルとして利⽤されています。
PsySHの使い⽅ インストール&Run © 2018 PRECS Inc. composer g require psy/psysh:@stable
psysh wget https://git.io/psysh chmod +x psysh ./psysh or
PsySHを使ったREPLの作り⽅ © 2018 PRECS Inc.
作り⽅の簡単な説明 • ⼆つのやり⽅があります 1. Psy¥Command¥Command を継承した⾃作コマンドを作る 2. Psy¥Shell を継承して拡張する 今回は、1の
『Psy¥Command¥Commandを継承した⾃作コマンドを作る』 やり⽅を説明します。 (2の『Psy¥Shellを拡張する⽅法は別の機会に。) © 2018 PRECS Inc.
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.
とりあえず起動できるまで © 2018 PRECS Inc. これで起動できます。 ここからカスタマイズ。
コマンドを追加する © 2018 PRECS Inc. ここに追加したい コマンドを並べる Psy¥Shell の設定はPsy¥Configuration で⾏います。
commands に追加したいコマンドを並べることで、追加できます。
⼀番簡単なCommandクラスの例 © 2018 PRECS Inc. Psy¥Command¥ExitCommandクラス メソッドは、configureと execute のみ コマンドの設定
コマンドのヘルプ 実⾏処理
configureメソッドで使⽤するメソッド (抜粋) ϝιου આ໌ setName コマンドの名前 setDescription コマンドの説明 setAlias コマンドのエイリアス
setDefinition オプションの設定など setHelp --help オプション指定時に表⽰されるヘルプ © 2018 PRECS Inc. Symfony Console Commands に従い、実装する
executeメソッドで使⽤するメソッド (抜粋) ϝιου આ໌ getOption オプションの取得 getArgument 必須引数の取得 © 2018
PRECS Inc. Symfony¥Component¥Console¥Input¥InputInterface Symfony¥Component¥Console¥Output¥OutputInterface ϝιου આ໌ write メッセージの出⼒ writeln メッセージの出⼒(改⾏付き)
LTの発表はここまで ご静聴ありがとうございました。 © 2018 PRECS Inc.