【php トピック】今週の人気記事TOP5!(2025/4/20 更新)
【2025/4/20】集計 新着週間Like数 ランキング Top5
PHPカンファレンス小田原2025でスポンサーセッションした感想を書くよ
PHPカンファレンス小田原2025にて、レバテック開発部の筆者は「古き良きLaravelシステムの関数型スタイルリファクタリング」を発表。技術負債を抱えたシステムに対し、関数型スタイルでリファクタリングに取り組んだ経験を共有した。登壇では想定以上の反応があり、参加者からのフィードバックも得られた。特に「単一テーブル継承」の提案は今後の開発に活かされる予定。 セッション内容は後日アーカイブ公開予定で、5月21日には再演も実施される。
2025年の最新PHP開発環境:注目すべきツールまとめ
この記事は、PHP開発における効率化と品質向上のためのツールを紹介している。コード整形ツールPint、スペルチェックツールPeck、静的解析ツールPHPStan、リファクタリングツールRector、テストフレームワークPestを解説。 各ツールはComposerでインストール可能で、CIへの統合も容易。Pestは型カバレッジやアーキテクチャテストにも対応し、Composer scriptsによるコマンド管理も推奨している。これらのツールを活用することで、開発効率とコード品質の大幅な向上が期待できる。
Snow Monkey Forms をPHPのテンプレートファイル内で使用する方法
Snow Monkey FormsをクラシックテーマのPHPテンプレートで利用する方法は、公式ではサポートされていない。本記事では、フォームを固定ページに配置し、そのページのslugをキーにget_page_by_path
で取得、apply_filters('the_content', $page->post_content)
で出力する手法を紹介。formIdを使う公式の方法では環境依存の問題があるため、この方法が提案されている。ただし、slugのユニーク性を担保する必要がある。最後に、その固定ページへの直接アクセスをtemplate_redirect
アクションで404エラーにする方法も示されている。
PHPで始めるテスト駆動開発(TDD)入門
この記事は、PHPを用いたテスト駆動開発(TDD)入門です。TDDは「テスト作成→実装→リファクタリング」のサイクルを繰り返し、バグの少ない保守性の高いコードを作成する手法です。PHPUnitを用いた実践例として、電卓クラスの加算と減算機能の実装を解説。テストファーストのアプローチにより、機能単位の検証と、リファクタリングを容易にするメリットを説明しています。 結論として、TDDはバグ予防、コード品質向上、設計力向上に繋がり、PHP開発者にとって強力な武器となることを示唆しています。
202. Happy Number
この記事は、正の整数を入力として、それが「幸せな数」かどうか判定するアルゴリズムを解説しています。「幸せな数」とは、各桁の二乗和を繰り返し計算し、最終的に1になる数です。1にならない場合は「幸せな数」ではありません。記事では、PHPとTypeScriptによる実装例を示し、19は幸せな数(true)、2は幸せな数ではない(false)ことを例に挙げています。制約として、入力数は1以上、2³¹-1以下とされています。
【2025/4/13】集計 新着週間Like数 ランキング Top5
変更に強いFizz&Buzz
記事は、変更に強いFizzBuzzプログラムの実装を解説している。一般的なFizzBuzz関数の問題点として、ルール変更時の修正コストの大きさを指摘。解決策として、ルールをReplaceRuleInterface
で抽象化し、NumberConverter
で複数のルールを適用する設計を採用。CyclicNumberRule
とPassthroughRule
を実装し、オープン・クローズド原則に従い、拡張性と保守性を高めている。 NumberConverter
はルールを処理し、CyclicNumberRule
は数値と文字列の対応を、PassthroughRule
はデフォルトの数字出力を行う。
PHPerKaigi2025に登壇してきました。
PHPerKaigi2025にて、NE株式会社の山本氏は「AUTO_INCREMENTのIDカラムオーバーフロー」に関する発表を行った。 DB設計における注意点として、実例を用いて解説し、多くの聴衆から好評を得た。 発表後、多くのフィードバックと肯定的な反応があった。 山本氏は3年連続の登壇で、イベント全体も楽しんでおり、コードゴルフにも参加したと報告している。 NE株式会社はPHPエンジニアの採用を積極的に行っている。
160. Intersection of Two Linked Lists
与えられた2つの単方向連結リストが交差するノードを検出するアルゴリズムを実装する問題。 リストのノード数は最大3万個。交差するノードが存在すればその値を、存在しなければ"交差なし"を返す。 アルゴリズムは、入力としてリストの先頭ノードを受け取り、元のリスト構造を維持したまま、交差ノード(存在する場合)を特定する。 交差ノードの値は intersectVal
で与えられる。intersectVal
が0なら交差なし。
145. Binary Tree Postorder Traversal
この記事は、バイナリツリーの後順巡回を実装するPHPコードを示しています。空の木の場合は空配列を返し、そうでない場合は再帰関数helper
を用いて左部分木、右部分木を巡回し、最後に根ノードの値を結果配列に追加することで後順巡回を実現します。ノード数は0~100、ノード値は-100~100の制約があります。 コードは再帰的なアプローチで、時間計算量はO(N)、空間計算量はO(H) (Hは木の高さ)です。
144. Binary Tree Preorder Traversal
この記事は、バイナリツリーの前順走査アルゴリズムを実装するLeetCodeの問題を扱っています。 入力としてバイナリツリーのルートノードが与えられ、出力は前順走査(根→左→右)によって得られるノードの値の配列です。 空のツリーや単一ノードのツリーを含む様々な入力例とその出力結果が示されています。 記事自体はアルゴリズムの実装方法には触れていませんが、前順走査の結果を返す問題とその具体的な例を示している点が重要です。
【2025/4/6】集計 新着週間Like数 ランキング Top5
【教育コンテンツ】PHPで正の整数を受け取るバリデーションについて
PHPで正の整数のバリデーションを安全に行う3つの方法を解説。preg_match
による正規表現を用いた厳密な方法、ctype_digit
とis_numeric
を使った簡潔な方法、キャストと文字列比較を組み合わせた簡便な方法を紹介。それぞれにPHPUnitを用いたユニットテストによる検証方法を示し、先頭ゼロや非数値入力への対応を重点的に説明。preg_match
が最も安全だが複雑で、ctype_digit
は簡潔だが先頭ゼロに注意が必要。キャスト比較は手軽だが、可読性と明確性に欠ける可能性がある。 適切なバリデーションはシステムの安全性と信頼性を高める。
社内でイベントソーシング勉強会をやりました
NE株式会社のバックエンドエンジニアが、イベントソーシングに関する社内ハンズオン勉強会を開催した。Laravelを用いたWebアプリを題材に、イベント駆動、イベントソーシング、簡易CQRSを2時間かけて学習。参加者12名は、イベント駆動設計の理解度により理解の差が見られたものの、ハンズオン形式で実践的に学ぶことができたと好評だった。 イベントソーシングの導入は慎重に進めるべきとアドバイスされた。今後は、疎結合化が必要な箇所へのイベント利用を検討していく。
125. Valid Palindrome
LeetCodeのValid Palindrome問題を解いた記事です。与えられた文字列が、英数字のみを残し、大文字を小文字に変換した後、回文かどうかを判定します。空文字列は回文とみなします。例1("A man, a plan, a canal: Panama")はtrue、例2("race a car")はfalse、例3(" ")はtrueと判定されます。アルゴリズムは、前処理で英数字のみを抽出し、その後、文字列の先頭と末尾を比較することで回文性を確認します。
121. Best Time to Buy and Sell Stock
LeetCodeの「Best Time to Buy and Sell Stock」問題の解説記事です。株の価格配列から最大利益を得る取引を特定するアルゴリズムを示しています。 配列を走査し、最小購入価格と最大利益を更新することで、O(n)の計算量で解を得ます。利益が出ない場合は0を返します。例として、[7,1,5,3,6,4]
から最大利益5が算出されます。
Codeception で任意のバージョンの Chrome を起動したい
CodeceptionのE2EテストでChrome/ChromeDriverのバージョン不整合エラーが発生した場合、@puppeteer/browsers
を用いて任意バージョンのChromeとChromeDriverをインストールし、Codeceptionの設定ファイル(acceptance.suite.yml)にインストールパスを指定することで解決できる。 npx @puppeteer/browsers install
コマンドでバージョンを指定してインストール後、ChromeDriverを起動し、Codeceptionを実行する。 これにより、特定バージョンのブラウザ環境でのテストが可能となる。
【2025/3/30】集計 新着週間Like数 ランキング Top5
MCPサーバーはPHPでもつくれまぁす!(SDKがないので、案外大変)
著者は、PHPでModel Context Protocol (MCP) サーバーを実装した。PHP向けSDKがないため、Pythonのサンプルコードを参考に、ゼロから開発した。 開発過程ではデバッグの困難さに直面し、エラーログの解析に時間を費やした。 最終的に動作するサーバーを作成し、Packagistへの公開を目指している。新プロトコルへの対応についても、必須機能がオプションのため問題ないと判断している。 PHPでのMCPサーバー開発は困難だが、本記事が参考になるだろう。
Laravelで実装する認証と認可:簡単なセットアップと基本操作
Laravelを用いたWebアプリケーションの認証・認可実装を解説。Laravelの組み込み機能により、CSRF保護、パスワードハッシュ化、SQLインジェクション対策などを容易に実装可能。middleware
を用いたアクセス制御も示し、EnsureEmailIsGmail
ミドルウェア作成例を通して、特定条件下でのアクセス制限方法を説明。Laravelの標準機能とミドルウェアを活用することで、安全で効率的な認証・認可システム構築が可能となる。
Enumとパターンマッチでコードの意図を明確にする
PHPコードのリファクタリングにおいて、Enumとパターンマッチングを活用することで、コードの意図を明確化できることを示した記事です。 外部システム連携処理を例に、従来のif-elseによる複雑な条件分岐を、Enum(SyncMode: CREATE, PARTIAL_UPDATE, FULL_UPDATE)とパターンマッチで置き換えることで、コードの可読性と保守性を向上させました。 これにより、「なぜその処理をするのか?」という意図がコードから直接理解できるようになり、if/elseネストの解消に有効であると結論付けています。
PHPerKaigi 2025に登壇させていただきました: 『ドメインイベントを活用したPHPコードのリファクタリング』
PHPerKaigi 2025で「ドメインイベントを活用したPHPコードのリファクタリング」と題した講演が行われました。複雑化したコードベースに対し、ドメインイベントを用いた段階的なリファクタリングを実施。イベントの特定・モデリング、発行・ハンドリング、テスト手法を紹介し、機能間の依存関係を減らし、変更・テスト容易性、チームコミュニケーションを改善しました。 今後、非同期処理や結果整合性に関する更なる発信を予定しています。
PHPerKaigi 2025に参加・登壇しました(登壇編)
PHPerKaigi 2025にて、「PHP実行環境の歴史 PHP-FPMからFrankenPHPの誕生へ」と題し発表。PHP実行環境の変遷をPHP-FPMからFrankenPHPまで解説し、FrankenPHPのコンテナ環境との親和性とデメリットを提示。時間不足でイベント駆動とスレッドの説明が不十分だったものの、FrankenPHPのメリット・デメリット、ソフトウェアアーキテクチャとの関連性について聴衆の理解を得られた。次回のPHPカンファレンス関西2025では、パフォーマンス比較やFrankenPHPの代替可能性に関する実験結果を発表予定。
【2025/3/23】集計 新着週間Like数 ランキング Top5
「GitHub Copilotの実践的活用テクニック完全ガイド」をGitHub Copilotに生成させてみた
本記事は、GitHub Copilotの高度な活用法を解説。詳細なコメント、型情報付与、命名規則統一によるコード補完精度向上と、プロンプト駆動開発、ステップバイステップ指示、テストファースト、エラー処理明示化によるコード生成品質向上をLaravel 11の例を用いて示す。Copilotチャット、複数候補表示等の便利コマンドも紹介し、開発効率の大幅な向上を謳う。
【Laravel】開発環境のセットアップとプロジェクト作成
この記事は、macOS環境でLaravel開発環境を構築する手順を解説しています。PHP、Composer、PostgreSQLをHomebrewでインストール後、Laravelプロジェクトを作成します。PostgreSQLの設定でエラーが発生した場合、brew services start postgresql
でサービスを起動し、psql postgres
でデータベースに接続します。composer create-project laravel/laravel todo-app
でプロジェクトを作成し、.env
ファイルとconfig/database.php
でデータベース設定を確認、php artisan migrate
でマイグレーションを実行することで、php artisan serve
で開発サーバーを起動できます。セッションエラー発生時は、php artisan session:table
とphp artisan migrate
を実行する必要がある点に注意。
XServer VPSでホームページを公開する【AlmaLinux9/Nginx/PHP8/MySQL8】2025年版
記事は、AlmaLinux 9.5上でNginx、PHP 8、MySQL 8を用いたホームページ公開手順をXServer VPS環境で解説。2GBメモリVPSを選択し、公開鍵認証、SELinux有効化、ファイアウォール設定、SSHポート変更(22→2222)、ユーザー管理、NginxとPHP-FPM設定、MySQL設定、ログ監視、cronによるDBバックアップ、セキュリティ強化(fail2ban,clamav)などを実施。.htaccess非使用、セキュリティを考慮した詳細な設定手順が記述されている。 Ansibleによる自動化も今後の予定。
自宅のチャイムが押された事をLINEで確認できる仕組みを作った
本記事は、FlashAir、PHP、LINE Messaging APIを用いた、ドアホン来客通知システムの構築事例を紹介している。FlashAirでドアホン録画データを取得し、自宅サーバーで動画変換後、LINEに通知する仕組みだ。 FlashAirのLuaスクリプトでデータ送信、PHPで動画変換とLINE通知処理を行い、外部アクセスにはCloudflare Tunnel等を使用する。 高齢者見守りや宅配通知などへの応用も可能だが、FlashAir入手、サーバー環境構築、LINE API設定等の事前準備が必要となる。
php-fpm環境にMonitを導入してサーバーを監視する
WordPressサイトのphp-fpm停止問題に対処するため、Monitによるサーバー監視と自動復旧を実装した。Monitをインストール後、monitrc
と/etc/monit.d/php-fpm
に監視設定を記述し、php-fpmのPIDファイルパスを確認して設定した。systemctl enable
でphp-fpmとMonitの自動起動を設定し、monit -t
で設定チェック、systemctl restart monit
で反映後、monit status
で監視状態を確認。php-fpmを強制終了するテストで自動復旧を確認し、Monitによる安定稼働を実現した。
【2025/3/16】集計 新着週間Like数 ランキング Top5
Laravelのログを識別しやすく!リクエストIDをログに埋め込む方法
Laravelアプリケーションのログ調査を効率化するため、リクエストIDをログとレスポンスヘッダーに付与するミドルウェアを作成する方法を紹介。 Str::uuid()
で生成したリクエストIDをLog::withContext()
でログに、レスポンスヘッダーにset('Request-Id', $requestId)
で設定する。これにより、エラー発生時のログ特定が容易になり、request-id
をキーに効率的にログを絞り込めるようになる。 レスポンスヘッダーのRequest-Id
とログのrequest-id
を紐付けることで、迅速なデバッグが可能となる。
28. Find the Index of the First Occurrence in a String
PHPで文字列haystack
の中に文字列needle
の最初の出現位置を見つける問題を解いています。strpos
関数を利用し、needle
が見つかった場合はそのインデックスを、見つからなかった場合は-1を返す関数strStr
を実装しました。例として"sadbutsad"の中に"sad"が含まれる場合、最初の出現位置であるインデックス0が返ります。needle
が存在しない場合は-1を返します。
27. Remove Element
LeetCodeの「Remove Element」問題をPHPで解いた記事です。与えられた整数配列nums
から整数val
をインプレースで削除し、val
ではない要素の数を返します。 解法は、val
と異なる要素を配列の先頭に詰めていき、その要素数を返すことで実現しています。array_splice
を用いて不要な要素を削除することでインプレース性を担保しています。 出力は削除後の要素数k
と、val
以外の要素が先頭k
個に格納されたnums
配列となります。
爆速でLaravel12のローカル環境を作成する
Docker, Nginx, PHP-FPM, MySQL, phpMyAdminを用いたLaravel 12のローカル開発環境構築手順を解説。docker-compose.yml
で各コンテナを定義し、Nginxの設定、.envファイル設定、Laravelインストールとマイグレーションを実行することで、約15分でlocalhost:8000でアクセス可能な環境を構築できる。src
ディレクトリへの適切なパーミッション設定も重要。
26. Remove Duplicates from Sorted Array
ソート済み整数配列から重複を削除し、ユニークな要素数を返すPHPアルゴリズム。 removeDuplicates
関数は、二分探索ではなく、2つのポインタ($i
, $j
)を用いて線形時間(O(n))で処理する。$i
はユニーク要素のインデックス、$j
は走査用インデックス。nums[$i] != nums[$j]
ならユニークと判断し$i
を進め、値を上書き。最後に$i + 1
を返すことでユニーク要素数を返す。空間計算量はO(1)である。
【2025/3/9】集計 新着週間Like数 ランキング Top5
Rectorを使って地獄のLaravelアップグレード作業をEASYにしよう[Laravel7→11]
Laravel 7から11へのアップグレードをRectorとRector-laravelを用いて実施。composer
で両ツールをインストールし、rector.php
でアップグレード対象バージョン(Laravel 11、PHP 8.4)を指定。vendor/bin/rector process
コマンドでコードを自動修正。ドライラン機能で変更内容を確認可能。Rectorにより、非推奨記述の検出と修正を効率化し、大規模アップグレードを容易にした。
[2025年3月4更新] PHP開発者のためのCursor設定ガイド:共通設定・テスト・デバッグ・拡張機能まで
本記事は、PHP開発者向けVSCodeフォーク「Cursor」の設定ガイドです。ワークスペース設定、settings.json
によるエディタ・PHPUnit・Xdebug設定、推奨拡張機能、.cursorignore
によるインデックス除外、cursorrules
によるルール設定を解説。Docker環境でのPHPUnit実行、Xdebugによるリモートデバッグ設定を詳細に説明し、WSL環境での利用方法も示しています。settings.json
ではセキュリティ設定、エディタ表示、AI補完、GitLens設定などを紹介。効率的なPHP開発環境構築を支援します。
Laravel 12の新しいスターターキットを一瞬で日本語化
Laravel 12のスターターキットを日本語化する方法を解説。laravel new proj
で新規プロジェクトを作成し、LivewireとLaravel標準認証を選択。composer require askdkc/breezejp --dev
とphp artisan breezejp
を実行することで、簡単に日本語化できる。 本記事では、作者がLaravel本体へのPR (#24と#39)を通して日本語化の容易化に貢献したことも述べられている。
9. Palindrome Number
与えられた整数が回文数かどうかを判定するPHPコードについての記事です。負数や10のような数字は回文数ではないことを説明しています。 コードでは、数値を文字列に変換し、反転させて元の文字列と比較することで判定しています。 一致すればtrue、そうでなければfalseを返します。 文字列操作を用いたシンプルな解法が提示されています。
WordPressの投稿でカテゴリー必須仕様を回避する方法
WordPressの投稿は必ずカテゴリーを必要とするが、wp_insert_post
アクションフックを用いて回避可能。 「カテゴリー未選択」という仮のカテゴリーを作成し、投稿保存後に削除する手法で実現する。get_category_by_slug
、has_term
、wp_remove_object_terms
関数を使用。ただし、カテゴリー一覧からの除外、アーカイブページ対策、プラグイン・テーマとの互換性確認が必要となる。
【2025/3/2】集計 新着週間Like数 ランキング Top5
PHPカンファレンス名古屋2025で登壇してきました
PHPカンファレンス名古屋2025にて登壇。講演テーマは「設計原則、アーキテクチャパターン、アーキテクチャスタイルの違い」。抽象度の高い内容で、概念の粒度と抽象度の関係性を説明。参加セッションでは、「具体と抽象の往復」「テストの種類による分類」といった内容が印象的だった。 PHPUnit高速化技術やYWT(Year Week Task)振り返り手法に関する知見も得た。 講演後、参加者からのフィードバックを受け、Rails Wayがアーキテクチャスタイルという新たな気づきを得たことが最大の収穫となった。
Tree-sitterを使ってコードベースから関数定義を抽出する
この記事は、Tree-sitterを用いたPHPコードからの関数定義抽出方法を紹介しています。Tree-sitterは高速な構文解析ライブラリで、Node.jsスクリプトとtree-sitter-php
パッケージを用いることで、指定ディレクトリのPHPファイルから関数・クラス定義を抽出できます。出力は関数定義とその位置情報を階層的に表示します。この手法は、LLMとの連携によるコード生成、読解、ドキュメント生成に役立ち、特にインハウスコードのドキュメント整備に有効です。他の言語への適用も、対応するTree-sitterパッケージを利用することで可能です。
PHPカンファレンス名古屋2025で当日スタッフをしてきました
PHPカンファレンス名古屋2025の当日スタッフとして参加した非PHPerの筆者は、司会やタイムキーパーなどを担当。 セッションでは「テスト駆動開発」や「PHPの脆弱性とその対策」に関する内容が印象に残った。 イベントを通して名古屋のエンジニアコミュニティの活性化を実感し、今後の活動に繋げたいと考えている。 カンファレンスは盛況で、名古屋での勉強会開催も期待される。
[パフォーマンス改善]LaravelのwhereIn()をgroupBy()で改善
Laravelアプリのパフォーマンス改善事例。1万件のデータ処理で、whereIn()
を用いた処理が24秒かかっていたのを、groupBy()
によるインデックス化で0.03秒に短縮。メモリ消費は18.3MBから22.06MBに増加したが、処理速度の大幅な向上が優先された。keyBy()
も有効な選択肢で、メモリ消費を更に抑えられる可能性がある。ループ内でのwhereIn()
の多用はパフォーマンスボトルネックになりうるため注意が必要と結論づけられた。
負荷テストツール『k6』をローカル環境でサクッと試してみた
k6を用いたPHPアプリのローカル負荷テストを実施。Dockerとk6(JavaScript記述)で、10秒で100VUに増加、2分間維持、10秒で0に減少させる3段階のシナリオを実行。結果、95%のリクエストが500ms以下、エラー率0%と、100VUの負荷に十分耐えうることを確認した。 k6はローカル環境での手軽な負荷テストに有効である。
【2025/2/23】集計 新着週間Like数 ランキング Top5
LaravelでN+1を回避!with()を使う or 使わない?
LaravelでN+1問題を回避するwith()
メソッドの利用について検証した結果、大量データ処理ではwith()
によるEager Loadingで不要なデータを取得しメモリ消費が増えるため、別途クエリ発行による最適化が有効と結論付けた。 本ケースでは処理データが200件程度と少なかったためパフォーマンスへの影響は限定的であったが、リレーション数が多い既存コードを考慮し、可読性を犠牲にしてでもクエリ最適化を優先した。with()
は便利だが、データ量やリレーション数が多い場合はメモリ枯渇に注意が必要である。
PHPカンファレンス名古屋で初登壇
PHPカンファレンス名古屋にて、「楽しく向き合う例外対応」と題した講演を初登壇。夜中の勢いで応募したものの、社内登壇者のサポートを受け準備を進めた。当日はスライド表示トラブル発生も、かえって緊張が和らぎ、発表を成功させた。懇親会では登壇経験を活かし、積極的に交流できたと結論付けている。今後の更なる挑戦意欲を示している。
条件分岐を減らすためのポリモーフィズム
ECサイトの端数処理を例に、ポリモーフィズムによる条件分岐削減を解説。初期実装ではif
文で端数処理の種類(四捨五入、切り上げ、切り捨て)を選択していたが、ポリモーフィズムを用いることで、Roundable
インターフェースを実装した各クラス(四捨五入、切り上げ、切り捨て処理を持つクラス)を使い分けることで条件分岐をなくした。条件分岐はオブジェクト生成時に移行するものの、拡張性・保守性を向上させ、コードの複雑さを軽減できる。 BC Math
を用いた正確な数値計算の重要性にも言及している。
Symfony7~Docker環境構築からログイン機能作成まで
記事はSymfony7とPHP8.2を用いたDocker環境構築とログイン機能実装について記述している。Docker Composeを用いて、nginx、PHP-FPM、PostgreSQLコンテナを構築。Symfony CLIでUserエンティティとマイグレーションを生成し、データベースにログインユーザーを作成。security.yamlの設定と、LoginController、TopPageController、それに対応するtwigテンプレートによりログイン機能を実装した。 GitHubにソースコードを公開している。
PHP Laravelのよく使う記法をまとめてみたよ
Laravelにおけるデバッグ手法(dd(), dump(), Log::error)とCarbonを用いた日付処理、配列/コレクションへのデータマージ(array_merge, array_push, concat, push)、型変換(all())、文字列切り取り(substr())、空判定(empty(), isEmpty())、ページネーション(paginate())を解説。特に日付処理では2038年問題回避のためCarbonの使用を推奨。コレクションの空判定にはisEmpty()を推奨。 効率的な型変換にはall()を用いる。
Discussion