【Laravel】ワンアクションでプロジェクト毎にLaravelとHomesteadをインストールしてくれる「Larastar」


# コマンド打つのが煩わしい

ローカルにLaravelの環境作るのに毎回、**黒い画面開いて～プロジェクトのディレクトリへ移動して～composerコマンド叩いて～`vagrant up`して～**
という一連の動作を行うのが苦痛なのでこの動作を自動でするようにバッチ、その名も「**Larastar**」をつくります。

（やろうとしていることは[Laravel Homestead 5.5 Laravel プロジェクトごとにインストール](https://readouble.com/laravel/5.5/ja/homestead.html#per-project-installation)を参考にしてください）

# 事前準備
お使いのPCへ、`php`と`composer`と`vagrant`&`VirtualBox`が入ってることを確認してください
（出ないと高確率で動きません）

# ソースコード

単純にPHPの`exec()`関数で各々のコマンドを実行するようにつらつら書いていっただけです。
とりあえずcomposerで**Laravelのインストール**と**Homesteadのインストール**、**`Homestead.yaml`の作成**と**`vagrant up`**までやってくれるように書いてます

```larastar.php
<?php
//----------- config -------------
const VERSION = "5.5.*";
const DIRECTORY_NAME = "";
// -------------------------------
echo "\n\n---------【 Laravel & laravel homestead セットアップバッチ「ララスター☆彡」 開始 】------------- \n\n";
echo "--------- laravel/laravel install start ------------- \n";
$output = [];
$return_var = null;
exec("composer create-project --prefer-dist laravel/laravel=" . VERSION . " " . DIRECTORY_NAME, $output, $return_var);
if ($return_var !== 0) {
    var_dump($output);
    var_dump($return_var);
    echo "★★★★★　laravel/laravel install error! ★★★★★\n";
    exit;
}
echo "--------- laravel/laravel instaled! ------------- \n";
sleep(2);
echo "--------- composer laravel/homestead install start ------------- \n";
$output = [];
$return_var = null;
exec("composer require laravel/homestead --dev", $output, $return_var);
if ($return_var !== 0) {
    var_dump($output);
    var_dump($return_var);
    echo "★★★★★　laravel/homestead install error! ★★★★★\n";
    exit;
}
echo "--------- composer laravel/homestead instaled! ------------- \n";
sleep(2);
echo "--------- make command for generate Vagrantfile and Homestead.yaml start ------------- \n";
if (strtoupper(substr(PHP_OS, 0, 3)) === 'WIN') {
    echo "\nThis OS is Windows! Execute the command for Windows. \n\n";
    exec("vendor\bin\homestead make");
} else {
    echo "\nThis OS is not Windows! Execute the command for Linux/Mac. \n\n";
    exec("php vendor/bin/homestead make");
}
echo "--------- make command for generate Vagrantfile and Homestead.yaml end ------------- \n";
sleep(2);
echo "--------- vagrant up start ------------- \n";
$output = [];
$return_var = null;
exec("vagrant up", $output, $return_var);
if ($return_var !== 0) {
    var_dump($output);
    var_dump($return_var);
    echo "★★★★★　vagrant up error! ★★★★★\n";
}
echo "--------- vagrant up end ------------- \n";
echo "\n【Notice】Confirm 'to' of 'folders' in 'Homestead.yaml'. And 'vagrant reload' please. \n\n";
echo "--------- Laravel & laravel homestead installed! ------------- \n";
echo "\n---------【 Laravel & laravel homestead セットアップバッチ「ララスター☆彡」 終了 】------------- \n";
```

バージョンはデフォルトでLTSの5.5系の最新を指定してますが、変えたかったら`5.5.*`部分を変えてください。
`sleep()`はなんとなくで書いてますのでいらないかもしれません

# 使い方

プロジェクトのディレクトリを作成してそこにこのPHPファイルを設置。
黒い画面からこのPHPを実行すればあとは勝手にやってくれます。
※最後の`Homestead.yaml`の書き換えは自分でやる必要があります（その辺は書くのめんどくさかったので）

# 実行例（Windows）

## 1. プロジェクトディレクトリを作成し、そのrootへこのPHPファイルを置く
![WS000000.JPG](https://qiita-image-store.s3.amazonaws.com/0/85815/3bd586d5-b426-86d8-ce24-6223bbdebd7c.jpeg)

## 2. 黒い画面（Bashやらコマンドプロンプトやら）からこのPHPファイルを実行

以下実行した際の様子（バージョンを`5.8.*`に書き換えてます）

```:黒い画面
---------【 Laravel & laravel homestead セットアップバッチ「ララスター☆彡」 開始 】-------------

--------- laravel/laravel install start -------------
Installing laravel/laravel (v5.8.3)
  - Installing laravel/laravel (v5.8.3): Downloading (100%)
Created project in C:\work\suggestion\laravel
> @php -r "file_exists('.env') || copy('.env.example', '.env');"
Loading composer repositories with package information
Updating dependencies (including require-dev)
Package operations: 76 installs, 0 updates, 0 removals
  - Installing symfony/polyfill-ctype (v1.10.0): Loading from cache

[-- 略 --]

Generating optimized autoload files
> Illuminate\Foundation\ComposerScripts::postAutoloadDump
> @php artisan package:discover --ansi
> @php artisan key:generate --ansi
--------- laravel/laravel instaled! -------------
--------- composer laravel/homestead install start -------------
Using version ^8.2 for laravel/homestead
./composer.json has been created
Loading composer repositories with package information
Updating dependencies (including require-dev)
Package operations: 7 installs, 0 updates, 0 removals
  - Installing symfony/polyfill-ctype (v1.10.0): Loading from cache
  - Installing symfony/yaml (v4.2.4): Loading from cache
  - Installing symfony/process (v4.2.4): Loading from cache
  - Installing symfony/polyfill-mbstring (v1.10.0): Loading from cache
  - Installing symfony/contracts (v1.0.2): Loading from cache
  - Installing symfony/console (v4.2.4): Loading from cache
  - Installing laravel/homestead (v8.2.0): Loading from cache
symfony/contracts suggests installing psr/cache (When using the Cache contracts)
symfony/contracts suggests installing psr/container (When using the Service contracts)
symfony/contracts suggests installing symfony/cache-contracts-implementation ()
symfony/contracts suggests installing symfony/service-contracts-implementation ()
symfony/contracts suggests installing symfony/translation-contracts-implementation ()
symfony/console suggests installing psr/log (For using the console logger)
symfony/console suggests installing symfony/event-dispatcher ()
symfony/console suggests installing symfony/lock ()
Writing lock file
Generating autoload files
--------- composer laravel/homestead instaled! -------------
--------- make command for generate Vagrantfile and Homestead.yaml start -------------

This OS is Windows! Execute the command for Windows.

--------- make command for generate Vagrantfile and Homestead.yaml end -------------
--------- vagrant up start -------------
--------- vagrant up end -------------

【Notice】Confirm 'to' of 'folders' in 'Homestead.yaml'. And 'vagrant reload' please.

--------- Laravel & laravel homestead installed! -------------

---------【 Laravel & laravel homestead セットアップバッチ「ララスター☆彡」 終了 】-------------
```

## 3. いろいろファイル増えてる

![WS000001.JPG](https://qiita-image-store.s3.amazonaws.com/0/85815/0b88168d-66e4-739b-f978-7693a26af282.jpeg)

## 4. `Homestead.yaml`を書き換える

`Homestead.yaml`を開いて自分の環境にあうようにして保存

## 5. 最後に`vagrant reload`

これで完了

# バッチファイルを作るのもめんどくさい

つ [sola-msr/Larastar](https://github.com/sola-msr/Larastar)

# おわり
- これでトイレ行ってる間にあらかた済ませてくれます
- お使いの環境によっていろいろ変えないと動かないかもしれません。あしからず
- ちなみに書いた人の実行環境はWindows10です