PythonでHello 世界（ザ・ワールド）止まった時の世界に入門してみる。ジョースターの末裔は必読

#きさま！（この投稿を）見ているなッ！

Pythonで `Hello World` ＝ **こんにちは、世界**　ならぬ、
Pythonで `Hello The World` ＝ **こんにちは、「世界（ザ・ワールド）」**
を実現します。

これから**DIO様の止まった時の世界**に入門される、
ジョースターの末裔の皆様に特にオススメな投稿です。

# 実施したいこと

**スタンド（幽波紋）**が見えない人にも分かるように説明すると、
現在時刻を取得する以下の関数に対して、

```py:
datetime.now()
```

~~「世界（ザ・ワールド）」と唱えることによって、~~
**freezegun**というライブラリを使うことによって、
何度 `datetime.now()` をやっても、
同じ値が返ってきてしまう状態（**時が止まっている状態**）を作ります。

> な…　何を言っているのか　わからねーと思うが　
> おれも　何をされたのか　わからなかった… 
> 頭がどうにかなりそうだった…　催眠術だとか超スピードだとか
> そんなチャチなもんじゃあ　断じてねえ

チャチなものでは断じてなく、
**現在時刻を扱うようなコードをテストすること**が
~~世界（ザ・ワールド）の真の能力~~ 本来の目的です。

# 実行結果

以下の結果は、
承太郎に時計を持たせて、現在時刻を5秒間隔で聞いています。
（ `datetime.now` を5秒ごとに呼び出して、結果を `print` ）

世界（ザ・ワールド）の発動後には、
同じ関数を呼び出しても、**時刻が止まっている点にご注目**。

```:結果
承太郎、いま何時？
　今の時刻は、2018-09-15 00:48:42　だゼ
　今の時刻は、2018-09-15 00:48:47　だゼ
　今の時刻は、2018-09-15 00:48:52　だゼ
◆DIO「世界(ザ・ワールド)！！時よ止まれッ！！」
承太郎、いま何時？
　今の時刻は、2018-09-15 00:48:57　だゼ
　今の時刻は、2018-09-15 00:48:57　だゼ
　今の時刻は、2018-09-15 00:48:57　だゼ
◆DIO「そして時は動き出すッ！」
承太郎、いま何時？
　今の時刻は、2018-09-15 00:49:13　だゼ
　今の時刻は、2018-09-15 00:49:18　だゼ
　今の時刻は、2018-09-15 00:49:23　だゼ
```

↑中段の「2018-09-15 00:48:57」が繰り返されていますね。


# まさに！「世界を支配する」能力

教えてやろう
「世界(ザ・ワールド)」の真の能力は・・・
まさに！「世界を支配する」能力だということを！

上の結果を出力したPythonコードを示します。
◆DIO様のセリフを挟んで合計３回、
全く同じ、「ask_jyotaro」関数が呼ばれていますが、
世界（ザ・ワールド）の発動中は、
承太郎は同じ時刻を答えている点に注目してください。

```py:世界（ザ・ワールド）
#!/usr/bin/env python
# -*- coding: utf-8 -*-
#pip install freezegun で導入
import datetime, freezegun
from time import sleep

#承太郎が今何時か教えてくれる関数を定義
def Jyoutaro_Ima_Nanji():
    now_datetime = datetime.datetime.now()
    time_str   = now_datetime.strftime("%Y-%m-%d %H:%M:%S")
    jyoutaro_str = u"　今の時刻は、"+time_str+"　だゼ"
    print(jyoutaro_str)
    return time_str

#５秒おきに３回聞いてみる関数を定義
def ask_jyotaro():
    print("承太郎、いま何時？")
    Jyoutaro_Ima_Nanji()
    sleep(5)
    Jyoutaro_Ima_Nanji()
    sleep(5)
    Jyoutaro_Ima_Nanji()
    sleep(5)

#実行してみる。
ask_jyotaro()

print("◆DIO「世界(ザ・ワールド)！！時よ止まれッ！！」")

#####以下時間の停止した世界######
#現在時刻で時間を停止する
the_world_date = datetime.datetime.now()

#止まった時の世界で、再度承太郎に時間を尋ねる
with freezegun.freeze_time(the_world_date):
    ask_jyotaro()

######止まった時の世界の終了######

print("◆DIO「そして時は動き出すッ！」")

ask_jyotaro()

##マジメな話では、以下のような感じでテストを実施できる
#with freezegun.freeze_time("2018-9-15 14:7:36"):
    #以下ではAssertionError
    #assert Jyoutaro_Ima_Nanji() == "2018-9-15 14:7:36"
    #以下はテストが通る
    #assert Jyoutaro_Ima_Nanji() == "2018-09-15 14:07:36"
```

通常、現在時刻を扱う関数をテストしようとすると、
その結果をどのようにチェックするのか、難しい所があります。
この方法を使えば、上記のように特定の日時であると偽装した状態で、
datetimeを動かすことが出来るようになります。

`pip install freezegun` 後に上記コードを実施するだけで、
簡単に世界（ザ・ワールド）を体感できます。
> バ･･･バカな･･･か･･･簡単すぎる･･･あっけなさすぎる･･･

# こんな投稿だけでやってみるなんて、無駄無駄無駄無駄無駄無駄無駄無駄無駄ァーーーッ

実際にやってみるには、
空気を吸って吐くことのように！
ＨＢの鉛筆をベキッ！とへし折る事と同じようにッ
できて当然と思うことですじゃ！
~~大切なのは「認識」することですじゃ！~~
**大切なのは「freezegun」でググることですじゃ！**

スタンドを操るという事はできて当然と思う精神力なんですぞッ！
こういうことが出来るんだと「認識」しておくことが重要ですじゃ！
実際にやる時には詳細はググってくだされぃッ！


# 花京院！イギー！アヴドゥル！終わったよ…

人間は誰でも不安や恐怖を克服して安心を得るために生きる
名声を手に入れたり　人を支配したり　金もうけをするのも安心するためだ。
結婚したり　友人をつくったりするのも安心するためだ。
テストコードを書くのも、すべて自分を安心させるためだ。

そしてこの投稿が、『世界（ザ・ワールド）』の正体と
**freezegun**というライブラリの存在を、
試験終了チャイム直前まで問題を解いている受験生のような
必死こいた気分で教えてくれた。

現在時刻を扱う関数に対して、
freezegunを使ってテストすることにより、
**永遠の安心感**を得てくださいッ！


## 遥かなる旅路 さらば友よ

あるのはシンプルなたったひとつの思想だけだ…たったひとつ！
~~「勝利して支配する」！~~
**Hello The World ＝ こんにちは、「世界」**　と言いたかった！
それだけよ…それだけが満足感よ！

『ネタに走る』『技術的にも意味ある内容にする』
**「両方」**やらなくちゃあならないってのが「Qiita」のつらいところだな
**覚悟**はいいか？オレはできてる。

「投稿する」と心の中で思ったならッ！
その時スデに行動は終わっているんだッ！
**実は既に「ドラえもんネタも投稿してあった」**なら使ってもいいッ！
⇒　[どこでもドアを作ってみた物語](https://qiita.com/youwht/items/8ca57766a991371c1cfe)

　　　　　　～～　To be Continued　～～