2024年2月11日日曜日

PHP Conference 2024 に参加して #phpkansai

これまではオンラインも含めると3度参加してきて、今回は4度目になります。
対面での参加は久しぶりになります。PHP Conference Kansaiは6年ぶりとのこと!クロージングで今回の参加者は431名と発表がありました。大人数でしたね!

今回はアフターコロナの中で久しぶりの対面開催ということで、会場にも多くの人が訪れており、熱気もすごいですね!下の写真のように事前登録した特別なシールも貰いました!


セッションやLTの様子について Xの投稿情報をみるとほぼ満席だということがわかりますね!他にも人が溢れているセッションも多くありました。


   https://twitter.com/phpcon_kansai/status/1756549971145634198
   Photo by @phpcon_kansai

   https://twitter.com/phpcon_kansai/status/1756585468479799319
   Photo by @phpcon_kansai

オープニング




実行委員長からの挨拶。たくさん来られたのは嬉しい反面、危険を避けるため各 room は入場制限をしないといけない場合があるかもということでした。

以下、各セッション内容を筆者の理解に基づいてメモしています。
そのため、発表者の意図した内容でない場合もあるかもしれませんが、その点ご留意ください。筆者の感想的なものは文章冒頭に # をいれておきます。

レガシーシステムへのPHPStan導入から半年での課題と効果




10:50 - 11:00 - roomB

部屋は満員お礼の状態!椅子を急遽追加されていましたね!

PhpStorm等既存の静的解析ツールでは限界を感じていたところに PHPStanに出会った。
こちらも静的解析ツールではあるが、できる幅が大きいとのこと。
PHPStanでバグを発見例:関数のオーバーライドの引数の型ミス

過剰な指摘に対しては除外ルールを設定していった。
除外:arrayを引数とする場合に正確な型指定(全修正するのは大変)

課題:ローカル実行する手段が少ないために再チェックに時間がかかる

#PHPStanを早速導入してみた。下記あたりを見て、手持ちの Macに composer をインストールしてから、phpstanをインストール。

PHPStan導入のすすめ - Hajimari Tech Blog| 株式会社Hajimari

下記のように a.php を作成して、 <?php echo test;  を入れて PHPStanでチェックしてみた。


test というのが定義されていないよっていうエラーですね。
これを <?php echo "test"; に変更してScanすると下記のようになります。レベル最大の9でもエラーはありませんでした。まぁこれでエラーがでたらどうしようって感じではありますけどね。


これはなかなか便利そう!

令和最新版 PHP メモリ管理術



11:10 - 11:45 - roomB


冒頭、「php -d memory_limit=-1」(PHPのメモリ制限を無効化)を使っていたら手を上げて!という発表者側の問いに、結構な人数が手を上げていました。

#私もローカル環境では設定をいれてます。WordPress など CMSを使っている場合、プラグインなどによるアクセスログなどが数百MBになったり、その他状況によってはデータベースが GBを超えることもあるので、ローカル環境などで開発のためのクローンサイトを作る時には、そうしたメモリ制限を無効化しておかないとエラーになっちゃんですよね。

post_max_size はサーバーが一時ファイルを作成できる容量によって設定すべき
*メモリはあまり気にしなくて良い

post_max_size >= upload_max_filesize

である必要あり。
PHPの変数は CoW(Copy on Write)。つまり使うときにメモリが消費される。
とはいえ、値の変更があったりなどするとメモリ消費していくので、使わなくなった変数は解放しておくほうがよいだろう(巨大なデータを配列などにいれて、処理中にもう参照しない状態になった場合など)。

#解放は unset ( $sample ); など unsetを使う
参考:PHPメモリ解放の手引き!あなたのスキルを3倍にする6つの方法 | Japanシーモア

ガーベジコレクションは自動で動作するはずだが動作しないケースもある。その場合、gc_collect_cycles 関数を設定することで手動で強制実行させることが可能ということ。

#参考:PHP・GCの話-1話) なぜGarbageCollection? メモリとGCを意識する #PHP - Qiita

画像を出力(base64)したいなど、memory_limit よりも大きな値を使いたい場合
57*143 bytes ごとに分割した文字列を base64_encodeするとちょうどうまく分割できる(かなりトリッキーだが)。

#このあたりが参照?:PHP: base64_encode - Manual


昼食



グランフロント南館7F のレストランコーナーを訪れましたが、あまりの大行列に断念。LINKS UMEDAの地下にあるマクドナルドで「たまごダブルバーガー」を食べてホッと一息。

レガシーとモダンなシステムが混在する開発環境を改善しよう



13:00 - 13:10 - roomC

サブシステムごとに開発作業の進め方が異なるとミスも発生しやすい状況となる

Windowsマシン + PHPStorm でコーディング
動作確認は、Linux VM環境
ソース管理は GitLab
デプロイは手動だった。モダンな環境だが開発環境が異なってしまう問題があった

これについて、下記を考えた
サブシステムごとのコンテナ環境を開発メンバーのVM環境上に展開
VM環境のディレクトリをコンテナにマウントする
コンテナ実行スクリプト群はアプリソースとおなじリポジトリに管理

WSL(Windows Subsystem for Linux)は使わなかったのか?
 既存のメールサーバーシステムを考えると構成が複雑になってしまうなど

開発用PHP Dockerコンテナ
php.ini や設定ファイルもリポジトリ側で共有(起動時に読み込む)

コンテナ環境実行のためのスクリプトを makeコマンドで実装できるように用意した。

テストコードが書けるようになって「変更したけど壊してないかな」という不安を解消しませんか?〜テスト駆動開発の世界のクイックツアーも添えて〜



13:20 - 13:55 - roomC

発表者は、普段 Python(機械学習)をしている
PHPUnit は 10.5/11.x 系が現在の最新

テストコードがかけるメリット
それぞれの時点でベストの書き方をしているけれど、新しい情報を得たら、そのコードに書き直したいこともあるかもしれない。しかし、そのことによって振る舞いが変更されてしまわないだろうかと不安になる

php -a で対話型モードになるので、これで確認してみる
php -a 
> require 'sample.php';
> echo hogehoge();

しかし関数が多くなっていたら大変。

テストコードでチェックすると、不安というのは退屈に変わる
そのためには負担のかかるテストコードを書くメリットは大きいのではないか
テストコードは良いコードに近づけるものである。したがってコードを不安なく変更できるだろう。

PHPUnit に関するマニュアルは下記がよい

たとえば下記のように書くと、fizzbuss(3) の結果が、"Fuzz"と一致するかどうかのテストになる。

$this->assertSame(fizzbuss(3), "Fuzz");

ただ、下記のように複数の引数をテストしたいなら、 Data Providerで実装できる。
$this->assertSame(fizzbuss($number), "Fuzz");

#Data Provider についてのマニュアル

テストの世界のクイックツアー

モック(Mock)

ある処理の中で他の処理を呼び出すものがあったりして、そうしたテストコードを実装してみたい。たとえば、HTTP通信していて、エラーコード(通信失敗)をチェックしたい場合、仮想的にエラーコードを吐かせるなどのことを、スタブという。

テスト駆動開発

TDD: Test Driven Development 

上記についての考え方は、まずテストコードを先にかくというもの。
つまりもとがないので必ずテストは失敗する。
それから簡単なコードを書いて、テストコードが pass することを確認する。
それからコードを書き、テストコードを pass するコードを書く。それからコードをきれいにする。

たとえば FizzBuzz.php について <?php のみという何も無いデータにしておいて、テストコードを先に書いてテストする。

public function hogehoge{
 fizzbuzz(false);
}

などをテストコード内に書いてPHPUnitが失敗することを確認する。

さらにメインのコードに関数 fizzbuzzを書いた上で、テストコードに下記のようにテストコードを追加する。

public function hogehoge{
 $this->assetSame(fizzbuzz(1), "1");
 fizzbuzz(false);
}

PHP8.2にバージョンアップしたら文字化けが発生して道頓堀に飛び込みたくなった話




14:15 - 14:25 - roomB

発表者はメールディーラーサービスの管理運用をされている
メール共有管理サービスで、メールの処理を複数人で対応可能にするWebメーラーのこと。

PHP8.0から8.2にバージョンアップしたときに、顧客からメールが文字化けしたという問い合わせがあった。

メールは大きくヘッダーと本文の2つに分かれている。
本文の中には、パートに分かれている場合もある(テキストパート、HTMLパート、添付ファイルパートなど)
文字コード部分については、各パートごとに下記のような情報が付与されているはずだが、それがないメールはRFCの規格上おかしい。これはメールディーラーの問題ではないではないと思っていたが、顧客にはそんなことはわからない。

Content-Type:text/plain; chatset="utf-8"

文字コードのないメールの場合には、 mb_detect_encoding によってチェックして付与していた。しかし、PHP 8.1以降 でこの仕様が下位互換性のない変更になった。

mb_detect_encodingについては、これまでは前から順に正常にエンコーディングされた最初のエンコーディングを返していた。つまり評価というのはしていなかったということ。


しかしPHP8.1以降は全チェックして、評価してもっとも適切なものを返すという仕様に変更。この適切なものの判断に誤りが生じる問題が生じているということ。

解決策は、mb_check_encoding を使ってエンコーディングの種類を手動チェックしていくとのこと。

#下記辺りも参考になるかも
PHP8.1でのマルチバイト文字列関数の文字エンコーディングの挙動について #PHP - Qiita

#ただ下記の別資料をみると、mb_check_encoding も状況によっては危ないかもしれないようですね。ただエンコーディングのあるなしのみであれば、問題はなさそうです。
Garoon開発チームではPHP8.1の仕様変更とどう向き合ってきたのか / How we have responded to the PHP 8.1 mbstring specification changes - Speaker Deck

#筆者は以前、mb_convert_encoding の処理で文字化けした。筆者の場合には、そもそもデータソースをUTF-8に統一して、mb_convert_encodingは使わないようにした(メール処理ではなく、CSVデータに対する処理だったので)。そうできるならよいが、メール処理などではどのような種類のものがくるか特定できないので、それは無理だろう。

14:30 - 15:10 スポンサーブース


セッション中にも関わらず、それなりの人数がスポンサーブースにいました。


どこから来たのかについて、注意書きをみておらず適当な色のものを貼り付けてしまいました。またセッション間で廊下も結構人で一杯でした。

PHPの「歴史的な理由」ってなんだ!?



15:10 - 15:20 - roomC

scalar型について、 php-internals で検索すると 1998-05-01 の時点で存在していた。

snmprealwalk についての経緯(PHP3.0.8のときにいろいろあったとか?)
https://www.php.net/manual/ja/function.snmprealwalk.php

PHPで生成AIのAPIをやってみた



15:30 - 15:40 roomA

composer で探すと、openai-php というものを見つけてこれを使ってやってみた。

API利用は有料であることに注意。
API Keyについてはセキュリティ設定を施しておかないと、誰でも使えるので注意!
*有料なので、誰かに利用されると支払いがやばいことになる(公開サービスなど、API Keyを知られてしまう状況の場合)。

クロージング - roomA



他の地域での PHP Conference の紹介

#下記にスケジュールあり
PHPイベントの世界 #PHP - Qiita

上記によれば
また、東京でも PHPカンファレンスJapan 2024が12月に開催 することがきまったとのこと。

懇親会 - roomD



懇親会冒頭の挨拶。後ろの参加者が見えるように前側の参加者が座っていく様は日本ならではかなぁと思いました。それにしても参加人数がものすごい。


十分な量の食事が用意されていて美味しくいただきました!


歓談中の名刺交換は、事前登録しておいたバッジ交換となりました!これは今後もどこかで使っていきたいと思います!


私にとって対面での PHP Conference 参加は、7年ぶり(前回2017年)です。2017年はPHP7に関する情報収集をしていました。今回は PHP8.1/8.2 をベースに情報収集しました。いくつか気になるキーワードも入手できたので、また時間があるときに深堀りしてみたいと思います!

2024年2月11日 @kimipooh

2023年11月11日土曜日

関西オープンフォーラム2023に参加して(11月10日-11日) #kof2023 #kof

昨年に引き続きハイブリットでの開催となりました。

今年のイベントは、実行委員長だった中野先生が急逝されたこともあり、仕切り直しての開催でした。


 デザインギャラリーに飾られた故中野先生写真、グッズ

例年通り、持ち上げるのが大変な機材持ち込み専用の大型キャリングケース(SANWA BAG-HD5)とリュックを担いで電車で前日に会場入りしました。京阪のプレミアムカーは快適でしたが、御堂筋線の淀屋橋から本町は常に混んでいて大変でした。

会場にむかう道すがら、閉店セールをしていたので少し覗いてみるとかなりの安売りをしていたため、いくつかお土産用に購入したのでした。ちょうどスマートフォンのガラス拭きがほしかったのでよかったです!

事前準備&スタッフルーム

筆者は当日のための準備として、前主にプロジェクタ関連のセッティングをしました。

今年のスタッフルームはショーケースの1つを使いました(左上の写真)。
外から丸見えということはありますが、ショーケースやサロン、多目的室への導線が非常によく、何か困った人が相談しやすいという利便性に富むだろういう判断です。実際にここをスタッフルームにすることで会場見回りや各種セッティングが近いために楽になりました。

右上の写真はデザインギャラリーの一部です。

多目的室は、HDMI分配器や ATEM Mini(今年からのお試し。昨年は異なる機材だった模様)などを使って様々な制御をしながらの配信です!

上記はサロンのセッティングです。これに加えて、Zoom + YouTubeライブ配信のためにYamahaの集音マイクを設置しておきました。

左上の写真は、ショーケースのセッティングです。構造から壁側に発表者用机を置く構造上、超短焦点のプロジェクタを使ってプロジェクタを壁近くに設置して投影してみました。普段、超短焦点プロジェクタはステージで使っていたのですが、今年は他のプロジェクタをつかったのでここで活用してみました。

右上の写真は、デザインギャラリーのセッティングです。今年は廊下からも見えるような立ち位置にしており、かなり光源が明るすぎるために、5000ルーメンのプロジェクタを使って明るくてもそれなりに見える状態にしました。

1日目(11月10日)

本日は多目的ルームのみ。夜は懇親会です!
懇親会の確認(受付)は、多目的室の入り口でしていました。


多目的室にはコロナ禍の前に比べて椅子の数は半分ぐらいにしていますが、それが埋まるぐらいの来場がありました。YouTubeライブを聞いていましたが、非常にクリアな音声で聞き取りやすかったです!

懇親会



今回の会場は、ATC O’s北棟2F グーノート「海の見えるフードテラス シーサイドテラス」でした。会場はかなり広く、ゆったりできるセッティングでした。


故中野先生からのお酒を頂きました。


実行委員長からの挨拶の後、美味しい料理を食べながら、皆で歓談したのでした。





2日目(11月11日)

以下、話を聞きながら筆者が思ったことをメモしておきます。

来年度から大学入試に「情報I」が入ります



今の子供達、そして親御さん達の関心が高い大学入試における「情報I」に関して、様々な話を伺うことができました。

子供の頃からプログラミングの習い事が増えてきていて、中学校では2進数なども授業にはいっており、高校では情報の応用(情報I)になっていて、情報IIは全国で5万人ぐらいが教えられている模様。。高校ではPCDAサイクルなども含めて情報社会の問題解決をどうするのかなども情報Iに盛り込まれており、実際の内容は学校ごとに異なる体験をしたり(設備や教員の力量によるものもありそう)、することもあるようだ。また大学入試共通テスト(試作問題参照)では、言語特有の問題にはせず、自然言語で書き下せるかという点を重視しているようだ。もちろん実際にプログラミングをしていないとわからないようになっている模様。たとえば関数を理解せず使っていないと、意味がわからない状況になるだろうということ。

数学で統計をする場合には理想的な数値になっている。しかし情報ではたとえばアンケートをとるときに何も答えない場合もありえる。そうしたものは欠損値などにするなど、そうした場合も扱うらしい。

生成AIなど新しい技術についても盛り込んでいくというのも情報科目の特徴のようだ。
ITパスポート試験が、情報Iへ対応していっているようですね。

ITパスポート試験における出題範囲・シラバスの一部改訂について(高等学校情報科「情報Ⅰ」への対応など) | 試験情報 | IPA 独立行政法人 情報処理推進機構

またたとえば家庭内ネットワークの構築ぐらいはできる程度の知識は必要ということ。
プログラミングには、統計だけでなく集合や確率、図形の性質なども使うということ。

数学IIはデータサイエンス領域まですることになる。
情報系の学部などへ進学する場合には、より情報に興味がある人が行きやすくなるし、情報IIの範囲までになると、大学1回生でこれまで学んできた基礎的な学習はすでに終えている状態になっているようにも思う。情報Iにしてもかなりの範囲は学んでいる状態になっていると思うため、今度大学のカリキュラムも少しずつ変化していくように思う。

質問:子供が中2年生だが、技術でいつプログラミングをやるのか?
 学校によって何に対してプログラミングを入れ込むかは異なる。学校にゲームもっていけないので、学校の GIGA端末で自分や友達がゲームを作って、それを貸し借りしている場合もある。そうしたものは、情報という科目にとってはどんどんやっていくほうがいい。

質問:プログラミング大会は男性ばかりが目立つが、今後はそうしうたことが改善されるのか?
 情報Iは男女関係なく全員が受けることになる。そのため、今後は改善されていくことを期待する。またそうした大会も作っていきたいと思う。

質疑応答をみると、プログラミングに関する様々な試みが今まさに進んでいて、今後どうなっていくのかは楽しみに思います。

IT男子に送る婚活大作戦!マル秘情報伝授致します! vol.7



毎年 YouTubeライブ等サポートしながら聞いているセッション。
何故かこのセッションだけ、参加者は一番うしろの席に集まっていました。参加者の男女比率は1:1ぐらいと女性にも人気なセッションですね!

12/24 とメッセージが送られてきたら?
 2分の1と答えたIT男子がいたそうな.. そこは男女トークではしっかりしようとか。

なるほどそういう答えをするのかぁと思ってしまいました。

このようにIT男子を用意して質問をしながら、どうしたらよいのかの具体例を示して進めていくのでわかりやすくテンポもよく、楽しかったです。

国産OSSのノーコード・ローコード開発ツール”プリザンター”のご紹介



筆者はプロジェクト管理に redmine や Backlogなどを使っている。このプリザンターもそうした使い方ができそうで興味深い。
さらに全機能が無償(コミュニティ版)で使えるのは良さそうですね。
これで作成したアプリケーションをエクスポートで JSONコードで出力される。ただし更新などはできないため、そうしたことをしたい場合には提供している有償ツールを使う必要あり。

オープンソース画像生成AIの今~Stable Diffusionとウェブで画像生成できるAUTOMATIC1111入門



画像生成については、Stable Diffusion などソースが公開され始めたことで、どのように画像が生成されているのかある程度わかるようになってきたということ。またライセンスについては、守るべきこともあるのでそうした注意も必要。

下記などをみると、生成画像AIによって良し悪しもあるらしい。また公開時にはいろいろ気をつけないといけないこともあるとのこと。また国によって解釈が異なる場合もある。

Stable Diffusionとは?話題の画像生成AIの使い方・初心者向けのコツも徹底解説!

12枚程度の写真を読み込ませて、必要な文字プロンプトをいれると半日程度で、非常にクオリティの高い3D画像ができてしまうというのは驚きということ。発表スライドをみると、オープンソースでここまでできるのかと驚きました。

AUTOMATIC1111 とは、Stable Diffusion を動かすためのUIの1つ。

Windowsであれば、Docker Desktopが楽とのこと。

おわりに



セッションが終わったあとの時間帯のステージ。多くの人で賑わっていました。
アフターコロナの中で2度目のイベント。アフターコロナでの対面イベントの2年目、かつての賑わいが戻ってきつつあるのを感じました。

2023年11月11日 @kimipooh