vagrant@homestead:~$ cd code/ vagrant@homestead:~/code$ composer create-project --prefer-dist laravel/laravel myapp
Laravelのプロジェクト作成時
「mkdir(): Permission denied」が発生した場合の対処法をご紹介。
Creating a "laravel/laravel" project at "./myapp" Installing laravel/laravel (v8.5.10) [ErrorException] mkdir(): Permission denied create-project [-s|--stability STABILITY] [--prefer-source] [--prefer-dist] [--repository REPOSITORY] [--repository-url REPOSITORY-URL] [--add-repository] [--dev] [--no-dev] [--no-custom-installers] [--no-scripts] [--no-progress] [--no-secure-http] [--keep-vcs] [--remove-vcs] [--no-install] [--ignore-platform-req IGNORE-PLATFORM-REQ] [--ignore-platform-reqs] [--ask] [--] [] [ ] [ ]
mkdir(): Permission denied
このエラーは権限がない場合にでるエラーです。
対象のフォルダに対して権限を付与してあげましょう。
vagrant@homestead:~$ sudo chmod 777 ./code
上記のコマンドは、homestead内のcodeディレクトリに対して、
すべてのユーザーに読み込み書き込み実行権限を与えています。
対応はこれだけです。
再度、composer create-projectコマンドを実行してみます。
vagrant@homestead:~$ composer create-project --prefer-dist laravel/laravel myapp
Creating a "laravel/laravel" project at "./myapp"
Installing laravel/laravel (v8.5.10)
- Downloading laravel/laravel (v8.5.10)
- Installing laravel/laravel (v8.5.10): Extracting archive
Created project in /home/vagrant/myapp
> @php -r "file_exists('.env') || copy('.env.example', '.env');"
Loading composer repositories with package information
Updating dependencies
Lock file operations: 105 installs, 0 updates, 0 removals
- Locking asm89/stack-cors (v2.0.2)
- Locking brick/math (0.9.2)
無事インストール処理が動き出しました。
同じエラーで先に進めない方の参考になれば幸いです。
]]>$ vagrant up
Bringing machine 'homestead' up with 'virtualbox' provider...
==> homestead: Box 'laravel/homestead' could not be found. Attempting to find and install...
homestead: Box Provider: virtualbox
homestead: Box Version: >= 11.0.0, < 12.0.0
==> homestead: Loading metadata for box 'laravel/homestead'
homestead: URL: https://vagrantcloud.com/laravel/homestead
==> homestead: Adding box 'laravel/homestead' (v11.0.0) for provider: virtualbox
homestead: Downloading: https://vagrantcloud.com/laravel/boxes/homestead/versions/11.0.0/providers/virtualbox.box
homestead: Download redirected to host: vagrantcloud-files-production.s3.amazonaws.com
homestead: Progress: 100% (Rate: 1478k/s, Estimated time remaining: --:--:-- homestead:
homestead: Calculating and comparing box checksum...
The specified checksum type is not supported by Vagrant: sha512.
Vagrant supports the following checksum types:
md5, sha1, sha256
何が原因でしょうか。。。
The specified checksum type is not supported by Vagrant: sha512. Vagrant supports the following checksum types: md5, sha1, sha256
この部分があやしいです。
直訳すると、
「指定されたchecksumの種別はVagrantでサポートされていません:sha512」
色々とググってみたところ、同じ問題でハマってる記事がいくつかヒットしました。
どうもVagrantのバージョンを上げれば解決するようです。
先人の方の知恵をお借りします!
そもそも自分の環境のVagrantはいくつなのでしょうか。
$ vagrant --version Vagrant 2.2.5
だそうです。
ということで、vagrantのバージョンをあげてみました。
古いバージョンをアンインストール後、新しいバージョンを再インストールしました。
$ vagrant –version
Vagrant 2.2.6
再度「vagrant up」を実行してみます。
$ vagrant up
Bringing machine 'homestead' up with 'virtualbox' provider...
==> homestead: Box 'laravel/homestead' could not be found. Attempting to find and install...
homestead: Box Provider: virtualbox
homestead: Box Version: >= 11.0.0, < 12.0.0
==> homestead: Loading metadata for box 'laravel/homestead'
homestead: URL: https://vagrantcloud.com/laravel/homestead
==> homestead: Adding box 'laravel/homestead' (v11.0.0) for provider: virtualbox
homestead: Downloading: https://vagrantcloud.com/laravel/boxes/homestead/versions/11.0.0/providers/virtualbox.box
homestead: Download redirected to host: vagrantcloud-files-production.s3.amazonaws.com
homestead: Progress: 100% (Rate: 1860k/s, Estimated time remaining: --:--:-- homestead:
homestead: Calculating and comparing box checksum...
==> homestead: Successfully added box 'laravel/homestead' (v11.0.0) for 'virtualbox'!
==> homestead: Importing base box 'laravel/homestead'...
先に進みだしました。
そして、無事にインストールと起動が完了しました。
同じエラーでハマっている方はvagrantを上げて試してみてください。
]]>それでは早速、
ループ処理を例にラムダ式について解説していきます。
private ListitemList = new List { "AAA","BBB","CCC","DDD","EEE" };
例として
いくつかの文字列が格納されたListがあり、
Listの要素1つ1つの文字列の長さを格納したリストを作成する
といった処理を実装するとします。
forやforeachではこのような実装になります。
ListeditedList = new List (); for (int i = 0; i < itemList.Count; i++) { editedList.Add(list[i].Length); }
ListeditedList = new List (); foreach (string str in list) { editedList.Add(str.Length); }
これらは皆さんがよく使用するおなじみのforやforeachです。
では、早速このループ処理をラムダ式に置き換えてみます。
今回はSelectメソッドを使って説明していきます。
private ListitemList = new List { "AAA","BBB","CCC","DDD","EEE" }; public void Exec() { var editedList = itemList.Select(AddText).; } // Selectメソッドに渡すメソッド private int AddText(string arg) { return arg.Length; }
上記のコードを見てみると、
Selectメソッドの引数にメソッドそのものを渡しているのが分かるでしょうか。
itemListの型はList
Selectメソッドはリストの要素分、引数で渡したメソッドを実行します。
また、stringしか入らないリストということがジェネリックによって保障されています。
よって、AddTextメソッドの引数はstringとなります。
メソッドを引数で渡すにしても、1行程度の処理の為にメソッドを作るのは馬鹿らしいですよね。
そんな時、こんな書き方に置き換えることができます。
private void Exec()
{
var editedList = itemList.Select((string arg) => { return "000_" + arg; });
}
AddTextメソッドで行っていた処理をメソッド内に直接書きます。
これがラムダ式です。
普段よく見るラムダ式はもっとシンプルだけど?って思った方もいらっしゃいますかね。
実は、ラムダ式は様々な記述を省略できます。
実際に省略してみます。
// 何も省略してないラムダ式
var editedList = itemList.Select((string arg) => { return "000_" + arg; });
↓
// ジェネリックにより型が保障されているため、引数の型が省略できる
var editedList = itemList.Select((arg) => { return "000_" + arg; });
↓
// {} とreturn も省略できる
var editedList = itemList.Select((arg) => "000_" + arg);
↓
// 引数のカッコ()も省略できる var editedList = itemList.Select(arg => "000_" + arg);
先ほどの例で、ラムダ式はメソッドを渡していることと同じだということを説明しました。
同じ考え方でこんなこともできます。
以下は、コレクションのリストをFor文でループさせ、ひとつずつ出力する。
というロジックです。
foreach (string str in itemList )
{
Console.WriteLine(str);
}
結果:
AAA BBB CCC DDD EEE
このロジックをLinqに置き換えると以下のようになります。(メソッド渡し)
private void Action01()
{
list.ForEach(OutputText);
}
private void OutputText(string arg)
{
Console.WriteLine(arg);
}
さらに、ラムダ式に置き換えます。
private void Action02()
{
list.ForEach(arg => Console.WriteLine(arg));
}
ForEachの引数に処理そのものを定義します。
非常にシンプルなパターンでのサンプルで解説しましたが
なんとなくイメージできたでしょうか。
結局のところ、実際にコーディングでラムダ式を使ってみる。というのが
理解するための一番の近道だと思います。
最初は実装に時間がかかるかもしれませんが、
なぜそう動くのかを考えながら実装すれば徐々に理解できるようになってきます。
前提条件として以下の3つのツールをインストールする必要があります。
Git for winodws
VirtualBox
vagrant
ちなみに今回、このページで環境構築した際の
それぞれのバージョンは以下になります。ご参考まで。
・OS:Windows10 Pro
・Git for winodws (2.30.0.2)
・VirtualBox(5.2.44)
・vagrant(2.2.5)
まずはローカル環境にHomesteadの環境を作成していきます。
以下、手順です。
Git Bashを起動します。
Git Bashの起動方法は以下の通り。
windowsスタートメニュー -> Git -> Git Bash

起動したら以下を実行
$ vagrant box add laravel/homestead
「Enter your choice:」が表示されたら、3を入力してEnter
==> box: Loading metadata for box 'laravel/homestead'
box: URL: https://vagrantcloud.com/laravel/homestead
This box can work with multiple providers! The providers that it
can work with are listed below. Please review the list and choose
the provider you will be working with.
1) hyperv
2) parallels
3) virtualbox
4) vmware_desktop
Enter your choice:
次にHomesteadとう名前のディレクトリにgitのhomesteadリポジトリを作成します。
以下を実行
$ git clone https://github.com/laravel/homestead.git Homestead
windows10の場合、
Gitのデフォルトホームディレクトリは「C:\Users\ユーザー\」なので
「C:\Users\ユーザー\Homestead」というディレクトリが作成されます。
作成したディレクトリへ移動します。
$ cd ./Homestead
初期化用のシェルを実行します。(Homesteadの設定ファイルなどが作成される)
$ ./init.sh
成功すると以下の文字列が表示されます。
Homestead initialized!
これでhomesteadのセットアップは完了です。
続いて、Git for WindowsのSSH作成機能を利用して
VMに入るためのSSH用の鍵を作成します。
鍵作成用のディレクトリを作成します。
$ mkdir ~/.ssh && cd $_
鍵作成用のコマンドを実行します。
$ ssh-keygen -b 4096
※4096は鍵長の長さ
デフォルトのKey名で問題ないければ何も入力せずにEnter
未入力の場合、デフォルトの「id_rsa」がKey名となる
Generating public/private rsa key pair. Enter file in which to save the key (/c/Users/yoshi/.ssh/id_rsa):
任意のパスワードを入力してEnter
Enter passphrase (empty for no passphrase):
パスワードを再入力
Enter passphrase (empty for no passphrase):
成功すると以下のような文字列が表示されます。
Your identification has been saved in XXXXX Your public key has been saved in XXXXX.pub The key fingerprint is: SHA256:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX The key's randomart image is: +---[RSA 4096]----+ ・・・・・・・・・・ ・・・・・・・・・・ ・・・・・・・・・・ ・・・・・・・・・・ ・・・・・・・・・・ ・・・・・・・・・・ ・・・・・・・・・・ +----[SHA256]-----+
以下のフォルダに行き、鍵のファイルが作成されていることを確認してください。
「C:\Users\ユーザー\.ssh\」
・id_rsa
・id_rsa.pub
これでSSHの鍵作成完了です。
Homesteadを正常に起動させるためには
開発環境にあわせてHomestead.yamlを編集する必要があります。
「C:\Users\ユーザー\Homestead\Homestead.yaml」をテキストエディタ等で開き
①~④の場所を確認・修正してください。
---
ip: "192.168.10.10"
memory: 2048
cpus: 2
provider: virtualbox
authorize: ~/.ssh/id_rsa.pub ←①鍵ファイルの格納場所、ファイル名を指定
keys:
- ~/.ssh/id_rsa ←②鍵ファイルの格納場所、ファイル名を指定
folders:
- map: C:\Users\ユーザ\Laravel ←③ローカルの開発ディレクトリを指定
to: /home/vagrant/code
type: "nfs" ←④追加
sites:
- map: homestead.test
to: /home/vagrant/code/myapp/public ←⑤myappは後々の作業で作成するプロジェクト名
databases:
- homestead
features:
- mariadb: false
- ohmyzsh: false
- webdriver: false
# ports:
# - send: 50000
# to: 5000
# - send: 7777
# to: 777
# protocol: udp
いよいよvagrantの起動です。
git bashにてHomesteadのディレクトリへ移動し、以下のコマンドで起動します。
$ vagrant up
うまくいけば以下のように起動が始まります。
Bringing machine 'homestead' up with 'virtualbox' provider...
==> homestead: Checking if box 'laravel/homestead' version '10.1.1' is up to date...
==> homestead: Clearing any previously set network interfaces...
==> homestead: Preparing network interfaces based on configuration...
homestead: Adapter 1: nat
homestead: Adapter 2: hostonly
==> homestead: Forwarding ports...
homestead: 80 (guest) => 8000 (host) (adapter 1)
homestead: 443 (guest) => 44300 (host) (adapter 1)
homestead: 3306 (guest) => 33060 (host) (adapter 1)
起動には数分かかります。
のんびり待ちましょう。
余談ですが、vagrant upでの起動時に
いくつかのエラーではまりまして。
解決方法をアップしています。
同じようにエラーとなってしまった場合は参考になるかもしれませんので
リンク張っておきます。


仮想環境が立ち上がったら、
vagrant sshコマンドで仮想環境へログインします。
$ vagrant ssh
Welcome to Ubuntu 20.04.1 LTS (GNU/Linux 5.4.0-48-generic x86_64) _ _ _ | | | | | | | |__ ___ _ __ ___ ___ ___| |_ ___ __ _ __| | | '_ \ / _ \| '_ ` _ \ / _ \/ __| __/ _ \/ _` |/ _` | | | | | (_) | | | | | | __/\__ \ || __/ (_| | (_| | |_| |_|\___/|_| |_| |_|\___||___/\__\___|\__,_|\__,_| * Homestead v10.17.0, v11.4.0 * Settler v9.7.2 (Ubuntu 18.04) * Settler v10.1.1 (Ubuntu 20.04) 0 updates can be installed immediately. 0 of these updates are security updates. Last login: Sat Jan 16 07:00:28 2021 from 10.0.2.2 vagrant@homestead:~$
無事にログインできました。
続いて、laravelのプロジェクトを作成します。
cdコマンドでcodeディレクトリへ移動後、composer create-projectを実行します。
vagrant@homestead:~$ cd code/ vagrant@homestead:~/code$ composer create-project --prefer-dist laravel/laravel myapp
数十秒で作成完了です。
これでプロジェクトが作成されました。
もし、Could not deleteのエラーが発生してしまったら
こちらのページを参考にしてみてください。


続いてIPアドレスの転送設定を行います。
windowsの場合、hostsファイルを編集することで設定可能です。
hostsファイルは以下にあります。
「C:\Windows\System32\drivers\etc\hosts」
hostsファイルをテキストエディタ等で開き、
以下を追加します。
192.168.10.10 homestead.test
IPアドレス、ホスト名ともに、Homestead.yamlで設定した値を設定してください。
ちなみにhostsファイルの編集は管理者権限が必要になります。
管理者権限での編集方法がわからない場合は、googleで調べればすぐ見つかると思います。
これですべての準備が完了しました。
ブラウザでデフォルトページを表示させてみましょう。
任意のWEBブラウザのURLに「homestead.test」と入力しEnter
以上!
]]>vagrant@homestead:~$ cd code/ vagrant@homestead:~/code$ composer create-project --prefer-dist laravel/laravel myapp
Laravelのmyappという名前のプロジェクトを作成したいのですが
なぜか「Could not delete」が発生してプロジェクトが作成できません。
Creating a "laravel/laravel" project at "./myapp"
Installing laravel/laravel (v8.5.8)
- Installing laravel/laravel (v8.5.8): Extracting archive
Install of laravel/laravel failed
[RuntimeException]
Could not delete /home/vagrant/myapp:
create-project [-s|--stability STABILITY] [--prefer-source] [--prefer-dist] [--repository REPOSITORY] [--repository-url REPOSITORY-URL] [--add-repository] [--dev] [--no-dev] [--no-custom-installers] [--no-scripts] [--no-progress] [--no-secure-http] [--keep-vcs] [--remove-vcs] [--no-install] [--ignore-platform-req IGNORE-PLATFORM-REQ] [--ignore-platform-reqs] [--ask] [--] [] [] []
調べてみると様々な解決方法がヒットするが、
どれを試しても一向にエラーは解消せず・・・。
結果、ハマりにハマり解決するのに丸一日かかりました。
そして、肝心の原因はというと
Homestead.yamlの設定が原因でした。
folders:
- map: C:\Users\ユーザ\Laravel
to: /home/vagrant/code/myapp ←原因はここ
sites:
- map: homestead.test
to: /home/vagrant/code/myapp/public
composerで作成するプロジェクトルートのディレクトリを
foldersのmapで指定すると
「Could not delete」のエラーが発生してしまうようです。
以下のように再設定することで解決しました。
folders:
- map: C:\Users\yoshi\Laravel
to: /home/vagrant/code/
sites:
- map: homestead.test
to: /home/vagrant/code/myapp/public
同じエラーで先に進めない方の参考になれば幸いです。
]]>