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
AI Agent Tool のためのバックエンドアーキテクチャを考える #encraft
izumin5210
6
1.6k
Navigation 3: 적응형 UI를 위한 앱 탐색
fornewid
1
530
PostgreSQLで手軽にDuckDBを使う!DuckDB&pg_duckdb入門/osc25hi-duckdb
takahashiikki
0
240
Python札幌 LT資料
t3tra
7
1.1k
フルサイクルエンジニアリングをAI Agentで全自動化したい 〜構想と現在地〜
kamina_zzz
0
350
AtCoder Conference 2025「LLM時代のAHC」
imjk
2
650
AI 駆動開発ライフサイクル(AI-DLC):ソフトウェアエンジニアリングの再構築 / AI-DLC Introduction
kanamasa
11
5.1k
副作用をどこに置くか問題:オブジェクト指向で整理する設計判断ツリー
koxya
1
320
それ、本当に安全? ファイルアップロードで見落としがちなセキュリティリスクと対策
penpeen
6
2k
生成AIを利用するだけでなく、投資できる組織へ
pospome
2
440
[AI Engineering Summit Tokyo 2025] LLMは計画業務のゲームチェンジャーか? 最適化業務における活⽤の可能性と限界
terryu16
2
270
Findy AI+の開発、運用におけるMCP活用事例
starfish719
0
2.1k
Featured
See All Featured
Why Mistakes Are the Best Teachers: Turning Failure into a Pathway for Growth
auna
0
35
Stewardship and Sustainability of Urban and Community Forests
pwiseman
0
94
Navigating Team Friction
lara
191
16k
Automating Front-end Workflow
addyosmani
1371
200k
How to Align SEO within the Product Triangle To Get Buy-In & Support - #RIMC
aleyda
1
1.4k
Ruling the World: When Life Gets Gamed
codingconduct
0
120
Jamie Indigo - Trashchat’s Guide to Black Boxes: Technical SEO Tactics for LLMs
techseoconnect
PRO
0
38
Everyday Curiosity
cassininazir
0
120
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
12
1k
Building Better People: How to give real-time feedback that sticks.
wjessup
370
20k
Docker and Python
trallard
47
3.7k
Lightning talk: Run Django tests with GitHub Actions
sabderemane
0
97
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.