投稿

Cloud Run Functionsでバッチ処理を動かす

PhpSpreadsheetでエクセルファイルを処理するバッチ処理が重いので、Cloud Run Functionsを利用すれば幸せになるかもしれないと調査しているときの覚書。 環境: Windows 11 Pro 23H2, Google Cloud SDK 503.0.0, Google AI Studio(Gemini 1.5 Pro) Cloud Run Functionsとは? Cloud Run Functionsは、Google Cloudが提供するサーバーレスサービスの一つ。 コードをイベントに応じて自動的に実行できる。 難しいサーバー管理は Google がやってくれる。 自動で処理能力が調整されて、使っていない場合は費用が発生しない。 2024年8月に、Google Cloud Functionsの第2世代がCloud Run Functionsに名称変更された。 Cloud Runと統合して機能強化された。 Cloud Run functions の概要  |  Cloud Run functions Documentation  |  Google Cloud Cloud Run functions の実行環境  |  Cloud Run functions Documentation  |  Google Cloud ちなみにGoogle CloudにはBatchという重い処理を定期実行するサービスがある。 参考:  バッチ: バッチ コンピューティングのシンプルさ | Google Cloud Cloud Run Functionsのチュートリアル 下記公式クイックスタートに従ってやってみる。 参考:  Google Cloud コンソールを使用して Cloud Run 関数を作成する  |  Cloud Run functions Documentation リージョンは「aria-northeast1(東京)」にした。 何となく雰囲気は分かった。 PHPのチュートリアル 公式ドキュメントを参考に。 Google Cloud CLI を使用して Cloud Run 関数を作成する  |  Cloud ...

Cloud Native Buildpacksとは?

Google Run FunctionsのチュートリアルをやっているときにBuildpackパックツールというのを知って調査しているときの覚書。 環境: Windows 11 Pro 23H2, pack 0.36.0, Google AI Studio(Gemini 1.5 Pro) Cloud Native Buildpacksとは? Cloud Native Buildpacks (CNBs) は、Dockerfileを記述することなく、ソースコード(package.jsonなど)からコンテナイメージを自動的に生成するためのツール。 Cloud Native Buildpacks · Cloud Native Buildpacks ビルドパックを再利用するため、ビルド時間を短縮できる。 Windowsにインストール scoop経由でインストール。 参考:  Pack · Cloud Native Buildpacks PS:> scoop install pack PS:> pack --version 0.36.0+git-92bc87b.build-6201 ▼ 関連記事 Windows11にDocker Desktopをインストール Windows11をクリーンインストール(2022年12月)

Windows11にDocker Desktopをインストール

Google Cloudで使うDockerfileの動作確認をしたくてDocker環境を作っているときの覚書。 環境: Windows 11 Pro 23H2, Docker Desktop 4.36.0 Docker Desktopをインストール scoop経由でインストールするか迷ったけど、まずは公式の案内通りにやる。 Hyper-Vの機能は有効化済み。 参考:  Windows で Hyper-V を有効にする | Microsoft Learn systeminfoコマンドで確認できる。 PS C:> systeminfo Hyper-V の要件:         ハイパーバイザーが検出されました。Hyper-V に必要な機能は表示されません。 公式サイトからインストーラーをダウンロードして実行。 参考:  Windows | Docker Docs デフォルトでWSL2のチェックが入っているのでそのままインストール。 Windowsの再起動が必要。 チュートリアル Docker Desktopに表示されたチュートリアルをやる。 What is container? How do I run a container? Run Docker Hub images Persist your data between containers Access your local folder from a container 【関連記事】 Windows11をクリーンインストール(2022年12月) Docker for Windowsをインストール

PHPのerror_logをsyslogに設定したら文字化け(FreeBSD固有の問題だった)

PHPでバッチ処理を書いているときの覚書。 環境: FreeBSD 14.1-RELEASE-p6, PHP 8.3.6 PHPエラーはシステムログに設定する。 # php --ini # less /usr/local/etc/php.ini error_log = syslog これで「/var/log/messages」に出力されるようになる。 PHPエラー時に確認してみると文字化けしている。 # less /var/log/messages 文字コードの確認。 # less /usr/local/etc/php.ini default_charset = "UTF-8" UTF-8になっている。 システムの言語設定を表示。 # locale LANG=C.UTF-8 LC_CTYPE="C.UTF-8" LC_COLLATE="C.UTF-8" LC_TIME="C.UTF-8" LC_NUMERIC="C.UTF-8" LC_MONETARY="C.UTF-8" LC_MESSAGES="C.UTF-8" LC_ALL= 各説明は下記サイトを参考に。 参考:  ロケール環境変数について - IBM Documentation これを日本語に設定すればいいのかな? 設定できるlocale一覧を表示。 # locale -a FreeBSDは/etc/login.confを編集する。 参考:  Chapter 25. Localization - i18n/L10n Usage and Setup | FreeBSD Documentation Portal # less /etc/login.conf default:\         ...         :charset=UTF-8:\         :lang=ja_JP.UTF-8: /etc/login.confを編集したときはcapability databaseを更新する必要があるみたい。 # cap_mkdb /etc/login.conf 一旦ログインしなおして確認。 # locale LANG=ja...

FreeBSDにXdebugをインストール

WordPressのwpdbのエラー時に呼び出し履歴(back trace)を表示してほしくて設定したときの覚書。 環境: FreeBSD 14.1-RELEASE-p6, PHP 8.3.6, xdebug 3.3.2 xdebugを検索してインストール。 # pkg search xdebug # pkg install php83-pecl-xdebug 読み込まれているか確認。 # php --ini インストールしただけで呼び出し履歴(back trace)できるようになる。 【関連記事】 WordPressがBlankだったりトップにリダイレクトするのをデバッグ XdebugをInstallしてError時の呼び出し履歴を表示

PHPのmysqlndとmysqliの違い

開発環境を構築するときにphp-mysqlndではなくphp-mysqliをインストールするようになって、「php-mysqlndをインストールしなくていいんだっけ?」と思って調査したときの覚書。 環境: FreeBSD 14.1-RELEASE-p6, PHP 8.3.6 mysqlndとは? PHPとMySQL(MariaDB)サーバーとの通信するためのライブラリ。 MySQL Native Driverが正式名称。 PHP5.3以前はMySQL Client Library(libmysql)が使われていたが、これはMySQL側が開発したものでありライセンスの問題があった。 そのためPHPプロジェクトで書き直されたものがMySQL Native Driver。 PHP5.4からデフォルトで有効。 参考:  PHP: Mysqlndの概要 - Manual 参考:  MySQL :: MySQL native driver for PHP - mysqlnd 参考:  MySQL Native Driver for PHP, mysqlnd mysqlndとphp-mysqliとの違い。 mysqlndはPHPのソースコードに組み込まれたライブラリ。 php-mysqliはPHP拡張モジュール。 MySQLサーバーに接続するプログラムはphp-mysqliが提供しているAPIで記述する。 php-mysqliは MySQL Native Driver(mysqlnd)と MySQL Client Library(libmysql)の どちらのライブラリを使うか選択できる。 MySQL Native Driver(mysqlnd)を使っているか確認。 どのライブラリを使うかはコンパイル時に決める。 参考:  PHP: どのライブラリを選ぶか - Manual PHPのビルドオプションを表示する。 見やすいように改行する。 # php-config --configure-options | sed -e 's/ --/\n--/g' ... --enable-mysqlnd ... mysqliが読み込まれているか確認。 # php --ini .... Loaded Configuration ...

phpのconfigureオプションを確認

phpのビルド(コンパイル)時の設定を確認しようとしたときの覚書。 環境: FreeBSD 14.1-RELEASE-p6, PHP 8.3.6 確認コマンド # php-config --configure-options 改行に置換して見やすくする。 # php-config --configure-options | sed -e 's/ --/\n--/g' --disable-all --program-prefix= --with-config-file-scan-dir=/usr/local/etc/php --with-layout=GNU --with-libxml --with-openssl --with-password-argon2=/usr/local --enable-dtrace --enable-embed --enable-fpm --with-fpm-group=www --with-fpm-user=www --enable-mysqlnd --with-external-pcre=/usr/local --prefix=/usr/local --localstatedir=/var --mandir=/usr/local/share/man --infodir=/usr/local/share/info/ --build=amd64-portbld-freebsd14.0 build_alias=amd64-portbld-freebsd14.0 PKG_CONFIG=pkgconf PKG_CONFIG_LIBDIR=/wrkdirs/usr/ports/lang/php83/work/.pkgconfig:/usr/local/libdata/pkgconfig:/usr/local/share/pkgconfig:/usr/libdata/pkgconfig CFLAGS=-O2 -pipe -fstack-protector-strong -isystem /usr/local/include -fno-strict-aliasing LDFLAGS= -L/usr/lib -lcrypto -lssl -fstack-protector-strong CPP=cpp CXXFLAGS=-...

PhpSpreadsheetが複数ファイルをループするとメモリを使いすぎる

PhpSpreadsheetでxlsxファイルを処理しているときにメモリエラーが出たので調査したときの覚書。 環境: Windows 11 pro, PHP 8.3.13, PhpSpreadsheet 3.5.0 数メガある10個ほどのxlsxファイルをループ処理したら下記エラー。 PHP Fatal error:  Allowed memory size of 1073741824 bytes exhausted (tried to allocate 4096 bytes) in D:/../ 次のファイルを読み込むごとにメモリ消費が増えていく。 PhpSpreadsheetはIteratorを使ってメモリ消費を最小限にしているはず。 参考:  Looping the Loop - PhpSpreadsheet Documentation 試したこと php.iniのmemory_limitを1024Mにした。 Loop中にmemory_get_usage()を出力して、どこでメモリ消費するか計測。 xlsxをload前にsetReadDataOnly(true)する。 → 変わらなかった。 Loopの最後で変数をunsetする。 → 変わらなかった。 10,000行の1MBのxlsxファイルをloadするとメモリ126MBを消費した。 memory_limit=1024Mだと8MB(約80,000行)のファイルを処理するのが限界。 フォルダに置いたxlsxファイルをループして処理したかったけど、メモリの使い過ぎで止まってしまうので別の方法を考える。 対策案 一つずつ別スレッドで処理(1つのPHPコマンドで1ファイル処理)。 一旦XLSXをCSVに変換してから処理。 一時的にクラウドのハイスペックマシンで処理。 そもそもPhpSpreadsheetを使わず、Power AutomateでXLSXをCSVに変換してから処理。 CSVファイルをfgetcsvでループ処理する際はファイルサイズに関わらず使用メモリは増えないので、一旦何らかの方法でXLSXをCSVに変換するのが有力候補。 【関連記事】 Windows11にPHP8.3とComposerをscoop経由でインストール 病院の施設基準を自動更新するには? PHPでExcelを扱う...

Windowsがブルースクリーン→メモリ診断→メモリ交換

Windowsがブルースクリーンになることが出てきたので原因を調べているときの覚書。 環境: Windows 11 Pro 23H2, メモリ32GB(8GBx4), WinDbg 2017/08/28, MemTest86 v11.1 1.原因を調査 ブルースクリーンになってイベントビューアーを見てみる。 このコンピューターはバグチェック後、再起動されました。バグチェック: 0x0000001a (0x0000000000041792, 0xfffff0810eb1fba8, 0x0000020000000000, 0x0000000000000000)。ダンプの保存先: C:\Windows\Minidump\111924-10890-01.dmp。レポート ID: d07f49ba-...-98cfaeb341c6。 検索してみると下記記事が参考になった。 参考:  WindowsのMinidump解析でChatGPT使ったら良かった #minidump - Qiita 手順 Microsoft StoreからWinDbgをインストール Geminiに聞く Windows PCが突然停止し、minidumpが生成されました。 このダンプファイルをWinDbgツールにかけたところ、以下の出力が得られました。 障害の原因を調べてください。 WinDbgのメッセージ: 物理メモリに問題があることが分かる。 2.メモリ診断 Windows メモリ診断を実行してみる。 実行中もメモリに問題があると表示され、再起動後のイベントビューアーにもエラーが検出されている。 Windows メモリ診断によりコンピューターのメモリがテストされ、ハードウェア エラーが検出されました。問題を確認して修復するには、コンピューターの製造元に問い合わせてください でもメモリ4枚のうち、どのスロットのメモリに問題があるか分からない。 前に使ったMemTest86を実行してみる。 参考:  メモリ診断ツール「MemTest86」 MemTest86でもどのスロットのエラーなのかは分からないので、テストするメモリだけにしてMemTest86を実行する。 4周テストするのに6時間掛かかるので、エラーが出たら停止する。 3.メモリ交換 Crucialの16GBx2のメモリを購入。 Cr...

iPad Air 13インチ(第6世代M2)を購入

1年4ヵ月前に購入したiPad Pro 12.9(第6世代M2)からiPad Air 13インチ(第6世代M2)へ買い替えたときの覚書。 Apple Storeでの購入金額 12.9インチiPad Pro Wi-Fi + Cellular 128GB - スペースグレイ: 196,800円 13インチiPad Air Wi-Fi + Cellularモデル 128GB - スペースグレイ: 154,800円+AppleCare 16,800円(2年間) 買い替えた理由 iPad Pro 12.9のバッテリーの消費が激しくなり1時間に10%減るようになった。 Apple StoreでOSの書き換えしても直らない。 仕事で利用するのでバッテリーの持ちが悪いのは致命的。 主にニコンの一眼レフで撮影した写真をSnapBridgeで転送して確認するので、画面が大きければiPad Proでなくてもいいという判断。 iPad Pro 12.9(第6世代M2)との比較、使用感 iPad Airの方が86g軽い。 病院で撮影するときにマスクするので指紋認証が便利。 画質は変わらない。 私の使い方の場合、FaceIDより指紋認証の方が圧倒的に便利ということが分かった。 【関連記事】 Nikon Z6IIIの階調モードHLGはiPad Proを外部モニター化すれば正しく表示できるか? iPad Air3 64GB Wi-Fi + Cellularを買った