Slide 1

Slide 1 text

CLIを使って日々の業務を楽に コマンドラインからちょっとした作業をPHPで 有限会社アリウープ 柏岡 秀男 1

Slide 2

Slide 2 text

自己紹介 柏岡 秀男 (かしおか ひでお) @kashioka 有限会社アリウープ 代表取締役 PHPユーザ会発起人(の一人) PHPカンファレンス2000から参加 得意分野 Webアプリケーション開発 スクラム導入支援 PM,PMO業務 2

Slide 3

Slide 3 text

明日の開発カンファレンス(4/14〜) 明日の開発カンファレンス(4/14〜) 一歩先、二歩先、三歩先の開発をテーマにしたカンファレンス 一歩先、二歩先、三歩先の開発をテーマにしたカンファレンス 2025年4月14日〜18日 毎日12時から開催 2025年4月14日〜18日 毎日12時から開催 YouTubeプレミア公開による配信 YouTubeプレミア公開による配信 オンラインでの参加が可能 オンラインでの参加が可能 3

Slide 4

Slide 4 text

PHP CLIで使ってますか? 4

Slide 5

Slide 5 text

PHP CLIを使うシーン(php xxx ) PHPをCLIで使うのは意外と身近です: ローカルインストールしたcomposer php composer.phar install Laravel artisan php artisan migrate 5

Slide 6

Slide 6 text

WordPressのwpコマンド wp post create --post_title="新規投稿" --post_content="内容" wp plugin install woocommerce --activate Drupalのdrush drush pm:install views drush cr PHPUnitによるテスト実行 phpunit tests/ 6

Slide 7

Slide 7 text

wp、drush、phpunitもPHP CLI これらのツールはすべてPHPで書かれたCLIアプリケーションです: 実行方法 シェバン( #!/usr/bin/env php )が記述されているため、直接実行可能 php コマンドを明示的に指定する必要がない 配布形式 PHAR(PHP Archive)ファイルとして配布 実行時にPHPインタープリターで解釈される これにより、PHPの機能を活用しながら、シェルスクリプトのよう に簡単に実行できるツールとなっています。 7

Slide 8

Slide 8 text

古来からのやり方は洗練されているが難しい シェルスクリプトとPHP CLIを比較してみます 8

Slide 9

Slide 9 text

ケース 1: CSVファイルに対して処理を行う [Bash版]のサンプル data.csvの合算 id,amount 1,300 2,450 3,250 tail -n +2 data.csv | awk -F',' '{sum+=$2} END {print sum}' ポイント: ヘッダー行(1行目)を除去するために tail -n +2 を使用 その後、awk でカンマ区切り (-F',') の2列目を加算 9

Slide 10

Slide 10 text

[PHP版]

Slide 11

Slide 11 text

ケース 2:HTMLファイルからタグを除去してテキスト抽出 サンプルHTML (sample.html)

タイトル

ここに重要なメッセージがあります。

11

Slide 12

Slide 12 text

[Bash版] # sed を使用して、全ての <...> タグを削除する sed 's/<[^>]*>//g' sample.html ポイント: 単純な正規表現のため、入れ子構造や複雑な属性には対応しにくい 12

Slide 13

Slide 13 text

[PHP版] PHPの利点: 内蔵関数 strip_tags() で安定したタグ除去が可能 13

Slide 14

Slide 14 text

ケース 3:次の金曜日の日付取得 Linux (GNU date) # Linux (GNU date) なら "next Friday" で取得可能 date -d 'next Friday' +%Y-%m-%d macOS (BSD date) # macOS では書式が異なるため、例として 1週間後の金曜日を取得 date -v+1w -vFri +%Y-%m-%d ポイント: 同じ「次の金曜日」を取得しても、OSごとに書き方が異なり、保守が困難 14

Slide 15

Slide 15 text

[PHP版] format('Y-m-d') . "\n"; ?> PHPの利点: OS依存がなく、自然言語で記述できるためシンプル 15

Slide 16

Slide 16 text

ケース 4:XMLからデータを読み込み、APIへPOSTする ※ この処理は、XMLパースとAPI連携の組み合わせで、Bashでは実現が困難な例です。 サンプルXML (data.xml) 商品A1000 商品B2000 16

Slide 17

Slide 17 text

[シェルスクリプト版] 1. 純粋なシェルスクリプトでの実装 #!/bin/bash # XMLファイルを1行ずつ読み込み、タグを除去 while IFS= read -r line; do # タグを除去(単純な正規表現) text=$(echo "$line" | sed 's/<[^>]*>//g') # nameタグとpriceタグの内容を抽出 if [[ $text =~ \(.*)\ ]]; then name="${BASH_REMATCH[1]}" fi if [[ $text =~ \(.*)\ ]]; then price="${BASH_REMATCH[1]}" fi # 両方の値が取得できたらJSONに追加 if [ ! -z "$name" ] && [ ! -z "$price" ]; then items+="{\"name\":\"$name\",\"price\":$price}," name="" price="" fi done < data.xml # JSON配列を完成 json="[${items%,}]" # APIにPOST curl -X POST \ -H "Content-Type: application/json" \ -d "$json" \ 17

Slide 18

Slide 18 text

[PHP版] item as $item) { $items[] = [ 'name' => (string)$item->name, 'price' => (int)$item->price, ]; } // APIエンドポイントにJSON形式でデータをPOSTする $apiEndpoint = 'https://api.example.com/addItem'; $data = json_encode($items); $options = [ 'http' => [ 'method' => 'POST', 'header' => "Content-Type: application/json\r\n" . "Content-Length: " . strlen($data) . "\r\n", 'content' => $data, ], ]; $response = file_get_contents($apiEndpoint, false, stream_context_create($options)); echo "API Response: $response\n"; 18

Slide 19

Slide 19 text

カウントダウンタイマー(timer.php) PHP CLIを使ったシンプルなカウントダウンスクリプトです。 指定した秒数(最大5分)をカウントダウン コマンドライン上にプログレスバーと残り時間を表示 プレゼンやLTの時間管理に最適 19

Slide 20

Slide 20 text

timer.phpの特徴 CLI上でリアルタイムに進行を表示 任意の秒数を引数として指定可能(最大300秒) 300秒(5分)以上の指定ではエラーを表示 ANSIエスケープコードを利用した画面クリア機能付き 20

Slide 21

Slide 21 text

実行方法 初回のみ実行権限を付与 chmod +x timer.php 21

Slide 22

Slide 22 text

PHP CLI そこそこ便利です。 直感的で読みやすいコード 配列操作、日付処理、文字列処理を簡潔に記述できる。 環境依存の低さ OSにあまり依存せず、同じコードが動作する安心感。 複雑な処理の簡略化 XML、JSONなど多様なデータ形式の処理も標準機能でカバー。 フレームワークのコマンド実行の仕組み Symfony Consoleなど使えばメインシステムに組み込める 業務の自動化やツール開発では、 PHP CLIを積極的に活用することで 効率と保守性を大きく向上できます! 22

Slide 23

Slide 23 text

サンプルソース https://github.com/kashioka/phpcon_odawara_2025 23

Slide 24

Slide 24 text

ご清聴ありがとうございました。 開発はアリウープによろしくね 有限会社アリウープ 柏岡 秀男 x,facebook @kashioka 24

Slide 25

Slide 25 text

25