---
title: 遊びながら強くなる！コードゴルフで学ぶPHPの言語仕様
tags:  #php #コードゴルフ  
author: [takaram](https://www.docswell.com/user/takaram)
site: [Docswell](https://www.docswell.com/)
thumbnail: https://bcdn.docswell.com/page/37K5PM8LED.jpg?width=480
description: PHPカンファレンス関西2025 (2025/7/19) の資料です
published: July 19, 25
canonical: https://www.docswell.com/s/takaram/59RVWJ-phpcon-kansai-2025
---
# Page. 1

![Page Image](https://bcdn.docswell.com/page/37K5PM8LED.jpg)

遊びながら強くなる！
コードゴルフで学ぶPHPの言語仕様
PHPカンファレンス関西2025
荒巻拓哉 (@takaram71)


# Page. 2

![Page Image](https://bcdn.docswell.com/page/LJ3KXY26J5.jpg)

おことわり
● 資料は公開済みです
● 右下のQRコードが資料のURLです
○ 次の次のスライドまで出しときます
● X, fortee からも辿れます


# Page. 3

![Page Image](https://bcdn.docswell.com/page/8JD325ZMEG.jpg)

今日のテーマ
コードゴルフ


# Page. 4

![Page Image](https://bcdn.docswell.com/page/VEP41GDQJ8.jpg)

今日の目標
● コードゴルフ面白そうと思ってもらう
● PHPに少し詳しくなる


# Page. 5

![Page Image](https://bcdn.docswell.com/page/27VXY61PEQ.jpg)

荒巻拓哉
@takaram71
● 株式会社ラクス
○ メールマーケティングサービス
「配配メール」開発
● 大阪出身 大阪在住


# Page. 6

![Page Image](https://bcdn.docswell.com/page/5JGV9N2QJL.jpg)

コードゴルフ
● お題の仕様に沿うコードを書く
● ただしできるだけ短く
● コードのバイト数＝スコア
○ スコアが小さいほどよい
○ ゴルフと同じ


# Page. 7

![Page Image](https://bcdn.docswell.com/page/47Q6WQPW7P.jpg)

コードゴルフ
● PHPerKaigi 2025
○ 「PHPerコードバトル」
○ PHPのコードゴルフで競う
■ 事前に予選
■ Day0に決勝トーナメント


# Page. 8

![Page Image](https://bcdn.docswell.com/page/KE44KNY1E1.jpg)

コードゴルフ
● 優勝しました🏆
○ 後日いただいた記念品 →
● 感想
○ 楽しかった
■ パズル感覚
○ PHPの勉強にもなった


# Page. 9

![Page Image](https://bcdn.docswell.com/page/L714X5657G.jpg)

コードゴルフの問題って
どんな感じ？


# Page. 10

![Page Image](https://bcdn.docswell.com/page/G7WXN5WWJ2.jpg)

コードゴルフ：例題
標準入力で与えられた整数Nに対して、以下のルールに従い
1からNまでを標準出力に出力してください。
●
●
●
●
3の倍数のとき &quot;Fizz&quot;
5の倍数のとき &quot;Buzz&quot;
両方の倍数のとき &quot;FizzBuzz&quot;
それ以外のときは数字そのもの
各出力は改行で区切ってください。


# Page. 11

![Page Image](https://bcdn.docswell.com/page/4JZ63N52J3.jpg)

普通のFizzBuzz


# Page. 12

![Page Image](https://bcdn.docswell.com/page/YE62X8V6JV.jpg)

コードゴルフのFizzBuzz
230 byte → 74 byte


# Page. 13

![Page Image](https://bcdn.docswell.com/page/GE52X9D5E4.jpg)

コードゴルフのFizzBuzz
● 空白、改行はできるだけ消す


# Page. 14

![Page Image](https://bcdn.docswell.com/page/9724X28GER.jpg)

コードゴルフのFizzBuzz
● forの中身が一文なら {} 不要


# Page. 15

![Page Image](https://bcdn.docswell.com/page/DJYM8Y6GJM.jpg)

コードゴルフのFizzBuzz
● forの中で代入
● (int) キャストしない


# Page. 16

![Page Image](https://bcdn.docswell.com/page/V7NWQPZ878.jpg)

コードゴルフのFizzBuzz
● インクリメント ($i++) と比較を同時に
○ $i = 0 のとき
■ echo $i++; // 0
■ echo ++$i; // 1


# Page. 17

![Page Image](https://bcdn.docswell.com/page/YJ9XD3ZXE3.jpg)

コードゴルフのFizzBuzz
● 配列の活用
○ 要素数1の配列 [&#039;Fizz&#039;]
○ $i が3の倍数 → &#039;Fizz&#039;
○ それ以外 → null → . 演算子で空文字列に


# Page. 18

![Page Image](https://bcdn.docswell.com/page/GJ823M19JD.jpg)

コードゴルフのFizzBuzz
● Warning上等
○ Undefined variable, Undefined array key
○ エラー制御演算子 @ で握りつぶす


# Page. 19

![Page Image](https://bcdn.docswell.com/page/LJL2V3QMER.jpg)

コードゴルフのFizzBuzz
● 改行は \n を使わない
○ PHPの文字列は普通に複数行書ける


# Page. 20

![Page Image](https://bcdn.docswell.com/page/47M8GD167W.jpg)

このへんはコードゴルフ的
テクニック
普段のコーディングではあんまり……


# Page. 21

![Page Image](https://bcdn.docswell.com/page/P7R5Z4LNJ9.jpg)

コードゴルフで
（きっと普段も）
役立つPHPの知識


# Page. 22

![Page Image](https://bcdn.docswell.com/page/PJXK92W87X.jpg)

コードゴルフで役立つPHPの知識
● 文法、言語仕様
○ 文と式
○ コールバック
● 関数


# Page. 23

![Page Image](https://bcdn.docswell.com/page/3JK5PMVL7D.jpg)

コードゴルフで役立つPHPの知識
● 文法、言語仕様
○ 文と式
○ コールバック
● 関数


# Page. 24

![Page Image](https://bcdn.docswell.com/page/LE3KXYM6E5.jpg)

PHPの言語仕様：文と式
● 文
○ すべての PHP スクリプトは、一連の文からなります。[1]
● 式
○ 最も簡単で最も正確な式の定義は、&quot;値があるもの全て&quot;
です。 [2]
出典：PHPマニュアル (The PHP Documentation Group, CC BY 3.0)
[1] https://www.php.net/manual/ja/control-structures.intro.php
[2] https://www.php.net/manual/ja/language.expressions.php


# Page. 25

![Page Image](https://bcdn.docswell.com/page/8ED3256M7G.jpg)

PHPの言語仕様：文と式
ざっくり言うと：
● 式：
$a =
ここ ;
return
ここ ;
var_dump( ここ );
● 文：
それ以外
に書けるもの


# Page. 26

![Page Image](https://bcdn.docswell.com/page/V7P41GYQE8.jpg)

PHPの言語仕様：文と式
文
式
制御構文
演算子式
if while switch foreach …
+ * . == ! &amp;&amp; ?? …
class Foo {...}
match
function foo() {...}
function() {...}
const FOO = 1;
$foo = 1
return
throw
echo
print


# Page. 27

![Page Image](https://bcdn.docswell.com/page/2JVXY6GP7Q.jpg)

PHPの言語仕様：文と式
● 書ける場所が決まっている
○
○
○
○
○
$a = 式
myFunc(式, 式)
function foo() { 文... }
if (式) 文 elseif (式) 文 else 文
for (式; 式; 式) 文
● 式の来るべきところに文は書けない


# Page. 28

![Page Image](https://bcdn.docswell.com/page/5EGV9N8QEL.jpg)

PHPの言語仕様：文と式
● echo → print に変えると式として扱える


# Page. 29

![Page Image](https://bcdn.docswell.com/page/4JQ6WQ9WJP.jpg)

PHPの言語仕様
● コールバック
○ callable 型
○ array_map や usort の引数に渡すやつ
○ $callback() で呼び出せる
● 大きく分けると3種類


# Page. 30

![Page Image](https://bcdn.docswell.com/page/K744KNX171.jpg)

PHPの言語仕様：コールバック
1. 無名関数
○ function() {...}
○ fn() =&gt; ...
2. 関数/メソッド名の文字列、配列
○
○
○
○
&#039;strlen&#039;
&#039;DateTime::createFromFormat&#039;
[&#039;DateTime&#039;, &#039;createFromFormat&#039;]
[$date, &#039;format&#039;]
3. __invoke() メソッドがあるオブジェクト


# Page. 31

![Page Image](https://bcdn.docswell.com/page/LJ14X5N5JG.jpg)

PHPの言語仕様：コールバック
70byte
53byte


# Page. 32

![Page Image](https://bcdn.docswell.com/page/GJWXN54WE2.jpg)

PHPの言語仕様：コールバック
● 代入は式＝値を返すので、以下のようにも書ける


# Page. 33

![Page Image](https://bcdn.docswell.com/page/4EZ63N22E3.jpg)

コードゴルフで役立つPHPの知識
● 文法、言語仕様
○ 文と式
○ コールバック
● 関数


# Page. 34

![Page Image](https://bcdn.docswell.com/page/Y762X966EV.jpg)

PHPの標準関数
● PHPは標準関数がかなり豊富
● 約800個とも約2000個とも
○ インストールされた拡張モジュール次第
● 標準関数を知る → 車輪の再発明を回避


# Page. 35

![Page Image](https://bcdn.docswell.com/page/G752XN6574.jpg)

PHPの標準関数
● 全関数の暗記は無理
○ 「こんな関数あった気がする」で調べればいい
● 必要なのは大体このへん
○
○
○
○
PHP: String 関数 - Manual
PHP: マルチバイト文字列 関数 - Manual
PHP: PCRE 関数 - Manual
PHP: 配列 関数 - Manual


# Page. 36

![Page Image](https://bcdn.docswell.com/page/9J24X5MG7R.jpg)

コードゴルフに便利な関数
● file
○ 入力を配列で読み込む
● printf / sprintf
○ 0埋めや固定幅での出力
● strtr
○ 文字列置換
○ 使い方が2種類
■ strtr(&#039;bar&#039;, &#039;ab&#039;, &#039;AB&#039;) // BAr
■ strtr(&#039;bar&#039;, [&#039;a&#039; =&gt; &#039;A&#039;, &#039;b&#039; =&gt; &#039;B&#039;]) // BAr


# Page. 37

![Page Image](https://bcdn.docswell.com/page/DEYM8KXGEM.jpg)

おわりに


# Page. 38

![Page Image](https://bcdn.docswell.com/page/VJNWQR18J8.jpg)

PHPerKaigi 2025 PHPerコードバトル
● 問題と参加者の提出コードが公開中
○ https://t.nil.ninja/phperkaigi/2025/code-battle/
○ ぜひ挑戦してみてください！
● 解説ブログ
○ PHPer コードバトル最終コード鑑賞・解説 – PHPerKaigi
スタッフブログ
○ PHPerコードバトルで書いたコードを紹介してみる


# Page. 39

![Page Image](https://bcdn.docswell.com/page/YE9XDM5X73.jpg)

まとめ
● コードゴルフで役立つ知識
○ 特有のテクニック
○ PHPの深い知識
■ 文法、標準関数、etc.
● コードゴルフ楽しいよ！
○ 『PHPでやってみよう！』


# Page. 40

![Page Image](https://bcdn.docswell.com/page/GE823LY9ED.jpg)

補足・おまけ


# Page. 41

![Page Image](https://bcdn.docswell.com/page/LEL2VL4M7R.jpg)

文と式
● 式の来るべきところに文は書けない
● 逆はOK (!)
○ if ($cond) { doSomething(); }
● 式に ; をつけると文になる
○ 式文


# Page. 42

![Page Image](https://bcdn.docswell.com/page/4JM8GMK6JW.jpg)

参考文献
●
●
●
PHP: 式 - Manual
PHPの文と式 - Qiita
お前はPHPの標準関数の数を知っているか #phperteanight


