SlideShare a Scribd company logo
1 of 47
Download to read offline
anyenv + phpenv + php-build が
便利すぎる件
内山 雄司 (@y__uti)
2016-06-29 第103回PHP勉強会
自己紹介
内山 雄司 (@y__uti)
◦ http://y-uti.hatenablog.jp/ (phpusers-ja)
仕事
◦ 受託開発の会社 (株式会社ピコラボ) でプログラマをしています
興味
◦ プログラミング言語処理系
◦ 機械学習
2016-06-29 第103回 PHP 勉強会 2
目次
はじめに
anyenv を 使ってみよう
応用編
1. ディレクトリごとにバージョンを指定する
2. anyenv のプラグインを使う
3. PHP のビルド手順をカスタマイズする
4. ローカルリポジトリの運用
CHH/phpenv の話
2016-06-29 第103回 PHP 勉強会 3
phpenv とは
複数の PHP のバージョンをコマンド一発で切り替えるツール
2016-06-29 第103回 PHP 勉強会 4
$ php -v
PHP 5.4.16 (cli) (built: May 12 2016 13:45:17)
Copyright (c) 1997-2013 The PHP Group
Zend Engine v2.4.0, Copyright (c) 1998-2013 Zend Technologies
with Zend OPcache v7.0.3, Copyright (c) 1999-2014, by Zend Technologies
$ phpenv global 7.1.0alpha1
7.1.0alpha1
$ php -v
PHP 7.1.0alpha1 (cli) (built: Jun 23 2016 23:58:03) ( NTS )
Copyright (c) 1997-2016 The PHP Group
Zend Engine v3.1.0-dev, Copyright (c) 1998-2016 Zend Technologies
with Zend OPcache v7.1.0alpha1, Copyright (c) 1999-2016, by Zend Technologies
anyenv + phpenv + php-build
php-build とは
◦ PHP の超簡単ビルドシステム
2016-06-29 第103回 PHP 勉強会 5
$ phpenv install 7.1.0alpha1
◦ これだけでソースコードのダウンロードからインストールまで全自動
anyenv とは
◦ 各言語の *env を一元管理するツール
$ anyenv install rbenv
◦ これだけで Ruby でも同じように使える
これらの *env は Ruby (rbenv) が元祖。PHP が後発
anyenv を使ってみよう
2016-06-29 第103回 PHP 勉強会 6
anyenv のインストール
https://github.com/riywo/anyenv の説明どおり
1. リポジトリを clone する
2016-06-29 第103回 PHP 勉強会 7
$ git clone https://github.com/riywo/anyenv ~/.anyenv
2. 初期化ファイルに設定を追加する
$ echo 'export PATH="$HOME/.anyenv/bin:$PATH"' >> ~/.bash_profile
$ echo 'eval "$(anyenv init -)"' >> ~/.bash_profile
3. 初期化ファイルの設定を反映する
$ exec bash -l
phpenv のインストール
anyenv install コマンドを実行する
2016-06-29 第103回 PHP 勉強会 8
$ anyenv install phpenv
$ exec bash -l
◦ 以下がまとめてインストールされる
◦ madumlao/phpenv phpenv 本体
◦ php-build/php-build PHP をビルドするためのプラグイン
◦ ngyuki/phpenv-composer PHP のバージョンごとにパッケージを管理するプラグイン
◦ 詳しい人向けの情報
◦ CHH/phpenv ではなく madumlao/phpenv (phpenv/phpenv 系の後継) が入る
◦ 後半のスライドで違いを説明
phpenv の使い方 [1/5]
インストール済みの PHP のバージョンを一覧表示する
2016-06-29 第103回 PHP 勉強会 9
$ phpenv versions
* system (set by /home/y-uti/.anyenv/envs/phpenv/version)
◦ 最初は "system" だけ
◦ system というのは anyenv 管理外の PHP を表す
$ php -v
PHP 5.4.16 (cli) (built: May 12 2016 13:45:17)
Copyright (c) 1997-2013 The PHP Group
Zend Engine v2.4.0, Copyright (c) 1998-2013 Zend Technologies
with Zend OPcache v7.0.3, Copyright (c) 1999-2014, by Zend Technologies
◦ 環境により異なる (これは CentOS 7 での結果)
phpenv の使い方 [2/5]
利用可能な PHP のバージョンを一覧表示する
2016-06-29 第103回 PHP 勉強会 10
$ phpenv install -l
Available versions:
5.2.17
5.3.2
5.3.3
:
: (省略)
:
7.0.6
7.0.7
7.0snapshot
7.1.0alpha1
master
phpenv の使い方 [3/5]
バージョンを指定して PHP をインストールする
2016-06-29 第103回 PHP 勉強会 11
$ phpenv install 7.1.0alpha1
◦ 以下の一連の処理が全自動で実行される
1. PHP のソースコードをダウンロードして展開 ("master" を指定した場合は git clone)
2. PHP をビルドしてインストール
3. 拡張ライブラリをインストール (Xdebug など)
4. php.ini ファイルを更新 (OPcache を有効にするなど)
◦ インストールされたことの確認
$ phpenv versions
* system (set by /home/y-uti/.anyenv/envs/phpenv/version)
7.1.0alpha1
phpenv の使い方 [4/5]
PHP のバージョンを切り替える
2016-06-29 第103回 PHP 勉強会 12
$ phpenv global 7.1.0alpha1
7.1.0alpha1
$ phpenv versions
system
* 7.1.0alpha1 (set by /home/y-uti/.anyenv/envs/phpenv/version)
◦ 行頭の "*" は現在選択されている PHP のバージョンを表す
phpenv の使い方 [5/5]
あとは普通どおりに PHP を実行する
2016-06-29 第103回 PHP 勉強会 13
$ php -v
PHP 7.1.0alpha1 (cli) (built: Jun 23 2016 23:58:03) ( NTS )
Copyright (c) 1997-2016 The PHP Group
Zend Engine v3.1.0-dev, Copyright (c) 1998-2016 Zend Technologies
with Zend OPcache v7.1.0alpha1, Copyright (c) 1999-2016, by Zend Technologies
$ php -r 'echo "Hello, world!"[-1];'
!
◦ 文字列に負のオフセットを指定すると末尾から数える (PHP 7.1 より)
◦ https://wiki.php.net/rfc/negative-string-offsets を参照
rbenv (Ruby)
PHP と同じ
2016-06-29 第103回 PHP 勉強会 14
$ anyenv install rbenv
$ exec bash -l
$ rbenv install 2.4.0-preview1
$ rbenv global 2.4.0-preview1
$ ruby -e 'if (a, b = nil); p "True"; else p "False"; end'
-e:1: warning: found = in conditional, should be ==
"False"
◦ Multiple assignment in conditional expression (新機能らしいよ)
◦ https://github.com/ruby/ruby/blob/v2_4_0_preview1/NEWS
pyenv (Python)
PHP と同じ
2016-06-29 第103回 PHP 勉強会 15
$ anyenv install pyenv
$ exec bash -l
$ pyenv install 3.6.0a2
$ pyenv global 3.6.0a2
$ python -c 'name = "Fred"; print(f"He said his name is {name}")'
He said his name is Fred
◦ Formatted string literals (新機能らしいよ)
◦ https://docs.python.org/3.6/whatsnew/3.6.html
その他の言語
anyenv でインストールできる言語たち
2016-06-29 第103回 PHP 勉強会 16
$ ls -1 ~/.anyenv/share/anyenv-install | column -c 70
Renv goenv nenv rbenv
crenv hsenv nodenv sbtenv
denv jenv phpenv scalaenv
erlenv luaenv plenv swiftenv
exenv ndenv pyenv
応用編
1. ディレクトリごとにバージョンを指定する
2016-06-29 第103回 PHP 勉強会 17
phpenv local [1/5]
特定のディレクトリの配下だけ PHP のバージョンを変える
◦ 最初の状態を確認
2016-06-29 第103回 PHP 勉強会 18
$ phpenv version
system (set by /home/y-uti/.anyenv/envs/phpenv/version)
$ php -v | head -n 1
PHP 5.4.16 (cli) (built: May 12 2016 13:45:17)
phpenv local [2/5]
特定のディレクトリの配下だけ PHP のバージョンを変える
◦ ディレクトリを作成して・・・
2016-06-29 第103回 PHP 勉強会 19
$ mkdir -p ~/samples/php
$ cd ~/samples/php
◦ このディレクトリ配下で使いたい PHP のバージョンを指定する
$ phpenv local 7.1.0alpha1
7.1.0alpha1
phpenv local [3/5]
特定のディレクトリの配下だけ PHP のバージョンを変える
◦ 指定されたバージョンの PHP が使われる
2016-06-29 第103回 PHP 勉強会 20
$ php -v | head -n 1
PHP 7.1.0alpha1 (cli) (built: Jun 23 2016 23:58:03) ( NTS )
$ cd ..
$ php -v | head -n 1
PHP 5.4.16 (cli) (built: May 12 2016 13:45:17)
◦ サブディレクトリでも OK (phpenv local で指定されたバージョンが使われる)
◦ phpenv local を実行したディレクトリの外側には効果を及ぼさない
phpenv local [4/5]
PHP ファイルを置いた場合はどうなる?
◦ phpenv local を実行したディレクトリの配下にファイルを作成する
2016-06-29 第103回 PHP 勉強会 21
$ cd ~/samples/php
$ echo '<?php echo phpversion(), "¥n";' >phpversion.php
◦ ディレクトリの外側から実行する
$ cd ~
$ php samples/php/phpversion.php
7.1.0alpha1
◦ phpenv local で指定されたバージョンが使われる
phpenv local [5/5]
まとめ:どのバージョンが使われるかを決める規則
1. 現在の shell で有効なバージョン
◦ phpenv shell コマンドで指定できる
◦ 今回は説明しなかった
2. 実行される PHP ファイルのディレクトリで有効なバージョン
3. カレントディレクトリで有効なバージョン
4. phpenv global で指定されているバージョン
2016-06-29 第103回 PHP 勉強会 22
注意
これらは phpenv を通して PHP を実行しているときの話
Q. phpenv local を実行しておけば対応する libphp5.so が選ばれる?
A. いいえ
2016-06-29 第103回 PHP 勉強会 23
応用編
2. anyenv のプラグインを使う
2016-06-29 第103回 PHP 勉強会 24
anyenv の更新
anyenv 本体や各言語の *env は git clone された状態
◦ 最新状態を取り込むには git pull すればよい
◦ 最新の PHP をビルドするには php-build を最新にする必要がある
ところが
◦ 一つ一つ git pull するのは結構めんどくさい
2016-06-29 第103回 PHP 勉強会 25
$ cd ~/.anyenv
$ git pull
$ cd envs/phpenv
$ git pull
$ cd plugins/php-build
$ git pull
$ cd ../phpenv-composer
$ git pull
anyenv-update
anyenv と配下の各 *env やプラグインを一括更新するプラグイン
◦ インストール方法
◦ https://github.com/znz/anyenv-update の説明どおり
2016-06-29 第103回 PHP 勉強会 26
$ mkdir ~/.anyenv/plugins
$ cd ~/.anyenv/plugins
$ git clone https://github.com/znz/anyenv-update.git
◦ 使い方
$ anyenv update
Updating 'anyenv'...
Updating 'anyenv/anyenv-update'...
Updating 'phpenv'...
...
anyenv-git
anyenv と配下の各 git リポジトリに git コマンドを一括発行
◦ インストール方法
◦ https://github.com/znz/anyenv-git の説明どおり
2016-06-29 第103回 PHP 勉強会 27
$ mkdir ~/.anyenv/plugins
$ cd ~/.anyenv/plugins
$ git clone https://github.com/znz/anyenv-git.git
◦ 使い方
$ anyenv git checkout -B mybranch
◦ 各 git リポジトリの mybranch ブランチをチェックアウト。無ければ作る
応用編
3. PHP のビルド手順をカスタマイズする
2016-06-29 第103回 PHP 勉強会 28
configure オプション変更 [1/2]
share/php-build/default_configure_options ファイルを編集
2016-06-29 第103回 PHP 勉強会 29
$ head default_configure_options
--without-pear
--with-gd
--enable-sockets
--with-jpeg-dir=/usr
--with-png-dir=/usr
--enable-exif
--enable-zip
--with-zlib
--with-zlib-dir=/usr
--with-kerberos
◦ 全バージョンに適用される
configure オプション変更 [2/2]
share/php-build/definitions/ ディレクトリにファイルを追加
◦ ファイルの例
2016-06-29 第103回 PHP 勉強会 30
$ cat share/php-build/definitions/master-debug
configure_option -D "--disable-debug"
configure_option "--enable-debug"
install_package_from_github master
enable_builtin_opcache
◦ master-debug という「バージョン」を独自に追加
◦ --disable-debug オプションを削除して --enable-debug オプションを追加
$ phpenv install master-debug
./configure 後に処理を追加
share/php-build/before-install.d/ に bash スクリプトを作成
◦ bash スクリプトの例
2016-06-29 第103回 PHP 勉強会 31
#!/usr/bin/env bash
if type apxs &>/dev/null; then
apxs_libexecdir=$(apxs -q LIBEXECDIR)
sed -i -e ¥
"s|'¥$(INSTALL_ROOT)$apxs_libexecdir'|$PREFIX/libexec|g" ¥
$SOURCE_PATH/Makefile
fi
◦ libphp5.so ファイルの出力先を設定する
インストール後に処理を追加
share/php-build/after-install.d ディレクトリにスクリプトを作成
◦ bash スクリプトの例
2016-06-29 第103回 PHP 勉強会 32
#!/usr/bin/env bash
inifile="$PREFIX/etc/php.ini"
if [ -f "$inifile" ]; then
sed -i -e 's/^memory_limit =.*$/memory_limit = 1024M/' $inifile
sed -i -e 's/^;date.timezone =.*$/date.timezone = Asia¥/Tokyo/' $inifile
fi
◦ PHP のインストール後に php.ini を編集する
◦ memory_limit を 1024M に設定
◦ date.timezone を Asia/Tokyo に設定
拡張モジュールの追加 [1/2]
share/php-build/extension/definition ファイルに定義を追加
2016-06-29 第103回 PHP 勉強会 33
$ cat definition
"name","url-dist","url_source","source_cwd","configure_args","extension_type","after_install"
...
"vld","http://pecl.php.net/get/vld-$version.tgz","https://github.com/derickr/vld.git",,,"extension",
...
項目 内容 記述例
name モジュール名 vld
url-dist 圧縮ファイル URL http://pecl.php.net/get/vld-$version.tgz
url_source リポジトリ URL http://github.com/derickr/vld.git
source_cwd ビルドディレクトリ
configure_args ./configure オプション
extension_type 拡張の種類 extension
after_install ビルド後のコールバック関数
拡張モジュールの追加 [2/2]
PHP_BUILD_INSTALL_EXTENSION 環境変数を設定
2016-06-29 第103回 PHP 勉強会 34
$ PHP_BUILD_INSTALL_EXTENSION='vld=@' phpenv install 7.0.8
◦ vld 拡張モジュールをインストールする
◦ "@" はリポジトリから master ブランチを取得
◦ バージョン番号を指定した場合は圧縮ファイルを取得
◦ インストール後に設定ファイルに追加するところまで自動
応用編
4. ローカルリポジトリの運用
2016-06-29 第103回 PHP 勉強会 35
ローカルリポジトリの運用
悩ましい問題
◦ 独自のカスタマイズによりリモートリポジトリとの差分が発生
◦ git pull したときにエラーになってしまう
私の運用の紹介(一例として)
2016-06-29 第103回 PHP 勉強会 36
$ anyenv git checkout -B local
◦ リモートリポジトリを pull するときは・・・
$ anyenv git checkout master
$ anyenv update
$ anyenv git rebase master local
◦ 節度を保ったカスタマイズなら滅多に conflict しない(経験上)
CHH/phpenv の話
2016-06-29 第103回 PHP 勉強会 37
最初に要点
今回説明した madumlao/phpenv とは別に CHH/phpenv がある
1. 機能は大差ない
2. 実績は CHH/phpenv (TravisCI で使われている)
3. anyenv で使うなら madumlao/phpenv が簡単
4. どちらも phpenv install コマンドは php-build/php-build を使う
ウェブなどで情報を調べるときは
◦ phpenv の情報はどちらの話なのか注意が必要
◦ php-build の情報はどちらの phpenv を使っていても共通
2016-06-29 第103回 PHP 勉強会 38
CHH/phpenv とは
rbenv (sstephenson/rbenv) を PHP 用に変更するパッチ
◦ https://github.com/CHH/phpenv
インストール方法
◦ https://github.com/php-build/php-build の説明どおり
2016-06-29 第103回 PHP 勉強会 39
$ curl -L http://git.io/phpenv-installer | bash
◦ phpenv とプラグイン数種 (php-build 含む) がインストールされる
ところで何故インストール方法が php-build に書かれているのか
◦ php-build は CHH/phpenv のプラグインとして使われる想定
◦ そもそも php-build/php-build は元々 CHH/php-build だった
CHH/phpenv の使い方
今回説明してきた phpenv (madumlao/phpenv) と同じ
2016-06-29 第103回 PHP 勉強会 40
$ phpenv help
Usage: rbenv <command> [<args>]
Some useful rbenv commands are:
commands List all available rbenv commands
local Set or show the local application-specific Ruby version
global Set or show the global Ruby version
shell Set or show the shell-specific Ruby version
install Install a PHP version using the php-build plugin
uninstall Uninstall a specific PHP version using the php-build plugin
rehash Rehash rbenv shims (run this after installing executables)
version Show the current Ruby version and its origin
versions List all Ruby versions available to rbenv
which Display the full path to an executable
whence List all Ruby versions that contain the given executable
See `rbenv help <command>' for information on a specific command.
For full documentation, see: https://github.com/rbenv/rbenv#readme
◦ あちこちに "rbenv" や "Ruby" と表示されていることに気付いた?
改めて CHH/phpenv とは
rbenv (sstephenson/rbenv) を PHP 用に変更するパッチ
◦ CHH/phpenv のインストーラがやること
1. git clone sstephenson/rbenv して
2. PHP 用にソースコードを変更する
◦ したがって rbenv のリポジトリがそのまま見えている
2016-06-29 第103回 PHP 勉強会 41
$ cd ~/.phpenv
$ git remote show origin
* remote origin
Fetch URL: https://github.com/sstephenson/rbenv.git
Push URL: https://github.com/sstephenson/rbenv.git
...
◦ clone した後にソースコードを変更しているので diff も出ている
phpenv/phpenv
rbenv (sstephenson/rbenv) をベースとした PHP 向けの実装
◦ https://github.com/phpenv/phpenv
CHH/phpenv との主な違い
◦ rbenv に依存していない
◦ phpenv install コマンドを独自実装している
◦ php-build を使っていない
◦ php-build ほど高機能ではなかった (シェルスクリプト 1 ファイルでの実装)
開発が止まっている
◦ 最終コミットは 2013 年 11 月 (dev branch)
2016-06-29 第103回 PHP 勉強会 42
madumlao/phpenv
開発の止まっている phpenv/phpenv を fork したもの
◦ 2015 年 11 月 ~
phpenv/phpenv との主な違い (fork 後の変更点)
◦ php-build を使う
2016-06-29 第103回 PHP 勉強会 43
anyenv で使われる phpenv
~/.anyenv/share/anyenv-install/phpenv に書かれている
2016-06-29 第103回 PHP 勉強会 44
$ cat ~/.anyenv/share/anyenv-install/phpenv
install_env "https://github.com/madumlao/phpenv.git" "master"
install_plugin "php-build" "https://github.com/php-build/php-build.git" "master"
install_plugin "phpenv-composer" https://github.com/ngyuki/phpenv-composer "master"
◦ 現在は madumlao/phpenv
◦ 時期によって異なる
◦ phpenv/phpenv 0000-00-00 ~ 2014-08-17
◦ laprasdrum/phpenv 2014-08-17 ~ 2016-03-26
◦ madumlao/phpenv 2016-03-26
anyenv + CHH/phpenv [1/2]
私は使っていないので十分に検証できていません
anyenv の管理下で CHH/phpenv を使う
◦ phpenv を ~/.anyenv/envs/ ディレクトリ以下に置けばよい
2016-06-29 第103回 PHP 勉強会 45
$ curl -L http://git.io/phpenv-installer |¥
PHPENV_ROOT=~/.anyenv/envs/phpenv bash
anyenv + CHH/phpenv [2/2]
私は使っていないので十分に検証できていません
git pull できない問題の対応
◦ rbenv からの差分を別ブランチに commit する
2016-06-29 第103回 PHP 勉強会 46
$ cd ~/.anyenv/envs/phpenv
$ git checkout -b local
$ git add bin/phpenv
$ git commit -a
◦ 本発表の「応用編 4 ローカルリポジトリの運用」を参照
一応これで anyenv update できるようになるが・・・
◦ rbenv の変更に応じて phpenv を更新するわけではないので微妙
まとめ
anyenv + phpenv + php-build 便利!
対抗馬 (私は使っていないので詳しくありません)
◦ Homebrew
◦ direnv
2016-06-29 第103回 PHP 勉強会 47

More Related Content

What's hot

Btrfsの基礎 part1 機能編
Btrfsの基礎 part1 機能編Btrfsの基礎 part1 機能編
Btrfsの基礎 part1 機能編fj_staoru_takeuchi
 
講演資料: コスト最適なプライベートCDNを「NGINX」で実現するWeb最適化セミナー
講演資料: コスト最適なプライベートCDNを「NGINX」で実現するWeb最適化セミナー講演資料: コスト最適なプライベートCDNを「NGINX」で実現するWeb最適化セミナー
講演資料: コスト最適なプライベートCDNを「NGINX」で実現するWeb最適化セミナーNGINX, Inc.
 
さいきんの InnoDB Adaptive Flushing (仮)
さいきんの InnoDB Adaptive Flushing (仮)さいきんの InnoDB Adaptive Flushing (仮)
さいきんの InnoDB Adaptive Flushing (仮)Takanori Sejima
 
Pacemaker + PostgreSQL レプリケーション構成(PG-REX)のフェイルオーバー高速化
Pacemaker + PostgreSQL レプリケーション構成(PG-REX)のフェイルオーバー高速化Pacemaker + PostgreSQL レプリケーション構成(PG-REX)のフェイルオーバー高速化
Pacemaker + PostgreSQL レプリケーション構成(PG-REX)のフェイルオーバー高速化kazuhcurry
 
빌드 속도를 올려보자
빌드 속도를 올려보자빌드 속도를 올려보자
빌드 속도를 올려보자KyeongWon Koo
 
OverlayFS as a Docker Storage Driver
OverlayFS as a Docker Storage DriverOverlayFS as a Docker Storage Driver
OverlayFS as a Docker Storage DriverTomoya Akase
 
大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~
大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~
大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~infinite_loop
 
The Microkernel Mach Under NeXTSTEP
The Microkernel Mach Under NeXTSTEPThe Microkernel Mach Under NeXTSTEP
The Microkernel Mach Under NeXTSTEPGregor Schmidt
 
漢のPort forwarding
漢のPort forwarding漢のPort forwarding
漢のPort forwardingMinoru Nakata
 
サーバPUSHざっくりまとめ
サーバPUSHざっくりまとめサーバPUSHざっくりまとめ
サーバPUSHざっくりまとめYasuhiro Mawarimichi
 
Docker composeで開発環境をメンバに配布せよ
Docker composeで開発環境をメンバに配布せよDocker composeで開発環境をメンバに配布せよ
Docker composeで開発環境をメンバに配布せよYusuke Kon
 
PHP-FPM の子プロセス制御方法と設定をおさらいしよう
PHP-FPM の子プロセス制御方法と設定をおさらいしようPHP-FPM の子プロセス制御方法と設定をおさらいしよう
PHP-FPM の子プロセス制御方法と設定をおさらいしようShohei Okada
 
PHP+MySQLを使ったスケーラブルなソーシャルゲーム開発
PHP+MySQLを使ったスケーラブルなソーシャルゲーム開発PHP+MySQLを使ったスケーラブルなソーシャルゲーム開発
PHP+MySQLを使ったスケーラブルなソーシャルゲーム開発infinite_loop
 
Rate Limiting with NGINX and NGINX Plus
Rate Limiting with NGINX and NGINX PlusRate Limiting with NGINX and NGINX Plus
Rate Limiting with NGINX and NGINX PlusNGINX, Inc.
 
OVN 設定サンプル | OVN config example 2015/12/27
OVN 設定サンプル | OVN config example 2015/12/27OVN 設定サンプル | OVN config example 2015/12/27
OVN 設定サンプル | OVN config example 2015/12/27Kentaro Ebisawa
 
MySQL Parallel Replication: inventory, use-case and limitations
MySQL Parallel Replication: inventory, use-case and limitationsMySQL Parallel Replication: inventory, use-case and limitations
MySQL Parallel Replication: inventory, use-case and limitationsJean-François Gagné
 
PHP と SAPI と ZendEngine3 と
PHP と SAPI と ZendEngine3 とPHP と SAPI と ZendEngine3 と
PHP と SAPI と ZendEngine3 とdo_aki
 
Ansible 入門 #01 (初心者向け)
Ansible 入門 #01 (初心者向け)Ansible 入門 #01 (初心者向け)
Ansible 入門 #01 (初心者向け)Taro Hirose
 

What's hot (20)

Btrfsの基礎 part1 機能編
Btrfsの基礎 part1 機能編Btrfsの基礎 part1 機能編
Btrfsの基礎 part1 機能編
 
講演資料: コスト最適なプライベートCDNを「NGINX」で実現するWeb最適化セミナー
講演資料: コスト最適なプライベートCDNを「NGINX」で実現するWeb最適化セミナー講演資料: コスト最適なプライベートCDNを「NGINX」で実現するWeb最適化セミナー
講演資料: コスト最適なプライベートCDNを「NGINX」で実現するWeb最適化セミナー
 
Jenkins 再入門
Jenkins 再入門Jenkins 再入門
Jenkins 再入門
 
さいきんの InnoDB Adaptive Flushing (仮)
さいきんの InnoDB Adaptive Flushing (仮)さいきんの InnoDB Adaptive Flushing (仮)
さいきんの InnoDB Adaptive Flushing (仮)
 
Pacemaker + PostgreSQL レプリケーション構成(PG-REX)のフェイルオーバー高速化
Pacemaker + PostgreSQL レプリケーション構成(PG-REX)のフェイルオーバー高速化Pacemaker + PostgreSQL レプリケーション構成(PG-REX)のフェイルオーバー高速化
Pacemaker + PostgreSQL レプリケーション構成(PG-REX)のフェイルオーバー高速化
 
빌드 속도를 올려보자
빌드 속도를 올려보자빌드 속도를 올려보자
빌드 속도를 올려보자
 
OverlayFS as a Docker Storage Driver
OverlayFS as a Docker Storage DriverOverlayFS as a Docker Storage Driver
OverlayFS as a Docker Storage Driver
 
大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~
大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~
大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~
 
The Microkernel Mach Under NeXTSTEP
The Microkernel Mach Under NeXTSTEPThe Microkernel Mach Under NeXTSTEP
The Microkernel Mach Under NeXTSTEP
 
漢のPort forwarding
漢のPort forwarding漢のPort forwarding
漢のPort forwarding
 
サーバPUSHざっくりまとめ
サーバPUSHざっくりまとめサーバPUSHざっくりまとめ
サーバPUSHざっくりまとめ
 
Docker composeで開発環境をメンバに配布せよ
Docker composeで開発環境をメンバに配布せよDocker composeで開発環境をメンバに配布せよ
Docker composeで開発環境をメンバに配布せよ
 
PHP-FPM の子プロセス制御方法と設定をおさらいしよう
PHP-FPM の子プロセス制御方法と設定をおさらいしようPHP-FPM の子プロセス制御方法と設定をおさらいしよう
PHP-FPM の子プロセス制御方法と設定をおさらいしよう
 
PHP+MySQLを使ったスケーラブルなソーシャルゲーム開発
PHP+MySQLを使ったスケーラブルなソーシャルゲーム開発PHP+MySQLを使ったスケーラブルなソーシャルゲーム開発
PHP+MySQLを使ったスケーラブルなソーシャルゲーム開発
 
Rate Limiting with NGINX and NGINX Plus
Rate Limiting with NGINX and NGINX PlusRate Limiting with NGINX and NGINX Plus
Rate Limiting with NGINX and NGINX Plus
 
OVN 設定サンプル | OVN config example 2015/12/27
OVN 設定サンプル | OVN config example 2015/12/27OVN 設定サンプル | OVN config example 2015/12/27
OVN 設定サンプル | OVN config example 2015/12/27
 
自宅k8s/vSphere入門
自宅k8s/vSphere入門自宅k8s/vSphere入門
自宅k8s/vSphere入門
 
MySQL Parallel Replication: inventory, use-case and limitations
MySQL Parallel Replication: inventory, use-case and limitationsMySQL Parallel Replication: inventory, use-case and limitations
MySQL Parallel Replication: inventory, use-case and limitations
 
PHP と SAPI と ZendEngine3 と
PHP と SAPI と ZendEngine3 とPHP と SAPI と ZendEngine3 と
PHP と SAPI と ZendEngine3 と
 
Ansible 入門 #01 (初心者向け)
Ansible 入門 #01 (初心者向け)Ansible 入門 #01 (初心者向け)
Ansible 入門 #01 (初心者向け)
 

Similar to anyenv + phpenv + php-build が便利すぎる件

Windows で PHP をビルドしてみた
Windows で PHP をビルドしてみたWindows で PHP をビルドしてみた
Windows で PHP をビルドしてみたy-uti
 
PHPの今とこれから2020
PHPの今とこれから2020PHPの今とこれから2020
PHPの今とこれから2020Rui Hirokawa
 
ネットワークエンジニアのための Puppet / Chef
ネットワークエンジニアのための Puppet / Chefネットワークエンジニアのための Puppet / Chef
ネットワークエンジニアのための Puppet / Chefnpsg
 
PHP in Java -Quercus- によるレガシーマイグレーション実例 #jjug_ccc #ccc_r12
PHP in Java -Quercus- によるレガシーマイグレーション実例 #jjug_ccc #ccc_r12PHP in Java -Quercus- によるレガシーマイグレーション実例 #jjug_ccc #ccc_r12
PHP in Java -Quercus- によるレガシーマイグレーション実例 #jjug_ccc #ccc_r12Ryuji Yamashita
 
PHPの今とこれから2014
PHPの今とこれから2014PHPの今とこれから2014
PHPの今とこれから2014Rui Hirokawa
 
PHP で実行中のスクリプトの動作を下から覗き見る
PHP で実行中のスクリプトの動作を下から覗き見るPHP で実行中のスクリプトの動作を下から覗き見る
PHP で実行中のスクリプトの動作を下から覗き見るshinjiigarashi
 
Windows で拡張モジュールをビルドしてみた
Windows で拡張モジュールをビルドしてみたWindows で拡張モジュールをビルドしてみた
Windows で拡張モジュールをビルドしてみたy-uti
 
How to manage Cakephp @CakePHP_Fukuoka_2
How to manage Cakephp @CakePHP_Fukuoka_2 How to manage Cakephp @CakePHP_Fukuoka_2
How to manage Cakephp @CakePHP_Fukuoka_2 ichikaway
 
2014/11/04 第2回 一撃サーバー構築シェルスクリプト勉強会(さっぽろ!) 発表資料
2014/11/04 第2回 一撃サーバー構築シェルスクリプト勉強会(さっぽろ!) 発表資料2014/11/04 第2回 一撃サーバー構築シェルスクリプト勉強会(さっぽろ!) 発表資料
2014/11/04 第2回 一撃サーバー構築シェルスクリプト勉強会(さっぽろ!) 発表資料Yasutaka Hamada
 
(続) はじめてのCloud Foundry
(続) はじめてのCloud Foundry(続) はじめてのCloud Foundry
(続) はじめてのCloud FoundryTomohiro Ichimura
 
3分間 開発環境クッキング 2012.07 #pyfes
3分間 開発環境クッキング 2012.07 #pyfes3分間 開発環境クッキング 2012.07 #pyfes
3分間 開発環境クッキング 2012.07 #pyfesTakeshi Komiya
 
8時間耐久 PHP構築の教室
8時間耐久 PHP構築の教室8時間耐久 PHP構築の教室
8時間耐久 PHP構築の教室Yusuke Ando
 
PHPの今とこれから2015
PHPの今とこれから2015PHPの今とこれから2015
PHPの今とこれから2015Rui Hirokawa
 
【PHPカンファレンス福岡】PHP 5.3 + CakePHP 1.3 → PHP 7 + CakePHP 3 移行を決めた話
【PHPカンファレンス福岡】PHP 5.3 + CakePHP 1.3 → PHP 7 + CakePHP 3 移行を決めた話【PHPカンファレンス福岡】PHP 5.3 + CakePHP 1.3 → PHP 7 + CakePHP 3 移行を決めた話
【PHPカンファレンス福岡】PHP 5.3 + CakePHP 1.3 → PHP 7 + CakePHP 3 移行を決めた話Yuki Kanazawa
 
Rails解説セミナー: Railsアプリケーションのデバッグ
Rails解説セミナー: RailsアプリケーションのデバッグRails解説セミナー: Railsアプリケーションのデバッグ
Rails解説セミナー: RailsアプリケーションのデバッグYohei Yasukawa
 
Phpunit at excite
Phpunit at excitePhpunit at excite
Phpunit at exciteyuki777
 
behatエクステンションの作り方
behatエクステンションの作り方behatエクステンションの作り方
behatエクステンションの作り方Ryo Tomidokoro
 

Similar to anyenv + phpenv + php-build が便利すぎる件 (20)

Windows で PHP をビルドしてみた
Windows で PHP をビルドしてみたWindows で PHP をビルドしてみた
Windows で PHP をビルドしてみた
 
PHPの今とこれから2020
PHPの今とこれから2020PHPの今とこれから2020
PHPの今とこれから2020
 
ネットワークエンジニアのための Puppet / Chef
ネットワークエンジニアのための Puppet / Chefネットワークエンジニアのための Puppet / Chef
ネットワークエンジニアのための Puppet / Chef
 
PHP in Java -Quercus- によるレガシーマイグレーション実例 #jjug_ccc #ccc_r12
PHP in Java -Quercus- によるレガシーマイグレーション実例 #jjug_ccc #ccc_r12PHP in Java -Quercus- によるレガシーマイグレーション実例 #jjug_ccc #ccc_r12
PHP in Java -Quercus- によるレガシーマイグレーション実例 #jjug_ccc #ccc_r12
 
How to run P4 BMv2
How to run P4 BMv2How to run P4 BMv2
How to run P4 BMv2
 
PHPの今とこれから2014
PHPの今とこれから2014PHPの今とこれから2014
PHPの今とこれから2014
 
PHP で実行中のスクリプトの動作を下から覗き見る
PHP で実行中のスクリプトの動作を下から覗き見るPHP で実行中のスクリプトの動作を下から覗き見る
PHP で実行中のスクリプトの動作を下から覗き見る
 
Windows で拡張モジュールをビルドしてみた
Windows で拡張モジュールをビルドしてみたWindows で拡張モジュールをビルドしてみた
Windows で拡張モジュールをビルドしてみた
 
How to manage Cakephp @CakePHP_Fukuoka_2
How to manage Cakephp @CakePHP_Fukuoka_2 How to manage Cakephp @CakePHP_Fukuoka_2
How to manage Cakephp @CakePHP_Fukuoka_2
 
2014/11/04 第2回 一撃サーバー構築シェルスクリプト勉強会(さっぽろ!) 発表資料
2014/11/04 第2回 一撃サーバー構築シェルスクリプト勉強会(さっぽろ!) 発表資料2014/11/04 第2回 一撃サーバー構築シェルスクリプト勉強会(さっぽろ!) 発表資料
2014/11/04 第2回 一撃サーバー構築シェルスクリプト勉強会(さっぽろ!) 発表資料
 
(続) はじめてのCloud Foundry
(続) はじめてのCloud Foundry(続) はじめてのCloud Foundry
(続) はじめてのCloud Foundry
 
Word bench7月号
Word bench7月号Word bench7月号
Word bench7月号
 
PHP agile test tips
PHP agile test tipsPHP agile test tips
PHP agile test tips
 
3分間 開発環境クッキング 2012.07 #pyfes
3分間 開発環境クッキング 2012.07 #pyfes3分間 開発環境クッキング 2012.07 #pyfes
3分間 開発環境クッキング 2012.07 #pyfes
 
8時間耐久 PHP構築の教室
8時間耐久 PHP構築の教室8時間耐久 PHP構築の教室
8時間耐久 PHP構築の教室
 
PHPの今とこれから2015
PHPの今とこれから2015PHPの今とこれから2015
PHPの今とこれから2015
 
【PHPカンファレンス福岡】PHP 5.3 + CakePHP 1.3 → PHP 7 + CakePHP 3 移行を決めた話
【PHPカンファレンス福岡】PHP 5.3 + CakePHP 1.3 → PHP 7 + CakePHP 3 移行を決めた話【PHPカンファレンス福岡】PHP 5.3 + CakePHP 1.3 → PHP 7 + CakePHP 3 移行を決めた話
【PHPカンファレンス福岡】PHP 5.3 + CakePHP 1.3 → PHP 7 + CakePHP 3 移行を決めた話
 
Rails解説セミナー: Railsアプリケーションのデバッグ
Rails解説セミナー: RailsアプリケーションのデバッグRails解説セミナー: Railsアプリケーションのデバッグ
Rails解説セミナー: Railsアプリケーションのデバッグ
 
Phpunit at excite
Phpunit at excitePhpunit at excite
Phpunit at excite
 
behatエクステンションの作り方
behatエクステンションの作り方behatエクステンションの作り方
behatエクステンションの作り方
 

More from y-uti

潜在ディリクレ配分法
潜在ディリクレ配分法潜在ディリクレ配分法
潜在ディリクレ配分法y-uti
 
Active Object
Active ObjectActive Object
Active Objecty-uti
 
目で見る過学習と正則化
目で見る過学習と正則化目で見る過学習と正則化
目で見る過学習と正則化y-uti
 
ロジスティック回帰入門
ロジスティック回帰入門ロジスティック回帰入門
ロジスティック回帰入門y-uti
 
論文紹介 Identifying Implementation Bugs in Machine Learning based Image Classifi...
論文紹介 Identifying Implementation Bugs in Machine Learning based Image Classifi...論文紹介 Identifying Implementation Bugs in Machine Learning based Image Classifi...
論文紹介 Identifying Implementation Bugs in Machine Learning based Image Classifi...y-uti
 
PECL operator で演算子オーバーロード
PECL operator で演算子オーバーロードPECL operator で演算子オーバーロード
PECL operator で演算子オーバーロードy-uti
 
PHP-ML で手書き数字認識
PHP-ML で手書き数字認識PHP-ML で手書き数字認識
PHP-ML で手書き数字認識y-uti
 
OPcache の最適化器の今
OPcache の最適化器の今OPcache の最適化器の今
OPcache の最適化器の今y-uti
 
スパース推定
スパース推定スパース推定
スパース推定y-uti
 
Kaggle の Titanic チュートリアルに挑戦した話
Kaggle の Titanic チュートリアルに挑戦した話Kaggle の Titanic チュートリアルに挑戦した話
Kaggle の Titanic チュートリアルに挑戦した話y-uti
 
PHP カンファレンス福岡 2017 参加報告
PHP カンファレンス福岡 2017 参加報告PHP カンファレンス福岡 2017 参加報告
PHP カンファレンス福岡 2017 参加報告y-uti
 
分類問題 - 機械学習ライブラリ scikit-learn の活用
分類問題 - 機械学習ライブラリ scikit-learn の活用分類問題 - 機械学習ライブラリ scikit-learn の活用
分類問題 - 機械学習ライブラリ scikit-learn の活用y-uti
 
JIT のコードを読んでみた
JIT のコードを読んでみたJIT のコードを読んでみた
JIT のコードを読んでみたy-uti
 
JIT for PHP を試した
JIT for PHP を試したJIT for PHP を試した
JIT for PHP を試したy-uti
 
Task Spooler を試した
Task Spooler を試したTask Spooler を試した
Task Spooler を試したy-uti
 
PHP カンファレンス福岡 参加報告
PHP カンファレンス福岡 参加報告PHP カンファレンス福岡 参加報告
PHP カンファレンス福岡 参加報告y-uti
 
RFC: "var" Deprecation
RFC: "var" DeprecationRFC: "var" Deprecation
RFC: "var" Deprecationy-uti
 
最近の PHP の話
最近の PHP の話最近の PHP の話
最近の PHP の話y-uti
 
PECL を数えてみた
PECL を数えてみたPECL を数えてみた
PECL を数えてみたy-uti
 
逐次ベイズ学習 - サンプリング近似法の場合 -
逐次ベイズ学習 - サンプリング近似法の場合 -逐次ベイズ学習 - サンプリング近似法の場合 -
逐次ベイズ学習 - サンプリング近似法の場合 -y-uti
 

More from y-uti (20)

潜在ディリクレ配分法
潜在ディリクレ配分法潜在ディリクレ配分法
潜在ディリクレ配分法
 
Active Object
Active ObjectActive Object
Active Object
 
目で見る過学習と正則化
目で見る過学習と正則化目で見る過学習と正則化
目で見る過学習と正則化
 
ロジスティック回帰入門
ロジスティック回帰入門ロジスティック回帰入門
ロジスティック回帰入門
 
論文紹介 Identifying Implementation Bugs in Machine Learning based Image Classifi...
論文紹介 Identifying Implementation Bugs in Machine Learning based Image Classifi...論文紹介 Identifying Implementation Bugs in Machine Learning based Image Classifi...
論文紹介 Identifying Implementation Bugs in Machine Learning based Image Classifi...
 
PECL operator で演算子オーバーロード
PECL operator で演算子オーバーロードPECL operator で演算子オーバーロード
PECL operator で演算子オーバーロード
 
PHP-ML で手書き数字認識
PHP-ML で手書き数字認識PHP-ML で手書き数字認識
PHP-ML で手書き数字認識
 
OPcache の最適化器の今
OPcache の最適化器の今OPcache の最適化器の今
OPcache の最適化器の今
 
スパース推定
スパース推定スパース推定
スパース推定
 
Kaggle の Titanic チュートリアルに挑戦した話
Kaggle の Titanic チュートリアルに挑戦した話Kaggle の Titanic チュートリアルに挑戦した話
Kaggle の Titanic チュートリアルに挑戦した話
 
PHP カンファレンス福岡 2017 参加報告
PHP カンファレンス福岡 2017 参加報告PHP カンファレンス福岡 2017 参加報告
PHP カンファレンス福岡 2017 参加報告
 
分類問題 - 機械学習ライブラリ scikit-learn の活用
分類問題 - 機械学習ライブラリ scikit-learn の活用分類問題 - 機械学習ライブラリ scikit-learn の活用
分類問題 - 機械学習ライブラリ scikit-learn の活用
 
JIT のコードを読んでみた
JIT のコードを読んでみたJIT のコードを読んでみた
JIT のコードを読んでみた
 
JIT for PHP を試した
JIT for PHP を試したJIT for PHP を試した
JIT for PHP を試した
 
Task Spooler を試した
Task Spooler を試したTask Spooler を試した
Task Spooler を試した
 
PHP カンファレンス福岡 参加報告
PHP カンファレンス福岡 参加報告PHP カンファレンス福岡 参加報告
PHP カンファレンス福岡 参加報告
 
RFC: "var" Deprecation
RFC: "var" DeprecationRFC: "var" Deprecation
RFC: "var" Deprecation
 
最近の PHP の話
最近の PHP の話最近の PHP の話
最近の PHP の話
 
PECL を数えてみた
PECL を数えてみたPECL を数えてみた
PECL を数えてみた
 
逐次ベイズ学習 - サンプリング近似法の場合 -
逐次ベイズ学習 - サンプリング近似法の場合 -逐次ベイズ学習 - サンプリング近似法の場合 -
逐次ベイズ学習 - サンプリング近似法の場合 -
 

Recently uploaded

AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfAWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfFumieNakayama
 
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)UEHARA, Tetsutaro
 
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineerYuki Kikuchi
 
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...博三 太田
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)Hiroshi Tomioka
 
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfクラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfFumieNakayama
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NTT DATA Technology & Innovation
 
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?akihisamiyanaga1
 

Recently uploaded (8)

AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfAWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
 
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
 
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
 
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
 
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfクラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
 
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
 

anyenv + phpenv + php-build が便利すぎる件

  • 1. anyenv + phpenv + php-build が 便利すぎる件 内山 雄司 (@y__uti) 2016-06-29 第103回PHP勉強会
  • 2. 自己紹介 内山 雄司 (@y__uti) ◦ http://y-uti.hatenablog.jp/ (phpusers-ja) 仕事 ◦ 受託開発の会社 (株式会社ピコラボ) でプログラマをしています 興味 ◦ プログラミング言語処理系 ◦ 機械学習 2016-06-29 第103回 PHP 勉強会 2
  • 3. 目次 はじめに anyenv を 使ってみよう 応用編 1. ディレクトリごとにバージョンを指定する 2. anyenv のプラグインを使う 3. PHP のビルド手順をカスタマイズする 4. ローカルリポジトリの運用 CHH/phpenv の話 2016-06-29 第103回 PHP 勉強会 3
  • 4. phpenv とは 複数の PHP のバージョンをコマンド一発で切り替えるツール 2016-06-29 第103回 PHP 勉強会 4 $ php -v PHP 5.4.16 (cli) (built: May 12 2016 13:45:17) Copyright (c) 1997-2013 The PHP Group Zend Engine v2.4.0, Copyright (c) 1998-2013 Zend Technologies with Zend OPcache v7.0.3, Copyright (c) 1999-2014, by Zend Technologies $ phpenv global 7.1.0alpha1 7.1.0alpha1 $ php -v PHP 7.1.0alpha1 (cli) (built: Jun 23 2016 23:58:03) ( NTS ) Copyright (c) 1997-2016 The PHP Group Zend Engine v3.1.0-dev, Copyright (c) 1998-2016 Zend Technologies with Zend OPcache v7.1.0alpha1, Copyright (c) 1999-2016, by Zend Technologies
  • 5. anyenv + phpenv + php-build php-build とは ◦ PHP の超簡単ビルドシステム 2016-06-29 第103回 PHP 勉強会 5 $ phpenv install 7.1.0alpha1 ◦ これだけでソースコードのダウンロードからインストールまで全自動 anyenv とは ◦ 各言語の *env を一元管理するツール $ anyenv install rbenv ◦ これだけで Ruby でも同じように使える これらの *env は Ruby (rbenv) が元祖。PHP が後発
  • 7. anyenv のインストール https://github.com/riywo/anyenv の説明どおり 1. リポジトリを clone する 2016-06-29 第103回 PHP 勉強会 7 $ git clone https://github.com/riywo/anyenv ~/.anyenv 2. 初期化ファイルに設定を追加する $ echo 'export PATH="$HOME/.anyenv/bin:$PATH"' >> ~/.bash_profile $ echo 'eval "$(anyenv init -)"' >> ~/.bash_profile 3. 初期化ファイルの設定を反映する $ exec bash -l
  • 8. phpenv のインストール anyenv install コマンドを実行する 2016-06-29 第103回 PHP 勉強会 8 $ anyenv install phpenv $ exec bash -l ◦ 以下がまとめてインストールされる ◦ madumlao/phpenv phpenv 本体 ◦ php-build/php-build PHP をビルドするためのプラグイン ◦ ngyuki/phpenv-composer PHP のバージョンごとにパッケージを管理するプラグイン ◦ 詳しい人向けの情報 ◦ CHH/phpenv ではなく madumlao/phpenv (phpenv/phpenv 系の後継) が入る ◦ 後半のスライドで違いを説明
  • 9. phpenv の使い方 [1/5] インストール済みの PHP のバージョンを一覧表示する 2016-06-29 第103回 PHP 勉強会 9 $ phpenv versions * system (set by /home/y-uti/.anyenv/envs/phpenv/version) ◦ 最初は "system" だけ ◦ system というのは anyenv 管理外の PHP を表す $ php -v PHP 5.4.16 (cli) (built: May 12 2016 13:45:17) Copyright (c) 1997-2013 The PHP Group Zend Engine v2.4.0, Copyright (c) 1998-2013 Zend Technologies with Zend OPcache v7.0.3, Copyright (c) 1999-2014, by Zend Technologies ◦ 環境により異なる (これは CentOS 7 での結果)
  • 10. phpenv の使い方 [2/5] 利用可能な PHP のバージョンを一覧表示する 2016-06-29 第103回 PHP 勉強会 10 $ phpenv install -l Available versions: 5.2.17 5.3.2 5.3.3 : : (省略) : 7.0.6 7.0.7 7.0snapshot 7.1.0alpha1 master
  • 11. phpenv の使い方 [3/5] バージョンを指定して PHP をインストールする 2016-06-29 第103回 PHP 勉強会 11 $ phpenv install 7.1.0alpha1 ◦ 以下の一連の処理が全自動で実行される 1. PHP のソースコードをダウンロードして展開 ("master" を指定した場合は git clone) 2. PHP をビルドしてインストール 3. 拡張ライブラリをインストール (Xdebug など) 4. php.ini ファイルを更新 (OPcache を有効にするなど) ◦ インストールされたことの確認 $ phpenv versions * system (set by /home/y-uti/.anyenv/envs/phpenv/version) 7.1.0alpha1
  • 12. phpenv の使い方 [4/5] PHP のバージョンを切り替える 2016-06-29 第103回 PHP 勉強会 12 $ phpenv global 7.1.0alpha1 7.1.0alpha1 $ phpenv versions system * 7.1.0alpha1 (set by /home/y-uti/.anyenv/envs/phpenv/version) ◦ 行頭の "*" は現在選択されている PHP のバージョンを表す
  • 13. phpenv の使い方 [5/5] あとは普通どおりに PHP を実行する 2016-06-29 第103回 PHP 勉強会 13 $ php -v PHP 7.1.0alpha1 (cli) (built: Jun 23 2016 23:58:03) ( NTS ) Copyright (c) 1997-2016 The PHP Group Zend Engine v3.1.0-dev, Copyright (c) 1998-2016 Zend Technologies with Zend OPcache v7.1.0alpha1, Copyright (c) 1999-2016, by Zend Technologies $ php -r 'echo "Hello, world!"[-1];' ! ◦ 文字列に負のオフセットを指定すると末尾から数える (PHP 7.1 より) ◦ https://wiki.php.net/rfc/negative-string-offsets を参照
  • 14. rbenv (Ruby) PHP と同じ 2016-06-29 第103回 PHP 勉強会 14 $ anyenv install rbenv $ exec bash -l $ rbenv install 2.4.0-preview1 $ rbenv global 2.4.0-preview1 $ ruby -e 'if (a, b = nil); p "True"; else p "False"; end' -e:1: warning: found = in conditional, should be == "False" ◦ Multiple assignment in conditional expression (新機能らしいよ) ◦ https://github.com/ruby/ruby/blob/v2_4_0_preview1/NEWS
  • 15. pyenv (Python) PHP と同じ 2016-06-29 第103回 PHP 勉強会 15 $ anyenv install pyenv $ exec bash -l $ pyenv install 3.6.0a2 $ pyenv global 3.6.0a2 $ python -c 'name = "Fred"; print(f"He said his name is {name}")' He said his name is Fred ◦ Formatted string literals (新機能らしいよ) ◦ https://docs.python.org/3.6/whatsnew/3.6.html
  • 16. その他の言語 anyenv でインストールできる言語たち 2016-06-29 第103回 PHP 勉強会 16 $ ls -1 ~/.anyenv/share/anyenv-install | column -c 70 Renv goenv nenv rbenv crenv hsenv nodenv sbtenv denv jenv phpenv scalaenv erlenv luaenv plenv swiftenv exenv ndenv pyenv
  • 18. phpenv local [1/5] 特定のディレクトリの配下だけ PHP のバージョンを変える ◦ 最初の状態を確認 2016-06-29 第103回 PHP 勉強会 18 $ phpenv version system (set by /home/y-uti/.anyenv/envs/phpenv/version) $ php -v | head -n 1 PHP 5.4.16 (cli) (built: May 12 2016 13:45:17)
  • 19. phpenv local [2/5] 特定のディレクトリの配下だけ PHP のバージョンを変える ◦ ディレクトリを作成して・・・ 2016-06-29 第103回 PHP 勉強会 19 $ mkdir -p ~/samples/php $ cd ~/samples/php ◦ このディレクトリ配下で使いたい PHP のバージョンを指定する $ phpenv local 7.1.0alpha1 7.1.0alpha1
  • 20. phpenv local [3/5] 特定のディレクトリの配下だけ PHP のバージョンを変える ◦ 指定されたバージョンの PHP が使われる 2016-06-29 第103回 PHP 勉強会 20 $ php -v | head -n 1 PHP 7.1.0alpha1 (cli) (built: Jun 23 2016 23:58:03) ( NTS ) $ cd .. $ php -v | head -n 1 PHP 5.4.16 (cli) (built: May 12 2016 13:45:17) ◦ サブディレクトリでも OK (phpenv local で指定されたバージョンが使われる) ◦ phpenv local を実行したディレクトリの外側には効果を及ぼさない
  • 21. phpenv local [4/5] PHP ファイルを置いた場合はどうなる? ◦ phpenv local を実行したディレクトリの配下にファイルを作成する 2016-06-29 第103回 PHP 勉強会 21 $ cd ~/samples/php $ echo '<?php echo phpversion(), "¥n";' >phpversion.php ◦ ディレクトリの外側から実行する $ cd ~ $ php samples/php/phpversion.php 7.1.0alpha1 ◦ phpenv local で指定されたバージョンが使われる
  • 22. phpenv local [5/5] まとめ:どのバージョンが使われるかを決める規則 1. 現在の shell で有効なバージョン ◦ phpenv shell コマンドで指定できる ◦ 今回は説明しなかった 2. 実行される PHP ファイルのディレクトリで有効なバージョン 3. カレントディレクトリで有効なバージョン 4. phpenv global で指定されているバージョン 2016-06-29 第103回 PHP 勉強会 22
  • 23. 注意 これらは phpenv を通して PHP を実行しているときの話 Q. phpenv local を実行しておけば対応する libphp5.so が選ばれる? A. いいえ 2016-06-29 第103回 PHP 勉強会 23
  • 25. anyenv の更新 anyenv 本体や各言語の *env は git clone された状態 ◦ 最新状態を取り込むには git pull すればよい ◦ 最新の PHP をビルドするには php-build を最新にする必要がある ところが ◦ 一つ一つ git pull するのは結構めんどくさい 2016-06-29 第103回 PHP 勉強会 25 $ cd ~/.anyenv $ git pull $ cd envs/phpenv $ git pull $ cd plugins/php-build $ git pull $ cd ../phpenv-composer $ git pull
  • 26. anyenv-update anyenv と配下の各 *env やプラグインを一括更新するプラグイン ◦ インストール方法 ◦ https://github.com/znz/anyenv-update の説明どおり 2016-06-29 第103回 PHP 勉強会 26 $ mkdir ~/.anyenv/plugins $ cd ~/.anyenv/plugins $ git clone https://github.com/znz/anyenv-update.git ◦ 使い方 $ anyenv update Updating 'anyenv'... Updating 'anyenv/anyenv-update'... Updating 'phpenv'... ...
  • 27. anyenv-git anyenv と配下の各 git リポジトリに git コマンドを一括発行 ◦ インストール方法 ◦ https://github.com/znz/anyenv-git の説明どおり 2016-06-29 第103回 PHP 勉強会 27 $ mkdir ~/.anyenv/plugins $ cd ~/.anyenv/plugins $ git clone https://github.com/znz/anyenv-git.git ◦ 使い方 $ anyenv git checkout -B mybranch ◦ 各 git リポジトリの mybranch ブランチをチェックアウト。無ければ作る
  • 29. configure オプション変更 [1/2] share/php-build/default_configure_options ファイルを編集 2016-06-29 第103回 PHP 勉強会 29 $ head default_configure_options --without-pear --with-gd --enable-sockets --with-jpeg-dir=/usr --with-png-dir=/usr --enable-exif --enable-zip --with-zlib --with-zlib-dir=/usr --with-kerberos ◦ 全バージョンに適用される
  • 30. configure オプション変更 [2/2] share/php-build/definitions/ ディレクトリにファイルを追加 ◦ ファイルの例 2016-06-29 第103回 PHP 勉強会 30 $ cat share/php-build/definitions/master-debug configure_option -D "--disable-debug" configure_option "--enable-debug" install_package_from_github master enable_builtin_opcache ◦ master-debug という「バージョン」を独自に追加 ◦ --disable-debug オプションを削除して --enable-debug オプションを追加 $ phpenv install master-debug
  • 31. ./configure 後に処理を追加 share/php-build/before-install.d/ に bash スクリプトを作成 ◦ bash スクリプトの例 2016-06-29 第103回 PHP 勉強会 31 #!/usr/bin/env bash if type apxs &>/dev/null; then apxs_libexecdir=$(apxs -q LIBEXECDIR) sed -i -e ¥ "s|'¥$(INSTALL_ROOT)$apxs_libexecdir'|$PREFIX/libexec|g" ¥ $SOURCE_PATH/Makefile fi ◦ libphp5.so ファイルの出力先を設定する
  • 32. インストール後に処理を追加 share/php-build/after-install.d ディレクトリにスクリプトを作成 ◦ bash スクリプトの例 2016-06-29 第103回 PHP 勉強会 32 #!/usr/bin/env bash inifile="$PREFIX/etc/php.ini" if [ -f "$inifile" ]; then sed -i -e 's/^memory_limit =.*$/memory_limit = 1024M/' $inifile sed -i -e 's/^;date.timezone =.*$/date.timezone = Asia¥/Tokyo/' $inifile fi ◦ PHP のインストール後に php.ini を編集する ◦ memory_limit を 1024M に設定 ◦ date.timezone を Asia/Tokyo に設定
  • 33. 拡張モジュールの追加 [1/2] share/php-build/extension/definition ファイルに定義を追加 2016-06-29 第103回 PHP 勉強会 33 $ cat definition "name","url-dist","url_source","source_cwd","configure_args","extension_type","after_install" ... "vld","http://pecl.php.net/get/vld-$version.tgz","https://github.com/derickr/vld.git",,,"extension", ... 項目 内容 記述例 name モジュール名 vld url-dist 圧縮ファイル URL http://pecl.php.net/get/vld-$version.tgz url_source リポジトリ URL http://github.com/derickr/vld.git source_cwd ビルドディレクトリ configure_args ./configure オプション extension_type 拡張の種類 extension after_install ビルド後のコールバック関数
  • 34. 拡張モジュールの追加 [2/2] PHP_BUILD_INSTALL_EXTENSION 環境変数を設定 2016-06-29 第103回 PHP 勉強会 34 $ PHP_BUILD_INSTALL_EXTENSION='vld=@' phpenv install 7.0.8 ◦ vld 拡張モジュールをインストールする ◦ "@" はリポジトリから master ブランチを取得 ◦ バージョン番号を指定した場合は圧縮ファイルを取得 ◦ インストール後に設定ファイルに追加するところまで自動
  • 36. ローカルリポジトリの運用 悩ましい問題 ◦ 独自のカスタマイズによりリモートリポジトリとの差分が発生 ◦ git pull したときにエラーになってしまう 私の運用の紹介(一例として) 2016-06-29 第103回 PHP 勉強会 36 $ anyenv git checkout -B local ◦ リモートリポジトリを pull するときは・・・ $ anyenv git checkout master $ anyenv update $ anyenv git rebase master local ◦ 節度を保ったカスタマイズなら滅多に conflict しない(経験上)
  • 38. 最初に要点 今回説明した madumlao/phpenv とは別に CHH/phpenv がある 1. 機能は大差ない 2. 実績は CHH/phpenv (TravisCI で使われている) 3. anyenv で使うなら madumlao/phpenv が簡単 4. どちらも phpenv install コマンドは php-build/php-build を使う ウェブなどで情報を調べるときは ◦ phpenv の情報はどちらの話なのか注意が必要 ◦ php-build の情報はどちらの phpenv を使っていても共通 2016-06-29 第103回 PHP 勉強会 38
  • 39. CHH/phpenv とは rbenv (sstephenson/rbenv) を PHP 用に変更するパッチ ◦ https://github.com/CHH/phpenv インストール方法 ◦ https://github.com/php-build/php-build の説明どおり 2016-06-29 第103回 PHP 勉強会 39 $ curl -L http://git.io/phpenv-installer | bash ◦ phpenv とプラグイン数種 (php-build 含む) がインストールされる ところで何故インストール方法が php-build に書かれているのか ◦ php-build は CHH/phpenv のプラグインとして使われる想定 ◦ そもそも php-build/php-build は元々 CHH/php-build だった
  • 40. CHH/phpenv の使い方 今回説明してきた phpenv (madumlao/phpenv) と同じ 2016-06-29 第103回 PHP 勉強会 40 $ phpenv help Usage: rbenv <command> [<args>] Some useful rbenv commands are: commands List all available rbenv commands local Set or show the local application-specific Ruby version global Set or show the global Ruby version shell Set or show the shell-specific Ruby version install Install a PHP version using the php-build plugin uninstall Uninstall a specific PHP version using the php-build plugin rehash Rehash rbenv shims (run this after installing executables) version Show the current Ruby version and its origin versions List all Ruby versions available to rbenv which Display the full path to an executable whence List all Ruby versions that contain the given executable See `rbenv help <command>' for information on a specific command. For full documentation, see: https://github.com/rbenv/rbenv#readme ◦ あちこちに "rbenv" や "Ruby" と表示されていることに気付いた?
  • 41. 改めて CHH/phpenv とは rbenv (sstephenson/rbenv) を PHP 用に変更するパッチ ◦ CHH/phpenv のインストーラがやること 1. git clone sstephenson/rbenv して 2. PHP 用にソースコードを変更する ◦ したがって rbenv のリポジトリがそのまま見えている 2016-06-29 第103回 PHP 勉強会 41 $ cd ~/.phpenv $ git remote show origin * remote origin Fetch URL: https://github.com/sstephenson/rbenv.git Push URL: https://github.com/sstephenson/rbenv.git ... ◦ clone した後にソースコードを変更しているので diff も出ている
  • 42. phpenv/phpenv rbenv (sstephenson/rbenv) をベースとした PHP 向けの実装 ◦ https://github.com/phpenv/phpenv CHH/phpenv との主な違い ◦ rbenv に依存していない ◦ phpenv install コマンドを独自実装している ◦ php-build を使っていない ◦ php-build ほど高機能ではなかった (シェルスクリプト 1 ファイルでの実装) 開発が止まっている ◦ 最終コミットは 2013 年 11 月 (dev branch) 2016-06-29 第103回 PHP 勉強会 42
  • 43. madumlao/phpenv 開発の止まっている phpenv/phpenv を fork したもの ◦ 2015 年 11 月 ~ phpenv/phpenv との主な違い (fork 後の変更点) ◦ php-build を使う 2016-06-29 第103回 PHP 勉強会 43
  • 44. anyenv で使われる phpenv ~/.anyenv/share/anyenv-install/phpenv に書かれている 2016-06-29 第103回 PHP 勉強会 44 $ cat ~/.anyenv/share/anyenv-install/phpenv install_env "https://github.com/madumlao/phpenv.git" "master" install_plugin "php-build" "https://github.com/php-build/php-build.git" "master" install_plugin "phpenv-composer" https://github.com/ngyuki/phpenv-composer "master" ◦ 現在は madumlao/phpenv ◦ 時期によって異なる ◦ phpenv/phpenv 0000-00-00 ~ 2014-08-17 ◦ laprasdrum/phpenv 2014-08-17 ~ 2016-03-26 ◦ madumlao/phpenv 2016-03-26
  • 45. anyenv + CHH/phpenv [1/2] 私は使っていないので十分に検証できていません anyenv の管理下で CHH/phpenv を使う ◦ phpenv を ~/.anyenv/envs/ ディレクトリ以下に置けばよい 2016-06-29 第103回 PHP 勉強会 45 $ curl -L http://git.io/phpenv-installer |¥ PHPENV_ROOT=~/.anyenv/envs/phpenv bash
  • 46. anyenv + CHH/phpenv [2/2] 私は使っていないので十分に検証できていません git pull できない問題の対応 ◦ rbenv からの差分を別ブランチに commit する 2016-06-29 第103回 PHP 勉強会 46 $ cd ~/.anyenv/envs/phpenv $ git checkout -b local $ git add bin/phpenv $ git commit -a ◦ 本発表の「応用編 4 ローカルリポジトリの運用」を参照 一応これで anyenv update できるようになるが・・・ ◦ rbenv の変更に応じて phpenv を更新するわけではないので微妙
  • 47. まとめ anyenv + phpenv + php-build 便利! 対抗馬 (私は使っていないので詳しくありません) ◦ Homebrew ◦ direnv 2016-06-29 第103回 PHP 勉強会 47