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
PHP CLIを使って日々の業務を楽に
Search
Hideo Kashioka
April 12, 2025
2
47
PHP CLIを使って日々の業務を楽に
PHPカンファレンス小田原のスポンサーLTの資料です。
Hideo Kashioka
April 12, 2025
Tweet
Share
More Decks by Hideo Kashioka
See All by Hideo Kashioka
PHP初心者セッション〜ChatGPTでゼロから動くプログラムを生み出そう!〜
kashioka
0
100
PHPCON_TOKYO_2019_Bigginer.pdf
kashioka
0
970
ここからはじめるDevOps
kashioka
0
97
DevOpsへの準備 便利なサービスで開発効率アップ -開発のためのSaaS利用の実際-
kashioka
0
270
PHP初心者セッション2017
kashioka
1
4k
どこからはじめるDevOps
kashioka
0
140
PHPカンファレンス2016 初心者セッション
kashioka
3
8.4k
Featured
See All Featured
Dealing with People You Can't Stand - Big Design 2015
cassininazir
367
26k
Measuring & Analyzing Core Web Vitals
bluesmoon
7
460
Designing Dashboards & Data Visualisations in Web Apps
destraynor
231
53k
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
34
2.3k
Speed Design
sergeychernyshev
30
970
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
45
7.3k
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
160
15k
How STYLIGHT went responsive
nonsquared
100
5.6k
Visualization
eitanlees
146
16k
Unsuck your backbone
ammeep
671
58k
Practical Orchestrator
shlominoach
188
11k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
16k
Transcript
CLIを使って日々の業務を楽に コマンドラインからちょっとした作業をPHPで 有限会社アリウープ 柏岡 秀男 1
自己紹介 柏岡 秀男 (かしおか ひでお) @kashioka 有限会社アリウープ 代表取締役 PHPユーザ会発起人(の一人) PHPカンファレンス2000から参加
得意分野 Webアプリケーション開発 スクラム導入支援 PM,PMO業務 2
明日の開発カンファレンス(4/14〜) 明日の開発カンファレンス(4/14〜) 一歩先、二歩先、三歩先の開発をテーマにしたカンファレンス 一歩先、二歩先、三歩先の開発をテーマにしたカンファレンス 2025年4月14日〜18日 毎日12時から開催 2025年4月14日〜18日 毎日12時から開催 YouTubeプレミア公開による配信 YouTubeプレミア公開による配信
オンラインでの参加が可能 オンラインでの参加が可能 3
PHP CLIで使ってますか? 4
PHP CLIを使うシーン(php xxx ) PHPをCLIで使うのは意外と身近です: ローカルインストールしたcomposer php composer.phar install Laravel
artisan php artisan migrate 5
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
wp、drush、phpunitもPHP CLI これらのツールはすべてPHPで書かれたCLIアプリケーションです: 実行方法 シェバン( #!/usr/bin/env php )が記述されているため、直接実行可能 php コマンドを明示的に指定する必要がない
配布形式 PHAR(PHP Archive)ファイルとして配布 実行時にPHPインタープリターで解釈される これにより、PHPの機能を活用しながら、シェルスクリプトのよう に簡単に実行できるツールとなっています。 7
古来からのやり方は洗練されているが難しい シェルスクリプトとPHP CLIを比較してみます 8
ケース 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
[PHP版] <?php $data = array_map('str_getcsv', file('data.csv')); // 先頭行(ヘッダー)を削除 array_shift($data); //
2列目(index=1)の値を抽出し、合計を算出 $sum = array_sum(array_column($data, 1)); echo "合計: $sum\n"; PHPの利点: ヘッダーの除去が明示的(array_shift) array_column と array_sum で直感的に合計計算が可能 10
ケース 2:HTMLファイルからタグを除去してテキスト抽出 サンプルHTML (sample.html) <html> <body> <h1>タイトル</h1> <p>ここに<strong>重要</strong>なメッセージがあります。</p> </body> </html>
11
[Bash版] # sed を使用して、全ての <...> タグを削除する sed 's/<[^>]*>//g' sample.html ポイント:
単純な正規表現のため、入れ子構造や複雑な属性には対応しにくい 12
[PHP版] <?php // HTMLファイルを全体読み込みし、strip_tags() で全てのHTMLタグを除去 $content = file_get_contents('sample.html'); $text =
strip_tags($content); echo $text; ?> PHPの利点: 内蔵関数 strip_tags() で安定したタグ除去が可能 13
ケース 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
[PHP版] <?php // DateTime クラスと自然言語指定により、次の金曜日を簡単に取得 $nextFriday = new DateTime('next Friday');
echo "次の金曜日: " . $nextFriday->format('Y-m-d') . "\n"; ?> PHPの利点: OS依存がなく、自然言語で記述できるためシンプル 15
ケース 4:XMLからデータを読み込み、APIへPOSTする ※ この処理は、XMLパースとAPI連携の組み合わせで、Bashでは実現が困難な例です。 サンプルXML (data.xml) <?xml version="1.0" encoding="UTF-8"?> <items>
<item> <name>商品A</name><price>1000</price> </item> <item> <name>商品B</name><price>2000</price> </item> </items> 16
[シェルスクリプト版] 1. 純粋なシェルスクリプトでの実装 #!/bin/bash # XMLファイルを1行ずつ読み込み、タグを除去 while IFS= read -r
line; do # タグを除去(単純な正規表現) text=$(echo "$line" | sed 's/<[^>]*>//g') # nameタグとpriceタグの内容を抽出 if [[ $text =~ \<name\>(.*)\</name\> ]]; then name="${BASH_REMATCH[1]}" fi if [[ $text =~ \<price\>(.*)\</price\> ]]; 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
[PHP版] <?php // XMLファイルを読み込み、SimpleXMLでパースする $xml = simplexml_load_file('data.xml'); $items = [];
// 各アイテムを連想配列へ変換 foreach ($xml->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
カウントダウンタイマー(timer.php) PHP CLIを使ったシンプルなカウントダウンスクリプトです。 指定した秒数(最大5分)をカウントダウン コマンドライン上にプログレスバーと残り時間を表示 プレゼンやLTの時間管理に最適 19
timer.phpの特徴 CLI上でリアルタイムに進行を表示 任意の秒数を引数として指定可能(最大300秒) 300秒(5分)以上の指定ではエラーを表示 ANSIエスケープコードを利用した画面クリア機能付き 20
実行方法 初回のみ実行権限を付与 chmod +x timer.php 21
PHP CLI そこそこ便利です。 直感的で読みやすいコード 配列操作、日付処理、文字列処理を簡潔に記述できる。 環境依存の低さ OSにあまり依存せず、同じコードが動作する安心感。 複雑な処理の簡略化 XML、JSONなど多様なデータ形式の処理も標準機能でカバー。 フレームワークのコマンド実行の仕組み Symfony
Consoleなど使えばメインシステムに組み込める 業務の自動化やツール開発では、 PHP CLIを積極的に活用することで 効率と保守性を大きく向上できます! 22
サンプルソース https://github.com/kashioka/phpcon_odawara_2025 23
ご清聴ありがとうございました。 開発はアリウープによろしくね 有限会社アリウープ 柏岡 秀男 x,facebook @kashioka 24
25