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
20
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
93
PHPCON_TOKYO_2019_Bigginer.pdf
kashioka
0
960
ここからはじめる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
Producing Creativity
orderedlist
PRO
344
40k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
31
1.1k
The MySQL Ecosystem @ GitHub 2015
samlambert
251
12k
Optimising Largest Contentful Paint
csswizardry
36
3.2k
Large-scale JavaScript Application Architecture
addyosmani
512
110k
Bootstrapping a Software Product
garrettdimon
PRO
307
110k
Writing Fast Ruby
sferik
628
61k
Designing Experiences People Love
moore
141
24k
Statistics for Hackers
jakevdp
798
220k
GraphQLの誤解/rethinking-graphql
sonatard
71
10k
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
13
1.4k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
34
2.9k
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