いつかのために

自作サイトができるまで、メモ置き場として使っているブログ

PHP Conference 2018 にいってきました

仕事でPHPを99%使ってるので、行ってきました。
12月上旬にTwitterでなんとなく「カンファレンス」と調べて出てきたので、申し込みに間に合ったのはラッキーでした……。
もっとちゃんと情報収集力をつけたいです。

phpcon.php.gr.jp

全6トラックでのセッションはもちろん、 PHPを使っている企業のブースもたくんさんあり、PHPづくしのイベントでした。

お聞きしたセッションまとめ

私が聞いたセッションは以下の通りです。

PHPのいまとこれから 2018 廣川 類 / 日本PHPユーザ会

最初だけちょこっと聞き逃してしまいました…。
PHP開発者のうち日本人がどれくらいいるのか、
PHP7.3までにはどのような機能が追加されていて、今後はどのような機能が追加される予定なのか、などの話が聞けました。
個人的には、ヒアドキュメントもインデント揃えられるようになったのが嬉しいです!
とても面白いセッションでした。

PHP初心者セッション 柏岡 秀男 / 有限会社アリウープ

こちら、 PHPとかではなく GET や POST もいまいち知らないような人、echo とは?という人向けのセッションでした。
Dockerのことを知ってる使ったことがあるという人も結構な数いたようなので、「初心者」の定義が事前説明で共有しきれなかったのかなと思いました。

PHP,Go,Elasticsearchによる、@cosmeを5倍速くする取り組み R&D部チーフエンジニア 久保田 賢二朗 / 株式会社アイスタイル

@cosme の商品ページを、CSS/JavaScriptにはほぼ手を加えないまま、
サーバー側だけ改良して、SP版ページの応答速度を1.1sec->0.1secにした という話でした。
ページの表示ページや利用者の規模がすごすぎて、うちの会社にあてはめられるシチュエーションではなかったのですが、
アプリケーション刷新時にどういったことをするべきか、どういったデバッグをするべきか、どういったツールをつかうべきか などの実行時に気を付けることがたくさん紹介されており、とても勉強になりました。
特に、刷新する範囲をしっかり決めて(今回は商品ページに絞って)、
細かくリリースしていくことが大切という話は、ぜひ今後意識していきたいと思います。

ドキュメントルート配下に全てのPHPファイルが置かれていた環境をindex.php1個だけにした話 川島 慧 / GMOペパボ株式会社

フレームワークが一般的でなかったときに作られたブログ作成サービスの改善の話でした。
PHPファイルがすべて公開ディレクトリ以下に配置されていたため、
ファイル追加のたびにブラックリストを更新する必要があり、それを終わらせるために改善に踏み切ったとのこと。
大変だけど人力でやるかと思ってしまいそうな点を(相対パスの書き換えとか、URLと対応するファイルの調査とか)、できるだけシステムで解決しようとする面白いお話でした。

苦手!!フレームワークを克服するには 山崎 大助 / ジーズアカデミーTOKYO/デジタルハリウッド大学

こちらも初心者向けセッション。
Laravel初心者として、どういう風な勉強がいいだろうと思い聞きに行ったのですが、ものっすごく要約すると「実践あるのみ!」という一言に尽きましたw
・本などにかけるお金を惜しまないようにしよう
・わからないことがあるなら、いっかい紙に書いてみよう
・わからなくてもとりあえず手を動かしてみれば、どっかのタイミングで「なるほど!」と思うから、とりあえず動こう
PHP初心者セッションと違うのは、具体的にこんなコードを書いてみよう!という話がなかった点ですかね?
苦手と思ってしまう気持ちを打破するためのセッションだからでしょうか?

案外よくできているMySQLというアプリケーション yoku0825

MySQL案外仕事してるよね。”案外”ね。
という、MySQlのいい面・悪い面を紹介してくださったセッションでした。
これ、他のRDBの特徴を知ったうえで聞くセッションだった気がします。
いい面と悪い面を知ったうえで、有効に、時にはサポートしつつ使ってあげようねというお話でした。

PHPApache Sparkで始めるデータ解析処理 竹澤 有貴 / 株式会社アイスタイル

大量データ(しかもデータ分析に向いてないデータ)をさばくときに、Apache Sparkを使ってみようというお話でした。
※ただし、Apache Sparkを使うにはPHPじゃない言語になるとのこと
基本的に、自分の会社では起こりえないようなシチュエーションばかりで、「こんな大規模なデータ触れるようになりたいな!」と思いながら聞いていました。

聞きたかったけどかぶってしまったセッション

マイグレーションアンチパターン [配信なし] YOSHIOKA Eiichiro

最初の時間は「初心者」気分だったので、初心者向けセッション一択だったのですが、Twitterがにぎわっていたようなので、いいなぁと。
来年は配信なし優先するのもありかもしれないですね。

安全なWebアプリケーションの作り方2018 徳丸 浩 / EGセキュアソリューションズ株式会社

こちら、1セッションの間に2セッション聞けちゃうのか…と数を優先して断念しました。
その場でサイトへの攻撃を実演しつつ、セキュリティについて語ってくださったそうなので、見たかったなぁ……。
ブースではうまい棒をありがとうございました。

技術者が企画力を上げたら鬼に金棒。プログラマー向け企画書の書き方 吉政 忠志

ちょうど入れ違いでこのセッションの会場を出たのですが、開場前に行列ができていました。(ほかのセッションでも行列はあったかもしれませんが)
最初は絶対に聞くぞ!とチェックしていたのですが、同時間帯に「MySQL」がタイトルに入ったセッションがあり、そちらを選びました。
DBの知識ほしかったんです……。

Webサービスを育てるための組織作りと文化作り 曽根 壮大 / 株式会社 オミカレ

上記セッションとおなじで、技術力とは別の組織で生き抜くための力をつけるセッションのようですね。
まだ上に立つ立場じゃないし…と優先順位を下げてしまいました。

エンジニア経験5ヶ月の新人がDDDやTDD、コンポーネントを駆使してクソコードを改革してきた話 香月 宜浩 / GVA TECH株式会社

貴重な新人の立場のセッション。聞きたかったです。

参考にしたスライドまとめ

togetter.com

blog.zoe.tools

ありがとうございました!

ブース

いろんな企業のお話を聞けて楽しかったです!
面白かったのはGMOペパボさん。
会場でリアルタイムでConoHaのチューニングを行い、Word Press高速化対決をしていました。

対決終了後、何が勝因だったのかを解説してくれました!
PHPのバージョンアップやキャッシュ がポイントだったそうです。

ほんと、ブースどこ行っても面白かったのですが、
スタンプラリーのせいかスタンプ押したらグッズ渡して終わり といった流れが出来上がってしまい、
お仕事の話を聞きづらかったのは残念でした。
企業側は募集ポスターを掲載していたので、参加者側として自分ももっと「転職活動中で話を聞きたい!」というアピールをするべきだったなと反省。
次はもっとコミュ力あげて向かいます。

最後に

PHPまみれの一日で、とても勉強になりました。
次行くときはセッション選びの際は
・初心者とか考えないで選ぶ
・技術にこだわらず、企画・組織での生き方・評価制度などの話もきいてみる
といったことを意識したいと思います。
年明け後、Laravelカンファレンスやphp会議があるので、同僚を誘っていけたらいいなと計画しております。

conference2019.laravel.jp

phperkaigi.jp

Laravelのローカル開発環境を作成(3)

前々回・前回に引き続き、Git Bashでバシバシコマンドを打っていきます。
pwd

/c/Users/{ユーザー名}

cd Homestead/
vagrant up

Bringing machine 'homestead-7' up with 'virtualbox' provider...
==> homestead-7: Importing base box 'laravel/homestead'...
==> homestead-7: Matching MAC address for NAT networking...
==> homestead-7: Checking if box 'laravel/homestead' is up to date...
==> homestead-7: Setting the name of the VM: homestead-7
Vagrant is currently configured to create VirtualBox synced folders with
the `SharedFoldersEnableSymlinksCreate` option enabled. If the Vagrant
guest is not trusted, you may want to disable this option. For more
information on this option, please refer to the VirtualBox manual:

  https://www.virtualbox.org/manual/ch04.html#sharedfolders

This option can be disabled globally with an environment variable:

  VAGRANT_DISABLE_VBOXSYMLINKCREATE=1

or on a per folder basis within the Vagrantfile:

  config.vm.synced_folder '/host/path', '/guest/path', SharedFoldersEnableSymlinksCreate: false
==> homestead-7: Clearing any previously set network interfaces...
==> homestead-7: Preparing network interfaces based on configuration...
    homestead-7: Adapter 1: nat
    homestead-7: Adapter 2: hostonly
==> homestead-7: Forwarding ports...
    homestead-7: 80 (guest) => 8000 (host) (adapter 1)
    homestead-7: 443 (guest) => 44300 (host) (adapter 1)
    homestead-7: 3306 (guest) => 33060 (host) (adapter 1)
    homestead-7: 4040 (guest) => 4040 (host) (adapter 1)
    homestead-7: 5432 (guest) => 54320 (host) (adapter 1)
    homestead-7: 8025 (guest) => 8025 (host) (adapter 1)
    homestead-7: 27017 (guest) => 27017 (host) (adapter 1)
    homestead-7: 22 (guest) => 2222 (host) (adapter 1)
==> homestead-7: Running 'pre-boot' VM customizations...
==> homestead-7: Booting VM...
==> homestead-7: Waiting for machine to boot. This may take a few minutes...
    homestead-7: SSH address: 127.0.0.1:2222
    homestead-7: SSH username: vagrant
    homestead-7: SSH auth method: private key
    homestead-7: Warning: Connection reset. Retrying...
    homestead-7: Warning: Connection aborted. Retrying...
    homestead-7: Warning: Connection reset. Retrying...
    homestead-7: Warning: Connection aborted. Retrying...
    homestead-7: Warning: Connection reset. Retrying...
    homestead-7: Warning: Connection aborted. Retrying...
    homestead-7: Warning: Connection reset. Retrying...
    homestead-7: Warning: Connection aborted. Retrying...
    homestead-7: Warning: Connection reset. Retrying...
    homestead-7: Warning: Connection aborted. Retrying...
    homestead-7: Warning: Connection reset. Retrying...
    homestead-7:
    homestead-7: Vagrant insecure key detected. Vagrant will automatically replace
    homestead-7: this with a newly generated keypair for better security.
    homestead-7:
    homestead-7: Inserting generated public key within guest...
    homestead-7: Removing insecure key from the guest if it's present...
    homestead-7: Key inserted! Disconnecting and reconnecting using new SSH key...
==> homestead-7: Machine booted and ready!
==> homestead-7: Checking for guest additions in VM...
==> homestead-7: Setting hostname...
==> homestead-7: Configuring and enabling network interfaces...
==> homestead-7: Mounting shared folders...
~ここらへんから鍵とかフォルダ名とか出てきたので省略~

とりあえず、ただ単にvagrantを起動するのは成功した模様?

ここからはHomesteadと連携するように設定を詰めていきます。

---
ip: "192.168.10.10"
memory: 2048
cpus: 1
provider: virtualbox

authorize: ~/.ssh/homestead.pub

keys:
    - ~/.ssh/homestead

folders:
    - map: C:\Users\{ユーザー名}\Homestead\laravel
      to: /home/vagrant/laravel

sites:
    - map: homestead.test
      to: /home/vagrant/laravel/public

databases:
    - homestead

cd ~/.ssh
pwd

/c/Users/{ユーザー名}/.ssh

ssh-keygen -t rsa

Generating public/private rsa key pair.
Enter file in which to save the key (/c/Users/{ユーザー名}/.ssh/id_rsa): 

{鍵の名前}

Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in {鍵の名前}.
Your public key has been saved in {鍵の名前}.pub.
The key fingerprint is:
~以下略~

ls

{鍵の名前} {鍵の名前}.pub

が存在したらOK!

cd Homeste/
ローカル環境用のLaravelもダウンロードです!
composer create-project laravel/laravel laravel --prefer-dist

Installing laravel/laravel (v5.7.0)
  - Installing laravel/laravel (v5.7.0): Downloading (100%)
Created project in laravel
> @php -r "file_exists('.env') || copy('.env.example', '.env');"
Loading composer repositories with package information
Updating dependencies (including require-dev)
Package operations: 72 installs, 0 updates, 0 removals
  - Installing vlucas/phpdotenv (v2.5.1): Downloading (100%)
  - Installing symfony/css-selector (v4.1.6): Downloading (100%)
  - Installing tijsverkoyen/css-to-inline-styles (2.2.1): Downloading (connectinDownloading (100%)
  - Installing symfony/polyfill-php72 (v1.9.0): Downloading (100%)
  - Installing symfony/polyfill-mbstring (v1.9.0): Loading from cache
  - Installing symfony/var-dumper (v4.1.6): Downloading (100%)
  - Installing symfony/routing (v4.1.6): Downloading (100%)
  - Installing symfony/process (v4.1.6): Downloading (100%)
  - Installing symfony/polyfill-ctype (v1.9.0): Loading from cache
  - Installing symfony/http-foundation (v4.1.6): Downloading (100%)
  - Installing symfony/event-dispatcher (v4.1.6): Downloading (100%)
  - Installing psr/log (1.0.2): Downloading (100%)
  - Installing symfony/debug (v4.1.6): Downloading (100%)
  - Installing symfony/http-kernel (v4.1.6): Downloading (100%)
  - Installing symfony/finder (v4.1.6): Downloading (100%)
  - Installing symfony/console (v4.1.6): Downloading (100%)
  - Installing doctrine/lexer (v1.0.1): Downloading (100%)
  - Installing egulias/email-validator (2.1.6): Downloading (100%)
  - Installing swiftmailer/swiftmailer (v6.1.3): Downloading (100%)
  - Installing paragonie/random_compat (v9.99.99): Downloading (100%)
  - Installing ramsey/uuid (3.8.0): Downloading (100%)
  - Installing psr/simple-cache (1.0.1): Downloading (100%)
  - Installing psr/container (1.0.0): Downloading (100%)
  - Installing opis/closure (3.1.1): Downloading (100%)
  - Installing symfony/translation (v4.1.6): Downloading (100%)
  - Installing nesbot/carbon (1.34.0): Downloading (100%)
  - Installing monolog/monolog (1.23.0): Downloading (100%)
  - Installing league/flysystem (1.0.46): Downloading (100%)
  - Installing erusev/parsedown (1.7.1): Downloading (100%)
  - Installing dragonmantank/cron-expression (v2.2.0): Downloading (connecting..Downloading (100%)
  - Installing doctrine/inflector (v1.3.0): Downloading (100%)
  - Installing laravel/framework (v5.7.9): Downloading (100%)
  - Installing fideloper/proxy (4.0.0): Downloading (100%)
  - Installing nikic/php-parser (v4.1.0): Downloading (100%)
  - Installing jakub-onderka/php-console-color (v0.2): Downloading (connecting..Downloading (100%)
  - Installing jakub-onderka/php-console-highlighter (v0.3.2): Downloading (connDownloading (100%)
  - Installing dnoegel/php-xdg-base-dir (0.1): Downloading (100%)
  - Installing psy/psysh (v0.9.8): Downloading (100%)
  - Installing laravel/tinker (v1.0.8): Downloading (100%)
  - Installing beyondcode/laravel-dump-server (1.2.2): Downloading (connecting..Downloading (100%)
  - Installing fzaninotto/faker (v1.8.0): Downloading (100%)
  - Installing hamcrest/hamcrest-php (v2.0.0): Downloading (100%)
  - Installing mockery/mockery (1.2.0): Downloading (100%)
  - Installing filp/whoops (2.2.1): Downloading (100%)
  - Installing nunomaduro/collision (v2.1.0): Downloading (100%)
  - Installing sebastian/version (2.0.1): Downloading (100%)
  - Installing sebastian/resource-operations (2.0.1): Downloading (connecting...Downloading (100%)
  - Installing sebastian/object-reflector (1.1.1): Downloading (100%)
  - Installing sebastian/recursion-context (3.0.0): Downloading (100%)
  - Installing sebastian/object-enumerator (3.0.3): Downloading (100%)
  - Installing sebastian/global-state (2.0.0): Downloading (100%)
  - Installing sebastian/exporter (3.1.0): Downloading (100%)
  - Installing sebastian/environment (3.1.0): Downloading (100%)
  - Installing sebastian/diff (3.0.1): Downloading (100%)
  - Installing sebastian/comparator (3.0.2): Downloading (100%)
  - Installing phpunit/php-timer (2.0.0): Downloading (100%)
  - Installing phpunit/php-text-template (1.2.1): Downloading (100%)
  - Installing phpunit/php-file-iterator (2.0.2): Downloading (100%)
  - Installing theseer/tokenizer (1.1.0): Downloading (100%)
  - Installing sebastian/code-unit-reverse-lookup (1.0.1): Downloading (connectiDownloading (100%)
  - Installing phpunit/php-token-stream (3.0.0): Downloading (100%)
  - Installing phpunit/php-code-coverage (6.0.8): Downloading (100%)
  - Installing doctrine/instantiator (1.1.0): Downloading (100%)
  - Installing webmozart/assert (1.3.0): Downloading (100%)
  - Installing phpdocumentor/reflection-common (1.0.1): Downloading (connecting.Downloading (100%)
  - Installing phpdocumentor/type-resolver (0.4.0): Downloading (100%)
  - Installing phpdocumentor/reflection-docblock (4.3.0): Downloading (connectinDownloading (100%)
  - Installing phpspec/prophecy (1.8.0): Downloading (100%)
  - Installing phar-io/version (2.0.1): Downloading (100%)
  - Installing phar-io/manifest (1.0.3): Downloading (100%)
  - Installing myclabs/deep-copy (1.8.1): Downloading (100%)
  - Installing phpunit/phpunit (7.4.0): Downloading (100%)
symfony/var-dumper suggests installing ext-intl (To show region name in time zone dump)
symfony/routing suggests installing doctrine/annotations (For using the annotation loader)
symfony/routing suggests installing symfony/config (For using the all-in-one router or any loader)
symfony/routing suggests installing symfony/dependency-injection (For loading routes from a service)
symfony/routing suggests installing symfony/expression-language (For using expression matching)
symfony/routing suggests installing symfony/yaml (For using the YAML loader)
symfony/event-dispatcher suggests installing symfony/dependency-injection
symfony/http-kernel suggests installing symfony/browser-kit
symfony/http-kernel suggests installing symfony/config
symfony/http-kernel suggests installing symfony/dependency-injection
symfony/console suggests installing symfony/lock
egulias/email-validator suggests installing ext-intl (PHP Internationalization Libraries are required to use the SpoofChecking validation)
swiftmailer/swiftmailer suggests installing ext-intl (Needed to support internationalized email addresses)
swiftmailer/swiftmailer suggests installing true/punycode (Needed to support internationalized email addresses, if ext-intl is not installed)
paragonie/random_compat suggests installing ext-libsodium (Provides a modern crypto API that can be used to generate random bytes.)
ramsey/uuid suggests installing ircmaxell/random-lib (Provides RandomLib for use with the RandomLibAdapter)
ramsey/uuid suggests installing ext-libsodium (Provides the PECL libsodium extension for use with the SodiumRandomGenerator)
ramsey/uuid suggests installing ext-uuid (Provides the PECL UUID extension for use with the PeclUuidTimeGenerator and PeclUuidRandomGenerator)
ramsey/uuid suggests installing moontoast/math (Provides support for converting UUID to 128-bit integer (in string form).)
ramsey/uuid suggests installing ramsey/uuid-doctrine (Allows the use of Ramsey\Uuid\Uuid as Doctrine field type.)
ramsey/uuid suggests installing ramsey/uuid-console (A console application for generating UUIDs with ramsey/uuid)
symfony/translation suggests installing symfony/config
symfony/translation suggests installing symfony/yaml
monolog/monolog suggests installing aws/aws-sdk-php (Allow sending log messages to AWS services like DynamoDB)
monolog/monolog suggests installing doctrine/couchdb (Allow sending log messages to a CouchDB server)
monolog/monolog suggests installing ext-amqp (Allow sending log messages to an AMQP server (1.0+ required))
monolog/monolog suggests installing ext-mongo (Allow sending log messages to a MongoDB server)
monolog/monolog suggests installing graylog2/gelf-php (Allow sending log messages to a GrayLog2 server)
monolog/monolog suggests installing mongodb/mongodb (Allow sending log messages to a MongoDB server via PHP Driver)
monolog/monolog suggests installing php-amqplib/php-amqplib (Allow sending log messages to an AMQP server using php-amqplib)
monolog/monolog suggests installing php-console/php-console (Allow sending log messages to Google Chrome)
monolog/monolog suggests installing rollbar/rollbar (Allow sending log messages to Rollbar)
monolog/monolog suggests installing ruflin/elastica (Allow sending log messages to an Elastic Search server)
monolog/monolog suggests installing sentry/sentry (Allow sending log messages to a Sentry server)
league/flysystem suggests installing ext-fileinfo (Required for MimeType)
league/flysystem suggests installing ext-ftp (Allows you to use FTP server storage)
league/flysystem suggests installing league/flysystem-aws-s3-v2 (Allows you to use S3 storage with AWS SDK v2)
league/flysystem suggests installing league/flysystem-aws-s3-v3 (Allows you to use S3 storage with AWS SDK v3)
league/flysystem suggests installing league/flysystem-azure (Allows you to use Windows Azure Blob storage)
league/flysystem suggests installing league/flysystem-cached-adapter (Flysystem adapter decorator for metadata caching)
league/flysystem suggests installing league/flysystem-eventable-filesystem (Allows you to use EventableFilesystem)
league/flysystem suggests installing league/flysystem-rackspace (Allows you to use Rackspace Cloud Files)
league/flysystem suggests installing league/flysystem-sftp (Allows you to use SFTP server storage via phpseclib)
league/flysystem suggests installing league/flysystem-webdav (Allows you to use WebDAV storage)
league/flysystem suggests installing league/flysystem-ziparchive (Allows you to use ZipArchive adapter)
league/flysystem suggests installing spatie/flysystem-dropbox (Allows you to use Dropbox storage)
league/flysystem suggests installing srmklive/flysystem-dropbox-v2 (Allows you to use Dropbox storage for PHP 5 applications)
laravel/framework suggests installing aws/aws-sdk-php (Required to use the SQS queue driver and SES mail driver (^3.0).)
laravel/framework suggests installing doctrine/dbal (Required to rename columns and drop SQLite columns (^2.6).)
laravel/framework suggests installing ext-pcntl (Required to use all features of the queue worker.)
laravel/framework suggests installing ext-posix (Required to use all features of the queue worker.)
laravel/framework suggests installing guzzlehttp/guzzle (Required to use the Mailgun and Mandrill mail drivers and the ping methods on schedules (^6.0).)
laravel/framework suggests installing league/flysystem-aws-s3-v3 (Required to use the Flysystem S3 driver (^1.0).)
laravel/framework suggests installing league/flysystem-cached-adapter (Required to use the Flysystem cache (^1.0).)
laravel/framework suggests installing league/flysystem-rackspace (Required to use the Flysystem Rackspace driver (^1.0).)
laravel/framework suggests installing league/flysystem-sftp (Required to use the Flysystem SFTP driver (^1.0).)
laravel/framework suggests installing moontoast/math (Required to use ordered UUIDs (^1.1).)
laravel/framework suggests installing nexmo/client (Required to use the Nexmo transport (^1.0).)
laravel/framework suggests installing pda/pheanstalk (Required to use the beanstalk queue driver (^3.0).)
laravel/framework suggests installing predis/predis (Required to use the redis cache and queue drivers (^1.0).)
laravel/framework suggests installing pusher/pusher-php-server (Required to use the Pusher broadcast driver (^3.0).)
laravel/framework suggests installing symfony/dom-crawler (Required to use most of the crawler integration testing tools (^4.1).)
laravel/framework suggests installing symfony/psr-http-message-bridge (Required to psr7 bridging features (^1.0).)
psy/psysh suggests installing ext-pcntl (Enabling the PCNTL extension makes PsySH a lot happier :))
psy/psysh suggests installing ext-posix (If you have PCNTL, you'll want the POSIX extension as well.)
psy/psysh suggests installing ext-pdo-sqlite (The doc command requires SQLite to work.)
psy/psysh suggests installing hoa/console (A pure PHP readline implementation. You'll want this if your PHP install doesn't already support readline or libedit.)
filp/whoops suggests installing whoops/soap (Formats errors as SOAP responses)
sebastian/global-state suggests installing ext-uopz (*)
phpunit/php-code-coverage suggests installing ext-xdebug (^2.6.0)
phpunit/phpunit suggests installing phpunit/php-invoker (^2.0)
phpunit/phpunit suggests installing ext-soap (*)
phpunit/phpunit suggests installing ext-xdebug (*)
Writing lock file
Generating optimized autoload files
> Illuminate\Foundation\ComposerScripts::postAutoloadDump
> @php artisan package:discover
Discovered Package: beyondcode/laravel-dump-server
Discovered Package: fideloper/proxy
Discovered Package: laravel/tinker
Discovered Package: nesbot/carbon
Discovered Package: nunomaduro/collision
Package manifest generated successfully.
> @php artisan key:generate
Application key set successfully.

vagrant ssh

VM must be running to open SSH connection. Run `vagrant up`
to start the virtual machine.

vagrant up

Bringing machine 'homestead-7' up with 'virtualbox' provider...
==> homestead-7: Checking if box 'laravel/homestead' is up to date...
==> homestead-7: Clearing any previously set forwarded ports...
==> homestead-7: Clearing any previously set network interfaces...
==> homestead-7: Preparing network interfaces based on configuration...
    homestead-7: Adapter 1: nat
    homestead-7: Adapter 2: hostonly
==> homestead-7: Forwarding ports...
    homestead-7: 80 (guest) => 8000 (host) (adapter 1)
    homestead-7: 443 (guest) => 44300 (host) (adapter 1)
    homestead-7: 3306 (guest) => 33060 (host) (adapter 1)
    homestead-7: 4040 (guest) => 4040 (host) (adapter 1)
    homestead-7: 5432 (guest) => 54320 (host) (adapter 1)
    homestead-7: 8025 (guest) => 8025 (host) (adapter 1)
    homestead-7: 27017 (guest) => 27017 (host) (adapter 1)
    homestead-7: 22 (guest) => 2222 (host) (adapter 1)
==> homestead-7: Running 'pre-boot' VM customizations...
==> homestead-7: Booting VM...
==> homestead-7: Waiting for machine to boot. This may take a few minutes...
    homestead-7: SSH address: 127.0.0.1:2222
    homestead-7: SSH username: vagrant
    homestead-7: SSH auth method: private key
==> homestead-7: Machine booted and ready!
==> homestead-7: Checking for guest additions in VM...
==> homestead-7: Setting hostname...
==> homestead-7: Configuring and enabling network interfaces...
==> homestead-7: Mounting shared folders...
    homestead-7: /vagrant => C:/Users/{ユーザー名}/Homestead
==> homestead-7: Machine already provisioned. Run `vagrant provision` or use the `--provision`
==> homestead-7: flag to force provisioning. Provisioners marked to run always will still run.

すでに設定済み?というような英文が見えるのですが、この vagrant up は必要だったのか???
ともかくもう一度ssh接続です!
vagrant ssh

Welcome to Ubuntu 18.04.1 LTS (GNU/Linux 4.15.0-32-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/advantage

  System information as of Sat Oct 13 06:00:16 UTC 2018

  System load:  0.23              Processes:           129
  Usage of /:   9.6% of 61.80GB   Users logged in:     1
  Memory usage: 20%               IP address for eth0: 10.0.2.15
  Swap usage:   0%                IP address for eth1: 192.168.10.10

 * Security certifications for Ubuntu!
   We now have FIPS, STIG, CC and a CIS Benchmark.

   - http://bit.ly/Security_Certification

 * Want to make a highly secure kiosk, smart display or touchscreen?
   Here's a step-by-step tutorial for a rainy weekend, or a startup.

   - https://bit.ly/secure-kiosk


0 packages can be updated.
0 updates are security updates.

行けました!

Last login: Sat Oct 13 05:58:16 2018

日付は…日本時間じゃなさそうです。
pwd

/home/vagrant

ls
無でした。
2018/11/04追記。
無じゃ同期失敗してますね???原因調査中です。
ということでこっちでもLaravelをインストール。
composer create-project laravel/laravel laravel --prefer-dist

Installing laravel/laravel (v5.7.0)
  - Installing laravel/laravel (v5.7.0): Downloading (100%)
Created project in laravel
> @php -r "file_exists('.env') || copy('.env.example', '.env');"
Loading composer repositories with package information
Updating dependencies (including require-dev)
{上記と同じなので省略}
Application key set successfully.

ll

total 84
~略~
drwxrwxr-x 12 vagrant vagrant 4096 Oct 13 06:06 laravel/
~略~

cd laravel/
ll

total 244
~略~
drwxrwxr-x  5 vagrant vagrant   4096 Sep  4 13:12 public/
~略~

publicフォルダが確認できたので撤退!
logout`

Connection to 127.0.0.1 closed.

Homestead.ymlどおりの環境が整ったところでvagrantを再起動します。
vagrant reload --provision

==> homestead-7: Attempting graceful shutdown of VM...
==> homestead-7: Checking if box 'laravel/homestead' is up to date...
==> homestead-7: Clearing any previously set forwarded ports...
==> homestead-7: Clearing any previously set network interfaces...
==> homestead-7: Preparing network interfaces based on configuration...
    homestead-7: Adapter 1: nat
    homestead-7: Adapter 2: hostonly
==> homestead-7: Forwarding ports...
    homestead-7: 80 (guest) => 8000 (host) (adapter 1)
    homestead-7: 443 (guest) => 44300 (host) (adapter 1)
    homestead-7: 3306 (guest) => 33060 (host) (adapter 1)
    homestead-7: 4040 (guest) => 4040 (host) (adapter 1)
    homestead-7: 5432 (guest) => 54320 (host) (adapter 1)
    homestead-7: 8025 (guest) => 8025 (host) (adapter 1)
    homestead-7: 27017 (guest) => 27017 (host) (adapter 1)
    homestead-7: 22 (guest) => 2222 (host) (adapter 1)
==> homestead-7: Running 'pre-boot' VM customizations...
==> homestead-7: Booting VM...
==> homestead-7: Waiting for machine to boot. This may take a few minutes...
    homestead-7: SSH address: 127.0.0.1:2222
    homestead-7: SSH username: vagrant
    homestead-7: SSH auth method: private key
    homestead-7: Warning: Connection aborted. Retrying...
    homestead-7: Warning: Connection reset. Retrying...
    homestead-7: Warning: Connection aborted. Retrying...
    homestead-7: Warning: Connection reset. Retrying...
==> homestead-7: Machine booted and ready!
==> homestead-7: Checking for guest additions in VM...
==> homestead-7: Setting hostname...
==> homestead-7: Configuring and enabling network interfaces...
==> homestead-7: Mounting shared folders...
~ここらへんからフォルダ名とか鍵とかたくさん出てきたので省略~

そして http://homestead.test/ にアクセスすると…。 Laravelの文字が表示されました! f:id:sheefelt:20181014215044p:plain これで開発環境が用意されました!
もしかしたらDBとかつながってないかもしれないので、 そこの調査からですね……。

おまけ

Homesteadの中身が不十分のままvagrant upをすると、以下のようなエラーが出てきました。
vagrant up

Bringing machine 'default' up with 'virtualbox' provider...
==> default: Box 'base' could not be found. Attempting to find and install...
    default: Box Provider: virtualbox
    default: Box Version: >= 0
==> default: Box file was not detected as metadata. Adding it directly...
==> default: Adding box 'base' (v0) for provider: virtualbox
    default: Downloading: base
    default:
An error occurred while downloading the remote file. The error
message, if any, is reproduced below. Please fix this error and try
again.

Couldn't open file /C:/Users/{ユーザー名}/Homestead/base

Laravelのローカル開発環境を作成(2)

次はHomesteadの導入です。
git clone https://github.com/laravel/homestead.git ~/Homestead

Cloning into 'C:/Users/{ユーザー名}/Homestead'...
remote: Enumerating objects: 28, done.
remote: Counting objects: 100% (28/28), done.
remote: Compressing objects: 100% (18/18), done.
remote: Total 3125 (delta 11), reused 19 (delta 9), pack-reused 3097
Receiving objects: 100% (3125/3125), 655.44 KiB | 1.57 MiB/s, done.
Resolving deltas: 100% (1862/1862), done.

cd ~/Homestead/

github.com

Latest release

v7.18.0

とあるので…
git checkout v7.18.0

Note: checking out 'v7.18.0'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by performing another checkout.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -b with the checkout command again. Example:

  git checkout -b <new-branch-name>

HEAD is now at 48fb3dc 💎 🔖 Tagging v7.18.0

init.bat

bash: init.bat: command not found

こちらのコマンドで成功しました!
bash init.sh

Homestead initialized!

Laravelのローカル開発環境を作成(1)

本番環境先に作るなよ!順番違うだろ!って感じですが、
公式ドキュメントオススメのLaravel開発環境を導入します。

Laravel Homestead 5.7 Laravel

Laravel Homestead(入植農地、「ホームステード」)はパッケージを事前に済ませた、Laravel公式の"box"で、PHPやWebサーバ、その他のサーバソフトウェアをローカルマシンにインストールする必要なく、素晴らしい開発環境を準備できます。オペレーティングシステムでごちゃごちゃになる心配はもうありません!

最高じゃないですか!
早速、コマンドプロンプトを起動して……
vagrant box add laravel/homestead

An error occurred while downloading the remote file. The error
message, if any, is reproduced below. Please fix this error and try
again.

OpenSSL SSL_read: SSL_ERROR_SYSCALL, errno 10054

……通信状況の問題か、何度やっても上記のエラーが起こりました。

検索すると
【Vagrant】SSL read: error:00000000:lib(0):func(0):reason(0), errno 10054 · GitHub
インターネットの回線が弱いからとのこと。

また、別のサイトでは、
vagrantは前回のデータから引き続きデータをダウンロードしてくれるので、
何度もダウンロードを繰り返していれば、いつかは成功するよ!
という記述もあったのですが、私のPCでは一向に完了しそうにありませんでした。

qiita.com

今回はこちらのサイトを参考に、Git bushからコマンドを入力
vagrant box add laravel/homestead

==> 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: 

3

Enter your choice: 3
==> box: Adding box 'laravel/homestead' (v6.3.0) for provider: virtualbox
    box: Downloading: https://vagrantcloud.com/laravel/boxes/homestead/versions/6.3.0/providers/virtualbox.box
==> box: Box download is resuming from prior download progress
    box: Download redirected to host: vagrantcloud-files-production.s3.amazonaws    box:
==> box: Successfully added box 'laravel/homestead' (v6.3.0) for 'virtualbox'!

成功しました!
box追加だけでてこずったので、今回は分割して投稿します。

WordPressの画像のアップロード先を設定

せっかくWordPressにつなげたのに、画像をアップロードできません…。
画像を投稿しても、「画像がありません」の画面から変化がなし。

画像を保存するフォルダのパスが悪いのか?と思って、こちらの記事を参考に
takayakondo.com
【upload_path】と【upload_url_path】を書き換えてみるも。

この親ディレクトリのアクセス権はサーバーによる書き込みを許可していますか?

というエラーが出てきてしまいました。

しかし、このエラーであれば、エラー文の通り、サーバーからのアクセスを可能にしてあげればOKです!
以下に私の手順をまとめました。

cd /var/www/html/{任意のフォルダ名}/app/public/
ここは、WordPressのindex.phpがおいてあるディレクトリに置き換えてくださいね。

mkdir {画像用のディレクトリ名}
このままだと作成したユーザーが所有者になってしまうので…。

sudo chown -R apache:apache {画像用のディレクトリ名}/
sudo はrootユーザーで操作している場合は不要です。
ll

total 196
drwxrwxr-x  2 apache apache  4096 Oct  3 00:13 {画像用のディレクトリ名}
(以下略)

画像投稿できるようになると、サイトを飾り付けられるので楽しいですね!

IPアドレス(ドメイン部分)を入れた時のデフォルトの表示ページをWordPressに変更

su -
まずはrootユーザーになります。
vi /etc/httpd/conf/httpd.conf
と打つと、Apacheのいろいろな設定がずらっと出てきます。
ssh接続の時もお世話になりました。
?DocumentRoot
と打って以下の部分を見つけます。

DocumentRoot "/var/www/html"

私は、これを以下のように書き換えました。

DocumentRoot "/var/www/html/{任意のフォルダ名}/app/public"

/{任意のフォルダ名}/app/public のところを最初に表示したいページがあるパスに書き換えましょう。
ついでに、URLにindexファイルのないディレクトリを直叩きすると
Indexof などと出てきて、ファイル一覧が出てきてしまう状況も直します。

<Directory "/var/www/html">
    #
    # Possible values for the Options directive are "None", "All",
    # or any combination of:
    #   Indexes Includes FollowSymLinks SymLinksifOwnerMatch ExecCGI MultiViews
    #
    # Note that "MultiViews" must be named *explicitly* --- "Options All"
    # doesn't give it to you.
    #
    # The Options directive is both complicated and important.  Please see
    # http://httpd.apache.org/docs/2.4/mod/core.html#options
    # for more information.
    #
    Options Indexes FollowSymLinks

    #
    # AllowOverride controls what directives may be placed in .htaccess files.
    # It can be "All", "None", or any combination of the keywords:
    #   Options FileInfo AuthConfig Limit
    #
    AllowOverride None

    #
    # Controls who can get stuff from this server.
    #
    Require all granted
</Directory>

これを、こう。

<Directory "/var/www/html">
(中略)
    Options FollowSymLinks
(中略)
    AllowOverride All
(中略)
</Directory>

centOS7では-Indexesとは書かずに、単語自体を消去するみたいなので注意です。
AllowOverride All は後々必要になるので、ついでに。
パーマリンク設定の際に必要になる .htaccessファイル がかかわってきます。

systemctl start httpd.service
そしてApacheの再起動。
以上でhttp://{IPアドレス} だけを入れた時のページがWordPressのindex.phpになりました!

これ以外にもURLに合わせて表示ページを変える方法はいくらでもある気がします…。
ですが、余計なページに行かれたくないのでこれを応急処置とします。

と、これで終わると管理画面に行けなくなってしまいます。
http://{IPアドレス}/wp-admin
と打つと、
http://{IPアドレス}/{任意のフォルダ名}/app/public/wp-admin
といったような、元のURLに合わせたリダイレクトが動いてしまいます。

なので、SQLから直接書き換えちゃいます。
mysql -u root -p
use {wordpressのDB名};
select * from wp_options where option_name = "siteurl" \G

*************************** 1. row ***************************
   option_id: 1
 option_name: siteurl
option_value: {元のURL}
    autoload: yes
1 row in set (0.00 sec)

select * from wp_options where option_name = "home" \G

*************************** 1. row ***************************
   option_id: 2
 option_name: home
option_value: {元のURL}
    autoload: yes
1 row in set (0.00 sec)

update wp_options set option_value ='{http://{IPアドレス}}' where option_name = "site_url" ;
update wp_options set option_value ='{http://{IPアドレス}}' where option_name = "home" ;

これで管理画面にも問題なくいけるようになったかと思います。

VPSにWordPressを導入

ja.wordpress.org まずは公式サイトを見ます。
Wordpressはzip形式での配布が基本のようですね。
サーバー側に直接DLしてもいいのですが、私は一旦ローカルにDLしました。

日本語版の解説サイトはこちら。
WordPress - WordPress Codex 日本語版

サーバーの用意 - WordPress Codex 日本語版

サーバー要件 バージョン 3.2 系以降 ・PHP バージョン 5.2.4 以上 ・MySQL バージョン 5.0.15 以上または MariaDB (バージョン問わず)

ということで、私のサーバーの様子を見てみます。

php -v

PHP 7.2.9

mysql -v

Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 846
Server version: 10.1.36-MariaDB MariaDB Server

要件を満たしてますね!

WordPress のインストール - WordPress Codex 日本語版
詳しいDL方法も書いてくれています。優しい。

手順1は、RLoginのファイル転送システムを使いました。
LocalというWordpressの開発環境が簡単に作れるサービスを利用していたため、
すでに自分のPCにWodpressのファイルがあったからです。

local.getflywheel.com

/var/www/html 配下に置きましょう。
手順2は、SQLを使いました。
mysql -u root -p
(パスワード未設定の場合は、パスワード入力時にエンターを押すだけで入れます。危険なので設定しましょう。)

CREATE DATABASE {データベースの名前};

Query OK, 1 row affected (0.00 sec)

GRANT ALL PRIVILEGES ON {データベースの名前}.* TO "ワードプレス用DBユーザー名"@"ホスト名" IDENTIFIED BY "パスワード";

Query OK, 0 rows affected (0.00 sec)

ホスト名?となったのですが、
ConoHaのコントロールパネルの
VPS設定>IPアドレス 逆引きホスト名
というところに書いてありました!
mysqlから抜け出して、
hostname
で表示されるものでもOKです!
ConoHaだと最初から「localhost」となっているかもしれません…?
調べます。

hostname は通常 localhost です。

って書いてありました。すみません。

手順3 configの作成です。
cd /var/www/html/{任意のフォルダ名}/app/public
cp wp-config.php wp-config-sample.php
vi wp-config.php

// ** MySQL settings ** //
/** The name of the database for WordPress */
define( 'DB_NAME', 'local' );

/** MySQL database username */
define( 'DB_USER', 'root' );

/** MySQL database password */
define( 'DB_PASSWORD', 'root' );

/** MySQL hostname */
define( 'DB_HOST', 'localhost' );

/** Database Charset to use in creating database tables. */
define( 'DB_CHARSET', 'utf8' );

/** The Database Collate type. Don't change this if in doubt. */
define( 'DB_COLLATE', '' );

これを自分のDBに合わせて書き換えるのですが、書き換えるのは
local, rootなどの右側です!
私は間違えましたw

その下の

認証ユニークキー

に関しては、Localを使っていたためか、すべて埋まっていました。

手順4 すでにファイル置いてあるのでカットです。

手順5 私の場合はまだドメイン取得してなかったのもあり、
http://{IPアドレス}/{任意のフォルダ名}/app/public/wp-admin/install.php
でした。
app/public はLocalを利用したためでしょうか…?
いまはWordpressの導入完了を優先したいので、後日調べてみます。

上記のURLを直打ちして、出てきたフォームに必要事項を記入したら、Wordpressの完成です!

ドメインを取得したら、こちらでも公開したいと思います。