CHANSHIGELOG

いろんなこと

whoisproxyのAPIをアップデートした

前回、僕が運用しているwhoisproxy.infoのAPI版を作成した話をしましたが、その中の一つであるdig(DNSレコードを検索するやつ)で、クエリタイプも指定できるようになりました。

許可しているクエリタイプは、以下です。

a
any
aaaa
mx
ns
soa
txt
srv
cname

リクエストとしては、https://api.whoisproxy.info/v1/dig/{ドメイン名}/{クエリタイプ} の形式となります。
以下、例としてicloud.comのAレコードとMXレコードをリクエストしてみます。

/v1/dig/icloud.com/a

{
  "code": 200,
  "state": "success",
  "_links": {
    "self": {
      "href": "/v1/dig/icloud.com/a"
    }
  },
  "results": [
    "icloud.com.  2246 IN A 17.253.144.10"
  ]
}

/v1/dig/icloud.com/mx

{
  "code": 200,
  "state": "success",
  "_links": {
    "self": {
      "href": "/v1/dig/icloud.com/mx"
    }
  },
  "results": [
    "icloud.com.  271 IN MX 10 mx1.mail.icloud.com.",
    "icloud.com.  271 IN MX 10 mx2.mail.icloud.com.",
    "icloud.com.  271 IN MX 10 mx3.mail.icloud.com.",
    "icloud.com.  271 IN MX 10 mx4.mail.icloud.com.",
    "icloud.com.  271 IN MX 10 mx5.mail.icloud.com.",
    "icloud.com.  271 IN MX 10 mx6.mail.icloud.com."
  ]
}

クエリタイプを渡さない場合は、これまで通り"ANY"でのリクエストととなり、仮に許可しないクエリタイプを指定された場合はエラーを返します。

/v1/dig/icloud.com

{
  "code": 200,
  "state": "success",
  "_links": {
    "self": {
      "href": "/v1/dig/icloud.com"
    }
  },
  "results": [
    "icloud.com.  21571 IN SOA adns1.apple.com. hostmaster.apple.com. 2011093772 1800 900 2592000 1800",
    "icloud.com.  21571 IN NS b.ns.apple.com.",
    "icloud.com.  21571 IN NS e.ns.apple.com.",
    "icloud.com.  21571 IN NS c.ns.apple.com.",
    "icloud.com.  21571 IN NS f.ns.apple.com.",
    "icloud.com.  21571 IN NS a.ns.apple.com.",
    "icloud.com.  21571 IN NS d.ns.apple.com.",
    "icloud.com.  3571 IN A 17.253.144.10",
    "icloud.com.  271 IN MX 10 mx5.mail.icloud.com.",
    "icloud.com.  271 IN MX 10 mx6.mail.icloud.com.",
    "icloud.com.  271 IN MX 10 mx4.mail.icloud.com.",
    "icloud.com.  271 IN MX 10 mx3.mail.icloud.com.",
    "icloud.com.  271 IN MX 10 mx1.mail.icloud.com.",
    "icloud.com.  271 IN MX 10 mx2.mail.icloud.com.",
    "icloud.com.  3571 IN TXT  google-site-verification=knAEOH4QxR29I4gjRkpkvmUmP2AA7WrDk8Kq0wu9g9o",
    "icloud.com.  3571 IN TXT  v=spf1 ip4:17.36.0.0/16 ip4:17.41.0.0/16 ip4:17.58.0.0/16 ip4:17.110.0.0/15 ip4:17.111.110.0/23 ip4:17.120.0.0/16 ip4:17.133.0.0/16 ip4:17.139.0.0/16 ip4:17.142.0.0/15 ip4:17.151.1.0/24    ip4:17.158.0.0/15 ip4:17.162.0.0/15 ip4:17.164.0.0/16 ip4:17.171.37.0/24 ip4:17.172.0.0/16 ip4:17.179.168.0/23 ~all"
  ]
}

/v1/dig/icloud.com/query (Error)

{
  "code": 403,
  "state": "fail",
  "_links": {
    "self": {
      "href": "/v1/dig/icloud.com/query"
    }
  },
  "results": "query-type:query is not supported."
}

※digはGoogle Public DNS(@8.8.8.8)で参照した結果を返しています

地味に便利だったりするので、ぜひご活用ください!

前回の記事 chanshige.hatenablog.com

ドメインのwhoisとdnsレコードを検索できるAPIをつくってみた

ドメインwhois情報やDNSレコードを検索できるWHOISPROXYサイトを運営していますが、世の中に新しいドメインが増えて、検索できる種類が限られてきたことと、そろそろ(見た目も)作り変えたいなと思ってきたので、SlimPHP3x(Framework)を使って簡単なAPIを作ってみました。

APIにするからにはそれっぽくapi.whoisproxy.infoFQDNとして、WEB上でも検索できる2種類(whois, dig)のエンドポイントを用意しました。
結果は、安定のJSON形式で返すようにしています。

https://api.whoisproxy.info/v1/{whois or dig}/{検索したいドメイン名} でリクエストする感じです。

試しにAppleiCloudドメイン(icloud.com)を使ってWHOISとDIGのリクエスト(GET)を投げると、以下のように返ってきます。

/v1/whois/icloud.com

{
  "code": 200,
  "state": "success",
  "_links": {
    "self": {
      "href": "/v1/whois/icloud.com"
    }
  },
  "results": {
    "domain": "icloud.com",
    "servername": "whois.corporatedomains.com",
    "tld": "com",
    "registered": true,
    "reserved": false,
    "client_hold": false,
    "detail": {
      "registrant": [
        "Registrant Name: Domain Administrator",
        "Registrant Organization: Apple Inc.",
        "Registrant Street: One Apple Park Way",
        "Registrant City: Cupertino",
        "Registrant State/Province: CA",
        "Registrant Postal Code: 95014",
        "Registrant Country: US",
        "Registrant Phone: +1.4089961010",
        "Registrant Phone Ext:",
        "Registrant Fax: +1.4089741560",
        "Registrant Fax Ext:",
        "Registrant Email: domains@apple.com"
      ],
      "admin": [
        "Admin Name: Domain Administrator",
        "Admin Organization: Apple Inc.",
        "Admin Street: One Apple Park Way",
        "Admin City: Cupertino",
        "Admin State/Province: CA",
        "Admin Postal Code: 95014",
        "Admin Country: US",
        "Admin Phone: +1.4089961010",
        "Admin Phone Ext:",
        "Admin Fax: +1.4089741560",
        "Admin Fax Ext:",
        "Admin Email: domains@apple.com"
      ],
      "tech": [
        "Tech Name: Domain Administrator",
        "Tech Organization: Apple Inc.",
        "Tech Street: One Apple Park Way",
        "Tech City: Cupertino",
        "Tech State/Province: CA",
        "Tech Postal Code: 95014",
        "Tech Country: US",
        "Tech Phone: +1.4089961010",
        "Tech Phone Ext:",
        "Tech Fax: +1.4089741560",
        "Tech Fax Ext:",
        "Tech Email: apple-noc@apple.com"
      ],
      "billing": [],
      "status": [
        "Domain Status: clientTransferProhibited http://www.icann.org/epp#clientTransferProhibited"
      ],
      "date": [
        "Updated Date: 2018-09-27T20:55:11Z",
        "Creation Date: 1999-01-15T05:00:00Z",
        "Registrar Registration Expiration Date: 2020-01-15T05:00:00Z"
      ],
      "name_server": [
        "Name Server: b.ns.apple.com",
        "Name Server: d.ns.apple.com",
        "Name Server: f.ns.apple.com",
        "Name Server: e.ns.apple.com",
        "Name Server: a.ns.apple.com",
        "Name Server: c.ns.apple.com"
      ]
    }
  }
}

/v1/dig/icloud.com

{
  "code": 200,
  "state": "success",
  "_links": {
    "self": {
      "href": "/v1/dig/icloud.com"
    }
  },
  "results": [
    "; (1 server found)",
    ";; global options: +cmd",
    "icloud.com.  21371 IN SOA adns1.apple.com. hostmaster.apple.com. 2011089978 1800 900 2592000 1800",
    "icloud.com.  21371 IN NS c.ns.apple.com.",
    "icloud.com.  21371 IN NS a.ns.apple.com.",
    "icloud.com.  21371 IN NS d.ns.apple.com.",
    "icloud.com.  21371 IN NS b.ns.apple.com.",
    "icloud.com.  21371 IN NS e.ns.apple.com.",
    "icloud.com.  21371 IN NS f.ns.apple.com.",
    "icloud.com.  3371 IN A 17.253.144.10",
    "icloud.com.  71 IN MX 10 mx1.mail.icloud.com.",
    "icloud.com.  71 IN MX 10 mx6.mail.icloud.com.",
    "icloud.com.  71 IN MX 10 mx5.mail.icloud.com.",
    "icloud.com.  71 IN MX 10 mx4.mail.icloud.com.",
    "icloud.com.  71 IN MX 10 mx2.mail.icloud.com.",
    "icloud.com.  71 IN MX 10 mx3.mail.icloud.com.",
    "icloud.com.  3371 IN TXT  google-site-verification=knAEOH4QxR29I4gjRkpkvmUmP2AA7WrDk8Kq0wu9g9o",
    "icloud.com.  3371 IN TXT  v=spf1 ip4:17.36.0.0/16 ip4:17.41.0.0/16 ip4:17.58.0.0/16 ip4:17.110.0.0/15 ip4:17.111.110.0/23 ip4:17.120.0.0/16 ip4:17.133.0.0/16 ip4:17.139.0.0/16 ip4:17.142.0.0/15 ip4:17.151.1.0/24    ip4:17.158.0.0/15 ip4:17.162.0.0/15 ip4:17.164.0.0/16 ip4:17.171.37.0/24 ip4:17.172.0.0/16 ip4:17.179.168.0/23 ~all"
  ]
}

まず、whoisについては以前僕が作成したwhoisライブラリを使っていて、新ドメインも大体は検索できる?かな?と思っています。
検証するにも、種類が多すぎているので思いついた時にしかチェックしていません。もし結果が来ない!おかしい!があったらGithubのIssueかLINEでも連絡ください!切実っっ!

GDPR施行により、ドメインによっては結果がほとんど出てこないものもありますが、各ドメインレジストリレジストラのポリシーに準して、whois結果自体は加工せずそのまま使用しているので、そういうこともあります。

github.com

digについては、GooglePublicDNS(8.8.8.8)に対してリクエストを投げているだけなので特別な加工はしていません。

僕がカスタマーサポート業をやっていた時代(4,5年前)からつくってたwhoisproxy.infoですが、今も利用してくれている方がいてとても嬉しいです!ありがとうございます!!!!!!1

このサイトが何かの役に立っている限り、徐々に更新していきたいと思いますが、サイト自体のリニューアルはこれからやりますので引き続きよろしくお願いします。

※2019/02/20追記  json形式をcontent-type: application/hal+jsonに変更しました。
 今後の予定として、正常・エラー時のレスポンスにLink属性をつけて、リファレンス等のリンクをつける予定です。

dockerを使ってシュッと開発環境をつくる

前回、Vagrant(VirtualBox)を使った開発環境構築の流れを書きましたが、PHPと触れ合うまでに結構時間がかかります。

サーバー構築って割と勉強になると思っていますが、(実際に)環境構築の時間はできる限りかけたくないものなので、最近の僕はDockerを使ってアプリケーションごとにシュッと環境を立ち上げています。

immutableかつ、使わない時はサッと環境を捨てることができるし管理が楽です。ありがとうコンテナ!
そこで、僕が使ってるDockerfileとdocker-composeファイルをGithubに公開しました。

github.com

README.md に書いてあるようなコマンドを実行してもらえば、あっという間に環境が出来上がるので、お試しください!

docker-composeは、Dockerイメージを複合的に管理・実行できる(と思っている)ツールで、たとえばWordpressのようにwebサーバ(PHP)と、DBが必要なアプリケーションであれば、使いたい各イメージ(webサーバ、DB)と、ポートや環境変数をdocker-compose.yml書くことで、いい感じに出来上がります。料理のレシピみたいなもんだとおもっていただければ良いのかなと(?)

dockerfile自体は docker commit でバージョン管理もできるのでとても素敵。

※Dockerっって!っという方は、さくらさんのとてもわかりやすいナレッジがあるので是非ご覧ください knowledge.sakura.ad.jp

el7+phpenv+nginx(php-fpm)で開発環境を作り直した話 その2

前回からの続き、主にwebサーバー(nginx + php-fpm)に対するの設定を書き残していきます。
chanshige.hatenablog.com

yum install するとき -y をつけてる記事が多いですが、インストールされる内容(依存関係のパッケージ)など眺めながらやるのもオススメですので、書いてません。

では、nginxをインストール

# yum install nginx

自動起動設定もやっておく
# systemctl enable nginx
 ※ nginx.service って明示的に宣言するのもあり

nginxの設定ファイルを用意する
# vi /etc/nginx/conf.d/dev.conf

server {
    listen       81;
    server_name  192.168.33.10:81;

    error_log    /var/log/nginx/error_81.log;
    access_log   /var/log/nginx/access_81.log;

    root         /home/vagrant;
    index        index.html index.htm index.php;

    location / {
        try_files $uri $uri/ /index.php$is_args$args;
    }

    location ~ \.php$ {
        fastcgi_pass   127.0.0.1:9000;
        fastcgi_index  index.php;
        include        fastcgi_params;
        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
    }
}

URLはhttp://192.168.33.10:81 、ドキュメントルート(root)は/home/vagrantにしてますが、その他諸々も自由に変えてください。

php-fpmの設定を変更する
# vi /usr/local/phpenv/versions/7.2.13/etc/php-fpm.d/www.conf
user/group を適宜調整してください。よくあるのはどちらもnginxです

; Unix user/group of processes
; Note: The user is mandatory. If the group is not set, the default user's group
;       will be used.
user = vagrant
group = vagrant

phpのバージョンに合わせた、php-fpmをサービス登録する。
既存ファイルを参考にして作る記事や説明が多いですが、phpenvに同梱されているのでコピーして使います。

php7.2 を選択中なので、こちらを使う
※ systemd 配下に置くサービス名はわかりやすくバージョンつけておく
# cp /usr/local/phpenv/versions/7.2.13/etc/systemd/system/php-fpm.service /usr/lib/systemd/system/php-fpm-7.2.13.service

ここまでできたら、あとはnginx, php-fpm を起動すれば完了です。

# systemctl start php-fpm-7.2.13.service
# systemctl start nginx.service

phpのバージョンを変更するときは、以下をやってください。

7.2のphp-fpmとnginxを終了
# systemctl stop php-fpm-7.2.13.service
# systemctl stop nginx.service

バージョン毎のphp-fpm.serviceをコピー
cp /usr/local/phpenv/versions/x.x.x/etc/systemd/system/php-fpm.service /usr/lib/systemd/system/php-fpm-x.x.x.service

起動
# systemctl start php-fpm-x.x.x.service
# systemctl start nginx.service

この作業を通して、アプリケーションやサイト1つ動かすにしても、サーバー側では様々な設定が行われて動いてる(公開できている)ことがよくわかります。

こういったことを気にしなくても、ボタン一つで環境が立ち上がって、快適に使える環境を提供しているサービスがあり、それを支えてる方々は真面目にすげーなと思うばかりです。

今回の手順に関して、細かい内容はググったらだいたい出てくるので割愛してますが、世の中に向けて公開するサーバーを構築する場合は、もっと(設定を)やらないといけないことがたくさんあるので、あくまでもローカルで楽しんでくださいね😂

近いうちに、Dockerを使って開発環境作ってみた話を書こうと思います。

おわり

【2019】el7+phpenv+nginx(php-fpm)で開発環境を作り直した話 その1

あけましておめでとうございます。
2019年も引き続き、よろしくお願いいたします。

去年の大晦日から元旦にかけ、MacOSをMojaveにアップグレードしたついでに、
Vagrantの開発環境も新しくしたので、備忘録程度に残していきたいと思います。

旧環境を取っておけば一発だったと思いますが、実際にコマンド叩いて環境構築していくのも楽しいし、理解が深まるので久しぶりにやってみました。

まずは作業ディレクトリとCentOS7のBoxを使う前提のVagrantfileを生成します。

$ mkdir vagrant-dev
$ cd vagrant-dev
$ vagrant init centos/7

環境のサーバIPを設定 (好きなように変更)
$ vim Vagrantfile

  # Create a private network, which allows host-only access to the machine
  # using a specific IP.
  config.vm.network "private_network", ip: "192.168.33.10"

結構便利なプラグインも入れておく
$ vagrant plugin install vagrant-vbguest

お立ち上げからsshログイン

$ vagrant up
$ vagrant ssh

これでベースができたので、ここからサーバの設定とphpenv(rbenv), nginxなどなどを入れます。

rootに移動
$ sudo su -

SELinuxを無効にする
# vi /etc/sysconfig/selinux

disabled に変更して保存

SELINUX=disabled

timezoneをAsia/Tokyo にOverwrite

# cp /usr/share/zoneinfo/Asia/Tokyo /etc/localtime

ここでsshログアウト後、 $ vagrant reload をしてVMを再起動
あらためて $vagrant sshログイン後、rootに移動する $ sudo su -

TimezoneがJSTになってることを確認
# date

EPELリポジトリと、phpenv等で必要になるパッケージをインストール
# yum install epel-release openssl-devel readline-devel zlib-devel libxml2-devel bzip2-devel curl-devel libjpeg-devel libpng-devel libicu-devel gcc-c++ libtidy-devel libxslt-devel autoconf bison-devel wget unzip perl-ExtUtils-MakeMaker

gitをインストール ※yumでも入りますが、新しいVersionを使う

# wget https://www.kernel.org/pub/software/scm/git/git-2.9.5.tar.gz
# tar vfx git-2.9.5.tar.gz
# cd git-2.9.5
# make configure
# ./configure --prefix=/usr
# make all
# make install

インストールできたか確認
# git --version

不要なファイルを削除
# cd ../ && rm -rf git-*

phpenv をシステムワイドに入れる

# git clone https://github.com/CHH/phpenv.git
# phpenv/bin/phpenv-install.sh
# mv .phpenv/ /usr/local/phpenv
# chmod 775 -R /usr/local/phpenv
# git clone https://github.com/php-build/php-build.git /usr/local/phpenv/plugins/php-build
# exec $SHELL
# phpenv

rbenv も必要になるので同様に入れる

# git clone http://github.com/sstephenson/rbenv.git .rbenv
# mv .rbenv/ /usr/local/rbenv
# chmod 775 -R /usr/local/rbenv
# git clone https://github.com/sstephenson/ruby-build.git /usr/local/rbenv/plugins/ruby-build
# exec $SHELL
# rbenv

rbenvのprofileを修正して保存
# vi /etc/profile.d/rbenv.sh

export RBENV_ROOT="/usr/local/rbenv"
export PATH="$RBENV_ROOT/bin:/usr/local/phpenv/bin:$PATH"
eval "$(rbenv init -)"
eval "$(phpenv init -)"

リロード
# exec $SHELL

rubyインストール

# rbenv install 2.6.0
# rbenv global 2.6.0
# rbenv versions
# ruby -v

phpenv をちょっと修正
# vi /usr/local/phpenv/bin/phpenv

#!/usr/bin/env bash
export PHPENV_ROOT=${PHPENV_ROOT:-'/usr/local/phpenv'}
export RBENV_ROOT="$PHPENV_ROOT"
exec "$RBENV_ROOT/libexec/rbenv" "$@"

リロード
# exec $SHELL

やっと、phpインストール
5.6 / 7.1 / 7.2 を入れます

# phpenv install 7.1.25
# phpenv install 7.2.13
# phpenv install 5.6.39

確認 (このときはまだバージョン指定がされていない状態)
# phpenv versions
* system (set by /usr/local/phpenv/version)
  5.6.39
  7.1.25
  7.2.13

コマンド無いよ!となる
# php -v
rbenv: php: command not found

The `php' command exists in these PHP versions:
  5.6.39
  7.1.25
  7.2.13

システムのphpバージョンを7.2に切り替える (バージョンはインストールしたものを指定)

# phpenv global 7.2.13

確認
# phpenv versions
  system
  5.6.39
  7.1.25
* 7.2.13 (set by /usr/local/phpenv/version)

生きた...!!! ちゃっかりXdebugもある素敵
# php -v
PHP 7.2.13 (cli) (built: Jan  9 2019 20:17:32) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.2.0, Copyright (c) 1998-2018 Zend Technologies
    with Zend OPcache v7.2.13, Copyright (c) 1999-2018, by Zend Technologies
    with Xdebug v2.6.1, Copyright (c) 2002-2018, by Derick Rethans

ついでにcomposerも入れましょう

# curl -sS https://getcomposer.org/installer | php
# mv composer.phar /usr/local/bin/composer

※ 以下でも可
# yum install composer

確認(rootで動かすなや!といわれてます。実際はrootで叩かないのでOK)
# composer --version
Do not run Composer as root/super user! See https://getcomposer.org/root for details
Composer version 1.8.0 xxxxx

長くなりましたので、この辺にしておきます!
次回は php-fpm + nginx の設定を書こうと思います。

※追記 書いたのでリンク

chanshige.hatenablog.com

ブログタイトル変えてみた

どうもちゃんしげです。CHANSHIGELOG にしてみました。CHANGELOGっぽい。

3月から全くブログを書いていなかったので、ここ最近の出来事をざっくりと。

といったかんじで、公私ともにPHPerの日々を送っております。

PHPカンファレンス福岡2018

f:id:tanakashigeki:20180725001738j:plain:w500

PSR関連のセッションがあったのは個人的に嬉しかった。 今回はLog(PSR-3)だったけど、僕的に好きなPSR-7系の話もどこかで聞きた、、(登壇

www.php-fig.org

www.php-fig.org

今年も盛り上がりと場の雰囲気作りがすごくよかったです!運営スタッフの方々ありがとうございます。

PHPカンファレンス関西2018

f:id:tanakashigeki:20180725001747j:plain:w500

名札にスキルとか好きなものをステッカー貼ってアピれるの良い!

PHPerKaigiから追っかけてた「続・SOLIDのってどんなふうに使うの?」の集大成をみることができてよかった。デザパタ大事ですよ!!!!!!

続・SOLIDの原則ってどんなふうに使うの? 〜オープン・クローズドの原則 センパイのコーディングノート編〜 - Speaker Deck

話の進め方が、センパイとコウハイくんの対話形式っていうのが親しみやすくて、面白い。日々の設計・実装(保守でも)ちょっとした意識だったり見方・捉え方を変えてみるっていうのは、やり続けたいと思いました。

PHPカンファレンス関西の会場であるグランフロント大阪

f:id:tanakashigeki:20180725002146j:plain:w500

いつみてもイケてる。なぜかグランフロント好きなんだなー(ロゴも)

やっとチリチリいけた(人の回転よすぎて驚き)

f:id:tanakashigeki:20180725002141j:plain:w500

トッピングありきであることを後で気づいたのでまた行く

セリーヌディオンすごすぎた、、最高。(10年ぶりの来日とのこと)

f:id:tanakashigeki:20180725002148j:plain:w500

番外編:福岡・大濠公園近くの「炭焼きとりこ」美味しい

f:id:tanakashigeki:20180725002157j:plain:w500

来月は今のところ福岡から出る予定はないけど、お盆だし実家帰ろうと思います。あとひきラーメン食べたいし

PHPerKaigi2018 いってきた @東京

3/9 - 3/10 に開催された記念すべき第一回目の PHPerKaigi 2018 に行ってきました!(遅)

phperkaigi.jp

僕は3/10(土曜)からの参加で、久しぶりの東京&練馬ってどこ?やばい楽しいという気持ちで望んだんですが、 率直に楽しかったし笑ったし、最高な1日を過ごすことができたと感じています。

個人的には、フレームワークBearSunday」の郡山さんのセッションを聴きたい!きっかけで参加を決めたんですが、 それも前職でお世話になったエンジニアの師匠がリスペクトをされていた方だというのもあったのでとても楽しみでした。

※ おぉ〜やばいやばいってなってました。

今回の参加で、僕が特に気になったタイトルは以下です!

SOLIDの原則ってどんなふうに使うの? - Speaker Deck

前職の師匠がちょくちょく仰ってたSOLIDの原則でしたが、例えがわかりやすくて理解度がさらに深まったと思います! 実際にやろうとするとなかなかうまくいかないなと思うんですが、良書読んだり、良いコード好きなアプローチを見て真似ることが大事かなと思いました。

Hackで作るマイクロフレームワーク - Speaker Deck

正直なところ、HHVM/Hackを全然チェックしていなかったので新鮮すぎました!!!!

男になるしかねーなっ!という気持ちです!!!!

BEAR.Sunday (2018) - Speaker Deck

コーディング・実装に対する考え方というところが本当にどハマりしてしまいました。 まだまだ理解は浅いですが、いろんなアプローチ方法(デザパタ等)を見る・取り込むことで深まる気がしています!

以下の様にメモ取ってたのですが、まだまとめられていないので改めて書こうかなって思います!

アプリケーション制約こそがフレームワーク
それぞれのドメイン(DB・認証) -> ライブラリ

アプリケーション全体にわたっての制約が"フレームワーク"

DI: 疎結合とコーディングを可能にする、ソフトウェアデザインとパターンのセット
実装ではなく、インターフェースに対してプログラムをする

実装に対するプログラム ができてないソフトウェアとは?

密結合なソフトウェアでもユーザへの価値は提供できる -> get shit done.
ただし、開発者としてメンテナンス性はどうか?
密結合している場合、再度工事が必要になってしまう。

ユーザーに新しい価値を届け続けるには、密結合のソフトウェアは向いてない
成功したソフトウェアは必ず変更し続ける

コンセント:インターフェース

インターフェースに対してコンポーネントを作る。
ドライヤー(例)以外の価値を届けることができる

リスコフの置換原則
decoratorパターン
compositeパターン
NullObjectパターン
adapterパターン

インターフェースに対して依存しているだけ
抽象を使う。インターフェースは中身がない規格だけ。

僕のやっていきがさらに高まった瞬間でもあります (本家からのレスポンスがあああああ!)

また今回のPHPerKaigi2018ですが、03/24現在でYoutubeにセッションがあがっているようですので、 是非観ていただけたらと思います、、、!

あとちょっとおもったのが、LaravelやcakePHPってやはり人気なのですね! やっぱ触っていかないとなっていう気持ちですが、僕はSymfony3(4)/Slim3 も結構好きなので、この好きをもっとアピールできるように鍛えていきたいと思います。

最後に

東京久しぶりに行ったんですよ!もう3年ぶりってぐらいだったんですけど、朝5時起きで福岡->東京(羽田)で着いたのが8:30過ぎで、 そこから京急->地下鉄?->練馬 だたんですが、結構遠いんですね!3/10オープニング間に合わなかったんです笑

結構ドタバタな1日でしたが、PHPerKaigi2018素直に楽しかったです!鳥貴族も行けたので満足です笑

なにかしらの形でしっかりアウトプットしていきたいと思いました!

次回はしっかり前乗りしていこうと思います2019!!!!!

スタッフの皆様ならびにスピーカーの方々本当にありがとうございました!!!