おそろいの開発環境を構築させたい
- 非プログラマに各自で準備させる的な状況
- Windows使う
- laravelを準備する
- 仮想環境つかわない
- dockerとかvagrant配らない、非プログラマには管理できない
- 手順書だと写経に失敗するからスクリプト叩くようにする
ある人がいった
wslでshを配ればOK
- え、しろーと捕まえてくるんだからwslはハードル高いんじゃ?
そこはマウスぽちぽちだから手順書で
もうsh用意したから
いろんな方法がありますよね
- 組織的には残念ながら時間制約などでwslな方針で進んだのですが
- 個人的に素のWindowsで上手くやる方法を検証したので共有します
やること
- phpダウンロード(zip版)
- phpインストール(解凍だけ)
- php.ini用意(extension=openssl有効)
- composerダウンロード
- composerインストール(
php phar
するbat作成) - laravelインストール
- PATH通す(ユーザ環境変数)
解説
なぜバッチ
- PowerShellの方が便利
- だけどps1ファイルだと実行権限が云々といわれるので
- batでラップしとくとWindowsでもっとも実行が簡単なスクリプトになる
wgetとかcurl
- バッチだときついけどPowerShellなら
wget url
またはcurl url
でいけます
PowerShellコンソール
> man wget
名前
Invoke-WebRequest
構文
Invoke-WebRequest [-Uri] <uri> [<CommonParameters>]
エイリアス
iwr
wget
curl
sed
- バッチだときついけどPowerShellなら
replaceオペレータ
でがんばれます - 文字コードとか改行コードとか気を使って
Get-Content
とAdd-Content -encoding String
とともにやってみました
unzip
- バッチだときついけどPowerShellなら
Expand-Archive
でいけます
PowerShellからbatをつくる
- こちらもini同様に気を使ってBOMなしファイルになるように
Add-Content -encoding String
でいけます -
Out-File
だとBOM付Unicodeになっちゃいました
環境変数
- バッチだときついけどPowerShellならdotNetの力を借りて
[System.Environment]::SetEnvironmentVariable
でいけます
できあがり
install-php.bat
@powershell -NoProfile -ExecutionPolicy Unrestricted "&([ScriptBlock]::Create((cat -encoding utf8 \"%~f0\" | ? {$_.ReadCount -gt 2}) -join \"`n\"))" %*
@pause&exit /b
# インストールフォルダで作業する
$workspace = "C:\php"
New-Item $workspace -type directory -force
Set-Location $workspace
# PHP取得、解凍、php.ini作成
$phpremote = "https://windows.php.net/downloads/releases/php-7.2.9-Win32-VC15-x64.zip"
$phplocal = Join-Path $workspace ( Split-Path $phpremote -Leaf )
if ( $false -eq ( Test-Path $phplocal ) ) {
Invoke-WebRequest -Uri $phpremote -OutFile $phplocal
}
Expand-Archive -Path $phplocal -DestinationPath $workspace
$data = Get-Content .\php.ini-development
$data = $data | % { $_ -replace ';extension=openssl', 'extension=openssl' }
$data = $data | % { $_ -replace ';extension=curl', 'extension=curl' }
Add-Content -path .\php.ini -value $data -encoding String
# composer取得、インストール
$composerremote = "https://getcomposer.org/download/1.7.2/composer.phar"
$composerlocal = Join-Path $workspace ( Split-Path $composerremote -Leaf )
if ( $false -eq ( Test-Path $composerlocal ) ) {
Invoke-WebRequest -Uri $composerremote -OutFile $composerlocal
}
if ( Test-Path composer.bat ) {
Remove-Item composer.bat
}
Add-Content -path composer.bat -value '@%~dp0php.exe "%~dp0composer.phar" %*' -encoding String
# laravelインストール
# .\composer.bat global require "laravel/installer"
.\php composer.phar global require "laravel/installer"
# ユーザ環境変数Path設定
$oldSystemPath = [System.Environment]::GetEnvironmentVariable("Path", "User")
$oldSystemPath = "C:\php;$env:appdata\Composer\vendor\bin;$oldSystemPath"
[System.Environment]::SetEnvironmentVariable("Path", $oldSystemPath, "User")
おしまい
- phpに触れたのはこのときがお初
- といってもコードに触れず環境構築だけ
- 月間ひとつ以上投稿したいなぁと思って
- 本当はpix2pix試した記録を記事にしたかったけど
- まだうまくいってない事を記事にしようと思ったけど
- あまりに、あまりにも半端な状況なのでやめました
- 投稿したい記事のネタが年内に賞味期限切れしちゃうので焦りがあります
以上