Slide 1

Slide 1 text

それ makeで出来るよ 2021-03-28, PHPerKaigi 2021 LT @take_3

Slide 2

Slide 2 text

タケタニヒロト ● 福岡在住 ● Web開発、SI ● Perl, PHP, Python とか @take_3 htaketani

Slide 3

Slide 3 text

Makeとは https://en.wikipedia.org/wiki/Make_(software) Makeは自動ビルドツール。 スチュアート・フェルド マンさんが1976年4月 (44年前)に作成

Slide 4

Slide 4 text

Makefile(レシピ)の書き方 作りたいもの + ‘:’ 材料を空白で区切って並べる ハードタブでインデント して、作る手順を記述

Slide 5

Slide 5 text

洋食メニュー「ハンバーグプレート」 作りたいもの 材料 作る手順 https://www.irasutoya.com/2012/03/blog-post_88 00.html

Slide 6

Slide 6 text

makeの実行 (基本) $ make targetA $ make # 定義したターゲット名を指定 # 未指定時は先頭ターゲットが対象

Slide 7

Slide 7 text

ターゲット作成の挙動 1. 指定ターゲット(作りたいもの) 2. 依存項目(材料)を検証 ○ なければ依存項目を作成 3. コマンド(作り方)に沿って作る ○ エラーがあれば中断

Slide 8

Slide 8 text

必要なことだけをやる ● 依存関係を再帰的に検査 ○ 依存項目が存在するか? 新しいか? ○ ターゲットが存在するか? 新しいか? ○ 更新タイムスタンプ • gitと親和性高い

Slide 9

Slide 9 text

インストール ● Linux ● Mac ● Windows ○ Git for Windowsで Bash環境がセット アップされる (unix系基本コマンド) ○ → make は同梱されない

Slide 10

Slide 10 text

Windows用(MinGW/MSYS環境)make インストール方法 1. ezwinports から make-4.3-without-guile-w32-bin.zip をダウンロード ○ [ezwinports - Browse Files at SourceForge.net] (https://sourceforge.net/projects/ezwinports/files/) ○ 参考: [Git\mingw64\] (https://gist.github.com/evanwill/0207876c3243bbb686 3e65ec5dc3f058) 2. zipを展開 3. bin/make.exe を C:\Program Files\Git\mingw64\bin\ にコピーする

Slide 11

Slide 11 text

エイリアス的 ● ファイル生成しなくても良い ● 複雑な操作、一連の処理をまとめて タスク名をつける ● シェルによる補完

Slide 12

Slide 12 text

### 煩わしい長いコマンド群 $ cd laradock $ docker-compose exec -w /var/www/api workspace php artisan migrate ### Makefileでタスクを定義しておく $ make migrate エイリアス的 シェル実行例

Slide 13

Slide 13 text

環境の違いを吸収する(1) ### 環境変数で test task1: @[ "$(USER)" != "root" ] # チェック ... # やりたいこと ### .envファイルの値で task2: @grep -qE '^APP_ENV=local$$' .env # チェック ... # やりたいこと

Slide 14

Slide 14 text

環境の違いを吸収する(2) ### Windowsのときだけ、winpty用の変数セット ifeq ($(shell uname),Windows) WINPTY = 'winpty' WINPTY_PATH_PREFIX = '/' endif tinker: $(WINPTY) docker-compose exec \ -w $(WINPTY_PATH_PREFIX)/var/www/api \ workspace php artisan tinker

Slide 15

Slide 15 text

中間ファイル ### dump-autoloadが重いのでファイルが変更されたときだけ FORCE: ls-files.app.md5: FORCE $(eval hash = $(shell git ls-files app | md5sum | cut -f1 -d' ')) # ソースファイル名の一覧のハッシュ [ -e ls-files.app.md5 ] && \ [ $$(cat ls-files.app.md5) = "$(hash)" ] || \ echo $(hash) > ls-files.app.md5 # ファイルの増減があったときだけ更新する tmp/dump-autoload: ls-files.app.md5 docker-compose exec workspace composer dump-autoload # コストが高い touch > tmp/dump-autoload # 終わったら時刻を保存しておく dump-autoload: tmp/dump-autoload # エイリアス

Slide 16

Slide 16 text

ありがとう ございました