SlideShare uma empresa Scribd logo
1 de 88
Baixar para ler offline
伝える第7回- 今すぐ使える
PHP開発のあれこれ-
AGENDA
1. 伝えるとは
2. 自己紹介
3. 最近のphp界隈の流れ
4. 今さら聞けないcomoser
5. パッケージ管理の基本
6. composerコマンド
7. コーディング規約チェック
8. PHPコードの静的解析
9. PhpStorm
10. .editorconfig
11. Vagrant とAnsible
伝えるとは
「伝える」とはスピーカーが
伝えたいことをただ伝えて、
質問タイムは薄めの勉強会です。
自己紹介
おまえ誰よ
フリーランスのエンジニア
趣味
プログラミング
サーバー構築
スキル
php
フロントエンドやりたい
Ansible
最近のPHP界隈の流れ
フルスタックからコンポーネント指向へ
マイクロフレームワークの台頭
PEARからcomposerへ
PSRの策定
今さら聞けないCOMOSER
COMPOSERとはphpにおけるパッケージ管理ツール
昔でいうところのPEARに近いけど概念が全然違う
RUBYのgem、nodejsのnpmに相当
後発なため、かなり柔軟になっている
ただし、peclは現役。peclの代替はできない
PACKAGIST
Packagist
composerでダウンロードできる
パッケージがまとまっているサイト
遅い
Packagist jp
Packagistが遅いために作られた日本のミラーサイト
下記コマンドで設定を変更できる
composer config -g repositories.packagist composer https://packagist.jp
PACKAGIST以外からのインス
トール
GIT リポジトリPackagistに登録されていなくても
Github、Github Enterpriseからのインストールもできる
バージョンとかもちゃんとやってくれる
SATIS
Composerプロジェクトが出している
パッケージを使うことで
自前でPackagistを立てることもできる
composerは に探しに行って、
なかったらPackagistに探しに行くという動きをする
SATISを使うと何が嬉しいかに依存パッケージを登録しておくことで、
Packagistが死んでもデプロイに影響がでない
Packagistに登録できない類の自前のパッケージを
登録しておくことで、他のものと同様にインストールできる
パッケージ管理の基本
パッケージ管理いろいろyum
apt
homebrew
npm
gem
bower
ansible-galaxy
設定ファイル
COMPOSER.JSON
パッケージを管理する設定ファイル
主にどんなパッケージをインストールするか書いておく
もしくは自分で公開するパッケージの情報を書いておく
他にはcomposerの振る舞いを記述していく
最低限のバージョン指定、追加のリポジトリなど
直接編集もできるが基本はコマンド叩くと更新される
ロックファイル
COMPOSER.LOCK
インストールするパッケージのバージョンを
完全指定してあるファイル
自動で作成/更新される
開発環境と本番環境で全く同じバージョンを
インストールするのに使ったりする
インストール先
GLOBAL
設定にもよるが
ユーザーのホームディレクトリ配下に入れるときに使う
どのプロジェクトでも使用したいものを入れる
PROJECT
プロジェクト配下のvendorディレクトリ配下に
インストールして使う
クラスとして使いたいようなものを入れる
GLOBALかPROJECTかコマンドライン的に使うものはglobalに
projectで使うものはprojectに入れる
phpcs、phpmd、phpunitなどは
コマンドラインとして使うのでglobalにいれておいたほうが
使い勝手がよい
phpunitは両projectにもいれる
コマンドラインとしてもパッケージ(クラス)としても使うため
DEVかそうでないか使用するパッケージの中には、
開発環境のみで使用したいものがある
例えばphpunit
そういったものはdevオプションを
使用してインストールすることで、
開発環境でのみインストールすることができる
タスクパッケージをインストールし終わった後に
実行するタスクを定義することができる
定義するのは設定ファイル( )
COMPOSERコマンド
GLOBAL
いきなりだが、これは実質コマンドではない
各(サブ)コマンドの前にglobalを置くことで
global環境に対してコマンドを実行する
INIT
の雛形を作る
などはインストーラーがそもそもあったりするので
インストーラーでプロジェクト作るとそもそも
が出来上がっている状態になる
REQUIRE
開発するときに最もお世話になるコマンド
パッケージのインストールに使用する
INSTALL
リポジトリからクローンしてきた直後など、環境構築時に叩くあまり叩く
機会は多くないかも
composer.lockが存在すれば、
そのバージョンの情報を元にパッケージをインストールする
なければ、composer.jsonを元にインストールする
UPDATE
よく使う
すでにインストールしているパッケージの
バージョンを更新したいときに使用する
これを実行することで、composer.lockも更新される
CONFIG
設定の確認ーー
ーー
リポジトリの追加Packagistに登録されているものは、
リポジトリの追加なしでインストールできる
そうでない場合はリポジトリの追加が必要
コマンドでやる場合composer global config
repositories.vendor-name/foo-codesniffer
'{"type": "vcs", "url": "https://github.com/vandor-name/foo-codesniffer.git", "version":"master"}
※改行しているけど実際は1行
COMPOSER.JSONに書く場合"repositories": [
{
"type":"package",
"package": {
"name": "vendor-name/foo-codesniffer",
"version":"master",
"source": {
"url": "https://github.com/vendor-name/foo-codesniffer.git",
"type": "git",
"reference":"master"
}
}
}
],
"require-dev": {
"vendor-name/foo-codesniffer": "dev-master"
},
注意古い環境でcomposerを動かすと、
detect_unicodeという
php.ini周りの設定のためにエラーが出ることがある。
そんなときは、
php -d detect_unicode=false /path/to/composer install
とphpのオプション指定すると使える。
コマンドと各ファイル
その1
その2
その3
コーディング規約チェック
PSRとはPHP Standards Recommendations
PSRには0から14までのカテゴリがあり、
それぞれが違う範囲をカバーしている。
ただ、全部を気にするのは辛い。
ライブラリアンは別だが
実務上は(とりあえず)PSR1-4まで気にしておけばいい。
もっというと、PSR2だけでいい。
ただ、存在は知っておこう
でないと、クラス読み込めないエラーが出た時に
どうしていいかちんぷんかんぷん
PHP-FIG
http://www.php-fig.org/
PSRは、php-figという団体が策定している
php標準のコーディング規約
php-figには各フレームワークが参加している
PSR0
オートロードに関する規約
ただし、duplicateなので、
今からやるなら後述のPSR4を使うべき
PSR1
PSR0に従うこと
クラス定義の中に読み込んだだけで影響のあるものを入れない
php.iniの値を変える
なんかいきなりechoしている
requireしている
クラスやメソッドの命名規則など
PSR2
PSR1を前提としての細かいコーディング規約
ifの括弧の位置とか。
コーディングする上で1番気にしておくべきところ。
PSR3
ロガーに関する規約
ロガーのインターフェースとか
ログレベルとか
PSR4
オートロードに関する規約
PSR0の後継
ディレクトリのパスを名前空間と揃える形のやつ
名前空間を持ち出してきてるので、5.2以前は対象外
PHP CODESNIFFER(PHPCS)
用語Rule(Source)
ruleset
Standard
report
RULE(SOURCE)
RuleといったりSourceといったりする
↓ のようなドット区切りの規約のこと
先頭から
という名前空間になっている。
RULESET
Ruleをまとめたもの
xmlで記述する
STANDARD
rulesetに付いている名前デフォルトであるのは下記
PEAR
PSR1
PHPCS
Squiz
PSR2
Zend
rulesetはインクルードできるので
使いたいRule、除外したいRuleを
うまく設定して自前のを作るとよい
REPORT
標準出力への表示形式
オプションで指定できる
summary
source
などが指定できる
コマンドイメージphpcs --standard=vendor/path/to/sniffer/ruleset.xml path/to/directory
phpcs --report=source -s path/to/file.php
実行結果の例$ phpcs /path/to/code
FILE: /path/to/code/myfile.php
--------------------------------------------------------------------------------
FOUND 5 ERROR(S) AFFECTING 5 LINE(S)
--------------------------------------------------------------------------------
2 | ERROR | Missing file doc comment
20 | ERROR | PHP keywords must be lowercase; expected "false" but found "FALSE"
47 | ERROR | Line not indented correctly; expected 4 spaces but found 1
51 | ERROR | Missing function doc comment
88 | ERROR | Line not indented correctly; expected 9 spaces but found 6
--------------------------------------------------------------------------------
FILE: /path/to/code/yourfile.php
--------------------------------------------------------------------------------
FOUND 1 ERROR(S) AND 1 WARNING(S) AFFECTING 1 LINE(S)
--------------------------------------------------------------------------------
PHPCBF
phpcsのルールにそって、ある程度自動で修正してくれるツール
PHPコードの静的解析
PHP MESS DETECTOR(PHPMD)
phpのコードでバグになる可能性がある
コードを検知してくれるツール
RULESET
CodeSnifferと同様にMess Detectorも
ルールを持っている。
そのルールをカテゴライズしている単位
一つのRulesetの中にいくつかのRuleを持っている
一覧Ruleset 内容
cleancode きれいなコードかどうか
codesize コードの複雑さチェック
controversial 命名規則チェック
design 設計上の問題
naming 変数や関数の名称チェック
unusedcode 使われていない要素の検知
コマンドイメージ
PHPSTORM
PHPSTORMとはJetbrains社が出しているPHP用のIDE
2015年のPHPカンファレンスでは、6割くらいの人が使っていた
Monokaiのテーマがおすすめ
viキーバインド使える
Eclipse風のキーバインドも使える
phpcs、phpmdはリアルタイムで警告してくれる
phpunitも叩ける
phpcbfも叩ける
部分的だけど日本語対応できるらしい
ECLIPSEより良い所補完が優秀
eclipseとくらべて
Laravel + ide-helper
ファイル移動が優秀
CakeStorm
Laravel Plugin
軽い
eclipseとくらべて
syntax highlightが優秀
リファクタリングが優秀
他のIDEができることまぁ、大抵できる
デバッガを使用したステップ実行
した時にサーバーへのSFTP
git操作
ファイルの履歴管理(ローカル)
.EDITORCONFIG
.EDITORCONFIGとは様々なエディターで利用できる、共通の書式設定ファイル
改行コード
ハードタブ、ソフトタブの指定
行末に空行入れる、入れない
文字コード
などを設定ファイル化したもの
例こんな感じ
root = true
[*]
indent_style = space
indent_size = 4
end_of_line = lf
insert_final_newline = true
trim_trailing_whitespace = true
[*.bat]
end_of_line = crlf
[*.yml]
indent_style = space
indent_size = 2
使い方とりあえず、このファイルをプロジェクトルートに置く
あとは、対応するエディタで開けば勝手にロードしてくれる
最近のエディタであれば、
プラグインがあることが多い
ただし、各エディタのプラグインの対応状況が
バラバラなので効かない場合もある
PHPCSとのすみ分けphpcsで賄える部分がほとんどなので、
phpcs入れてればまぁ、大丈夫。
でも、js、md、ctp、shellなどのphp以外のところを
カバーできるのでいれておいて損はない
phpcsでも、js、ctpはカバーできるけども。。
VAGRANT とANSIBLE
VAGRANTとは各種仮想マシンを操作するためのコマンドラインラッパー
操作できる仮想マシンはいくつかあるが、
VirtualBoxが一般的
pluginをインストールすれば、
AWS EC2, Azure,OpenStackなども操作できる
BOX
仮想マシンのイメージ
Boxというファイルで管理する
イメージなので基本ファイル容量がでかい
数百Mbから数Gb
VAGRANTFILE
仮想マシンの設定などを行う設定ファイル
rubyの書式で書く
ANSIBLEと組み合わせる
ANSIBLEとは環境構築やサーバーに対して
何かをするときに便利なツール
秘伝のタレ的な、サーバー構築手順を
プログラムにできる
冪等性を担保しやすい
PLAYBOOK
Playbookというファイルに
様々なタスクを書いておくことで
環境構築を行っていける
VAGRANTとANSIBLE
Vagrant単体でも十分威力を発揮するが、
Ansibleと組み合わせると鬼に金棒
Vagrantの弱点は、差分管理が難しいとこ
こんな時に困る
だからAnsibleで環境構築を
自動化しておけば、
まっさらなベースのBoxから
プロジェクト環境がすぐに作れる
ご静聴有難うございました

Mais conteúdo relacionado

Mais procurados

PHP buildpackでhackとphalconが動いた件について
PHP buildpackでhackとphalconが動いた件についてPHP buildpackでhackとphalconが動いた件について
PHP buildpackでhackとphalconが動いた件について
健治郎 安井
 
Phpstormちょっといい話
Phpstormちょっといい話Phpstormちょっといい話
Phpstormちょっといい話
Hisateru Tanaka
 

Mais procurados (19)

CakePHP3.x での各種実装例 ~| PHP Tech Bash 20171121 ~
CakePHP3.x での各種実装例 ~| PHP Tech Bash 20171121 ~CakePHP3.x での各種実装例 ~| PHP Tech Bash 20171121 ~
CakePHP3.x での各種実装例 ~| PHP Tech Bash 20171121 ~
 
PHPの今とこれから2018
PHPの今とこれから2018PHPの今とこれから2018
PHPの今とこれから2018
 
PHP で実行中のスクリプトの動作を下から覗き見る
PHP で実行中のスクリプトの動作を下から覗き見るPHP で実行中のスクリプトの動作を下から覗き見る
PHP で実行中のスクリプトの動作を下から覗き見る
 
Redmineで始めるチケット駆動開発
Redmineで始めるチケット駆動開発Redmineで始めるチケット駆動開発
Redmineで始めるチケット駆動開発
 
ECMAScript没proposal追悼式
ECMAScript没proposal追悼式ECMAScript没proposal追悼式
ECMAScript没proposal追悼式
 
PHP buildpackでhackとphalconが動いた件について
PHP buildpackでhackとphalconが動いた件についてPHP buildpackでhackとphalconが動いた件について
PHP buildpackでhackとphalconが動いた件について
 
コンピュータシステムの理論と実装10
コンピュータシステムの理論と実装10コンピュータシステムの理論と実装10
コンピュータシステムの理論と実装10
 
モダン PHP テクニック 12 選 ―PsalmとPHP 8.1で今はこんなこともできる!―
モダン PHP テクニック 12 選 ―PsalmとPHP 8.1で今はこんなこともできる!―モダン PHP テクニック 12 選 ―PsalmとPHP 8.1で今はこんなこともできる!―
モダン PHP テクニック 12 選 ―PsalmとPHP 8.1で今はこんなこともできる!―
 
Phpstormちょっといい話
Phpstormちょっといい話Phpstormちょっといい話
Phpstormちょっといい話
 
PHP基礎勉強会
PHP基礎勉強会PHP基礎勉強会
PHP基礎勉強会
 
実用Brainf*ckプログラミング入門編
実用Brainf*ckプログラミング入門編実用Brainf*ckプログラミング入門編
実用Brainf*ckプログラミング入門編
 
RFC: "var" Deprecation
RFC: "var" DeprecationRFC: "var" Deprecation
RFC: "var" Deprecation
 
PHP 8 と V8 (JavaScript) で速さを見比べてみよう!
PHP 8 と V8 (JavaScript) で速さを見比べてみよう!PHP 8 と V8 (JavaScript) で速さを見比べてみよう!
PHP 8 と V8 (JavaScript) で速さを見比べてみよう!
 
あるあるLT〜サーバーサイドエンジニア〜 Vol.3
あるあるLT〜サーバーサイドエンジニア〜 Vol.3あるあるLT〜サーバーサイドエンジニア〜 Vol.3
あるあるLT〜サーバーサイドエンジニア〜 Vol.3
 
App Engine と いまどきのPHP
App Engine と いまどきのPHPApp Engine と いまどきのPHP
App Engine と いまどきのPHP
 
5分でわかるPHPのクロージャ(web公開版)
5分でわかるPHPのクロージャ(web公開版)5分でわかるPHPのクロージャ(web公開版)
5分でわかるPHPのクロージャ(web公開版)
 
02 はじめてのメール送信
02 はじめてのメール送信02 はじめてのメール送信
02 はじめてのメール送信
 
PHPカンファレンス2016 初心者セッション
PHPカンファレンス2016 初心者セッションPHPカンファレンス2016 初心者セッション
PHPカンファレンス2016 初心者セッション
 
PHPでセキュリティを真面目に考える
PHPでセキュリティを真面目に考えるPHPでセキュリティを真面目に考える
PHPでセキュリティを真面目に考える
 

Destaque

CURRICULUM____VITAE CIVIL ENGIMEER
CURRICULUM____VITAE CIVIL ENGIMEERCURRICULUM____VITAE CIVIL ENGIMEER
CURRICULUM____VITAE CIVIL ENGIMEER
Riaz Mohammad
 
Wexcoin presentation russ.pptx
Wexcoin presentation russ.pptxWexcoin presentation russ.pptx
Wexcoin presentation russ.pptx
Wexcoin
 
STL Lab Yubo Liu: Rethinking the Evolution of China's University Campus Morph...
STL Lab Yubo Liu: Rethinking the Evolution of China's University Campus Morph...STL Lab Yubo Liu: Rethinking the Evolution of China's University Campus Morph...
STL Lab Yubo Liu: Rethinking the Evolution of China's University Campus Morph...
STLLab
 

Destaque (12)

CURRICULUM____VITAE CIVIL ENGIMEER
CURRICULUM____VITAE CIVIL ENGIMEERCURRICULUM____VITAE CIVIL ENGIMEER
CURRICULUM____VITAE CIVIL ENGIMEER
 
CSWS
CSWSCSWS
CSWS
 
여성흥분제『 http://x6.na.to 』 톡 w2015 ♡ 여성흥분제판매,여성흥분제약효,여성흥분제구입처,여성흥분제구매처,여성흥분제파는곳
여성흥분제『 http://x6.na.to  』 톡 w2015 ♡ 여성흥분제판매,여성흥분제약효,여성흥분제구입처,여성흥분제구매처,여성흥분제파는곳여성흥분제『 http://x6.na.to  』 톡 w2015 ♡ 여성흥분제판매,여성흥분제약효,여성흥분제구입처,여성흥분제구매처,여성흥분제파는곳
여성흥분제『 http://x6.na.to 』 톡 w2015 ♡ 여성흥분제판매,여성흥분제약효,여성흥분제구입처,여성흥분제구매처,여성흥분제파는곳
 
dsadw
dsadwdsadw
dsadw
 
CV
CVCV
CV
 
Sun Bear Overview
Sun Bear OverviewSun Bear Overview
Sun Bear Overview
 
Wexcoin presentation russ.pptx
Wexcoin presentation russ.pptxWexcoin presentation russ.pptx
Wexcoin presentation russ.pptx
 
STL Lab Yubo Liu: Rethinking the Evolution of China's University Campus Morph...
STL Lab Yubo Liu: Rethinking the Evolution of China's University Campus Morph...STL Lab Yubo Liu: Rethinking the Evolution of China's University Campus Morph...
STL Lab Yubo Liu: Rethinking the Evolution of China's University Campus Morph...
 
Certificazione delle competenze. Digital Certification Program. Paolo Brizzi
Certificazione delle competenze. Digital Certification Program. Paolo BrizziCertificazione delle competenze. Digital Certification Program. Paolo Brizzi
Certificazione delle competenze. Digital Certification Program. Paolo Brizzi
 
JCIHK Recommended course - supervising skills - Be the SUPERvisor
JCIHK Recommended course - supervising skills - Be the SUPERvisorJCIHK Recommended course - supervising skills - Be the SUPERvisor
JCIHK Recommended course - supervising skills - Be the SUPERvisor
 
PHP7で変わること ——言語仕様とエンジンの改善ポイント
PHP7で変わること ——言語仕様とエンジンの改善ポイントPHP7で変わること ——言語仕様とエンジンの改善ポイント
PHP7で変わること ——言語仕様とエンジンの改善ポイント
 
フラットなPHPからフレームワークへ
フラットなPHPからフレームワークへフラットなPHPからフレームワークへ
フラットなPHPからフレームワークへ
 

Semelhante a 今すぐ使えるPHP開発のあれこれ

AspectMock 最強のモッキングフレームワーク
AspectMock 最強のモッキングフレームワークAspectMock 最強のモッキングフレームワーク
AspectMock 最強のモッキングフレームワーク
kenjis
 
Zend OPcacheの速さの秘密を探る
Zend OPcacheの速さの秘密を探るZend OPcacheの速さの秘密を探る
Zend OPcacheの速さの秘密を探る
Yoshio Hanawa
 
PHPカンファレンス北海道 php技術者認定上級試験を受けてみた
PHPカンファレンス北海道 php技術者認定上級試験を受けてみたPHPカンファレンス北海道 php技術者認定上級試験を受けてみた
PHPカンファレンス北海道 php技術者認定上級試験を受けてみた
Fumito Mizuno
 
php-timecopを実戦投入してみた
php-timecopを実戦投入してみたphp-timecopを実戦投入してみた
php-timecopを実戦投入してみた
Yoshio Hanawa
 

Semelhante a 今すぐ使えるPHP開発のあれこれ (20)

Phpでアプリケーションサーバー
PhpでアプリケーションサーバーPhpでアプリケーションサーバー
Phpでアプリケーションサーバー
 
FuelPHP - フレームワーク4本勝負 @PHPカンファレンス関西2014
FuelPHP - フレームワーク4本勝負 @PHPカンファレンス関西2014 FuelPHP - フレームワーク4本勝負 @PHPカンファレンス関西2014
FuelPHP - フレームワーク4本勝負 @PHPカンファレンス関西2014
 
20110910 闇鍋的php魔改造
20110910 闇鍋的php魔改造20110910 闇鍋的php魔改造
20110910 闇鍋的php魔改造
 
PHPカンファレンス2013 今ドキのPHPの書き方 ~PHP逆引きレシピ改訂版~
PHPカンファレンス2013 今ドキのPHPの書き方 ~PHP逆引きレシピ改訂版~PHPカンファレンス2013 今ドキのPHPの書き方 ~PHP逆引きレシピ改訂版~
PHPカンファレンス2013 今ドキのPHPの書き方 ~PHP逆引きレシピ改訂版~
 
NanoA
NanoANanoA
NanoA
 
5分でわかるphalcon php
5分でわかるphalcon php5分でわかるphalcon php
5分でわかるphalcon php
 
5分でわかるPhalconPHP
5分でわかるPhalconPHP5分でわかるPhalconPHP
5分でわかるPhalconPHP
 
CodeIgniter Con Tokyo 2011 資料
CodeIgniter Con Tokyo 2011 資料CodeIgniter Con Tokyo 2011 資料
CodeIgniter Con Tokyo 2011 資料
 
20090801phpstudy Sanemat
20090801phpstudy Sanemat20090801phpstudy Sanemat
20090801phpstudy Sanemat
 
第21回関西PHP勉強会 ReactPHPは もっと流行って欲しい #phpkansai
第21回関西PHP勉強会 ReactPHPは もっと流行って欲しい #phpkansai第21回関西PHP勉強会 ReactPHPは もっと流行って欲しい #phpkansai
第21回関西PHP勉強会 ReactPHPは もっと流行って欲しい #phpkansai
 
AspectMock 最強のモッキングフレームワーク
AspectMock 最強のモッキングフレームワークAspectMock 最強のモッキングフレームワーク
AspectMock 最強のモッキングフレームワーク
 
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
 
Zend OPcacheの速さの秘密を探る
Zend OPcacheの速さの秘密を探るZend OPcacheの速さの秘密を探る
Zend OPcacheの速さの秘密を探る
 
3流プログラマーから見たPhalconとWISP
3流プログラマーから見たPhalconとWISP3流プログラマーから見たPhalconとWISP
3流プログラマーから見たPhalconとWISP
 
PHPカンファレンス北海道 php技術者認定上級試験を受けてみた
PHPカンファレンス北海道 php技術者認定上級試験を受けてみたPHPカンファレンス北海道 php技術者認定上級試験を受けてみた
PHPカンファレンス北海道 php技術者認定上級試験を受けてみた
 
php-timecopを実戦投入してみた
php-timecopを実戦投入してみたphp-timecopを実戦投入してみた
php-timecopを実戦投入してみた
 
フレームワークを使うべき 3 つの理由
フレームワークを使うべき 3 つの理由フレームワークを使うべき 3 つの理由
フレームワークを使うべき 3 つの理由
 
PHPの今とこれから2016
PHPの今とこれから2016PHPの今とこれから2016
PHPの今とこれから2016
 
FuelPHP活用事例
FuelPHP活用事例FuelPHP活用事例
FuelPHP活用事例
 
PHPCON_TOKYO_2022_Bigginer.pptx
PHPCON_TOKYO_2022_Bigginer.pptxPHPCON_TOKYO_2022_Bigginer.pptx
PHPCON_TOKYO_2022_Bigginer.pptx
 

今すぐ使えるPHP開発のあれこれ