SlideShare a Scribd company logo
PHPの今とこれから2022
PHP Conference Japan 2022
September 24-25, 2022
廣川 類 (日本PHPユーザ会)
1
自己紹介:ひろかわ
◼ PHPのホビーユーザ(1996~)
◼ PHPマニュアルの日本語化
◼ マルチバイト化:mbstringエクステンション
◼ PHPカンファレンス皆勤中!
◼ PHP関連書籍:
➢ PHP徹底攻略
➢ 初めてのPHP(監訳)
2
PHPとは?
◼ PHPは主にWebアプリケーションに使用されるスクリプト言語
◼ 1995年の誕生以来、Webと共に成長、進化
◼ 現場の課題を簡単に解決してくれる便利なツールです
引用: W3Techs.com, 2022/8/10 3
サーバサイド言語のシェア
WordPress
64.3%
Shopify
6.2%
Wix
3.4%
Squarespace
3.0%
Joomla
2.5%
other
20.6%
CMSのシェア
PHP
77.5%
ASP.NET
7.7%
Ruby
5.7%
Java
4.2%
Scala
2.7%
other
2.2%
PHPアンケート 2022
4
PHPの開発体制
Rasmus Lerdorf
Andi Gutmans
Zeev Suraski
Marcus Boerger
開発アカウント:約2,000名(15名)
コア:約150名(5名)
PHP Group:10名
Nikita Popov
Derick Rethans
https://www.php.net/credits.php
Dmitry Stogov
PHP財団(PHP Foundation)設立
◼ 2021年11月に設立がアナウンスされたPHP開発者をサポートするため
の非営利団体.JetBrains社が主要スポンサー
◼ きっかけは,PHPに多大な貢献をしていたNikita Popov氏がJetBrainsを
退社し,PHP開発にかける時間を大幅に減らすと宣言したこと.
◼ 背景・課題:重要なインフラであるPHPは個人のモチベーションに依存
して開発・維持されており,生活面の保証(支援)がない.
◼ OpenCollectiveにより運営され,個人・企業の寄付に基づき,PHP開発
者を支援.
◼ 主要な開発者であるDmitry Stogov 氏らへのサポートが決定.
◼ 財政状況等はオープンになっており,誰でも貢献(寄付)ができる.
https://thephp.foundation/
https://opencollective.com/phpfoundation
7
PHP 1 PHP 2 PHP 3 PHP 4 PHP 5 PHP 7 PHP 8
総ステップ数 2946 40377 141066 406227 1103847 1133517 1261005
0
200,000
400,000
600,000
800,000
1,000,000
1,200,000
1,400,000
総ステップ数
Python 3 Ruby 2
総ステップ数 422087 863913
0
200,000
400,000
600,000
800,000
1,000,000
1,200,000
総ステップ数
◼ パーソナルツールからプラットフォームへ
◼ 大衆的ツールから安全で実用的な高性能ツールへ
1. 言語仕様:PHP 5.3/5.4で現代的なスクリプト言語に
2. 性能:PHP 5で高速化,PHP 7で最速に
3. セキュリティ:PHP 5でCoverity Scan適用
2015/12
2004/7
2000/5
1998/6
1997/11
1995/6
総ステップ数(.cファイル) 総ステップ数(.cファイル)
PHPの歩み
2015/12 2020/11
8
20年で速度が50倍に!
(ほぼ)同じスクリプトが動く!
PHPの歩み
bench.php
Ryzen 5 2400G
Ubuntu 20.04
PHPの歩み
9
2012 2013 2014 2015 2016 2017 2018 2019 2020 2021 2022
8.0
`20/11/26
8.1
`21/11/25
2023
5.5
5.6
5.4
Traits
マルチバイト
ジェネレータ
キャッシュ
デバッガ
7.0
7.1
7.2
7.3
7.4
高速化
スカラー型宣言
戻り値型宣言
プロパティ型宣言
FFI
JIT
union
Fiber
Enum
交差型
PHP 5.3-5.4
現代的な機能導入
PHP7
大幅高速化
PHP8
JIT導入
8.2
`22/11/24
DNF
readonlyクラス
PHPバージョン分布
引用: W3Techs.com, 2022/8/10
8.1
1.3%
8.0
3.1%
7.4
38.4%
7.3
15.4%
7.2
10.5%
7.1
3.7%
7.0
3.7%
5.x
23.8%
other
0.2%
◼ PHP7ユーザ: 71.6% (昨年: 68.2%),PHP 8ユーザ:4.4% (昨年: 0.8%)
◼ PHP 5(EOL)のユーザ: 23.8% (昨年: 30.5%),PHP 7.3まで(EOL)のユーザ:57.2%
◼ WordPressの推奨環境:PHP 7.4, MySQL 5.7/MariaDB 10.3, HTTPS
10
* https://wordpress.org/about/requirements/
◼ PHPのライフサイクル:3年(バグ修正:2年、セキュリティ修正のみ:1年)
◼ EOL以降はセキュリティ関連の修正も提供されず、非常に危険です
◼ PHP5、PHP 7.0~7.3 は EOLとなっています
PHPリリースサイクル
11
2018 2019 2020 2021 2022 2023 2024
5.6
7.0
7.1
7.2
7.3
7.4
8.0
アクティブサポート セキュリティ修正のみ
2022/9/25
EOL 2018/12/31
http://php.net/supported-versions.php
EOL 2018/12/3
EOL 2019/12/1
EOL 2020/11/30
EOL 2021/12/6
EOL 2022/11/28
EOL 2023/11/26
PHPリリース情報
Release 7.4 8.0 8.1 変更
2021/10/21 7.4.25 8.0.12 CVE-2021-21703 (PHP-FPM)
2021/11/18 7.4.26 8.0.13 CVE-2021-21707 (XML)
2021/11/25 8.1.0 PHP 8.1.0 Release, PHP 7.3 EOL (2021/12/6)
2021/12/16 7.4.27 8.0.14 8.1.1
2022/1/20 8.0.15 8.1.2
2022/2/17 7.4.28 8.0.16 8.1.3 CVE-2021-21708 (Filter):リモートコード実行
2022/3/17 8.0.17 8.1.4
2022/4/14 7.4.29 8.0.18 8.1.5 Rebuilding Windows binaries for security updates
2022/5/12 8.0.19 8.1.6
2022/6/9 7.4.30 8.0.20 8.1.7 CVE-2022-31626 (mysql), 31625 (pgsql)
2022/7/7 8.0.21 8.1.8
2022/8/4 8.0.22 8.1.9
2022/9/1 8.0.23 8.1.10
12
◼ CVE-* ⇒ 速やかな更新が必要
PHP8 JIT: より速く、快適に
Ryzen 5 2400G, Ubuntu 22.04 14
◼ PHP 8.2: 地道な実行速度改善が進んで
いる.
0
0.05
0.1
0.15
0.2
0.25
0.3
0.35
0.4
0.45
0.5
strcat(200000)
sieve(30)
nestedloop(12)
matrix(20)
heapsort(20000)
hash2(500)
hash1(50000)
fibo(30)
ary3(2000)
ary2(50000)
ary(50000)
ackermann(7)
mandel2
mandel
simpleudcall
simpleucall
simplecall
simple
Zend/bench.php
0
0.5
1
1.5
2
2.5
$x = $f ? $f : tmp
$x = $f ? $f : $a
$x = $f ?: tmp
$x = $a ?: null
$x = $str[0]
$x = $hash['v']
$x = $GLOBALS['v']
$x = $_GET
$x = TEST
new Foo()
$x = Foo::TEST
$this->f()
empty($this->x)
isset($this->x)
$this->x--
$this->x++
--$this->x
++$this->x
$this->x += 2
$this->x = 0
$x = $this->x
Foo::f()
self::f()
empty(Foo::$x)
isset(Foo::$x)
Foo::$x = 0
$x = Foo::$x
empty(self::$x)
isset(self::$x)
self::$x = 0
$x = self::$x
int_func()
undef_func()
func()
empty_loop
PHP8 JIT: より速く、快適に
Ryzen 5 2400G, Ubuntu 20.04 15
◼ PHP 8.2: JIT(キャッシュ)は地道
時に改良されているが,実行速度の
差は小さい.
Zend/micro_bench.php
PHP 8.2 改善/変更のポイント
◼ Randomエクステンション
◼ Disjunctive Normal Form(DNF)型
◼ null/true/false型の追加
◼ readonly属性のクラスへの適用
◼ バックトレースにおける出力抑制
◼ 定数式における列挙型プロパティ
◼ Traitで定数が利用可に
◼ mbstring関連の修正 8.1.0-8.1.7で非互換な変換
◼ 動的プロパティ廃止対象(deprecated)
◼ strtolower(), strtoupper()がロケール非依存に
◼ utf8_encode(), utf8_decode()が廃止対象に
代替:mb_strtolower()
代替:mb_convert_encoding()
互換性のない変更・不具合
機能追加
動的プロパティの廃止
17
https://wiki.php.net/rfc/deprecate_dynamic_properties
従来のPHPでは,あるクラスにおいて宣言されていないプロパティに値が代入されると,
自動的に指定したプロパティが作成される ⇒ エラー見逃しの原因に
◼ 変数名のタイポなどにより予測しない動作を誘発す
るリスクがあるため,廃止
(PHP 8.2でDeprecated警告,PHP 9.0で廃止)
◼ クラスの定義の前に属性
#[AllowDynamicProperties] を指定⇒ 従来の動作
◼ __get(),__set()メソッド,stdClassは従来どおり利
用できる
<?php
class Foo {
public $item;
}
$moo = new Foo;
$moo->iten = "apple";
null/true/false型の追加
18
https://wiki.php.net/rfc/null-false-standalone-types
https://wiki.php.net/rfc/true-type
◼ true. false, nullを独立した型として追加
◼ 従来はunionの中でのみ使用可: string|false
◼ true|falseは不可(boolと記載)
function test(null $v): null {
return $v;
}
class Foo {
public true $v = true;
public function foo(false $v): false {
return $v;
}
}
Traitsで定数が利用可に
19
https://wiki.php.net/rfc/constants_in_traits
◼ 従来,traitの中での定数を宣言は不可:
⇒ 定数宣言を可能にした
◼ traitで宣言された定数には,クラス定数としてアクセスできる
⇒ traitの定数としてのアクセスは不可
trait Foo {
public const CONSTANT = 1;
public function bar(): int {
return self::CONSTANT;
}
}
class Moo {
use Foo;
}
print(Moo::CONSTANT); // 1
print(Foo::CONSTANT);
Fatal error: Traits cannot have constants
NG
OK
Readonlyクラス属性
20
https://wiki.php.net/rfc/readonly_classes
◼ クラスプロパティの変更ができなくなる.
◼ 動的プロパティ代入は警告ではなく,エラーになる.
◼ プロパティ変数の宣言時に型宣言を省略したり,static宣言を行ったりすることはできない.
◼ 継承先とreadonly属性は一致している必要がある(異なるとエラー発生)
<?php
readonly class Foo {
public int $bar;
public function __construct() {
$this->bar = 1;
}
}
$foo = new Foo();
$foo->bar = 2; // 致命的エラーを発生
DNFクラスの導入 (1/2)
21
◼ PHP 8.0で合併型(Union, OR),PHP 8.1で交差型(Intersection, AND)を導入.
◼ DNF (Disjunctive Normal Form, 選言標準形) はAND式をOR式で結合する構造
⇒合併型(Union, OR)と交差型(Intersection, AND)を結合する型宣言が可能になる.
◼ DNFは正規化された表現形式であり,処理系への負荷が低く,可読性も高い.理論的にあ
らゆる組み合わせを表現可能.
RFC: https://wiki.php.net/rfc/enumerations
interface A {}
interface B {}
interface C {}
interface D {
public function show(((A&B)|C $a): (A&B)|C;
}
A B C
DNFクラスの導入 (2/2)
22
◼ クラス継承:「共変性(戻り値)と反変性(引数)」の原則が適用される.
RFC: https://wiki.php.net/rfc/enumerations
A B C
✓ 戻り値:集合を縮小させる型宣言のみ有効
✓ 引数:集合を拡大させる型宣言のみ有効
interface D {
public function show(A&B $a): (A&B)|C;
}
class Moo implements D {
public function show((A&B)|C $a): A&B {}
} A B
戻り値:
集合が縮小(OK)
引数:
集合が拡大(OK)
バックトレース出力抑制
23
◼ 例外・エラー発生時にスタックトレースが表示または記録される
⇒ センシティブな情報(パスワード)が出力・記録されるリスクがある.
◼ #[¥SensitiveParameter] 属性を付与することで出力を抑制
RFC: https://wiki.php.net/rfc/redact_parameters_in_back_traces
<?php
function db_connect($user, $password) {
throw new ¥Exception('Error');
}
db_connect('taro', 'secret');
Fatal error: Uncaught Exception: Error in ../test.php:3
Stack trace:
#0 ../test.php(6): db_connect('taro',’secret’)
#1 {main}
thrown in test.php on line 3
<?php
function db_connect($user, #[¥SensitiveParameter] $password) {
throw new ¥Exception('Error');
}
乱数実装の改善
24
https://wiki.php.net/rfc/rng_extension
✓ PHPの乱数生成器は状態がグローバルに保持されている.
⇒ランダムな処理を行う内部関数を使うと状態が変化:回帰試験の再現性がなくなる
✓ メルセンヌ・ツイスターは統計的なテスト(CrushおよびBigCrush)をパスできない
mt_srand(1234);
…
var_dump(mt_rand(1, 100));
$engine = new Random¥Engine¥Mt19937(1234);
$randomizer = new Random¥Randomizer($engine);
従来の関数 Random¥Randomizer
クラス
mt_rand(), random_int() getInt()
random_bytes() getBytes()
shuffle() shuffleArray()
str_shuffle() shuffleBytes()
str_shuffle('abc’);
✓ 乱数生成用クラスを定義,独立した状態保持が可能になった
✓ 新しい乱数生成エンジンに対応:PCG64 (pcg_onseq-128-xsl-rr-64)またはXoshiro256**
PHP 8.1におけるmbstringの動作修正
26
◼ PHP 8.1.0において,シフトJIS・Unicode間の文字コード変換がJIS規格(JIS X
0201)に基づく定義に変更された.
◼ 従来はMS社によるデファクト標準に基づいており,過去のコードとの互換性
の問題を発生するため,PHP 8.1.8(7/7リリース)においてリバートされた.
echo mb_convert_encoding("¥x5C","UCS2","SJIS");
0x005C (半角バックスラッシュ)
従来のPHP
0x00A5(円記号)
PHP8.1.0~8.1.7
シフトJISの¥をUnicodeに変換
PHP の将来
◼ PHPスクリプトの用途拡大:Opcache(プリローディング)+JIT+FFIの活用
1. PHPエクステンション:C言語による記述からPHPによる記述へ(FFI)
2. 計算負荷が高いアルゴリズムのPHPによる実装:機械学習・AI等 (PHP-ML, Rubix ML)
⇒ ただし,Rubix MLの例ではTensorエクステンションの方が大幅(約10倍)速い
27
入力処理(C言語)
外部API実行
PHPスクリプト
従来のエクステンション(C言語)
出力処理(C言語)
PHP出力
入力処理(PHP)
外部API実行
PHPスクリプト
FFIエクステンション(PHP)
出力処理(PHP)
PHP出力
https://rubixml.com/
Rubix ML
PHPユーザ相互の情報交換
およびコミュニティの健全な発展
設立趣旨 活動内容
ドキュメント整備
セミナー/イベント
メンバー/スタッフ
国際化
Web/SNS
• PHPユーザ会員と思ったらメンバー
• 運営してみるのも楽しいかも
日本PHPユーザ会
(2000年4月発足)
PHPカンファレンス
28
PHP勉強会
29
◼ 2022年のPHPカンファレンスは,新型コロナウイルス(COVID-19)感染症拡大
防止に配慮しつつ, 3年ぶりに対面での開催となります.
◼ 今年も,二日間,思う存分お楽しみください!
◼ オンライン開催では「YouTube Live」を利用したライブでのセッションを始め、
オンラインのコンテンツについてもお楽しみください。
PHP Conference Japan 2022

More Related Content

What's hot

文字コードに起因する脆弱性とその対策(増補版)
文字コードに起因する脆弱性とその対策(増補版)文字コードに起因する脆弱性とその対策(増補版)
文字コードに起因する脆弱性とその対策(増補版)
Hiroshi Tokumaru
 
オブジェクト指向できていますか?
オブジェクト指向できていますか?オブジェクト指向できていますか?
オブジェクト指向できていますか?
Moriharu Ohzu
 

What's hot (20)

Glibc malloc internal
Glibc malloc internalGlibc malloc internal
Glibc malloc internal
 
JIT のコードを読んでみた
JIT のコードを読んでみたJIT のコードを読んでみた
JIT のコードを読んでみた
 
Spring Boot ユーザの方のための Quarkus 入門
Spring Boot ユーザの方のための Quarkus 入門Spring Boot ユーザの方のための Quarkus 入門
Spring Boot ユーザの方のための Quarkus 入門
 
文字コードに起因する脆弱性とその対策(増補版)
文字コードに起因する脆弱性とその対策(増補版)文字コードに起因する脆弱性とその対策(増補版)
文字コードに起因する脆弱性とその対策(増補版)
 
今日からできる!簡単 .NET 高速化 Tips
今日からできる!簡単 .NET 高速化 Tips今日からできる!簡単 .NET 高速化 Tips
今日からできる!簡単 .NET 高速化 Tips
 
実運用して分かったRabbit MQの良いところ・気をつけること #jjug
実運用して分かったRabbit MQの良いところ・気をつけること #jjug実運用して分かったRabbit MQの良いところ・気をつけること #jjug
実運用して分かったRabbit MQの良いところ・気をつけること #jjug
 
これからSpringを使う開発者が知っておくべきこと
これからSpringを使う開発者が知っておくべきことこれからSpringを使う開発者が知っておくべきこと
これからSpringを使う開発者が知っておくべきこと
 
Java ORマッパー選定のポイント #jsug
Java ORマッパー選定のポイント #jsugJava ORマッパー選定のポイント #jsug
Java ORマッパー選定のポイント #jsug
 
Domain Driven Design with the F# type System -- F#unctional Londoners 2014
Domain Driven Design with the F# type System -- F#unctional Londoners 2014Domain Driven Design with the F# type System -- F#unctional Londoners 2014
Domain Driven Design with the F# type System -- F#unctional Londoners 2014
 
例外設計における大罪
例外設計における大罪例外設計における大罪
例外設計における大罪
 
大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~
大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~
大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~
 
Pythonによる黒魔術入門
Pythonによる黒魔術入門Pythonによる黒魔術入門
Pythonによる黒魔術入門
 
怖くないSpring Bootのオートコンフィグレーション
怖くないSpring Bootのオートコンフィグレーション怖くないSpring Bootのオートコンフィグレーション
怖くないSpring Bootのオートコンフィグレーション
 
Javaのログ出力: 道具と考え方
Javaのログ出力: 道具と考え方Javaのログ出力: 道具と考え方
Javaのログ出力: 道具と考え方
 
マイクロサービスバックエンドAPIのためのRESTとgRPC
マイクロサービスバックエンドAPIのためのRESTとgRPCマイクロサービスバックエンドAPIのためのRESTとgRPC
マイクロサービスバックエンドAPIのためのRESTとgRPC
 
オブジェクト指向できていますか?
オブジェクト指向できていますか?オブジェクト指向できていますか?
オブジェクト指向できていますか?
 
レシピの作り方入門
レシピの作り方入門レシピの作り方入門
レシピの作り方入門
 
OPcacheの新機能ファイルベースキャッシュの内部実装を読んでみた
OPcacheの新機能ファイルベースキャッシュの内部実装を読んでみたOPcacheの新機能ファイルベースキャッシュの内部実装を読んでみた
OPcacheの新機能ファイルベースキャッシュの内部実装を読んでみた
 
Node.js Native ESM への道 〜最終章: Babel / TypeScript Modules との闘い〜
Node.js Native ESM への道  〜最終章: Babel / TypeScript Modules との闘い〜Node.js Native ESM への道  〜最終章: Babel / TypeScript Modules との闘い〜
Node.js Native ESM への道 〜最終章: Babel / TypeScript Modules との闘い〜
 
なかったらINSERTしたいし、あるならロック取りたいやん?
なかったらINSERTしたいし、あるならロック取りたいやん?なかったらINSERTしたいし、あるならロック取りたいやん?
なかったらINSERTしたいし、あるならロック取りたいやん?
 

Similar to PHPの今とこれから2022

なぜ、PHPのmbstring.func_overloadをdeprecatedにするのに5年かかったのか? - 慢心、環境の違い
なぜ、PHPのmbstring.func_overloadをdeprecatedにするのに5年かかったのか? - 慢心、環境の違い なぜ、PHPのmbstring.func_overloadをdeprecatedにするのに5年かかったのか? - 慢心、環境の違い
なぜ、PHPのmbstring.func_overloadをdeprecatedにするのに5年かかったのか? - 慢心、環境の違い
sasezaki
 
Wpf 4とSilverlight 4、これから業務アプリを開発するならどっち?
Wpf 4とSilverlight 4、これから業務アプリを開発するならどっち?Wpf 4とSilverlight 4、これから業務アプリを開発するならどっち?
Wpf 4とSilverlight 4、これから業務アプリを開発するならどっち?
Yuya Yamaki
 

Similar to PHPの今とこれから2022 (20)

PHPの今とこれから2020
PHPの今とこれから2020PHPの今とこれから2020
PHPの今とこれから2020
 
PHPの今とこれから2015
PHPの今とこれから2015PHPの今とこれから2015
PHPの今とこれから2015
 
PHP Now and Then 2012 at PHP Conference 2012, Tokyo Japan (in japanese)
PHP Now and Then 2012 at PHP Conference 2012, Tokyo Japan (in japanese)PHP Now and Then 2012 at PHP Conference 2012, Tokyo Japan (in japanese)
PHP Now and Then 2012 at PHP Conference 2012, Tokyo Japan (in japanese)
 
PHPの今とこれから2023
PHPの今とこれから2023PHPの今とこれから2023
PHPの今とこれから2023
 
PHPの今とこれから2018
PHPの今とこれから2018PHPの今とこれから2018
PHPの今とこれから2018
 
RFC: "var" Deprecation
RFC: "var" DeprecationRFC: "var" Deprecation
RFC: "var" Deprecation
 
なぜ、PHPのmbstring.func_overloadをdeprecatedにするのに5年かかったのか? - 慢心、環境の違い
なぜ、PHPのmbstring.func_overloadをdeprecatedにするのに5年かかったのか? - 慢心、環境の違い なぜ、PHPのmbstring.func_overloadをdeprecatedにするのに5年かかったのか? - 慢心、環境の違い
なぜ、PHPのmbstring.func_overloadをdeprecatedにするのに5年かかったのか? - 慢心、環境の違い
 
PHPの今とこれから2016
PHPの今とこれから2016PHPの今とこれから2016
PHPの今とこれから2016
 
PHP で実行中のスクリプトの動作を下から覗き見る
PHP で実行中のスクリプトの動作を下から覗き見るPHP で実行中のスクリプトの動作を下から覗き見る
PHP で実行中のスクリプトの動作を下から覗き見る
 
PhpStormを使おう --高槻からは快速急行が早くなります #jbugj
PhpStormを使おう --高槻からは快速急行が早くなります #jbugjPhpStormを使おう --高槻からは快速急行が早くなります #jbugj
PhpStormを使おう --高槻からは快速急行が早くなります #jbugj
 
PHP 8 と V8 (JavaScript) で速さを見比べてみよう!
PHP 8 と V8 (JavaScript) で速さを見比べてみよう!PHP 8 と V8 (JavaScript) で速さを見比べてみよう!
PHP 8 と V8 (JavaScript) で速さを見比べてみよう!
 
PHPの今とこれから2008
PHPの今とこれから2008PHPの今とこれから2008
PHPの今とこれから2008
 
Ruby向け帳票ソリューション「ThinReports」の開発で知るOSSの威力
Ruby向け帳票ソリューション「ThinReports」の開発で知るOSSの威力Ruby向け帳票ソリューション「ThinReports」の開発で知るOSSの威力
Ruby向け帳票ソリューション「ThinReports」の開発で知るOSSの威力
 
PHPの今とこれから2006
PHPの今とこれから2006PHPの今とこれから2006
PHPの今とこれから2006
 
Wpf 4とSilverlight 4、これから業務アプリを開発するならどっち?
Wpf 4とSilverlight 4、これから業務アプリを開発するならどっち?Wpf 4とSilverlight 4、これから業務アプリを開発するならどっち?
Wpf 4とSilverlight 4、これから業務アプリを開発するならどっち?
 
PHPの今とこれから2007
PHPの今とこれから2007PHPの今とこれから2007
PHPの今とこれから2007
 
レガシーなWebアプリケーションと向き合う
レガシーなWebアプリケーションと向き合うレガシーなWebアプリケーションと向き合う
レガシーなWebアプリケーションと向き合う
 
2014 1018 OSC-Fall Tokyo NETMF
2014 1018 OSC-Fall Tokyo NETMF2014 1018 OSC-Fall Tokyo NETMF
2014 1018 OSC-Fall Tokyo NETMF
 
スクリプト言語PHP攻略法
スクリプト言語PHP攻略法スクリプト言語PHP攻略法
スクリプト言語PHP攻略法
 
NAO/Pepper 開発環境 について
NAO/Pepper 開発環境 についてNAO/Pepper 開発環境 について
NAO/Pepper 開発環境 について
 

More from Rui Hirokawa

More from Rui Hirokawa (15)

PHPの今とこれから2019
PHPの今とこれから2019PHPの今とこれから2019
PHPの今とこれから2019
 
日本PHPユーザ会の紹介
日本PHPユーザ会の紹介日本PHPユーザ会の紹介
日本PHPユーザ会の紹介
 
PHPの中の人によるパネルディスカッション
PHPの中の人によるパネルディスカッションPHPの中の人によるパネルディスカッション
PHPの中の人によるパネルディスカッション
 
PHPの今とこれから2009
PHPの今とこれから2009PHPの今とこれから2009
PHPの今とこれから2009
 
PHPの今と未来を語る
PHPの今と未来を語るPHPの今と未来を語る
PHPの今と未来を語る
 
PHPの今と未来を語る
PHPの今と未来を語るPHPの今と未来を語る
PHPの今と未来を語る
 
php.netの歩き方
php.netの歩き方php.netの歩き方
php.netの歩き方
 
PHP4の今 ~日本語対応と最近のトピックス~
PHP4の今 ~日本語対応と最近のトピックス~PHP4の今 ~日本語対応と最近のトピックス~
PHP4の今 ~日本語対応と最近のトピックス~
 
PHPの今とこれから2017
PHPの今とこれから2017PHPの今とこれから2017
PHPの今とこれから2017
 
PHP Now and then 2018 : WordPress Special Edition
PHP Now and then 2018 : WordPress Special EditionPHP Now and then 2018 : WordPress Special Edition
PHP Now and then 2018 : WordPress Special Edition
 
PHPの今とこれから2014
PHPの今とこれから2014PHPの今とこれから2014
PHPの今とこれから2014
 
PHP 5.5ネーティブキャッシュの話
PHP 5.5ネーティブキャッシュの話PHP 5.5ネーティブキャッシュの話
PHP 5.5ネーティブキャッシュの話
 
PHPの今とこれから 2013
PHPの今とこれから 2013PHPの今とこれから 2013
PHPの今とこれから 2013
 
最新PHP事情 (2000年7月22日,PHPカンファレンス)
最新PHP事情 (2000年7月22日,PHPカンファレンス)最新PHP事情 (2000年7月22日,PHPカンファレンス)
最新PHP事情 (2000年7月22日,PHPカンファレンス)
 
PHP, Now and Then 2011
PHP, Now and Then 2011PHP, Now and Then 2011
PHP, Now and Then 2011
 

Recently uploaded

ビジュアルプログラミングIotLT17-オープンソース化されたビジュアルプログラミング環境Noodlの紹介
ビジュアルプログラミングIotLT17-オープンソース化されたビジュアルプログラミング環境Noodlの紹介ビジュアルプログラミングIotLT17-オープンソース化されたビジュアルプログラミング環境Noodlの紹介
ビジュアルプログラミングIotLT17-オープンソース化されたビジュアルプログラミング環境Noodlの紹介
miyp
 

Recently uploaded (8)

ビジュアルプログラミングIotLT17-オープンソース化されたビジュアルプログラミング環境Noodlの紹介
ビジュアルプログラミングIotLT17-オープンソース化されたビジュアルプログラミング環境Noodlの紹介ビジュアルプログラミングIotLT17-オープンソース化されたビジュアルプログラミング環境Noodlの紹介
ビジュアルプログラミングIotLT17-オープンソース化されたビジュアルプログラミング環境Noodlの紹介
 
今さら聞けない人のためのDevOps超入門 OSC2024名古屋 セミナー資料
今さら聞けない人のためのDevOps超入門 OSC2024名古屋  セミナー資料今さら聞けない人のためのDevOps超入門 OSC2024名古屋  セミナー資料
今さら聞けない人のためのDevOps超入門 OSC2024名古屋 セミナー資料
 
【登壇資料】スタートアップCTO経験からキャリアについて再考する CTO・VPoEに聞く by DIGGLE CTO 水上
【登壇資料】スタートアップCTO経験からキャリアについて再考する  CTO・VPoEに聞く by DIGGLE CTO 水上【登壇資料】スタートアップCTO経験からキャリアについて再考する  CTO・VPoEに聞く by DIGGLE CTO 水上
【登壇資料】スタートアップCTO経験からキャリアについて再考する CTO・VPoEに聞く by DIGGLE CTO 水上
 
エンジニアのセルフブランディングと技術情報発信の重要性 テクニカルライターになろう 講演資料
エンジニアのセルフブランディングと技術情報発信の重要性 テクニカルライターになろう 講演資料エンジニアのセルフブランディングと技術情報発信の重要性 テクニカルライターになろう 講演資料
エンジニアのセルフブランディングと技術情報発信の重要性 テクニカルライターになろう 講演資料
 
人的資本経営のための地理情報インテリジェンス 作業パターン分析と心身状態把握に関する実証事例
人的資本経営のための地理情報インテリジェンス 作業パターン分析と心身状態把握に関する実証事例人的資本経営のための地理情報インテリジェンス 作業パターン分析と心身状態把握に関する実証事例
人的資本経営のための地理情報インテリジェンス 作業パターン分析と心身状態把握に関する実証事例
 
本の感想共有会「データモデリングでドメインを駆動する」本が突きつける我々の課題について
本の感想共有会「データモデリングでドメインを駆動する」本が突きつける我々の課題について本の感想共有会「データモデリングでドメインを駆動する」本が突きつける我々の課題について
本の感想共有会「データモデリングでドメインを駆動する」本が突きつける我々の課題について
 
Linuxサーバー構築 学習のポイントと環境構築 OSC2024名古屋 セミナー資料
Linuxサーバー構築 学習のポイントと環境構築 OSC2024名古屋 セミナー資料Linuxサーバー構築 学習のポイントと環境構築 OSC2024名古屋 セミナー資料
Linuxサーバー構築 学習のポイントと環境構築 OSC2024名古屋 セミナー資料
 
Compute Units/Budget最適化 - Solana Developer Hub Online 6 #SolDevHub
Compute Units/Budget最適化 - Solana Developer Hub Online 6 #SolDevHubCompute Units/Budget最適化 - Solana Developer Hub Online 6 #SolDevHub
Compute Units/Budget最適化 - Solana Developer Hub Online 6 #SolDevHub
 

PHPの今とこれから2022