時間データシリーズ:PHP Zmanim 入門

謝辞

このブログでは、いわゆる「ユダヤ時間」(ズマニム)の計算方法と、PHP Zmanimライブラリを使用するために必要なテクニックに関連する概念を説明しています。これは、ユダヤ時間を簡単に計算できる関数のライブラリです。

PHPZmanimライブラリはZachary Weixelbaumによって保守されています。今日のテクノロジーの多くと同様に、PHP ZmanimはEliyahu Hershfeldによる基礎となるKosher Javaライブラリに基づいています。私はZacharyとEliyahuに多大な感謝をしなければなりません。彼らがそれらのライブラリを開発するために投入した作業だけでなく、技術的およびユダヤ教の教義(ハラチャ)に精通するためのサポートを受けたことにも感謝しています。

はじめに

「今週の午後の祈り(ミンチャ)は何時になるか?」という質問は、うさんくさいほど複雑です。それは「午後の祈り」が説明を要しないように見えるからですが、ユダヤ教の教え(ハラチャ)に関連する多くの事柄と同様に、膨大な背景、解説、そして具体的な要件が必要です。

注意:ユダヤ時間の概念(ズマニム)に慣れている方は、「PHP Zmanimのインストール」とラベル付けされたセクションまで飛ばしても構いません。それに対して侮辱されたり、それに反対することはありません。

ユダヤ教の宗教的な日、週、そして人生における正確な時間計算の重要性を理解することは難しい。断食が始まり終わる時間から、特定の祈りを唱えるのが遅すぎる(または早すぎる)時間、そして単に持つだけでなく食べることすら禁じられるパンの瞬間まで、すべてに影響を与えている。

別の言い方をすれば、ラビ・アブラハム・ヨシュア・ヘシャールの著書「ザバスバト」から引用文を共有します。

シバトの意味は、空間ではなく時間を祝うことです。私たちは週6日、空間のものの専制下に生きています。シバトには、時間の中の聖なるものに調和することを試みます。

Rabbi Abraham Joshua Heschel, “The Sabbath”

その説明をしても、一部の読者はまだ疑問に思うかもしれません。「なぜそれほど大きな問題にするのですか? 5分違ったら神があなたに反対すると言っているのですか?」

それは妥当な質問であり、議論する価値があります。そうしないと、このブログ(そしてそれが記述する技術とテクノロジー)の必要性や影響が減少するからです。

いいえ、もちろん、神は気にしません。まるでトラックのコーチが私が走る前にウォームアップをしているか、オフシーズンのトレーニングをしているか、十分な水を飲んでいるか「気にする」かのように。正直に言うと、どれだけ頑張っても、私のコーチは健康にならない。しかし、私の次のレースでのパフォーマンスを超えて私を気にかける私のコーチは、私が気にすることを望んでいる。彼らは私が完全に献身することを望んでいる、彼らがそれによって私の経験がより充実することを知っているからだ。

同様に、神は「気にする」ことはない。しかし、トーラーとタルムードの文書を通じて、神が私たちに気を遣ってほしいと望んでいることはわかります。そして何千年もの間、ユダヤ学者たちは、文書で示された証拠を使って、単純で単純化された答えを避け、もっと深く掘り下げて詳細を明らかにしようと試みてきました。

手元の質問に戻ると:「午後の祈りはいつから?」その理解のためには、まず「昼」(「夜」とは対照的に)を何と定義するかを理解する必要があります。「朝」から「午後」を区切る境界をどう理解するか。一日をどのように効果的に分割するか。そしてさらに多くのこと。

このブログでは、必要に応じてこれらの概念や用語をいくつか紹介しますが、想像を絶するほど包括的でないことに注意してください。

コンピューターがこれらの時刻計算を迅速に行うことになり、今や私たちの代わりにその仕事をするための様々なウェブサイトやアプリケーションが登場したことは驚くに値しません。これらの計算を行う独自のプログラムを作成したい人にも、KosherJavaPHPSwift.NetJavaScriptPythonなどの多くのポートを含むコードライブラリの形で時間節約の解決策があります。

しかし、ツールの理論を理解することは重要です。ウェブサイトやアプリを作成しようとする人は、彼らのプログラムが誤った時間を誤って与えていないことを確認する必要があります。先述したように、誰もが「地獄に行く」(いわば)誤った時間に祈ることはありませんが、厳格な戒律があります:

וְלִפְנֵ֣י עִוֵּ֔ר לֹ֥א תִתֵּ֖ן מִכְשֹׁ֑ל וְיָרֵ֥אתָ מֵּאֱלֹהֶ֖יךָ
「lifnei iver lo titein michshol v’yareita mei-elohecha」
「盲人の前につまずきを置かないでください」

(Leviticus 19:14)

個人が事故で何かを間違えるのは一つのことです。情報を提供し、誰か(またはさらに悪いことに、たくさんの人々)が間違いを犯し、彼らが得た情報(あなたのアプリから)が正確で信頼できると信じているのはまったく別のことです。

基本的な時間

それを念頭に置いて、私たちは比較的シンプルで、ユダヤ教の伝統の変動に最も影響を受けない時間を理解することから始めます。

  • 日の出(Netz Hachma)は、太陽の円盤の上端が地平線に触れる瞬間の素朴な航海日の出です。
  • 日没(Shkia)は、太陽の上端が地平線の下に落ちる瞬間の日常のコインの反対側です。
  • A “seasonal hour” (sha’ah) refers to the even division of daylight, the time between sunrise and sunset. There are always 12 seasonal hours, but they may be longer or shorter than a regular (on your clock) hour because the amount of daylight fluctuates with the season.
    • いくつかの伝統では、夜明け(alot hashachar、または「alot」)から夜(tzeis hakochavim、または「tzeis」)までの時間の12分割であるsha’ahを計算することに注意してください。太陽の出る前に地平線上に光が見えるが、日の出自体はまだありません)から夜(日没後に地平線上に光が見えない)まで)。ブログで後ほど、夜明け(alot)と夜(tzeit)についてもっと詳しく説明します。
  • 季節的分数(sha’ot zmaniyot)は季節的時間の1/60であり、季節的時間と同様に、あなたの時計の分数よりも大きいか小さいことがあります。

見ての通り、日の出と日没は他のすべての時間計算の基本的なコアを形成し、一日の中で多くの重要なユダヤ人の時間がそれらから直接導き出されています。例えば、いくつかの伝統では次のようになります:

  • シャバットは金曜日の夜、日没(shkia)の18分前に始まります
  • シャバットは土曜日の夜、日没(shkia)から45(または50、または72)分後に終わります
  • …という具合に。

「複雑です」とされる計算

日の出と日没を特定した後、次のステップは、夜明けと夜の2つの重要な時間を特定することです。夜明け(Alot haShachar、または単に「Alot」)と夜(Tzeis hakochavim、または単に「Tzeis」)は、日の出と日没がそうであるように互いに鏡像です。夜明けは、地平線上に太陽ではなく光が見える瞬間です。夜は光がもはや見えない瞬間です。

残念ながら、「光」があるかないかは非常に主観的であり、そのためそれが計算される方法はさまざまです。

  • いくつかの伝統は、日の出の前や日没の後の一定の時計の分数を使用します。
  • 他の人は、太陽が特定の度数だけ地平線の下にある時間を特定するために天文学を使用します。
  • また、日の出から日没までの昼間の量を10等分に分け、その量を日の出から減算するか、日没に加算するという式を使用する人もいます。
  • その他の人々は、太陽が地平線下にある「等しい」日(春分や秋分の日で、日照と暗闇の時間がまったく同じであることを意味します)に費やす時間を取り、その時間と日の出の差(時計分)を計算し、それらの分を特定の日の「季節的な分」(「シャオット・ズマニヨット」)に対して正規化し、最後にその量をその日の日の出から引く(またはその日の日没に加える)ことになります。

混同されるかもしれませんが、この節のタイトルが言うように、「複雑です」。

これらを説明する私のポイントは、単一の「正しい」計算方法を決定することではなく、それぞれの計算方法の最終目標を理解するための助けとなること、そしてさまざまなユダヤの伝統がそれぞれの計算方法を導き出す多くの方法があることを理解するためです。

複雑な時間

夜明け(アロート)、日の出(ネッツ)、日没(シクイア)、夜(ツァイス)を持っていると、他の重要な毎日の時間を計算することが可能になります。これらには次のようなものがあります:

  • 午後の祈り(ミンチャ・ゲドラ)の最初の時間で、しばしば夜明けまたは日の出から一定の季節的時間(シャア)後として計算されます。この時間のポイントは、「午後」(文字通り、真昼を過ぎた後)が起こる最初の瞬間です。
  • 午後の祈り(ミンチャ・ケタナ)の好ましい時間で、日の出(ネッツ)または夜明け(アロート)からより多くの季節的時間(シャア)後として計算されます。ここでのポイントは、それが明らかに午後の途中である日の3/4以上であることですが、誤って夜(ツァイス)になるリスクはありません。
  • 午後の祈りの最終時間(Plag haMincha、または「plag」)は、午後の祈りの最適な時間(mincha ketana)と夜(tzeis)の間の時間によく計算されます。

他にもいくつかの重要な時間がありますが、それについては別のブログで取り上げます。これだけでも始めるには十分です。

PHP Zmanimライブラリのインストール

それらの技術的な詳細が片付いたところで、次に進むことができます…技術的な詳細だけど、今回はTECHNICALな技術的詳細です。(そして、序論からこのセクションまですっ飛ばしてきた人たち、ようこそ!また会えてうれしいです!

PHP Zmanimは、キャッシュJavaをPHP言語にインポートするだけでなく、Carbon(日付と時間の変換をより速く、簡単で、正確に行うツール)やSymfony(ウェブデザインフレームワーク)などのサポートモジュール、その他いくつかの小さなユーティリティを含む複雑なライブラリです。

要するに、これらのすべてのモジュールがPHP Zmanimと協働しており、それらすべてをインストールする必要があります。それらすべてをインストールする最も簡単な方法は、依存関係を管理するPHP 「composer」ユーティリティを使用することです。

ウェブサーバーでPHP Zmanimを実行する必要があり、コマンドラインでインストーラーを実行するアクセス権がない場合でも、それでも幸運にも、ローカルインストールから./vendorディレクトリをコピーするだけで、それが動作することができます(いくつかの注意点がありますが)。

どのような注意点があるのでしょうか?主な点は、ホスティングプロバイダがサポートしているPHPのバージョンが、Composer経由でインストールする際に使用するバージョンと一致していることを確認することです。

これで実際のcomposerインストールコマンドについて話を進めます。まだ実際にコーディングする前の段階ですが、スクリプトが置かれるディレクトリを設定しましょう。このブログでは、それを/phpzmanim_testと呼ぶことにします。

ターミナルウィンドウで、そのディレクトリに移動してください:

cd /php zmanim_test

次に、以下のコマンドを入力します:

composer -V

(これは大文字のVです)

これにより、composerがインストールされているかどうかが確認されます。インストールされていない場合は、オペレーティングシステムで最適なインストール方法を検索してください。

次に、以下のコマンドを入力します:
composer require zachweix/php-zmanim

これにより、次の2つのことが行われます:

  1. まず、現在のディレクトリにcomposer.jsonファイルが作成され、PHP Zmanimがインストールされるべきであるという指示が含まれます。
  2. 実際には、現在のディレクトリ内の./vendorディレクトリにPHP Zmanimがインストールされます。特別な手順は必要ありません。

もう一つの「composer」に関連するポイントは、必要に応じて更新が簡単にできることです。/phpzmanim_testディレクトリ(またはお客様が命名したもの)に移動し、composer updateコマンドを入力するだけで、composer.jsonファイル内の情報を読み取り、そこに見つかるすべてのものを更新します。

(ネタバレ:これはcomposer.jsonファイルを削除しないことを意味します。ただし、アプリケーションの残りの部分と共にリモートサイトにコピーする必要がない場合は、そのままにしておいても問題ありません。)

これが完了したら、PHP Zmanimライブラリを使用するすべてのPHPスクリプトに次の行を含める必要があります:

PHP

 

require 'vendor/autoload.php';

PHP Zmanimで始める

PHP Zmanimがインストールされたので、いくつかのコードを書き始める準備ができています。

これを行うには、まずPHPオブジェクトを作成します。これは、さまざまな関数に渡されるデータのコレクション(実際には配列)です。このオブジェクトには、取得したい時間の特定の日付と、正確な場所情報の両方が含まれています。

"Zmanim::Create()"でオブジェクトを作成する

始める前に、時間を要求する場所についていくつか知っておく必要があります。

  • 緯度と経度。
  • タイムゾーンは、tzデータベース形式で指定。(例:"America/New_York")。
  • その場所の標高を使用する場合。(ネタバレ:標高がこれらの計算に影響することはほとんどありません。)
  • 計算する時間の年、月、日。

オブジェクトを作成するための形式は次のとおりです。

PHP

 

$VARNAME = Zmanim::create(YEAR, MONTH, DAY, "NAME OF LOCATION", LATITUDE, LONGITUDE, ELEVATION, "TIME ZONE");

具体的な例を以下に示します。

PHP

 

$zmanim = Zmanim::create(2019, 2, 21, "New York City", 40.850519, -73.929214, 200, "America/New_York");

それを文字通りの入力の代わりにいくつかの変数を置き換えたスクリプトとして見たもの:

PHP

 

<?php
require 'vendor/autoload.php';
use PhpZmanim\Zmanim;
use PhpZmanim\Calendar\ComplexZmanimCalendar;
use PhpZmanim\Geo\GeoLocation;

$getdate = date('Y-m-d');
$getyear = date('Y', strtotime($getdate));
$getmonth = date('m', strtotime($getdate));
$getday = date('d', strtotime($getdate));

$locname = "Beit Knesset Chochmat Shlomo, Beachwood, OH";
$lat = 41.4939407;
$long = -81.516709;
$elev = 0;
$tz = 'America/New_York';

$zmanim = Zmanim::create($getyear, $getmonth, $getday, $locname, $lat, $long, $elev, $tz);

そのコードが配置されると、指定された場所の今日の日付のオブジェクトができます。PHPのprint_r()関数を使用してそれを出力することもできます。

PHP

 

print_r($zmanim);

その出力は次のようになります。

PHP

 

PhpZmanim\Zmanim Object
(
    [calendar:PhpZmanim\Calendar\AstronomicalCalendar:private] => Carbon\Carbon Object
        (
            [endOfTime:protected] => 
            [startOfTime:protected] => 
            [constructedObjectId:protected] => 00000000000000080000000000000000
            [localMonthsOverflow:protected] => 
            [localYearsOverflow:protected] => 
            [localStrictModeEnabled:protected] => 
            [localHumanDiffOptions:protected] => 
            [localToStringFormat:protected] => 
            [localSerializer:protected] => 
            [localMacros:protected] => 
            [localGenericMacros:protected] => 
            [localFormatFunction:protected] => 
            [localTranslator:protected] => 
            [dumpProperties:protected] => Array
                (
                    [0] => date
                    [1] => timezone_type
                    [2] => timezone
                )

(その他の詳細は省略しますが、概要は理解できたでしょう).

あなたの最初のリアルタイム – 日の出(ネットz HaHachma)を取得する方法

オブジェクトが作成されたら、PHP Zmanimを使用して特定の時刻を取得することはほとんどわずかな作業です。日の出を取得するのは以下のように簡単です:

PHP

 

$sunrise = $zmanim->sunrise;

ご存じないか、初めて使用する場合は、->はオブジェクト(再び、データ要素のコレクション)をクエリしているか、組み込みメソッドを使用していることを示します

これは次のような結果を返します:

PHP

 

2024-12-20 07:48:52

これまでの完全なコードは次のようになります:

PHP

 

sunrise;
echo "$sunrise\n";
?>

まとめ

PHP Zmanimにはさらに多くのことをカバーする予定ですが、これで少なくともPHPベースのスクリプトやウェブサイトを構築し、ユダヤの瞬間に正確な時刻を表示するためのスタートができたでしょう。

いつものように、質問、訂正、そしてコメント欄でのお褒めの声を歓迎します。

Source:
https://dzone.com/articles/time-data-series-getting-started-with-php-zmanim