LoginSignup
2
1

More than 5 years have passed since last update.

phpとcomposerとlaravelが使えるようになるbat

Posted at

おそろいの開発環境を構築させたい

  • 非プログラマに各自で準備させる的な状況
  • Windows使う
  • laravelを準備する
  • 仮想環境つかわない
    • dockerとかvagrant配らない、非プログラマには管理できない
  • 手順書だと写経に失敗するからスクリプト叩くようにする

ある人がいった

wslでshを配ればOK

  • え、しろーと捕まえてくるんだからwslはハードル高いんじゃ?

そこはマウスぽちぽちだから手順書で
もうsh用意したから

いろんな方法がありますよね

  • 組織的には残念ながら時間制約などでwslな方針で進んだのですが
  • 個人的に素のWindowsで上手くやる方法を検証したので共有します

やること

  1. phpダウンロード(zip版)
  2. phpインストール(解凍だけ)
  3. php.ini用意(extension=openssl有効)
  4. composerダウンロード
  5. composerインストール(php pharするbat作成)
  6. laravelインストール
  7. 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-ContentAdd-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試した記録を記事にしたかったけど
    • まだうまくいってない事を記事にしようと思ったけど
    • あまりに、あまりにも半端な状況なのでやめました
    • 投稿したい記事のネタが年内に賞味期限切れしちゃうので焦りがあります

以上

2
1
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1